@@ -197,8 +197,13 @@ def _handle_stream_call(span, kwargs, response, metric_params):
197
197
@dont_throw
198
198
def stream_done (response_body ):
199
199
request_body = json .loads (kwargs .get ("body" ))
200
+ modelId = kwargs .get ("modelId" )
200
201
201
- (vendor , model ) = kwargs .get ("modelId" ).split ("." )
202
+ if modelId is not None and "." in modelId :
203
+ (vendor , model ) = modelId .split ("." )
204
+ else :
205
+ vendor = "imported_model"
206
+ model = kwargs .get ("modelId" )
202
207
203
208
metric_params .vendor = vendor
204
209
metric_params .model = model
@@ -233,6 +238,8 @@ def stream_done(response_body):
233
238
_set_amazon_span_attributes (
234
239
span , request_body , response_body , metric_params
235
240
)
241
+ elif vendor == "imported_model" :
242
+ _set_imported_model_span_attributes (span , request_body , response_body , metric_params )
236
243
237
244
span .end ()
238
245
@@ -246,9 +253,13 @@ def _handle_call(span, kwargs, response, metric_params):
246
253
)
247
254
request_body = json .loads (kwargs .get ("body" ))
248
255
response_body = json .loads (response .get ("body" ).read ())
256
+ modelId = kwargs .get ("modelId" )
249
257
250
- (vendor , model ) = kwargs .get ("modelId" ).split ("." )
251
-
258
+ if modelId is not None and "." in modelId :
259
+ (vendor , model ) = modelId .split ("." )
260
+ else :
261
+ vendor = "imported_model"
262
+ model = kwargs .get ("modelId" )
252
263
metric_params .vendor = vendor
253
264
metric_params .model = model
254
265
metric_params .is_stream = False
@@ -278,6 +289,8 @@ def _handle_call(span, kwargs, response, metric_params):
278
289
_set_llama_span_attributes (span , request_body , response_body , metric_params )
279
290
elif vendor == "amazon" :
280
291
_set_amazon_span_attributes (span , request_body , response_body , metric_params )
292
+ elif vendor == "imported_model" :
293
+ _set_imported_model_span_attributes (span , request_body , response_body , metric_params )
281
294
282
295
283
296
def _record_usage_to_span (span , prompt_tokens , completion_tokens , metric_params ):
@@ -636,6 +649,40 @@ def _set_amazon_span_attributes(span, request_body, response_body, metric_params
636
649
)
637
650
638
651
652
+ def _set_imported_model_span_attributes (span , request_body , response_body , metric_params ):
653
+ _set_span_attribute (
654
+ span , SpanAttributes .LLM_REQUEST_TYPE , LLMRequestTypeValues .COMPLETION .value
655
+ )
656
+ _set_span_attribute (
657
+ span , SpanAttributes .LLM_REQUEST_TOP_P , request_body .get ("topP" )
658
+ )
659
+ _set_span_attribute (
660
+ span , SpanAttributes .LLM_REQUEST_TEMPERATURE , request_body .get ("temperature" )
661
+ )
662
+ _set_span_attribute (
663
+ span , SpanAttributes .LLM_REQUEST_MAX_TOKENS , request_body .get ("max_tokens" )
664
+ )
665
+ prompt_tokens = (
666
+ response_body .get ("usage" , {}).get ("prompt_tokens" )
667
+ if response_body .get ("usage" , {}).get ("prompt_tokens" ) is not None
668
+ else response_body .get ("prompt_token_count" )
669
+ )
670
+ completion_tokens = response_body .get ("usage" , {}).get (
671
+ "completion_tokens"
672
+ ) or response_body .get ("generation_token_count" )
673
+
674
+ _record_usage_to_span (span , prompt_tokens , completion_tokens , metric_params , )
675
+
676
+ if should_send_prompts ():
677
+ _set_span_attribute (
678
+ span , f"{ SpanAttributes .LLM_PROMPTS } .0.content" , request_body .get ("prompt" )
679
+ )
680
+ _set_span_attribute (
681
+ span , f"{ SpanAttributes .LLM_COMPLETIONS } .0.content" ,
682
+ response_body .get ("generation" ),
683
+ )
684
+
685
+
639
686
def _create_metrics (meter : Meter ):
640
687
token_histogram = meter .create_histogram (
641
688
name = Meters .LLM_TOKEN_USAGE ,
0 commit comments