Skip to content

Commit 639afc2

Browse files
committed
Add example scripts
1 parent 6265af3 commit 639afc2

4 files changed

Lines changed: 162 additions & 0 deletions

example/trace_demonstration.rb

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
# frozen_string_literal: true
2+
3+
require "bundler/inline"
4+
5+
gemfile(true) do
6+
source "https://rubygems.org"
7+
gem "ruby_llm"
8+
gem "opentelemetry-api"
9+
gem "opentelemetry-sdk"
10+
gem "opentelemetry-instrumentation-ruby_llm", path: "../"
11+
end
12+
13+
ENV["OTEL_TRACES_EXPORTER"] ||= "console"
14+
15+
OpenTelemetry::SDK.configure do |c|
16+
c.use "OpenTelemetry::Instrumentation::RubyLLM"
17+
end
18+
19+
RubyLLM.configure do |c|
20+
c.openai_api_key = ENV["OPENAI_API_KEY"]
21+
c.default_model = "gpt-5-nano"
22+
end
23+
24+
chat = RubyLLM.chat
25+
response = chat.ask("What is the meaning of life?")
26+
puts "\nResponse: #{response.content}"
27+
28+
# This line is only necessary in short-lived scripts. In a long-running application, spans will be flushed automatically.
29+
OpenTelemetry.tracer_provider.force_flush
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
# frozen_string_literal: true
2+
3+
require "bundler/inline"
4+
5+
gemfile(true) do
6+
source "https://rubygems.org"
7+
gem "ruby_llm"
8+
gem "opentelemetry-api"
9+
gem "opentelemetry-sdk"
10+
gem "opentelemetry-exporter-otlp"
11+
gem "opentelemetry-instrumentation-ruby_llm", path: "../"
12+
gem "base64"
13+
end
14+
15+
require "base64"
16+
17+
credentials = Base64.strict_encode64("#{ENV['LANGFUSE_PUBLIC_KEY']}:#{ENV['LANGFUSE_SECRET_KEY']}")
18+
19+
OpenTelemetry::SDK.configure do |c|
20+
c.service_name = "ruby_llm-demo"
21+
c.add_span_processor(
22+
OpenTelemetry::SDK::Trace::Export::BatchSpanProcessor.new(
23+
OpenTelemetry::Exporter::OTLP::Exporter.new(
24+
endpoint: "https://us.cloud.langfuse.com/api/public/otel/v1/traces",
25+
headers: { "Authorization" => "Basic #{credentials}" }
26+
)
27+
)
28+
)
29+
c.use "OpenTelemetry::Instrumentation::RubyLLM"
30+
end
31+
32+
RubyLLM.configure do |c|
33+
c.openai_api_key = ENV["OPENAI_API_KEY"]
34+
c.default_model = "gpt-5-nano"
35+
end
36+
37+
chat = RubyLLM.chat
38+
response = chat.ask("What is the meaning of life?")
39+
puts "\nResponse: #{response.content}"
40+
41+
# This line is only necessary in short-lived scripts. In a long-running application, spans will be flushed automatically.
42+
OpenTelemetry.tracer_provider.force_flush
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
# frozen_string_literal: true
2+
3+
require "bundler/inline"
4+
5+
gemfile(true) do
6+
source "https://rubygems.org"
7+
gem "ruby_llm"
8+
gem "opentelemetry-api"
9+
gem "opentelemetry-sdk"
10+
gem "opentelemetry-exporter-otlp"
11+
gem "opentelemetry-instrumentation-ruby_llm", path: "../"
12+
gem "base64"
13+
end
14+
15+
require "base64"
16+
17+
credentials = Base64.strict_encode64("#{ENV['LANGFUSE_PUBLIC_KEY']}:#{ENV['LANGFUSE_SECRET_KEY']}")
18+
19+
OpenTelemetry::SDK.configure do |c|
20+
c.service_name = "ruby_llm-demo"
21+
c.add_span_processor(
22+
OpenTelemetry::SDK::Trace::Export::BatchSpanProcessor.new(
23+
OpenTelemetry::Exporter::OTLP::Exporter.new(
24+
endpoint: "https://us.cloud.langfuse.com/api/public/otel/v1/traces",
25+
headers: { "Authorization" => "Basic #{credentials}" }
26+
)
27+
)
28+
)
29+
c.use "OpenTelemetry::Instrumentation::RubyLLM"
30+
end
31+
32+
RubyLLM.configure do |c|
33+
c.openai_api_key = ENV["OPENAI_API_KEY"]
34+
c.default_model = "gpt-5-nano"
35+
end
36+
37+
class Calculator < RubyLLM::Tool
38+
description "Performs basic math calculations"
39+
param :expression, type: "string", desc: "Math expression to evaluate"
40+
41+
def execute(expression:)
42+
eval(expression).to_s
43+
end
44+
end
45+
46+
chat = RubyLLM.chat
47+
chat.with_tool(Calculator)
48+
response = chat.ask("Use the calculator tool to compute 123 * 456")
49+
puts "\nResponse: #{response.content}"
50+
51+
# This line is only necessary in short-lived scripts. In a long-running application, spans will be flushed automatically.
52+
OpenTelemetry.tracer_provider.force_flush
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
# frozen_string_literal: true
2+
3+
require "bundler/inline"
4+
5+
gemfile(true) do
6+
source "https://rubygems.org"
7+
gem "ruby_llm"
8+
gem "opentelemetry-api"
9+
gem "opentelemetry-sdk"
10+
gem "opentelemetry-instrumentation-ruby_llm", path: "../"
11+
end
12+
13+
ENV["OTEL_TRACES_EXPORTER"] ||= "console"
14+
15+
OpenTelemetry::SDK.configure do |c|
16+
c.use "OpenTelemetry::Instrumentation::RubyLLM"
17+
end
18+
19+
RubyLLM.configure do |c|
20+
c.openai_api_key = ENV["OPENAI_API_KEY"]
21+
c.default_model = "gpt-5-nano"
22+
end
23+
24+
class Calculator < RubyLLM::Tool
25+
description "Performs basic math calculations"
26+
param :expression, type: "string", desc: "Math expression to evaluate"
27+
28+
def execute(expression:)
29+
eval(expression).to_s
30+
end
31+
end
32+
33+
chat = RubyLLM.chat
34+
chat.with_tool(Calculator)
35+
response = chat.ask("What is 123 * 456?")
36+
puts "\nResponse: #{response.content}"
37+
38+
# This line is only necessary in short-lived scripts. In a long-running application, spans will be flushed automatically.
39+
OpenTelemetry.tracer_provider.force_flush

0 commit comments

Comments
 (0)