Co-authored-by: aakashb95 <aakash@chatwoot.com> Co-authored-by: Shivam Mishra <scm.mymail@gmail.com>
41 lines
1.4 KiB
Ruby
41 lines
1.4 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
module Integrations::LlmInstrumentationHelpers
|
|
include Integrations::LlmInstrumentationConstants
|
|
|
|
private
|
|
|
|
def set_completion_attributes(span, result)
|
|
set_completion_message(span, result)
|
|
set_usage_metrics(span, result)
|
|
set_error_attributes(span, result)
|
|
end
|
|
|
|
def set_completion_message(span, result)
|
|
message = result[:message] || result.dig('choices', 0, 'message', 'content')
|
|
return if message.blank?
|
|
|
|
span.set_attribute(ATTR_GEN_AI_COMPLETION_ROLE, 'assistant')
|
|
span.set_attribute(ATTR_GEN_AI_COMPLETION_CONTENT, message)
|
|
end
|
|
|
|
def set_usage_metrics(span, result)
|
|
usage = result[:usage] || result['usage']
|
|
return if usage.blank?
|
|
|
|
span.set_attribute(ATTR_GEN_AI_USAGE_INPUT_TOKENS, usage['prompt_tokens']) if usage['prompt_tokens']
|
|
span.set_attribute(ATTR_GEN_AI_USAGE_OUTPUT_TOKENS, usage['completion_tokens']) if usage['completion_tokens']
|
|
span.set_attribute(ATTR_GEN_AI_USAGE_TOTAL_TOKENS, usage['total_tokens']) if usage['total_tokens']
|
|
end
|
|
|
|
def set_error_attributes(span, result)
|
|
error = result[:error] || result['error']
|
|
return if error.blank?
|
|
|
|
error_code = result[:error_code] || result['error_code']
|
|
span.set_attribute(ATTR_GEN_AI_RESPONSE_ERROR, error.to_json)
|
|
span.set_attribute(ATTR_GEN_AI_RESPONSE_ERROR_CODE, error_code) if error_code
|
|
span.status = OpenTelemetry::Trace::Status.error("API Error: #{error_code}")
|
|
end
|
|
end
|