in instrumentation/openai-client-instrumentation/instrumentation-1.1/src/main/java/co/elastic/otel/openai/v1_1/wrappers/InstrumentedChatCompletionService.java [231:267]
public ChatCompletion create(
ChatCompletionCreateParams chatCompletionCreateParams, RequestOptions requestOptions) {
RequestHolder requestHolder = new RequestHolder(chatCompletionCreateParams, settings);
Context parentCtx = Context.current();
if (!INSTRUMENTER.shouldStart(parentCtx, requestHolder)) {
return createWithLogs(chatCompletionCreateParams, requestOptions);
}
Context ctx = INSTRUMENTER.start(parentCtx, requestHolder);
ChatCompletion completion;
try (Scope scope = ctx.makeCurrent()) {
completion = createWithLogs(chatCompletionCreateParams, requestOptions);
} catch (Throwable t) {
INSTRUMENTER.end(ctx, requestHolder, null, t);
throw t;
}
List<String> finishReasons =
completion.choices().stream()
.map(ChatCompletion.Choice::finishReason)
.map(ChatCompletion.Choice.FinishReason::toString)
.collect(Collectors.toList());
Long inputTokens = null;
Long completionTokens = null;
Optional<CompletionUsage> usage = completion.usage();
if (usage.isPresent()) {
inputTokens = usage.get().promptTokens();
completionTokens = usage.get().completionTokens();
}
ChatCompletionResult result =
new ChatCompletionResult(
completion.model(), completion.id(), finishReasons, inputTokens, completionTokens);
INSTRUMENTER.end(ctx, requestHolder, result, null);
return completion;
}