openlit 1.33.8__py3-none-any.whl → 1.33.9__py3-none-any.whl

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.
Files changed (78) hide show
  1. openlit/__helpers.py +83 -0
  2. openlit/__init__.py +1 -1
  3. openlit/instrumentation/ag2/ag2.py +2 -2
  4. openlit/instrumentation/ai21/__init__.py +4 -4
  5. openlit/instrumentation/ai21/ai21.py +370 -319
  6. openlit/instrumentation/ai21/async_ai21.py +371 -319
  7. openlit/instrumentation/anthropic/__init__.py +4 -4
  8. openlit/instrumentation/anthropic/anthropic.py +321 -189
  9. openlit/instrumentation/anthropic/async_anthropic.py +323 -190
  10. openlit/instrumentation/assemblyai/__init__.py +1 -1
  11. openlit/instrumentation/assemblyai/assemblyai.py +59 -43
  12. openlit/instrumentation/astra/astra.py +4 -4
  13. openlit/instrumentation/astra/async_astra.py +4 -4
  14. openlit/instrumentation/azure_ai_inference/__init__.py +4 -4
  15. openlit/instrumentation/azure_ai_inference/async_azure_ai_inference.py +406 -252
  16. openlit/instrumentation/azure_ai_inference/azure_ai_inference.py +406 -252
  17. openlit/instrumentation/bedrock/__init__.py +1 -1
  18. openlit/instrumentation/bedrock/bedrock.py +115 -58
  19. openlit/instrumentation/chroma/chroma.py +4 -4
  20. openlit/instrumentation/cohere/__init__.py +33 -10
  21. openlit/instrumentation/cohere/async_cohere.py +610 -0
  22. openlit/instrumentation/cohere/cohere.py +410 -219
  23. openlit/instrumentation/controlflow/controlflow.py +2 -2
  24. openlit/instrumentation/crawl4ai/async_crawl4ai.py +2 -2
  25. openlit/instrumentation/crawl4ai/crawl4ai.py +2 -2
  26. openlit/instrumentation/crewai/crewai.py +2 -2
  27. openlit/instrumentation/dynamiq/dynamiq.py +2 -2
  28. openlit/instrumentation/elevenlabs/async_elevenlabs.py +73 -47
  29. openlit/instrumentation/elevenlabs/elevenlabs.py +73 -52
  30. openlit/instrumentation/embedchain/embedchain.py +4 -4
  31. openlit/instrumentation/firecrawl/firecrawl.py +2 -2
  32. openlit/instrumentation/google_ai_studio/__init__.py +9 -9
  33. openlit/instrumentation/google_ai_studio/async_google_ai_studio.py +183 -219
  34. openlit/instrumentation/google_ai_studio/google_ai_studio.py +183 -220
  35. openlit/instrumentation/gpt4all/gpt4all.py +17 -17
  36. openlit/instrumentation/groq/async_groq.py +14 -14
  37. openlit/instrumentation/groq/groq.py +14 -14
  38. openlit/instrumentation/haystack/haystack.py +2 -2
  39. openlit/instrumentation/julep/async_julep.py +2 -2
  40. openlit/instrumentation/julep/julep.py +2 -2
  41. openlit/instrumentation/langchain/langchain.py +36 -31
  42. openlit/instrumentation/letta/letta.py +6 -6
  43. openlit/instrumentation/litellm/async_litellm.py +20 -20
  44. openlit/instrumentation/litellm/litellm.py +20 -20
  45. openlit/instrumentation/llamaindex/llamaindex.py +2 -2
  46. openlit/instrumentation/mem0/mem0.py +2 -2
  47. openlit/instrumentation/milvus/milvus.py +4 -4
  48. openlit/instrumentation/mistral/async_mistral.py +18 -18
  49. openlit/instrumentation/mistral/mistral.py +18 -18
  50. openlit/instrumentation/multion/async_multion.py +2 -2
  51. openlit/instrumentation/multion/multion.py +2 -2
  52. openlit/instrumentation/ollama/async_ollama.py +29 -29
  53. openlit/instrumentation/ollama/ollama.py +29 -29
  54. openlit/instrumentation/openai/__init__.py +11 -230
  55. openlit/instrumentation/openai/async_openai.py +434 -409
  56. openlit/instrumentation/openai/openai.py +415 -393
  57. openlit/instrumentation/phidata/phidata.py +2 -2
  58. openlit/instrumentation/pinecone/pinecone.py +4 -4
  59. openlit/instrumentation/premai/premai.py +20 -20
  60. openlit/instrumentation/qdrant/async_qdrant.py +4 -4
  61. openlit/instrumentation/qdrant/qdrant.py +4 -4
  62. openlit/instrumentation/reka/async_reka.py +6 -6
  63. openlit/instrumentation/reka/reka.py +6 -6
  64. openlit/instrumentation/together/async_together.py +18 -18
  65. openlit/instrumentation/together/together.py +18 -18
  66. openlit/instrumentation/transformers/transformers.py +6 -6
  67. openlit/instrumentation/vertexai/async_vertexai.py +53 -53
  68. openlit/instrumentation/vertexai/vertexai.py +53 -53
  69. openlit/instrumentation/vllm/vllm.py +6 -6
  70. openlit/otel/metrics.py +98 -7
  71. openlit/semcov/__init__.py +113 -80
  72. {openlit-1.33.8.dist-info → openlit-1.33.9.dist-info}/METADATA +1 -1
  73. openlit-1.33.9.dist-info/RECORD +121 -0
  74. {openlit-1.33.8.dist-info → openlit-1.33.9.dist-info}/WHEEL +1 -1
  75. openlit/instrumentation/openai/async_azure_openai.py +0 -900
  76. openlit/instrumentation/openai/azure_openai.py +0 -898
  77. openlit-1.33.8.dist-info/RECORD +0 -122
  78. {openlit-1.33.8.dist-info → openlit-1.33.9.dist-info}/LICENSE +0 -0
@@ -1,19 +1,23 @@
1
- # pylint: disable=duplicate-code, broad-exception-caught, too-many-statements, unused-argument, possibly-used-before-assignment
2
1
  """
3
2
  Module for monitoring Assembly AI API calls.
4
3
  """
5
4
 
6
5
  import logging
6
+ import time
7
7
  from opentelemetry.trace import SpanKind, Status, StatusCode
8
- from opentelemetry.sdk.resources import TELEMETRY_SDK_NAME
9
- from openlit.__helpers import get_audio_model_cost
10
- from openlit.__helpers import handle_exception
8
+ from opentelemetry.sdk.resources import SERVICE_NAME, TELEMETRY_SDK_NAME, DEPLOYMENT_ENVIRONMENT
9
+ from openlit.__helpers import (
10
+ get_audio_model_cost,
11
+ handle_exception,
12
+ create_metrics_attributes,
13
+ set_server_address_and_port
14
+ )
11
15
  from openlit.semcov import SemanticConvetion
12
16
 
13
17
  # Initialize logger for logging potential issues and operations
14
18
  logger = logging.getLogger(__name__)
15
19
 
16
- def transcribe(gen_ai_endpoint, version, environment, application_name,
20
+ def transcribe(version, environment, application_name,
17
21
  tracer, pricing_info, trace_content, metrics, disable_metrics):
18
22
  """
19
23
  Generates a telemetry wrapper for creating speech audio to collect metrics.
@@ -48,43 +52,56 @@ def transcribe(gen_ai_endpoint, version, environment, application_name,
48
52
  The response from the original 'transcribe' method.
49
53
  """
50
54
 
51
- with tracer.start_as_current_span(gen_ai_endpoint, kind= SpanKind.CLIENT) as span:
55
+ server_address, server_port = set_server_address_and_port(instance, 'api.assemblyai.com', 443)
56
+ request_model = kwargs.get('speech_model', 'best')
57
+
58
+ span_name = f'{SemanticConvetion.GEN_AI_OPERATION_TYPE_AUDIO} {request_model}'
59
+
60
+ with tracer.start_as_current_span(span_name, kind= SpanKind.CLIENT) as span:
61
+ start_time = time.time()
52
62
  response = wrapped(*args, **kwargs)
63
+ end_time = time.time()
53
64
 
54
65
  try:
55
- llm_model = response.speech_model if response.speech_model else "best"
56
-
57
66
  # Calculate cost of the operation
58
- cost = get_audio_model_cost(llm_model,
67
+ cost = get_audio_model_cost(request_model,
59
68
  pricing_info, None, response.audio_duration)
60
69
 
61
- # Set Span attributes
62
- span.set_attribute(TELEMETRY_SDK_NAME, "openlit")
70
+ # Set Span attributes (OTel Semconv)
71
+ span.set_attribute(TELEMETRY_SDK_NAME, 'openlit')
72
+ span.set_attribute(SemanticConvetion.GEN_AI_OPERATION,
73
+ SemanticConvetion.GEN_AI_OPERATION_TYPE_AUDIO)
63
74
  span.set_attribute(SemanticConvetion.GEN_AI_SYSTEM,
64
75
  SemanticConvetion.GEN_AI_SYSTEM_ASSEMBLYAI)
65
- span.set_attribute(SemanticConvetion.GEN_AI_TYPE,
66
- SemanticConvetion.GEN_AI_TYPE_AUDIO)
67
- span.set_attribute(SemanticConvetion.GEN_AI_ENDPOINT,
68
- gen_ai_endpoint)
69
- span.set_attribute(SemanticConvetion.GEN_AI_ENVIRONMENT,
76
+ span.set_attribute(SemanticConvetion.GEN_AI_REQUEST_MODEL,
77
+ request_model)
78
+ span.set_attribute(SemanticConvetion.SERVER_ADDRESS,
79
+ server_address)
80
+ span.set_attribute(SemanticConvetion.SERVER_PORT,
81
+ server_port)
82
+ span.set_attribute(SemanticConvetion.GEN_AI_RESPONSE_MODEL,
83
+ request_model)
84
+ span.set_attribute(SemanticConvetion.GEN_AI_OUTPUT_TYPE,
85
+ 'text')
86
+
87
+ # Set Span attributes (Extras)
88
+ span.set_attribute(DEPLOYMENT_ENVIRONMENT,
70
89
  environment)
71
- span.set_attribute(SemanticConvetion.GEN_AI_APPLICATION_NAME,
90
+ span.set_attribute(SERVICE_NAME,
72
91
  application_name)
73
- span.set_attribute(SemanticConvetion.GEN_AI_RESPONSE_ID,
74
- response.id)
75
- span.set_attribute(SemanticConvetion.GEN_AI_REQUEST_MODEL,
76
- llm_model)
77
92
  span.set_attribute(SemanticConvetion.GEN_AI_REQUEST_AUDIO_DURATION,
78
93
  response.audio_duration)
79
94
  span.set_attribute(SemanticConvetion.GEN_AI_USAGE_COST,
80
95
  cost)
96
+ span.set_attribute(SemanticConvetion.GEN_AI_SDK_VERSION,
97
+ version)
81
98
 
82
99
  if trace_content:
83
100
  span.add_event(
84
- name=SemanticConvetion.GEN_AI_CONTENT_PROMPT_EVENT,
85
- attributes={
86
- SemanticConvetion.GEN_AI_CONTENT_PROMPT: response.audio_url,
87
- },
101
+ name=SemanticConvetion.GEN_AI_CONTENT_PROMPT_EVENT,
102
+ attributes={
103
+ SemanticConvetion.GEN_AI_CONTENT_PROMPT: response.audio_url,
104
+ },
88
105
  )
89
106
  span.add_event(
90
107
  name=SemanticConvetion.GEN_AI_CONTENT_COMPLETION_EVENT,
@@ -96,30 +113,29 @@ def transcribe(gen_ai_endpoint, version, environment, application_name,
96
113
  span.set_status(Status(StatusCode.OK))
97
114
 
98
115
  if disable_metrics is False:
99
- attributes = {
100
- TELEMETRY_SDK_NAME:
101
- "openlit",
102
- SemanticConvetion.GEN_AI_APPLICATION_NAME:
103
- application_name,
104
- SemanticConvetion.GEN_AI_SYSTEM:
105
- SemanticConvetion.GEN_AI_SYSTEM_ASSEMBLYAI,
106
- SemanticConvetion.GEN_AI_ENVIRONMENT:
107
- environment,
108
- SemanticConvetion.GEN_AI_TYPE:
109
- SemanticConvetion.GEN_AI_TYPE_AUDIO,
110
- SemanticConvetion.GEN_AI_REQUEST_MODEL:
111
- llm_model,
112
- }
113
-
114
- metrics["genai_requests"].add(1, attributes)
115
- metrics["genai_cost"].record(cost, attributes)
116
+ attributes = create_metrics_attributes(
117
+ service_name=application_name,
118
+ deployment_environment=environment,
119
+ operation=SemanticConvetion.GEN_AI_OPERATION_TYPE_AUDIO,
120
+ system=SemanticConvetion.GEN_AI_SYSTEM_ASSEMBLYAI,
121
+ request_model=request_model,
122
+ server_address=server_address,
123
+ server_port=server_port,
124
+ response_model=request_model,
125
+ )
126
+
127
+ metrics['genai_client_operation_duration'].record(
128
+ end_time - start_time, attributes
129
+ )
130
+ metrics['genai_requests'].add(1, attributes)
131
+ metrics['genai_cost'].record(cost, attributes)
116
132
 
117
133
  # Return original response
118
134
  return response
119
135
 
120
136
  except Exception as e:
121
137
  handle_exception(span, e)
122
- logger.error("Error in trace creation: %s", e)
138
+ logger.error('Error in trace creation: %s', e)
123
139
 
124
140
  # Return original response
125
141
  return response
@@ -73,8 +73,8 @@ def general_wrap(gen_ai_endpoint, version, environment, application_name,
73
73
  environment)
74
74
  span.set_attribute(SemanticConvetion.GEN_AI_APPLICATION_NAME,
75
75
  application_name)
76
- span.set_attribute(SemanticConvetion.GEN_AI_TYPE,
77
- SemanticConvetion.GEN_AI_TYPE_VECTORDB)
76
+ span.set_attribute(SemanticConvetion.GEN_AI_OPERATION,
77
+ SemanticConvetion.GEN_AI_OPERATION_TYPE_VECTORDB)
78
78
  span.set_attribute(SemanticConvetion.DB_SYSTEM,
79
79
  SemanticConvetion.DB_SYSTEM_ASTRA)
80
80
 
@@ -205,8 +205,8 @@ def general_wrap(gen_ai_endpoint, version, environment, application_name,
205
205
  SemanticConvetion.DB_SYSTEM_ASTRA,
206
206
  SemanticConvetion.GEN_AI_ENVIRONMENT:
207
207
  environment,
208
- SemanticConvetion.GEN_AI_TYPE:
209
- SemanticConvetion.GEN_AI_TYPE_VECTORDB,
208
+ SemanticConvetion.GEN_AI_OPERATION:
209
+ SemanticConvetion.GEN_AI_OPERATION_TYPE_VECTORDB,
210
210
  SemanticConvetion.DB_OPERATION:
211
211
  db_operation
212
212
  }
@@ -73,8 +73,8 @@ def general_wrap(gen_ai_endpoint, version, environment, application_name,
73
73
  environment)
74
74
  span.set_attribute(SemanticConvetion.GEN_AI_APPLICATION_NAME,
75
75
  application_name)
76
- span.set_attribute(SemanticConvetion.GEN_AI_TYPE,
77
- SemanticConvetion.GEN_AI_TYPE_VECTORDB)
76
+ span.set_attribute(SemanticConvetion.GEN_AI_OPERATION,
77
+ SemanticConvetion.GEN_AI_OPERATION_TYPE_VECTORDB)
78
78
  span.set_attribute(SemanticConvetion.DB_SYSTEM,
79
79
  SemanticConvetion.DB_SYSTEM_ASTRA)
80
80
 
@@ -205,8 +205,8 @@ def general_wrap(gen_ai_endpoint, version, environment, application_name,
205
205
  SemanticConvetion.DB_SYSTEM_ASTRA,
206
206
  SemanticConvetion.GEN_AI_ENVIRONMENT:
207
207
  environment,
208
- SemanticConvetion.GEN_AI_TYPE:
209
- SemanticConvetion.GEN_AI_TYPE_VECTORDB,
208
+ SemanticConvetion.GEN_AI_OPERATION:
209
+ SemanticConvetion.GEN_AI_OPERATION_TYPE_VECTORDB,
210
210
  SemanticConvetion.DB_OPERATION:
211
211
  db_operation
212
212
  }
@@ -38,7 +38,7 @@ class AzureAIInferenceInstrumentor(BaseInstrumentor):
38
38
  wrap_function_wrapper(
39
39
  "azure.ai.inference",
40
40
  "ChatCompletionsClient.complete",
41
- complete("azure_ai.complete", version, environment, application_name,
41
+ complete(version, environment, application_name,
42
42
  tracer, pricing_info, trace_content, metrics, disable_metrics),
43
43
  )
44
44
 
@@ -46,7 +46,7 @@ class AzureAIInferenceInstrumentor(BaseInstrumentor):
46
46
  wrap_function_wrapper(
47
47
  "azure.ai.inference",
48
48
  "EmbeddingsClient.embed",
49
- embedding("azure_ai.embed", version, environment, application_name,
49
+ embedding(version, environment, application_name,
50
50
  tracer, pricing_info, trace_content, metrics, disable_metrics),
51
51
  )
52
52
 
@@ -54,7 +54,7 @@ class AzureAIInferenceInstrumentor(BaseInstrumentor):
54
54
  wrap_function_wrapper(
55
55
  "azure.ai.inference.aio",
56
56
  "ChatCompletionsClient.complete",
57
- async_complete("azure_ai.complete", version, environment, application_name,
57
+ async_complete(version, environment, application_name,
58
58
  tracer, pricing_info, trace_content, metrics, disable_metrics),
59
59
  )
60
60
 
@@ -62,7 +62,7 @@ class AzureAIInferenceInstrumentor(BaseInstrumentor):
62
62
  wrap_function_wrapper(
63
63
  "azure.ai.inference.aio",
64
64
  "EmbeddingsClient.embed",
65
- async_embedding("azure_ai.embed", version, environment, application_name,
65
+ async_embedding(version, environment, application_name,
66
66
  tracer, pricing_info, trace_content, metrics, disable_metrics),
67
67
  )
68
68