traceloop-sdk 0.0.2 → 0.0.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. checksums.yaml +4 -4
  2. data/lib/traceloop/sdk.rb +43 -11
  3. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 061af948a12a48ccb1ce3925d9a89890ee963da3bd61ea3b6659c16453bc04d8
4
- data.tar.gz: d6d345827dbaa2ccd4dff791c902bafdc614a422008182baa2cad8b2119586f2
3
+ metadata.gz: 50629c90b71631149726b2b262d4bf67c4d58c199f15a20781f6a01955a00ff0
4
+ data.tar.gz: 7ff11a15914c924a7dec64df865afef47f0d4fc323bc4b5f3a38c412f413f416
5
5
  SHA512:
6
- metadata.gz: 4771c2eef21ad54932cfa3888a2421b3f8d568aac96075ccfdac2b261c1e4c6aa5d494829e37508d71492a6467cc347738e4f4b267137245555cca2f0747b871
7
- data.tar.gz: 4ca5771c19b5c1ae9d4cdf145047a068c3bfb90b06fa18f45e43f5f863a594708f918e307b7cb1b83f8d753a5349757127b6eb34715ab679b3cb7f814b05cfcc
6
+ metadata.gz: 72815dd504966fcf8e438b76447eef5a41570503a3c3fb2a2c8248987477bb964945bb454c5e54f0635a25eba5c1f67bcdb6a393435a8b61defe32201c1cf351
7
+ data.tar.gz: 6dab487b52fcaaebe634cef83ec749a1ffb0c82221cfff7ff6871249fca82332d1c3b47b710825c25fc51b1c2d4c59b154275c447623bfa48e3dc1f6c3df207d
data/lib/traceloop/sdk.rb CHANGED
@@ -23,21 +23,50 @@ module Traceloop
23
23
  end
24
24
 
25
25
  class Tracer
26
- def initialize(span)
26
+ def initialize(span, provider, model)
27
27
  @span = span
28
+ @provider = provider
29
+ @model = model
28
30
  end
29
31
 
30
- def log_prompt(model, system_prompt="", user_prompt)
32
+ def log_prompt(system_prompt="", user_prompt)
33
+ unless system_prompt.empty?
34
+ @span.add_attributes({
35
+ "#{OpenTelemetry::SemanticConventionsAi::SpanAttributes::LLM_PROMPTS}.0.role" => "system",
36
+ "#{OpenTelemetry::SemanticConventionsAi::SpanAttributes::LLM_PROMPTS}.0.content" => system_prompt,
37
+ "#{OpenTelemetry::SemanticConventionsAi::SpanAttributes::LLM_PROMPTS}.1.role" => "user",
38
+ "#{OpenTelemetry::SemanticConventionsAi::SpanAttributes::LLM_PROMPTS}.1.content" => user_prompt
39
+ })
40
+ else
41
+ @span.add_attributes({
42
+ "#{OpenTelemetry::SemanticConventionsAi::SpanAttributes::LLM_PROMPTS}.0.role" => "user",
43
+ "#{OpenTelemetry::SemanticConventionsAi::SpanAttributes::LLM_PROMPTS}.0.content" => user_prompt
44
+ })
45
+ end
46
+ end
47
+
48
+ def log_response(response)
49
+ # This is Gemini specific, see -
50
+ # https://github.com/gbaptista/gemini-ai?tab=readme-ov-file#generate_content
51
+ if response.has_key?("candidates")
52
+ log_gemini_response(response)
53
+ else
54
+ log_openai_response(response)
55
+ end
56
+ end
57
+
58
+ def log_gemini_response(response)
31
59
  @span.add_attributes({
32
- OpenTelemetry::SemanticConventionsAi::SpanAttributes::LLM_REQUEST_MODEL => model,
33
- "#{OpenTelemetry::SemanticConventionsAi::SpanAttributes::LLM_PROMPTS}.0.role" => "system",
34
- "#{OpenTelemetry::SemanticConventionsAi::SpanAttributes::LLM_PROMPTS}.0.content" => system_prompt,
35
- "#{OpenTelemetry::SemanticConventionsAi::SpanAttributes::LLM_PROMPTS}.1.role" => "user",
36
- "#{OpenTelemetry::SemanticConventionsAi::SpanAttributes::LLM_PROMPTS}.1.content" => user_prompt
60
+ OpenTelemetry::SemanticConventionsAi::SpanAttributes::LLM_RESPONSE_MODEL => @model,
37
61
  })
62
+
63
+ @span.add_attributes({
64
+ "#{OpenTelemetry::SemanticConventionsAi::SpanAttributes::LLM_COMPLETIONS}.0.role" => "assistant",
65
+ "#{OpenTelemetry::SemanticConventionsAi::SpanAttributes::LLM_COMPLETIONS}.0.content" => response.dig("candidates", 0, "content", "parts", 0, "text")
66
+ })
38
67
  end
39
68
 
40
- def log_response(response)
69
+ def log_openai_response(response)
41
70
  @span.add_attributes({
42
71
  OpenTelemetry::SemanticConventionsAi::SpanAttributes::LLM_RESPONSE_MODEL => response.dig("model"),
43
72
  })
@@ -57,9 +86,12 @@ module Traceloop
57
86
  end
58
87
  end
59
88
 
60
- def llm_call
61
- @tracer.in_span("openai.chat") do |span|
62
- yield Tracer.new(span)
89
+ def llm_call(provider, model)
90
+ @tracer.in_span("#{provider}.chat") do |span|
91
+ span.add_attributes({
92
+ OpenTelemetry::SemanticConventionsAi::SpanAttributes::LLM_REQUEST_MODEL => model,
93
+ })
94
+ yield Tracer.new(span, provider, model)
63
95
  end
64
96
  end
65
97
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: traceloop-sdk
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Traceloop
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-12-29 00:00:00.000000000 Z
11
+ date: 2024-06-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: opentelemetry-semantic_conventions_ai