Class: Tracebook::Mappers::OpenAI
- Defined in:
- lib/tracebook/mappers/openai.rb
Instance Method Summary collapse
- #build_metadata(response) ⇒ Object private
- #default_status(response) ⇒ Object private
- #first_choice(response) ⇒ Object private
- #first_choice_text(response) ⇒ Object private
- #join_messages(messages) ⇒ Object private
- #normalize(raw_request:, raw_response:, meta: {}) ⇒ Object
- #usage_tokens(response, key) ⇒ Object private
Methods inherited from Base
#build_interaction, #compact_hash, #indifferent_meta, #symbolize
Instance Method Details
#build_metadata(response) ⇒ Object (private)
57 58 59 60 61 62 |
# File 'lib/tracebook/mappers/openai.rb', line 57 def (response) choice = first_choice(response) = {} ["finish_reason"] = choice[:finish_reason] if choice[:finish_reason] end |
#default_status(response) ⇒ Object (private)
64 65 66 67 68 69 70 |
# File 'lib/tracebook/mappers/openai.rb', line 64 def default_status(response) finish_reason = first_choice(response)[:finish_reason] return :canceled if finish_reason == "length" return :error if finish_reason == "error" :success end |
#first_choice(response) ⇒ Object (private)
42 43 44 |
# File 'lib/tracebook/mappers/openai.rb', line 42 def first_choice(response) Array(response[:choices]).first || {} end |
#first_choice_text(response) ⇒ Object (private)
46 47 48 49 50 |
# File 'lib/tracebook/mappers/openai.rb', line 46 def first_choice_text(response) choice = first_choice(response) = choice[:message] || {} .with_indifferent_access[:content].to_s end |
#join_messages(messages) ⇒ Object (private)
38 39 40 |
# File 'lib/tracebook/mappers/openai.rb', line 38 def () Array().map { || .with_indifferent_access[:content].to_s }.reject(&:empty?).join("\n\n") end |
#normalize(raw_request:, raw_response:, meta: {}) ⇒ Object
8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
# File 'lib/tracebook/mappers/openai.rb', line 8 def normalize(raw_request:, raw_response:, meta: {}) request = symbolize(raw_request || {}) response = symbolize(raw_response || {}) = (response) = () build_interaction( provider: "openai", model: request[:model] || response[:model], project: [:project], request_payload: raw_request, response_payload: raw_response, request_text: (request[:messages]), response_text: first_choice_text(response), input_tokens: usage_tokens(response, :prompt_tokens), output_tokens: usage_tokens(response, :completion_tokens), latency_ms: [:latency_ms], status: [:status]&.to_sym || default_status(response), error_class: nil, error_message: nil, tags: Array([:tags]).compact, metadata: , user: [:user], parent_id: [:parent_id], session_id: [:session_id] ) end |
#usage_tokens(response, key) ⇒ Object (private)
52 53 54 55 |
# File 'lib/tracebook/mappers/openai.rb', line 52 def usage_tokens(response, key) usage = response[:usage] || {} usage.with_indifferent_access[key]&.to_i end |