Skip to content

Commit 31cd669

Browse files
authored
feat(sdk): workflows, tasks, agents, tools (#10)
1 parent bbb1caf commit 31cd669

4 files changed

Lines changed: 53 additions & 11 deletions

File tree

sample-app/Gemfile.lock

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ GEM
8383
faraday (>= 0.17.5, < 3.a)
8484
jwt (>= 1.5, < 3.0)
8585
multi_json (~> 1.10)
86-
traceloop-sdk (0.0.8)
86+
traceloop-sdk (0.1.2)
8787
opentelemetry-exporter-otlp (~> 0.26.1)
8888
opentelemetry-sdk (~> 1.3.1)
8989
opentelemetry-semantic_conventions_ai (~> 0.0.3)

sample-app/openai.rb

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,15 @@
99

1010
traceloop = Traceloop::SDK::Traceloop.new
1111

12-
traceloop.llm_call(provider="openai", model="gpt-3.5-turbo") do |tracer|
13-
tracer.log_prompt(user_prompt="Tell me a joke about OpenTelemetry")
14-
response = client.chat(
15-
parameters: {
16-
model: "gpt-3.5-turbo",
17-
messages: [{ role: "user", content: "Tell me a joke about OpenTelemetry" }]
18-
})
19-
tracer.log_response(response)
20-
puts response.dig("choices", 0, "message", "content")
12+
traceloop.workflow("joke_generator") do
13+
traceloop.llm_call(provider="openai", model="gpt-3.5-turbo") do |tracer|
14+
tracer.log_prompt(user_prompt="Tell me a joke about OpenTelemetry")
15+
response = client.chat(
16+
parameters: {
17+
model: "gpt-3.5-turbo",
18+
messages: [{ role: "user", content: "Tell me a joke about OpenTelemetry" }]
19+
})
20+
tracer.log_response(response)
21+
puts response.dig("choices", 0, "message", "content")
22+
end
2123
end

traceloop-sdk/lib/traceloop/sdk.rb

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,46 @@ def llm_call(provider, model)
122122
yield Tracer.new(span, provider, model)
123123
end
124124
end
125+
126+
def workflow(name)
127+
@tracer.in_span("#{name}.workflow") do |span|
128+
span.add_attributes({
129+
OpenTelemetry::SemanticConventionsAi::SpanAttributes::TRACELOOP_SPAN_KIND => "workflow",
130+
OpenTelemetry::SemanticConventionsAi::SpanAttributes::TRACELOOP_ENTITY_NAME => name,
131+
})
132+
yield
133+
end
134+
end
135+
136+
def task(name)
137+
@tracer.in_span("#{name}.task") do |span|
138+
span.add_attributes({
139+
OpenTelemetry::SemanticConventionsAi::SpanAttributes::TRACELOOP_SPAN_KIND => "task",
140+
OpenTelemetry::SemanticConventionsAi::SpanAttributes::TRACELOOP_ENTITY_NAME => name,
141+
})
142+
yield
143+
end
144+
end
145+
146+
def agent(name)
147+
@tracer.in_span("#{name}.agent") do |span|
148+
span.add_attributes({
149+
OpenTelemetry::SemanticConventionsAi::SpanAttributes::TRACELOOP_SPAN_KIND => "agent",
150+
OpenTelemetry::SemanticConventionsAi::SpanAttributes::TRACELOOP_ENTITY_NAME => name,
151+
})
152+
yield
153+
end
154+
end
155+
156+
def tool(name)
157+
@tracer.in_span("#{name}.tool") do |span|
158+
span.add_attributes({
159+
OpenTelemetry::SemanticConventionsAi::SpanAttributes::TRACELOOP_SPAN_KIND => "tool",
160+
OpenTelemetry::SemanticConventionsAi::SpanAttributes::TRACELOOP_ENTITY_NAME => name,
161+
})
162+
yield
163+
end
164+
end
125165
end
126166
end
127167
end

traceloop-sdk/traceloop-sdk.gemspec

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
Gem::Specification.new do |spec|
22
spec.name = 'traceloop-sdk'
3-
spec.version = '0.0.8'
3+
spec.version = '0.1.2'
44
spec.authors = ["Traceloop"]
55
spec.email = ['dev@traceloop.com']
66

0 commit comments

Comments
 (0)