openlit 1.30.3__tar.gz → 1.30.5__tar.gz
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.
- {openlit-1.30.3 → openlit-1.30.5}/PKG-INFO +1 -1
- {openlit-1.30.3 → openlit-1.30.5}/pyproject.toml +1 -1
- {openlit-1.30.3 → openlit-1.30.5}/src/openlit/instrumentation/langchain/langchain.py +120 -92
- {openlit-1.30.3 → openlit-1.30.5}/src/openlit/instrumentation/transformers/transformers.py +9 -3
- {openlit-1.30.3 → openlit-1.30.5}/LICENSE +0 -0
- {openlit-1.30.3 → openlit-1.30.5}/README.md +0 -0
- {openlit-1.30.3 → openlit-1.30.5}/src/openlit/__helpers.py +0 -0
- {openlit-1.30.3 → openlit-1.30.5}/src/openlit/__init__.py +0 -0
- {openlit-1.30.3 → openlit-1.30.5}/src/openlit/evals/__init__.py +0 -0
- {openlit-1.30.3 → openlit-1.30.5}/src/openlit/evals/all.py +0 -0
- {openlit-1.30.3 → openlit-1.30.5}/src/openlit/evals/bias_detection.py +0 -0
- {openlit-1.30.3 → openlit-1.30.5}/src/openlit/evals/hallucination.py +0 -0
- {openlit-1.30.3 → openlit-1.30.5}/src/openlit/evals/toxicity.py +0 -0
- {openlit-1.30.3 → openlit-1.30.5}/src/openlit/evals/utils.py +0 -0
- {openlit-1.30.3 → openlit-1.30.5}/src/openlit/guard/__init__.py +0 -0
- {openlit-1.30.3 → openlit-1.30.5}/src/openlit/guard/all.py +0 -0
- {openlit-1.30.3 → openlit-1.30.5}/src/openlit/guard/prompt_injection.py +0 -0
- {openlit-1.30.3 → openlit-1.30.5}/src/openlit/guard/restrict_topic.py +0 -0
- {openlit-1.30.3 → openlit-1.30.5}/src/openlit/guard/sensitive_topic.py +0 -0
- {openlit-1.30.3 → openlit-1.30.5}/src/openlit/guard/utils.py +0 -0
- {openlit-1.30.3 → openlit-1.30.5}/src/openlit/instrumentation/anthropic/__init__.py +0 -0
- {openlit-1.30.3 → openlit-1.30.5}/src/openlit/instrumentation/anthropic/anthropic.py +0 -0
- {openlit-1.30.3 → openlit-1.30.5}/src/openlit/instrumentation/anthropic/async_anthropic.py +0 -0
- {openlit-1.30.3 → openlit-1.30.5}/src/openlit/instrumentation/azure_ai_inference/__init__.py +0 -0
- {openlit-1.30.3 → openlit-1.30.5}/src/openlit/instrumentation/azure_ai_inference/async_azure_ai_inference.py +0 -0
- {openlit-1.30.3 → openlit-1.30.5}/src/openlit/instrumentation/azure_ai_inference/azure_ai_inference.py +0 -0
- {openlit-1.30.3 → openlit-1.30.5}/src/openlit/instrumentation/bedrock/__init__.py +0 -0
- {openlit-1.30.3 → openlit-1.30.5}/src/openlit/instrumentation/bedrock/bedrock.py +0 -0
- {openlit-1.30.3 → openlit-1.30.5}/src/openlit/instrumentation/chroma/__init__.py +0 -0
- {openlit-1.30.3 → openlit-1.30.5}/src/openlit/instrumentation/chroma/chroma.py +0 -0
- {openlit-1.30.3 → openlit-1.30.5}/src/openlit/instrumentation/cohere/__init__.py +0 -0
- {openlit-1.30.3 → openlit-1.30.5}/src/openlit/instrumentation/cohere/cohere.py +0 -0
- {openlit-1.30.3 → openlit-1.30.5}/src/openlit/instrumentation/crewai/__init__.py +0 -0
- {openlit-1.30.3 → openlit-1.30.5}/src/openlit/instrumentation/crewai/crewai.py +0 -0
- {openlit-1.30.3 → openlit-1.30.5}/src/openlit/instrumentation/elevenlabs/__init__.py +0 -0
- {openlit-1.30.3 → openlit-1.30.5}/src/openlit/instrumentation/elevenlabs/async_elevenlabs.py +0 -0
- {openlit-1.30.3 → openlit-1.30.5}/src/openlit/instrumentation/elevenlabs/elevenlabs.py +0 -0
- {openlit-1.30.3 → openlit-1.30.5}/src/openlit/instrumentation/embedchain/__init__.py +0 -0
- {openlit-1.30.3 → openlit-1.30.5}/src/openlit/instrumentation/embedchain/embedchain.py +0 -0
- {openlit-1.30.3 → openlit-1.30.5}/src/openlit/instrumentation/google_ai_studio/__init__.py +0 -0
- {openlit-1.30.3 → openlit-1.30.5}/src/openlit/instrumentation/google_ai_studio/async_google_ai_studio.py +0 -0
- {openlit-1.30.3 → openlit-1.30.5}/src/openlit/instrumentation/google_ai_studio/google_ai_studio.py +0 -0
- {openlit-1.30.3 → openlit-1.30.5}/src/openlit/instrumentation/gpt4all/__init__.py +0 -0
- {openlit-1.30.3 → openlit-1.30.5}/src/openlit/instrumentation/gpt4all/gpt4all.py +0 -0
- {openlit-1.30.3 → openlit-1.30.5}/src/openlit/instrumentation/gpu/__init__.py +0 -0
- {openlit-1.30.3 → openlit-1.30.5}/src/openlit/instrumentation/groq/__init__.py +0 -0
- {openlit-1.30.3 → openlit-1.30.5}/src/openlit/instrumentation/groq/async_groq.py +0 -0
- {openlit-1.30.3 → openlit-1.30.5}/src/openlit/instrumentation/groq/groq.py +0 -0
- {openlit-1.30.3 → openlit-1.30.5}/src/openlit/instrumentation/haystack/__init__.py +0 -0
- {openlit-1.30.3 → openlit-1.30.5}/src/openlit/instrumentation/haystack/haystack.py +0 -0
- {openlit-1.30.3 → openlit-1.30.5}/src/openlit/instrumentation/langchain/__init__.py +0 -0
- {openlit-1.30.3 → openlit-1.30.5}/src/openlit/instrumentation/litellm/__init__.py +0 -0
- {openlit-1.30.3 → openlit-1.30.5}/src/openlit/instrumentation/litellm/async_litellm.py +0 -0
- {openlit-1.30.3 → openlit-1.30.5}/src/openlit/instrumentation/litellm/litellm.py +0 -0
- {openlit-1.30.3 → openlit-1.30.5}/src/openlit/instrumentation/llamaindex/__init__.py +0 -0
- {openlit-1.30.3 → openlit-1.30.5}/src/openlit/instrumentation/llamaindex/llamaindex.py +0 -0
- {openlit-1.30.3 → openlit-1.30.5}/src/openlit/instrumentation/milvus/__init__.py +0 -0
- {openlit-1.30.3 → openlit-1.30.5}/src/openlit/instrumentation/milvus/milvus.py +0 -0
- {openlit-1.30.3 → openlit-1.30.5}/src/openlit/instrumentation/mistral/__init__.py +0 -0
- {openlit-1.30.3 → openlit-1.30.5}/src/openlit/instrumentation/mistral/async_mistral.py +0 -0
- {openlit-1.30.3 → openlit-1.30.5}/src/openlit/instrumentation/mistral/mistral.py +0 -0
- {openlit-1.30.3 → openlit-1.30.5}/src/openlit/instrumentation/ollama/__init__.py +0 -0
- {openlit-1.30.3 → openlit-1.30.5}/src/openlit/instrumentation/ollama/async_ollama.py +0 -0
- {openlit-1.30.3 → openlit-1.30.5}/src/openlit/instrumentation/ollama/ollama.py +0 -0
- {openlit-1.30.3 → openlit-1.30.5}/src/openlit/instrumentation/openai/__init__.py +0 -0
- {openlit-1.30.3 → openlit-1.30.5}/src/openlit/instrumentation/openai/async_azure_openai.py +0 -0
- {openlit-1.30.3 → openlit-1.30.5}/src/openlit/instrumentation/openai/async_openai.py +0 -0
- {openlit-1.30.3 → openlit-1.30.5}/src/openlit/instrumentation/openai/azure_openai.py +0 -0
- {openlit-1.30.3 → openlit-1.30.5}/src/openlit/instrumentation/openai/openai.py +0 -0
- {openlit-1.30.3 → openlit-1.30.5}/src/openlit/instrumentation/pinecone/__init__.py +0 -0
- {openlit-1.30.3 → openlit-1.30.5}/src/openlit/instrumentation/pinecone/pinecone.py +0 -0
- {openlit-1.30.3 → openlit-1.30.5}/src/openlit/instrumentation/qdrant/__init__.py +0 -0
- {openlit-1.30.3 → openlit-1.30.5}/src/openlit/instrumentation/qdrant/async_qdrant.py +0 -0
- {openlit-1.30.3 → openlit-1.30.5}/src/openlit/instrumentation/qdrant/qdrant.py +0 -0
- {openlit-1.30.3 → openlit-1.30.5}/src/openlit/instrumentation/transformers/__init__.py +0 -0
- {openlit-1.30.3 → openlit-1.30.5}/src/openlit/instrumentation/vertexai/__init__.py +0 -0
- {openlit-1.30.3 → openlit-1.30.5}/src/openlit/instrumentation/vertexai/async_vertexai.py +0 -0
- {openlit-1.30.3 → openlit-1.30.5}/src/openlit/instrumentation/vertexai/vertexai.py +0 -0
- {openlit-1.30.3 → openlit-1.30.5}/src/openlit/instrumentation/vllm/__init__.py +0 -0
- {openlit-1.30.3 → openlit-1.30.5}/src/openlit/instrumentation/vllm/vllm.py +0 -0
- {openlit-1.30.3 → openlit-1.30.5}/src/openlit/otel/metrics.py +0 -0
- {openlit-1.30.3 → openlit-1.30.5}/src/openlit/otel/tracing.py +0 -0
- {openlit-1.30.3 → openlit-1.30.5}/src/openlit/semcov/__init__.py +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: openlit
|
3
|
-
Version: 1.30.
|
3
|
+
Version: 1.30.5
|
4
4
|
Summary: OpenTelemetry-native Auto instrumentation library for monitoring LLM Applications and GPUs, facilitating the integration of observability into your GenAI-driven projects
|
5
5
|
Home-page: https://github.com/openlit/openlit/tree/main/openlit/python
|
6
6
|
Keywords: OpenTelemetry,otel,otlp,llm,tracing,openai,anthropic,claude,cohere,llm monitoring,observability,monitoring,gpt,Generative AI,chatGPT,gpu
|
@@ -1,6 +1,6 @@
|
|
1
1
|
[tool.poetry]
|
2
2
|
name = "openlit"
|
3
|
-
version = "1.30.
|
3
|
+
version = "1.30.5"
|
4
4
|
description = "OpenTelemetry-native Auto instrumentation library for monitoring LLM Applications and GPUs, facilitating the integration of observability into your GenAI-driven projects"
|
5
5
|
authors = ["OpenLIT"]
|
6
6
|
repository = "https://github.com/openlit/openlit/tree/main/openlit/python"
|
@@ -12,6 +12,26 @@ from openlit.semcov import SemanticConvetion
|
|
12
12
|
# Initialize logger for logging potential issues and operations
|
13
13
|
logger = logging.getLogger(__name__)
|
14
14
|
|
15
|
+
def get_attribute_from_instance_or_kwargs(instance, attribute_name, default=-1):
|
16
|
+
"""Return attribute from instance or kwargs"""
|
17
|
+
# Attempt to retrieve model_kwargs from the instance
|
18
|
+
model_kwargs = getattr(instance, 'model_kwargs', None)
|
19
|
+
|
20
|
+
# Check for attribute in model_kwargs if it exists
|
21
|
+
if model_kwargs and attribute_name in model_kwargs:
|
22
|
+
return model_kwargs[attribute_name]
|
23
|
+
|
24
|
+
# Attempt to get the attribute directly from the instance
|
25
|
+
try:
|
26
|
+
return getattr(instance, attribute_name)
|
27
|
+
except AttributeError:
|
28
|
+
# Special handling for 'model' attribute to consider 'model_id'
|
29
|
+
if attribute_name == 'model':
|
30
|
+
return getattr(instance, 'model_id', 'default_model_id')
|
31
|
+
|
32
|
+
# Default if the attribute isn't found in model_kwargs or the instance
|
33
|
+
return default
|
34
|
+
|
15
35
|
def general_wrap(gen_ai_endpoint, version, environment, application_name,
|
16
36
|
tracer, pricing_info, trace_content, metrics, disable_metrics):
|
17
37
|
"""
|
@@ -207,15 +227,18 @@ def allm(gen_ai_endpoint, version, environment, application_name,
|
|
207
227
|
response = await wrapped(*args, **kwargs)
|
208
228
|
|
209
229
|
try:
|
210
|
-
|
211
|
-
|
212
|
-
|
230
|
+
if args:
|
231
|
+
prompt = str(args[0]) if args[0] is not None else ""
|
232
|
+
else:
|
233
|
+
prompt = ""
|
234
|
+
input_tokens = general_tokens(prompt)
|
235
|
+
output_tokens = general_tokens(response)
|
213
236
|
|
214
|
-
#
|
215
|
-
|
216
|
-
|
217
|
-
|
218
|
-
|
237
|
+
# Calculate cost of the operation
|
238
|
+
cost = get_chat_model_cost(
|
239
|
+
str(get_attribute_from_instance_or_kwargs(instance, 'model')),
|
240
|
+
pricing_info, input_tokens, output_tokens
|
241
|
+
)
|
219
242
|
|
220
243
|
span.set_attribute(TELEMETRY_SDK_NAME, "openlit")
|
221
244
|
span.set_attribute(SemanticConvetion.GEN_AI_SYSTEM,
|
@@ -229,23 +252,23 @@ def allm(gen_ai_endpoint, version, environment, application_name,
|
|
229
252
|
span.set_attribute(SemanticConvetion.GEN_AI_APPLICATION_NAME,
|
230
253
|
application_name)
|
231
254
|
span.set_attribute(SemanticConvetion.GEN_AI_REQUEST_MODEL,
|
232
|
-
|
255
|
+
str(get_attribute_from_instance_or_kwargs(instance, 'model')))
|
233
256
|
span.set_attribute(SemanticConvetion.GEN_AI_REQUEST_TEMPERATURE,
|
234
|
-
|
257
|
+
str(get_attribute_from_instance_or_kwargs(instance, 'temperature')))
|
235
258
|
span.set_attribute(SemanticConvetion.GEN_AI_REQUEST_TOP_K,
|
236
|
-
|
259
|
+
str(get_attribute_from_instance_or_kwargs(instance, 'top_k')))
|
237
260
|
span.set_attribute(SemanticConvetion.GEN_AI_REQUEST_TOP_P,
|
238
|
-
|
261
|
+
str(get_attribute_from_instance_or_kwargs(instance, 'top_p')))
|
239
262
|
span.set_attribute(SemanticConvetion.GEN_AI_REQUEST_IS_STREAM,
|
240
263
|
False)
|
241
|
-
|
242
|
-
|
243
|
-
|
244
|
-
|
245
|
-
|
246
|
-
|
247
|
-
|
248
|
-
|
264
|
+
span.set_attribute(SemanticConvetion.GEN_AI_USAGE_PROMPT_TOKENS,
|
265
|
+
input_tokens)
|
266
|
+
span.set_attribute(SemanticConvetion.GEN_AI_USAGE_COMPLETION_TOKENS,
|
267
|
+
output_tokens)
|
268
|
+
span.set_attribute(SemanticConvetion.GEN_AI_USAGE_TOTAL_TOKENS,
|
269
|
+
input_tokens + output_tokens)
|
270
|
+
span.set_attribute(SemanticConvetion.GEN_AI_USAGE_COST,
|
271
|
+
cost)
|
249
272
|
if trace_content:
|
250
273
|
span.add_event(
|
251
274
|
name=SemanticConvetion.GEN_AI_CONTENT_PROMPT_EVENT,
|
@@ -262,29 +285,29 @@ def allm(gen_ai_endpoint, version, environment, application_name,
|
|
262
285
|
|
263
286
|
span.set_status(Status(StatusCode.OK))
|
264
287
|
|
265
|
-
|
266
|
-
|
267
|
-
|
268
|
-
|
269
|
-
|
270
|
-
|
271
|
-
|
272
|
-
|
273
|
-
|
274
|
-
|
275
|
-
|
276
|
-
|
277
|
-
|
278
|
-
|
279
|
-
|
280
|
-
|
281
|
-
|
282
|
-
|
283
|
-
|
284
|
-
|
285
|
-
|
286
|
-
|
287
|
-
|
288
|
+
if disable_metrics is False:
|
289
|
+
attributes = {
|
290
|
+
TELEMETRY_SDK_NAME:
|
291
|
+
"openlit",
|
292
|
+
SemanticConvetion.GEN_AI_APPLICATION_NAME:
|
293
|
+
application_name,
|
294
|
+
SemanticConvetion.GEN_AI_SYSTEM:
|
295
|
+
SemanticConvetion.GEN_AI_SYSTEM_LANGCHAIN,
|
296
|
+
SemanticConvetion.GEN_AI_ENVIRONMENT:
|
297
|
+
environment,
|
298
|
+
SemanticConvetion.GEN_AI_TYPE:
|
299
|
+
SemanticConvetion.GEN_AI_TYPE_CHAT,
|
300
|
+
SemanticConvetion.GEN_AI_REQUEST_MODEL:
|
301
|
+
str(get_attribute_from_instance_or_kwargs(instance, 'model'))
|
302
|
+
}
|
303
|
+
|
304
|
+
metrics["genai_requests"].add(1, attributes)
|
305
|
+
metrics["genai_total_tokens"].add(
|
306
|
+
input_tokens + output_tokens, attributes
|
307
|
+
)
|
308
|
+
metrics["genai_completion_tokens"].add(output_tokens, attributes)
|
309
|
+
metrics["genai_prompt_tokens"].add(input_tokens, attributes)
|
310
|
+
metrics["genai_cost"].record(cost, attributes)
|
288
311
|
|
289
312
|
# Return original response
|
290
313
|
return response
|
@@ -344,15 +367,18 @@ def llm(gen_ai_endpoint, version, environment, application_name,
|
|
344
367
|
response = wrapped(*args, **kwargs)
|
345
368
|
|
346
369
|
try:
|
347
|
-
|
348
|
-
|
349
|
-
|
370
|
+
if args:
|
371
|
+
prompt = str(args[0]) if args[0] is not None else ""
|
372
|
+
else:
|
373
|
+
prompt = ""
|
374
|
+
input_tokens = general_tokens(prompt)
|
375
|
+
output_tokens = general_tokens(response)
|
350
376
|
|
351
|
-
#
|
352
|
-
|
353
|
-
|
354
|
-
|
355
|
-
|
377
|
+
# Calculate cost of the operation
|
378
|
+
cost = get_chat_model_cost(
|
379
|
+
str(get_attribute_from_instance_or_kwargs(instance, 'model')),
|
380
|
+
pricing_info, input_tokens, output_tokens
|
381
|
+
)
|
356
382
|
|
357
383
|
span.set_attribute(TELEMETRY_SDK_NAME, "openlit")
|
358
384
|
span.set_attribute(SemanticConvetion.GEN_AI_SYSTEM,
|
@@ -366,23 +392,23 @@ def llm(gen_ai_endpoint, version, environment, application_name,
|
|
366
392
|
span.set_attribute(SemanticConvetion.GEN_AI_APPLICATION_NAME,
|
367
393
|
application_name)
|
368
394
|
span.set_attribute(SemanticConvetion.GEN_AI_REQUEST_MODEL,
|
369
|
-
|
395
|
+
str(get_attribute_from_instance_or_kwargs(instance, 'model')))
|
370
396
|
span.set_attribute(SemanticConvetion.GEN_AI_REQUEST_TEMPERATURE,
|
371
|
-
|
397
|
+
str(get_attribute_from_instance_or_kwargs(instance, 'temperature')))
|
372
398
|
span.set_attribute(SemanticConvetion.GEN_AI_REQUEST_TOP_K,
|
373
|
-
|
399
|
+
str(get_attribute_from_instance_or_kwargs(instance, 'top_k')))
|
374
400
|
span.set_attribute(SemanticConvetion.GEN_AI_REQUEST_TOP_P,
|
375
|
-
|
401
|
+
str(get_attribute_from_instance_or_kwargs(instance, 'top_p')))
|
376
402
|
span.set_attribute(SemanticConvetion.GEN_AI_REQUEST_IS_STREAM,
|
377
403
|
False)
|
378
|
-
|
379
|
-
|
380
|
-
|
381
|
-
|
382
|
-
|
383
|
-
|
384
|
-
|
385
|
-
|
404
|
+
span.set_attribute(SemanticConvetion.GEN_AI_USAGE_PROMPT_TOKENS,
|
405
|
+
input_tokens)
|
406
|
+
span.set_attribute(SemanticConvetion.GEN_AI_USAGE_COMPLETION_TOKENS,
|
407
|
+
output_tokens)
|
408
|
+
span.set_attribute(SemanticConvetion.GEN_AI_USAGE_TOTAL_TOKENS,
|
409
|
+
input_tokens + output_tokens)
|
410
|
+
span.set_attribute(SemanticConvetion.GEN_AI_USAGE_COST,
|
411
|
+
cost)
|
386
412
|
if trace_content:
|
387
413
|
span.add_event(
|
388
414
|
name=SemanticConvetion.GEN_AI_CONTENT_PROMPT_EVENT,
|
@@ -399,29 +425,29 @@ def llm(gen_ai_endpoint, version, environment, application_name,
|
|
399
425
|
|
400
426
|
span.set_status(Status(StatusCode.OK))
|
401
427
|
|
402
|
-
|
403
|
-
|
404
|
-
|
405
|
-
|
406
|
-
|
407
|
-
|
408
|
-
|
409
|
-
|
410
|
-
|
411
|
-
|
412
|
-
|
413
|
-
|
414
|
-
|
415
|
-
|
416
|
-
|
417
|
-
|
418
|
-
|
419
|
-
|
420
|
-
|
421
|
-
|
422
|
-
|
423
|
-
|
424
|
-
|
428
|
+
if disable_metrics is False:
|
429
|
+
attributes = {
|
430
|
+
TELEMETRY_SDK_NAME:
|
431
|
+
"openlit",
|
432
|
+
SemanticConvetion.GEN_AI_APPLICATION_NAME:
|
433
|
+
application_name,
|
434
|
+
SemanticConvetion.GEN_AI_SYSTEM:
|
435
|
+
SemanticConvetion.GEN_AI_SYSTEM_LANGCHAIN,
|
436
|
+
SemanticConvetion.GEN_AI_ENVIRONMENT:
|
437
|
+
environment,
|
438
|
+
SemanticConvetion.GEN_AI_TYPE:
|
439
|
+
SemanticConvetion.GEN_AI_TYPE_CHAT,
|
440
|
+
SemanticConvetion.GEN_AI_REQUEST_MODEL:
|
441
|
+
str(get_attribute_from_instance_or_kwargs(instance, 'model'))
|
442
|
+
}
|
443
|
+
|
444
|
+
metrics["genai_requests"].add(1, attributes)
|
445
|
+
metrics["genai_total_tokens"].add(
|
446
|
+
input_tokens + output_tokens, attributes
|
447
|
+
)
|
448
|
+
metrics["genai_completion_tokens"].add(output_tokens, attributes)
|
449
|
+
metrics["genai_prompt_tokens"].add(input_tokens, attributes)
|
450
|
+
metrics["genai_cost"].record(cost, attributes)
|
425
451
|
|
426
452
|
# Return original response
|
427
453
|
return response
|
@@ -481,11 +507,12 @@ def chat(gen_ai_endpoint, version, environment, application_name,
|
|
481
507
|
response = wrapped(*args, **kwargs)
|
482
508
|
|
483
509
|
try:
|
484
|
-
|
485
|
-
|
510
|
+
token_usage = response.response_metadata.get("token_usage", {})
|
511
|
+
input_tokens = token_usage.get("prompt_tokens", 0)
|
512
|
+
output_tokens = token_usage.get("completion_tokens", 0)
|
513
|
+
model = response.response_metadata.get("model_name", "gpt-4")
|
486
514
|
|
487
515
|
prompt = "" if isinstance(args[0], list) else args[0]
|
488
|
-
model = getattr(instance, 'model_name', getattr(instance, 'model', 'gpt-4'))
|
489
516
|
|
490
517
|
# Calculate cost of the operation
|
491
518
|
cost = get_chat_model_cost(
|
@@ -620,11 +647,12 @@ def achat(gen_ai_endpoint, version, environment, application_name,
|
|
620
647
|
response = await wrapped(*args, **kwargs)
|
621
648
|
|
622
649
|
try:
|
623
|
-
|
624
|
-
|
650
|
+
token_usage = response.response_metadata.get("token_usage", {})
|
651
|
+
input_tokens = token_usage.get("prompt_tokens", 0)
|
652
|
+
output_tokens = token_usage.get("completion_tokens", 0)
|
653
|
+
model = response.response_metadata.get("model_name", "gpt-4")
|
625
654
|
|
626
655
|
prompt = "" if isinstance(args[0], list) else args[0]
|
627
|
-
model = getattr(instance, 'model_name', getattr(instance, 'model', 'gpt-4'))
|
628
656
|
# Calculate cost of the operation
|
629
657
|
cost = get_chat_model_cost(
|
630
658
|
model,
|
@@ -67,7 +67,7 @@ def text_wrap(gen_ai_endpoint, version, environment, application_name,
|
|
67
67
|
else:
|
68
68
|
prompt = kwargs.get("args", "")
|
69
69
|
|
70
|
-
prompt_tokens = general_tokens(prompt)
|
70
|
+
prompt_tokens = general_tokens(prompt[0])
|
71
71
|
|
72
72
|
span.set_attribute(TELEMETRY_SDK_NAME, "openlit")
|
73
73
|
span.set_attribute(SemanticConvetion.GEN_AI_ENDPOINT,
|
@@ -106,14 +106,20 @@ def text_wrap(gen_ai_endpoint, version, environment, application_name,
|
|
106
106
|
else:
|
107
107
|
attribute_name = SemanticConvetion.GEN_AI_CONTENT_COMPLETION_EVENT
|
108
108
|
if trace_content:
|
109
|
+
# pylint: disable=bare-except
|
110
|
+
try:
|
111
|
+
llm_response = completion.get('generated_text', '')
|
112
|
+
except:
|
113
|
+
llm_response = completion[i].get('generated_text', '')
|
114
|
+
|
109
115
|
span.add_event(
|
110
116
|
name=attribute_name,
|
111
117
|
attributes={
|
112
118
|
# pylint: disable=line-too-long
|
113
|
-
SemanticConvetion.GEN_AI_CONTENT_COMPLETION:
|
119
|
+
SemanticConvetion.GEN_AI_CONTENT_COMPLETION: llm_response,
|
114
120
|
},
|
115
121
|
)
|
116
|
-
completion_tokens += general_tokens(
|
122
|
+
completion_tokens += general_tokens(llm_response)
|
117
123
|
|
118
124
|
i=i+1
|
119
125
|
span.set_attribute(SemanticConvetion.GEN_AI_USAGE_COMPLETION_TOKENS,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{openlit-1.30.3 → openlit-1.30.5}/src/openlit/instrumentation/azure_ai_inference/__init__.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{openlit-1.30.3 → openlit-1.30.5}/src/openlit/instrumentation/elevenlabs/async_elevenlabs.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{openlit-1.30.3 → openlit-1.30.5}/src/openlit/instrumentation/google_ai_studio/google_ai_studio.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|