@@ -41,6 +41,7 @@ class Bot
4141 # @option params [Array<LLM::Function>, nil] :tools Defaults to nil
4242 def initialize ( provider , params = { } )
4343 @provider = provider
44+ @tracer = provider . tracer
4445 @params = { model : provider . default_model , schema : nil } . compact . merge! ( params )
4546 @messages = LLM ::Buffer . new ( provider )
4647 end
@@ -58,13 +59,20 @@ def initialize(provider, params = {})
5859 # response = bot.chat("Hello, what is your name?")
5960 # puts response.choices[0].content
6061 def chat ( prompt , params = { } )
62+ span = start_span ( "llm.chat" , provider : @provider . class . name , model : @params [ :model ] )
6163 prompt , params , messages = fetch ( prompt , params )
6264 params = params . merge ( messages : [ *@messages . to_a , *messages ] )
6365 params = @params . merge ( params )
66+ event ( "llm.chat.input" , {
67+ prompt_size : prompt . to_s . bytesize ,
68+ message_count : params [ :messages ] &.length ,
69+ stream : !!params [ :stream ]
70+ } )
6471 res = @provider . complete ( prompt , params )
6572 @messages . concat [ LLM ::Message . new ( params [ :role ] || :user , prompt ) ]
6673 @messages . concat messages
6774 @messages . concat [ res . choices [ -1 ] ]
75+ end_span ( span )
6876 res
6977 end
7078
@@ -82,14 +90,24 @@ def chat(prompt, params = {})
8290 # res = bot.respond("What is the capital of France?")
8391 # puts res.output_text
8492 def respond ( prompt , params = { } )
93+ span = start_span ( "llm.respond" , {
94+ provider : @provider . class . name ,
95+ model : @params [ :model ]
96+ } )
8597 prompt , params , messages = fetch ( prompt , params )
8698 res_id = @messages . find ( &:assistant? ) &.response &.response_id
8799 params = params . merge ( previous_response_id : res_id , input : messages ) . compact
88100 params = @params . merge ( params )
101+ event ( "llm.respond.input" , {
102+ prompt_size : prompt . to_s . bytesize ,
103+ message_count : messages . length ,
104+ stream : !!params [ :stream ]
105+ } )
89106 res = @provider . responses . create ( prompt , params )
90107 @messages . concat [ LLM ::Message . new ( params [ :role ] || :user , prompt ) ]
91108 @messages . concat messages
92109 @messages . concat [ res . choices [ -1 ] ]
110+ end_span ( span )
93111 res
94112 end
95113
@@ -101,6 +119,13 @@ def inspect
101119 "@messages=#{ @messages . inspect } >"
102120 end
103121
122+ ##
123+ # Returns the tracer for this bot
124+ # @return [LLM::Tracer::Tracer, LLM::Tracer::Null]
125+ def tracer
126+ @tracer
127+ end
128+
104129 ##
105130 # Returns an array of functions that can be called
106131 # @return [Array<LLM::Function>]
@@ -173,5 +198,17 @@ def fetch(prompt, params)
173198 params . merge! ( role : prompt . role )
174199 [ prompt . content , params , messages ]
175200 end
201+
202+ def start_span ( ...)
203+ @tracer . start_span ( ...)
204+ end
205+
206+ def end_span ( ...)
207+ @tracer . end_span ( ...)
208+ end
209+
210+ def event ( ...)
211+ @tracer . event ( ...)
212+ end
176213 end
177214end
0 commit comments