public static void emitPromptLogEvents()

in instrumentation/openai-client-instrumentation/instrumentation-1.1/src/main/java/co/elastic/otel/openai/v1_1/wrappers/ChatCompletionEventsHelper.java [57:114]


  public static void emitPromptLogEvents(
      ChatCompletionCreateParams request, InstrumentationSettings settings) {
    if (!settings.emitEvents) {
      return;
    }

    for (ChatCompletionMessageParam msg : request.messages()) {
      String eventType;
      MapValueBuilder bodyBuilder = new MapValueBuilder();
      if (msg.isSystem()) {
        eventType = "gen_ai.system.message";
        if (settings.captureMessageContent) {
          putIfNotEmpty(bodyBuilder, "content", contentToString(msg.asSystem().content()));
        }
      } else if (msg.isDeveloper()) {
        eventType = "gen_ai.system.message";
        putIfNotEmpty(bodyBuilder, "role", "developer");
        if (settings.captureMessageContent) {
          putIfNotEmpty(bodyBuilder, "content", contentToString(msg.asDeveloper().content()));
        }
      } else if (msg.isUser()) {
        eventType = "gen_ai.user.message";
        if (settings.captureMessageContent) {
          putIfNotEmpty(bodyBuilder, "content", contentToString(msg.asUser().content()));
        }
      } else if (msg.isAssistant()) {
        ChatCompletionAssistantMessageParam assistantMsg = msg.asAssistant();
        eventType = "gen_ai.assistant.message";
        if (settings.captureMessageContent) {
          assistantMsg
              .content()
              .ifPresent(
                  content -> putIfNotEmpty(bodyBuilder, "content", contentToString(content)));
          assistantMsg
              .toolCalls()
              .ifPresent(
                  toolCalls -> {
                    List<Value<?>> toolCallsJson =
                        toolCalls.stream()
                            .map(ChatCompletionEventsHelper::buildToolCallEventObject)
                            .collect(Collectors.toList());
                    bodyBuilder.put("tool_calls", Value.of(toolCallsJson));
                  });
        }
      } else if (msg.isTool()) {
        ChatCompletionToolMessageParam toolMsg = msg.asTool();
        eventType = "gen_ai.tool.message";
        if (settings.captureMessageContent) {
          putIfNotEmpty(bodyBuilder, "content", contentToString(toolMsg.content()));
          bodyBuilder.put("id", toolMsg.toolCallId());
        }
      } else {
        LOG.log(Level.WARNING, "Unhandled OpenAI message type will be dropped: {0}", msg);
        continue;
      }
      newEvent(eventType).setBody(bodyBuilder.build()).emit();
    }
  }