openlit 1.33.10__py3-none-any.whl → 1.33.11__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 (112) hide show
  1. openlit/__helpers.py +73 -0
  2. openlit/__init__.py +38 -11
  3. openlit/instrumentation/ag2/__init__.py +9 -10
  4. openlit/instrumentation/ag2/ag2.py +133 -68
  5. openlit/instrumentation/ai21/__init__.py +6 -5
  6. openlit/instrumentation/ai21/ai21.py +71 -534
  7. openlit/instrumentation/ai21/async_ai21.py +71 -534
  8. openlit/instrumentation/ai21/utils.py +407 -0
  9. openlit/instrumentation/anthropic/__init__.py +3 -3
  10. openlit/instrumentation/anthropic/anthropic.py +4 -4
  11. openlit/instrumentation/anthropic/async_anthropic.py +4 -4
  12. openlit/instrumentation/assemblyai/__init__.py +2 -2
  13. openlit/instrumentation/assemblyai/assemblyai.py +3 -3
  14. openlit/instrumentation/astra/__init__.py +25 -25
  15. openlit/instrumentation/astra/astra.py +2 -2
  16. openlit/instrumentation/astra/async_astra.py +2 -2
  17. openlit/instrumentation/azure_ai_inference/__init__.py +5 -5
  18. openlit/instrumentation/azure_ai_inference/async_azure_ai_inference.py +8 -8
  19. openlit/instrumentation/azure_ai_inference/azure_ai_inference.py +8 -8
  20. openlit/instrumentation/bedrock/__init__.py +2 -2
  21. openlit/instrumentation/bedrock/bedrock.py +3 -3
  22. openlit/instrumentation/chroma/__init__.py +9 -9
  23. openlit/instrumentation/chroma/chroma.py +2 -2
  24. openlit/instrumentation/cohere/__init__.py +7 -7
  25. openlit/instrumentation/cohere/async_cohere.py +9 -9
  26. openlit/instrumentation/cohere/cohere.py +9 -9
  27. openlit/instrumentation/controlflow/__init__.py +4 -4
  28. openlit/instrumentation/controlflow/controlflow.py +2 -2
  29. openlit/instrumentation/crawl4ai/__init__.py +3 -3
  30. openlit/instrumentation/crawl4ai/async_crawl4ai.py +2 -2
  31. openlit/instrumentation/crawl4ai/crawl4ai.py +2 -2
  32. openlit/instrumentation/crewai/__init__.py +3 -3
  33. openlit/instrumentation/crewai/crewai.py +2 -2
  34. openlit/instrumentation/dynamiq/__init__.py +5 -5
  35. openlit/instrumentation/dynamiq/dynamiq.py +2 -2
  36. openlit/instrumentation/elevenlabs/__init__.py +5 -5
  37. openlit/instrumentation/elevenlabs/async_elevenlabs.py +3 -3
  38. openlit/instrumentation/elevenlabs/elevenlabs.py +3 -3
  39. openlit/instrumentation/embedchain/__init__.py +2 -2
  40. openlit/instrumentation/embedchain/embedchain.py +4 -4
  41. openlit/instrumentation/firecrawl/__init__.py +3 -3
  42. openlit/instrumentation/firecrawl/firecrawl.py +2 -2
  43. openlit/instrumentation/google_ai_studio/__init__.py +3 -3
  44. openlit/instrumentation/google_ai_studio/async_google_ai_studio.py +3 -3
  45. openlit/instrumentation/google_ai_studio/google_ai_studio.py +3 -3
  46. openlit/instrumentation/gpt4all/__init__.py +3 -3
  47. openlit/instrumentation/gpt4all/gpt4all.py +7 -7
  48. openlit/instrumentation/groq/__init__.py +3 -3
  49. openlit/instrumentation/groq/async_groq.py +5 -5
  50. openlit/instrumentation/groq/groq.py +5 -5
  51. openlit/instrumentation/haystack/__init__.py +2 -2
  52. openlit/instrumentation/haystack/haystack.py +2 -2
  53. openlit/instrumentation/julep/__init__.py +7 -7
  54. openlit/instrumentation/julep/async_julep.py +3 -3
  55. openlit/instrumentation/julep/julep.py +3 -3
  56. openlit/instrumentation/langchain/__init__.py +2 -2
  57. openlit/instrumentation/langchain/async_langchain.py +13 -9
  58. openlit/instrumentation/langchain/langchain.py +13 -8
  59. openlit/instrumentation/letta/__init__.py +7 -7
  60. openlit/instrumentation/letta/letta.py +5 -5
  61. openlit/instrumentation/litellm/__init__.py +5 -5
  62. openlit/instrumentation/litellm/async_litellm.py +8 -8
  63. openlit/instrumentation/litellm/litellm.py +8 -8
  64. openlit/instrumentation/llamaindex/__init__.py +2 -2
  65. openlit/instrumentation/llamaindex/llamaindex.py +2 -2
  66. openlit/instrumentation/mem0/__init__.py +2 -2
  67. openlit/instrumentation/mem0/mem0.py +2 -2
  68. openlit/instrumentation/milvus/__init__.py +2 -2
  69. openlit/instrumentation/milvus/milvus.py +2 -2
  70. openlit/instrumentation/mistral/__init__.py +7 -7
  71. openlit/instrumentation/mistral/async_mistral.py +10 -10
  72. openlit/instrumentation/mistral/mistral.py +10 -10
  73. openlit/instrumentation/multion/__init__.py +7 -7
  74. openlit/instrumentation/multion/async_multion.py +5 -5
  75. openlit/instrumentation/multion/multion.py +5 -5
  76. openlit/instrumentation/ollama/__init__.py +11 -9
  77. openlit/instrumentation/ollama/async_ollama.py +71 -465
  78. openlit/instrumentation/ollama/ollama.py +71 -465
  79. openlit/instrumentation/ollama/utils.py +333 -0
  80. openlit/instrumentation/openai/__init__.py +11 -11
  81. openlit/instrumentation/openai/async_openai.py +18 -18
  82. openlit/instrumentation/openai/openai.py +18 -18
  83. openlit/instrumentation/phidata/__init__.py +2 -2
  84. openlit/instrumentation/phidata/phidata.py +2 -2
  85. openlit/instrumentation/pinecone/__init__.py +6 -6
  86. openlit/instrumentation/pinecone/pinecone.py +2 -2
  87. openlit/instrumentation/premai/__init__.py +3 -3
  88. openlit/instrumentation/premai/premai.py +7 -7
  89. openlit/instrumentation/qdrant/__init__.py +2 -2
  90. openlit/instrumentation/qdrant/async_qdrant.py +2 -2
  91. openlit/instrumentation/qdrant/qdrant.py +2 -2
  92. openlit/instrumentation/reka/__init__.py +3 -3
  93. openlit/instrumentation/reka/async_reka.py +3 -3
  94. openlit/instrumentation/reka/reka.py +3 -3
  95. openlit/instrumentation/together/__init__.py +5 -5
  96. openlit/instrumentation/together/async_together.py +8 -8
  97. openlit/instrumentation/together/together.py +8 -8
  98. openlit/instrumentation/transformers/__init__.py +2 -2
  99. openlit/instrumentation/transformers/transformers.py +4 -4
  100. openlit/instrumentation/vertexai/__init__.py +9 -9
  101. openlit/instrumentation/vertexai/async_vertexai.py +4 -4
  102. openlit/instrumentation/vertexai/vertexai.py +4 -4
  103. openlit/instrumentation/vllm/__init__.py +2 -2
  104. openlit/instrumentation/vllm/vllm.py +3 -3
  105. openlit/otel/events.py +85 -0
  106. openlit/otel/tracing.py +3 -13
  107. openlit/semcov/__init__.py +13 -1
  108. {openlit-1.33.10.dist-info → openlit-1.33.11.dist-info}/METADATA +2 -2
  109. openlit-1.33.11.dist-info/RECORD +125 -0
  110. openlit-1.33.10.dist-info/RECORD +0 -122
  111. {openlit-1.33.10.dist-info → openlit-1.33.11.dist-info}/LICENSE +0 -0
  112. {openlit-1.33.10.dist-info → openlit-1.33.11.dist-info}/WHEEL +0 -0
@@ -22,7 +22,7 @@ from openlit.semcov import SemanticConvetion
22
22
  logger = logging.getLogger(__name__)
23
23
 
24
24
  def completion(version, environment, application_name,
25
- tracer, pricing_info, trace_content, metrics, disable_metrics):
25
+ tracer, pricing_info, capture_message_content, metrics, disable_metrics):
26
26
  """
27
27
  Generates a telemetry wrapper for chat completions to collect metrics.
28
28
 
@@ -32,7 +32,7 @@ def completion(version, environment, application_name,
32
32
  application_name: Name of the application using the Together AI API.
33
33
  tracer: OpenTelemetry tracer for creating spans.
34
34
  pricing_info: Information used for calculating the cost of Together AI usage.
35
- trace_content: Flag indicating whether to trace the actual content.
35
+ capture_message_content: Flag indicating whether to trace the actual content.
36
36
 
37
37
  Returns:
38
38
  A function that wraps the chat completions method to add telemetry.
@@ -218,7 +218,7 @@ def completion(version, environment, application_name,
218
218
  self._ttft)
219
219
  self._span.set_attribute(SemanticConvetion.GEN_AI_SDK_VERSION,
220
220
  version)
221
- if trace_content:
221
+ if capture_message_content:
222
222
  self._span.add_event(
223
223
  name=SemanticConvetion.GEN_AI_CONTENT_PROMPT_EVENT,
224
224
  attributes={
@@ -388,7 +388,7 @@ def completion(version, environment, application_name,
388
388
  end_time - start_time)
389
389
  span.set_attribute(SemanticConvetion.GEN_AI_SDK_VERSION,
390
390
  version)
391
- if trace_content:
391
+ if capture_message_content:
392
392
  span.add_event(
393
393
  name=SemanticConvetion.GEN_AI_CONTENT_PROMPT_EVENT,
394
394
  attributes={
@@ -399,7 +399,7 @@ def completion(version, environment, application_name,
399
399
  for i in range(kwargs.get('n',1)):
400
400
  span.set_attribute(SemanticConvetion.GEN_AI_RESPONSE_FINISH_REASON,
401
401
  [str(response_dict.get('choices')[i].get('finish_reason'))])
402
- if trace_content:
402
+ if capture_message_content:
403
403
  span.add_event(
404
404
  name=SemanticConvetion.GEN_AI_CONTENT_COMPLETION_EVENT,
405
405
  attributes={
@@ -459,7 +459,7 @@ def completion(version, environment, application_name,
459
459
  return wrapper
460
460
 
461
461
  def image_generate(version, environment, application_name,
462
- tracer, pricing_info, trace_content, metrics, disable_metrics):
462
+ tracer, pricing_info, capture_message_content, metrics, disable_metrics):
463
463
  """
464
464
  Generates a telemetry wrapper for image generation to collect metrics.
465
465
 
@@ -469,7 +469,7 @@ def image_generate(version, environment, application_name,
469
469
  application_name: Name of the application using the Together AI API.
470
470
  tracer: OpenTelemetry tracer for creating spans.
471
471
  pricing_info: Information used for calculating the cost of Together AI image generation.
472
- trace_content: Flag indicating whether to trace the input prompt and generated images.
472
+ capture_message_content: Flag indicating whether to trace the input prompt and generated images.
473
473
 
474
474
  Returns:
475
475
  A function that wraps the image generation method to add telemetry.
@@ -548,7 +548,7 @@ def image_generate(version, environment, application_name,
548
548
  span.set_attribute(SemanticConvetion.GEN_AI_SDK_VERSION,
549
549
  version)
550
550
 
551
- if trace_content:
551
+ if capture_message_content:
552
552
  span.add_event(
553
553
  name=SemanticConvetion.GEN_AI_CONTENT_PROMPT_EVENT,
554
554
  attributes={
@@ -21,7 +21,7 @@ class TransformersInstrumentor(BaseInstrumentor):
21
21
  tracer = kwargs.get("tracer")
22
22
  metrics = kwargs.get("metrics_dict")
23
23
  pricing_info = kwargs.get("pricing_info")
24
- trace_content = kwargs.get("trace_content")
24
+ capture_message_content = kwargs.get("capture_message_content")
25
25
  disable_metrics = kwargs.get("disable_metrics")
26
26
  version = importlib.metadata.version("transformers")
27
27
 
@@ -29,7 +29,7 @@ class TransformersInstrumentor(BaseInstrumentor):
29
29
  "transformers",
30
30
  "TextGenerationPipeline.__call__",
31
31
  text_wrap(version, environment, application_name,
32
- tracer, pricing_info, trace_content, metrics, disable_metrics),
32
+ tracer, pricing_info, capture_message_content, metrics, disable_metrics),
33
33
  )
34
34
 
35
35
  @staticmethod
@@ -19,7 +19,7 @@ from openlit.semcov import SemanticConvetion
19
19
  logger = logging.getLogger(__name__)
20
20
 
21
21
  def text_wrap(version, environment, application_name,
22
- tracer, pricing_info, trace_content, metrics, disable_metrics):
22
+ tracer, pricing_info, capture_message_content, metrics, disable_metrics):
23
23
  """
24
24
  Creates a wrapper around a function call to trace and log its execution metrics.
25
25
 
@@ -32,7 +32,7 @@ def text_wrap(version, environment, application_name,
32
32
  - application_name (str): Name of the Langchain application.
33
33
  - tracer (opentelemetry.trace.Tracer): The tracer object used for OpenTelemetry tracing.
34
34
  - pricing_info (dict): Information about the pricing for internal metrics (currently not used).
35
- - trace_content (bool): Flag indicating whether to trace the content of the response.
35
+ - capture_message_content (bool): Flag indicating whether to trace the content of the response.
36
36
 
37
37
  Returns:
38
38
  - function: A higher-order function that takes a function 'wrapped' and returns
@@ -113,7 +113,7 @@ def text_wrap(version, environment, application_name,
113
113
  end_time - start_time)
114
114
  span.set_attribute(SemanticConvetion.GEN_AI_SDK_VERSION,
115
115
  version)
116
- if trace_content:
116
+ if capture_message_content:
117
117
  span.add_event(
118
118
  name=SemanticConvetion.GEN_AI_CONTENT_PROMPT_EVENT,
119
119
  attributes={
@@ -128,7 +128,7 @@ def text_wrap(version, environment, application_name,
128
128
  attribute_name = f"gen_ai.content.completion.{i}"
129
129
  else:
130
130
  attribute_name = SemanticConvetion.GEN_AI_CONTENT_COMPLETION_EVENT
131
- if trace_content:
131
+ if capture_message_content:
132
132
  # pylint: disable=bare-except
133
133
  try:
134
134
  llm_response = completion.get('generated_text', '')
@@ -30,7 +30,7 @@ class VertexAIInstrumentor(BaseInstrumentor):
30
30
  tracer = kwargs.get("tracer")
31
31
  metrics = kwargs.get("metrics_dict")
32
32
  pricing_info = kwargs.get("pricing_info", {})
33
- trace_content = kwargs.get("trace_content", False)
33
+ capture_message_content = kwargs.get("capture_message_content", False)
34
34
  disable_metrics = kwargs.get("disable_metrics")
35
35
  version = importlib.metadata.version("google-cloud-aiplatform")
36
36
 
@@ -39,28 +39,28 @@ class VertexAIInstrumentor(BaseInstrumentor):
39
39
  "vertexai.generative_models",
40
40
  "GenerativeModel.generate_content",
41
41
  send_message(version, environment, application_name,
42
- tracer, pricing_info, trace_content, metrics, disable_metrics),
42
+ tracer, pricing_info, capture_message_content, metrics, disable_metrics),
43
43
  )
44
44
 
45
45
  wrap_function_wrapper(
46
46
  "vertexai.generative_models",
47
47
  "ChatSession.send_message",
48
48
  send_message(version, environment, application_name,
49
- tracer, pricing_info, trace_content, metrics, disable_metrics),
49
+ tracer, pricing_info, capture_message_content, metrics, disable_metrics),
50
50
  )
51
51
 
52
52
  wrap_function_wrapper(
53
53
  "vertexai.language_models",
54
54
  "ChatSession.send_message",
55
55
  send_message(version, environment, application_name,
56
- tracer, pricing_info, trace_content, metrics, disable_metrics),
56
+ tracer, pricing_info, capture_message_content, metrics, disable_metrics),
57
57
  )
58
58
 
59
59
  wrap_function_wrapper(
60
60
  "vertexai.language_models",
61
61
  "ChatSession.send_message_streaming",
62
62
  send_message(version, environment, application_name,
63
- tracer, pricing_info, trace_content, metrics, disable_metrics),
63
+ tracer, pricing_info, capture_message_content, metrics, disable_metrics),
64
64
  )
65
65
 
66
66
  #async
@@ -68,28 +68,28 @@ class VertexAIInstrumentor(BaseInstrumentor):
68
68
  "vertexai.generative_models",
69
69
  "GenerativeModel.generate_content_async",
70
70
  async_send_message(version, environment, application_name,
71
- tracer, pricing_info, trace_content, metrics, disable_metrics),
71
+ tracer, pricing_info, capture_message_content, metrics, disable_metrics),
72
72
  )
73
73
 
74
74
  wrap_function_wrapper(
75
75
  "vertexai.generative_models",
76
76
  "ChatSession.send_message_async",
77
77
  async_send_message(version, environment, application_name,
78
- tracer, pricing_info, trace_content, metrics, disable_metrics),
78
+ tracer, pricing_info, capture_message_content, metrics, disable_metrics),
79
79
  )
80
80
 
81
81
  wrap_function_wrapper(
82
82
  "vertexai.language_models",
83
83
  "ChatSession.send_message_async",
84
84
  async_send_message(version, environment, application_name,
85
- tracer, pricing_info, trace_content, metrics, disable_metrics),
85
+ tracer, pricing_info, capture_message_content, metrics, disable_metrics),
86
86
  )
87
87
 
88
88
  wrap_function_wrapper(
89
89
  "vertexai.language_models",
90
90
  "ChatSession.send_message_streaming_async",
91
91
  async_send_message(version, environment, application_name,
92
- tracer, pricing_info, trace_content, metrics, disable_metrics),
92
+ tracer, pricing_info, capture_message_content, metrics, disable_metrics),
93
93
  )
94
94
 
95
95
  def _uninstrument(self, **kwargs):
@@ -19,7 +19,7 @@ from openlit.semcov import SemanticConvetion
19
19
  logger = logging.getLogger(__name__)
20
20
 
21
21
  def async_send_message(version, environment, application_name, tracer,
22
- pricing_info, trace_content, metrics, disable_metrics):
22
+ pricing_info, capture_message_content, metrics, disable_metrics):
23
23
  """
24
24
  Generates a telemetry wrapper for messages to collect metrics.
25
25
 
@@ -29,7 +29,7 @@ def async_send_message(version, environment, application_name, tracer,
29
29
  application_name: Name of the application using the VertexAI API.
30
30
  tracer: OpenTelemetry tracer for creating spans.
31
31
  pricing_info: Information used for calculating the cost of VertexAI usage.
32
- trace_content: Flag indicating whether to trace the actual content.
32
+ capture_message_content: Flag indicating whether to trace the actual content.
33
33
 
34
34
  Returns:
35
35
  A function that wraps the chat method to add telemetry.
@@ -200,7 +200,7 @@ def async_send_message(version, environment, application_name, tracer,
200
200
  self._ttft)
201
201
  self._span.set_attribute(SemanticConvetion.GEN_AI_SDK_VERSION,
202
202
  version)
203
- if trace_content:
203
+ if capture_message_content:
204
204
  self._span.add_event(
205
205
  name=SemanticConvetion.GEN_AI_CONTENT_PROMPT_EVENT,
206
206
  attributes={
@@ -397,7 +397,7 @@ def async_send_message(version, environment, application_name, tracer,
397
397
  end_time - start_time)
398
398
  span.set_attribute(SemanticConvetion.GEN_AI_SDK_VERSION,
399
399
  version)
400
- if trace_content:
400
+ if capture_message_content:
401
401
  span.add_event(
402
402
  name=SemanticConvetion.GEN_AI_CONTENT_PROMPT_EVENT,
403
403
  attributes={
@@ -19,7 +19,7 @@ from openlit.semcov import SemanticConvetion
19
19
  logger = logging.getLogger(__name__)
20
20
 
21
21
  def send_message(version, environment, application_name, tracer,
22
- pricing_info, trace_content, metrics, disable_metrics):
22
+ pricing_info, capture_message_content, metrics, disable_metrics):
23
23
  """
24
24
  Generates a telemetry wrapper for messages to collect metrics.
25
25
 
@@ -29,7 +29,7 @@ def send_message(version, environment, application_name, tracer,
29
29
  application_name: Name of the application using the VertexAI API.
30
30
  tracer: OpenTelemetry tracer for creating spans.
31
31
  pricing_info: Information used for calculating the cost of VertexAI usage.
32
- trace_content: Flag indicating whether to trace the actual content.
32
+ capture_message_content: Flag indicating whether to trace the actual content.
33
33
 
34
34
  Returns:
35
35
  A function that wraps the chat method to add telemetry.
@@ -200,7 +200,7 @@ def send_message(version, environment, application_name, tracer,
200
200
  self._ttft)
201
201
  self._span.set_attribute(SemanticConvetion.GEN_AI_SDK_VERSION,
202
202
  version)
203
- if trace_content:
203
+ if capture_message_content:
204
204
  self._span.add_event(
205
205
  name=SemanticConvetion.GEN_AI_CONTENT_PROMPT_EVENT,
206
206
  attributes={
@@ -397,7 +397,7 @@ def send_message(version, environment, application_name, tracer,
397
397
  end_time - start_time)
398
398
  span.set_attribute(SemanticConvetion.GEN_AI_SDK_VERSION,
399
399
  version)
400
- if trace_content:
400
+ if capture_message_content:
401
401
  span.add_event(
402
402
  name=SemanticConvetion.GEN_AI_CONTENT_PROMPT_EVENT,
403
403
  attributes={
@@ -26,7 +26,7 @@ class VLLMInstrumentor(BaseInstrumentor):
26
26
  tracer = kwargs.get("tracer")
27
27
  metrics = kwargs.get("metrics_dict")
28
28
  pricing_info = kwargs.get("pricing_info", {})
29
- trace_content = kwargs.get("trace_content", False)
29
+ capture_message_content = kwargs.get("capture_message_content", False)
30
30
  disable_metrics = kwargs.get("disable_metrics")
31
31
  version = importlib.metadata.version("vllm")
32
32
 
@@ -35,7 +35,7 @@ class VLLMInstrumentor(BaseInstrumentor):
35
35
  "vllm",
36
36
  "LLM.generate",
37
37
  generate(version, environment, application_name,
38
- tracer, pricing_info, trace_content, metrics, disable_metrics),
38
+ tracer, pricing_info, capture_message_content, metrics, disable_metrics),
39
39
  )
40
40
 
41
41
  def _uninstrument(self, **kwargs):
@@ -19,7 +19,7 @@ from openlit.semcov import SemanticConvetion
19
19
  logger = logging.getLogger(__name__)
20
20
 
21
21
  def generate(version, environment, application_name,
22
- tracer, pricing_info, trace_content, metrics, disable_metrics):
22
+ tracer, pricing_info, capture_message_content, metrics, disable_metrics):
23
23
  """
24
24
  Generates a telemetry wrapper for generate to collect metrics.
25
25
 
@@ -29,7 +29,7 @@ def generate(version, environment, application_name,
29
29
  application_name: Name of the application using the vLLM API.
30
30
  tracer: OpenTelemetry tracer for creating spans.
31
31
  pricing_info: Information used for calculating the cost of vLLM usage.
32
- trace_content: Flag indicating whether to trace the actual content.
32
+ capture_message_content: Flag indicating whether to trace the actual content.
33
33
 
34
34
  Returns:
35
35
  A function that wraps the generate method to add telemetry.
@@ -97,7 +97,7 @@ def generate(version, environment, application_name,
97
97
  output_tokens = 0
98
98
  cost = 0
99
99
 
100
- if trace_content:
100
+ if capture_message_content:
101
101
  prompt_attributes = {}
102
102
  completion_attributes = {}
103
103
 
openlit/otel/events.py ADDED
@@ -0,0 +1,85 @@
1
+ """
2
+ Setups up OpenTelemetry events emitter
3
+ """
4
+
5
+ import os
6
+ from opentelemetry import _events, _logs
7
+ from opentelemetry.sdk.resources import SERVICE_NAME, TELEMETRY_SDK_NAME, DEPLOYMENT_ENVIRONMENT
8
+ from opentelemetry.sdk.resources import Resource
9
+ from opentelemetry.sdk._events import EventLoggerProvider
10
+ from opentelemetry.sdk._logs.export import BatchLogRecordProcessor, SimpleLogRecordProcessor
11
+ from opentelemetry.sdk._logs import LoggerProvider
12
+ from opentelemetry.sdk._logs.export import ConsoleLogExporter
13
+
14
+ if os.environ.get("OTEL_EXPORTER_OTLP_PROTOCOL") == "grpc":
15
+ from opentelemetry.exporter.otlp.proto.grpc._log_exporter import OTLPLogExporter
16
+ else:
17
+ from opentelemetry.exporter.otlp.proto.http._log_exporter import OTLPLogExporter
18
+
19
+ # Global flag to check if the events provider initialization is complete.
20
+ EVENTS_SET = False
21
+
22
+ def setup_events(application_name, environment, event_logger, otlp_endpoint, otlp_headers, disable_batch):
23
+ """Setup OpenTelemetry events with the given configuration.
24
+
25
+ Args:
26
+ application_name: Name of the application
27
+ environment: Deployment environment
28
+ event_logger: Optional pre-configured event logger provider
29
+ otlp_endpoint: Optional OTLP endpoint for exporter
30
+ otlp_headers: Optional headers for OTLP exporter
31
+
32
+ Returns:
33
+ EventLoggerProvider: The configured event logger provider
34
+ """
35
+ # If an external events_logger is provided, return it immediately.
36
+ if event_logger:
37
+ return event_logger
38
+
39
+ # Proceed with setting up a new events or configuration only if EVENTS_SET is False.
40
+ global EVENTS_SET
41
+
42
+ try:
43
+ if not EVENTS_SET:
44
+ # Create resource with service and environment information
45
+ resource = Resource.create(attributes={
46
+ SERVICE_NAME: application_name,
47
+ DEPLOYMENT_ENVIRONMENT: environment,
48
+ TELEMETRY_SDK_NAME: "openlit"}
49
+ )
50
+
51
+ # Initialize the LoggerProvider with the created resource.
52
+ logger_provider = LoggerProvider(resource=resource)
53
+
54
+ # Only set environment variables if you have a non-None value.
55
+ if otlp_endpoint is not None:
56
+ os.environ["OTEL_EXPORTER_OTLP_ENDPOINT"] = otlp_endpoint
57
+
58
+ if otlp_headers is not None:
59
+ if isinstance(otlp_headers, dict):
60
+ headers_str = ','.join(f"{key}={value}" for key, value in otlp_headers.items())
61
+ else:
62
+ headers_str = otlp_headers
63
+
64
+ os.environ["OTEL_EXPORTER_OTLP_HEADERS"] = headers_str
65
+
66
+ # Configure the span exporter and processor based on whether the endpoint is effectively set.
67
+ if os.getenv("OTEL_EXPORTER_OTLP_ENDPOINT"):
68
+ event_exporter = OTLPLogExporter()
69
+ # pylint: disable=line-too-long
70
+ logger_provider.add_log_record_processor(SimpleLogRecordProcessor(event_exporter)) if disable_batch else logger_provider.add_log_record_processor(BatchLogRecordProcessor(event_exporter))
71
+ else:
72
+ event_exporter = ConsoleLogExporter()
73
+ logger_provider.add_log_record_processor(SimpleLogRecordProcessor(event_exporter))
74
+
75
+ _logs.set_logger_provider(logger_provider)
76
+ event_provider = EventLoggerProvider()
77
+ _events.set_event_logger_provider(event_provider)
78
+
79
+ EVENTS_SET = True
80
+
81
+ return _events.get_event_logger(__name__)
82
+
83
+ # pylint: disable=bare-except
84
+ except:
85
+ return None
openlit/otel/tracing.py CHANGED
@@ -1,4 +1,3 @@
1
- # pylint: disable=duplicate-code, line-too-long, ungrouped-imports
2
1
  """
3
2
  Setups up OpenTelemetry tracer
4
3
  """
@@ -21,17 +20,8 @@ TRACER_SET = False
21
20
 
22
21
  def setup_tracing(application_name, environment, tracer, otlp_endpoint, otlp_headers, disable_batch):
23
22
  """
24
- Sets up tracing with OpenTelemetry. Initializes the tracer provider and configures the span processor and exporter.
25
-
26
- Params:
27
- application_name (str): The name of the application to be used in traces.
28
- tracer (Tracer): Optional custom tracer. If provided, it is immediately returned and no setup is performed.
29
- otlp_endpoint (str): The OTLP exporter endpoint. Falls back to the OTEL_EXPORTER_OTLP_ENDPOINT environment variable if not specified.
30
- otlp_headers (dict): Headers for the OTLP request. Falls back to the OTEL_EXPORTER_OTLP_HEADERS environment variable if not specified.
31
- disable_batch (bool): Flag to disable the batch span processor in favor of a simpler processor for exporting.
32
-
33
- Returns:
34
- The provided custom tracer if not None; otherwise, a tracer instance configured according to the given parameters or environment variables.
23
+ Sets up tracing with OpenTelemetry.
24
+ Initializes the tracer provider and configures the span processor and exporter.
35
25
  """
36
26
 
37
27
  # If an external tracer is provided, return it immediately.
@@ -72,7 +62,7 @@ def setup_tracing(application_name, environment, tracer, otlp_endpoint, otlp_hea
72
62
  # Configure the span exporter and processor based on whether the endpoint is effectively set.
73
63
  if os.getenv("OTEL_EXPORTER_OTLP_ENDPOINT"):
74
64
  span_exporter = OTLPSpanExporter()
75
-
65
+ # pylint: disable=line-too-long
76
66
  span_processor = BatchSpanProcessor(span_exporter) if not disable_batch else SimpleSpanProcessor(span_exporter)
77
67
  else:
78
68
  span_exporter = ConsoleSpanExporter()
@@ -28,6 +28,13 @@ class SemanticConvetion:
28
28
  GEN_AI_SERVER_TBT = "gen_ai.server.time_per_output_token"
29
29
  GEN_AI_SERVER_TTFT = "gen_ai.server.time_to_first_token"
30
30
 
31
+ # GenAI Event Names (OTel Semconv)
32
+ GEN_AI_USER_MESSAGE = "gen_ai.user.message"
33
+ GEN_AI_SYSTEM_MESSAGE = "gen_ai.system.message"
34
+ GEN_AI_ASSISTANT_MESSAGE = "gen_ai.assistant.message"
35
+ GEN_AI_TOOL_MESSAGE = "gen_ai.tools.message"
36
+ GEN_AI_CHOICE = "gen_ai.choice"
37
+
31
38
  # GenAI Request Attributes (OTel Semconv)
32
39
  GEN_AI_OPERATION = "gen_ai.operation.name"
33
40
  GEN_AI_SYSTEM = "gen_ai.system"
@@ -64,6 +71,7 @@ class SemanticConvetion:
64
71
  GEN_AI_OPERATION_TYPE_FRAMEWORK = "framework"
65
72
  GEN_AI_OPERATION_TYPE_AGENT = "agent"
66
73
  GEN_AI_OPERATION_TYPE_CREATE_AGENT = "create_agent"
74
+ GEN_AI_OPERATION_TYPE_EXECUTE_AGENT_TASK = "execute_task"
67
75
 
68
76
  # GenAI Output Types (OTel Semconv)
69
77
  GEN_AI_OUTPUT_TYPE_IMAGE = "image"
@@ -221,8 +229,12 @@ class SemanticConvetion:
221
229
  DB_SYSTEM_MILVUS = "milvus"
222
230
  DB_SYSTEM_ASTRA = "astra"
223
231
 
224
- # Agents
232
+ # GenAI Request Attributes (OTel Semconv)
225
233
  GEN_AI_AGENT_ID = "gen_ai.agent.id"
234
+ GEN_AI_AGENT_NAME = "gen_ai.agent.name"
235
+ GEN_AI_AGENT_DESCRIPTION = "gen_ai.agent.description"
236
+
237
+
226
238
  GEN_AI_AGENT_TYPE = "gen_ai.agent.type"
227
239
  GEN_AI_AGENT_TASK_ID = "gen_ai.agent.task.id"
228
240
  GEN_AI_AGENT_ROLE = "gen_ai.agent.role"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: openlit
3
- Version: 1.33.10
3
+ Version: 1.33.11
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
  License: Apache-2.0
6
6
  Keywords: OpenTelemetry,otel,otlp,llm,tracing,openai,anthropic,claude,cohere,llm monitoring,observability,monitoring,gpt,Generative AI,chatGPT,gpu
@@ -220,7 +220,7 @@ Below is a detailed overview of the configuration options available, allowing yo
220
220
  | `otlp_endpoint` | Specifies the OTLP endpoint for transmitting telemetry data. | `None` | No |
221
221
  | `otlp_headers` | Defines headers for the OTLP exporter, useful for backends requiring authentication. | `None` | No |
222
222
  | `disable_batch` | A flag to disable batch span processing, favoring immediate dispatch. | `False` | No |
223
- | `trace_content` | Enables tracing of content for deeper insights. | `True` | No |
223
+ | `capture_message_content` | Enables tracing of content for deeper insights. | `True` | No |
224
224
  | `disabled_instrumentors`| List of instrumentors to disable. | `None` | No |
225
225
  | `disable_metrics` | If set, disables the collection of metrics. | `False` | No |
226
226
  | `pricing_json` | URL or file path of the pricing JSON file. | `https://github.com/openlit/openlit/blob/main/assets/pricing.json` | No |
@@ -0,0 +1,125 @@
1
+ openlit/__helpers.py,sha256=mu3guF9gH4GEkXhKj3ufhqKo-oitkENY-gXGTqFpdEQ,12281
2
+ openlit/__init__.py,sha256=87uE_wi6YF2FKkmVy0VLmRKeNMuJ9e6XrycIbad9T6A,23755
3
+ openlit/evals/__init__.py,sha256=nJe99nuLo1b5rf7pt9U9BCdSDedzbVi2Fj96cgl7msM,380
4
+ openlit/evals/all.py,sha256=oWrue3PotE-rB5WePG3MRYSA-ro6WivkclSHjYlAqGs,7154
5
+ openlit/evals/bias_detection.py,sha256=mCdsfK7x1vX7S3psC3g641IMlZ-7df3h-V6eiICj5N8,8154
6
+ openlit/evals/hallucination.py,sha256=Yn5OfWVJKynAiImV_aAqCvc0zqYjdJ3XUppCnMTy1pg,7507
7
+ openlit/evals/toxicity.py,sha256=Ii_kX2GToO9fDstDBuK4iN0tEQUkMoPWUBDMFFfeMC4,7000
8
+ openlit/evals/utils.py,sha256=lXgxyh1OZHeQzlzTLBAEnIYVaUt0YqYA6Uaygjpbv0s,8472
9
+ openlit/guard/__init__.py,sha256=B-D7iPadGFn5i7nEsQfVbS6feL1ViRht3zWTQ45Jgkg,417
10
+ openlit/guard/all.py,sha256=VNHQERad-4qAMWsJJrpW9QNkhM7U8v_wy20KtDtQgzM,9755
11
+ openlit/guard/prompt_injection.py,sha256=3e4DKxB7QDzM-xPCpwEuureiH_2s_OTJ9BSckknPpzY,5784
12
+ openlit/guard/restrict_topic.py,sha256=KTuWa7XeMsV4oXxOrD1CYZV0wXWxTfA0H3p_6q_IOsk,6444
13
+ openlit/guard/sensitive_topic.py,sha256=RgVw_laFERv0nNdzBsAd2_3yLomMOK-gVq-P7oj1bTk,5552
14
+ openlit/guard/utils.py,sha256=x0-_hAtNa_ogYR2GfnwiBF1rlqaXtaJ-rJeGguTDe-Q,7663
15
+ openlit/instrumentation/ag2/__init__.py,sha256=3CTrFvM4PyD8fdg456CNKHz4uMYUf2PVsp_L-3ovSHs,1839
16
+ openlit/instrumentation/ag2/ag2.py,sha256=o6wuvcUbboK2__RRpfmAqJ6w-1mjW5YHiaTI8xV5S_o,6908
17
+ openlit/instrumentation/ai21/__init__.py,sha256=uEAd9wWjEc9aR3IRAGciJqLD50eqvpnL6aTcZqQQIWg,2727
18
+ openlit/instrumentation/ai21/ai21.py,sha256=VmChUo-5V6qn2h4cxLPGPfEZhuYazcUj7dIfHWzapFI,6869
19
+ openlit/instrumentation/ai21/async_ai21.py,sha256=G7AesXLU4rB1t-KJsiZ65aCF71c4LRpAhday2tvF9dk,6973
20
+ openlit/instrumentation/ai21/utils.py,sha256=75Yy1Bi0qi1EqRsvxbiEo0qgoWr2w_UAVkPPCWlDVV0,19566
21
+ openlit/instrumentation/anthropic/__init__.py,sha256=d0NVazGdZRQ-cI0SRErP5OAoe1mUY9q0xhD9WqEUPFQ,1927
22
+ openlit/instrumentation/anthropic/anthropic.py,sha256=bpxHFyfCa50GgNUIWkghwcQ3vK7pEUhPv1NFPhvoaEI,22372
23
+ openlit/instrumentation/anthropic/async_anthropic.py,sha256=6EzI3SM7dqEfCD3vZgyOGHcMOyeBrEoE7VwOI5O-A8s,22458
24
+ openlit/instrumentation/assemblyai/__init__.py,sha256=AS6tEzcyEG7RP6bNDW_Kf4_rN-u-O1BNjJ3khX3AEUs,1565
25
+ openlit/instrumentation/assemblyai/assemblyai.py,sha256=18AQ7wrigCZd9RXwNZ36mn9fc3M3p2WkAHlT_sD5M3c,6292
26
+ openlit/instrumentation/astra/__init__.py,sha256=mEHT_p4q3bl9IiXAFqutGEvw37k6CCuWbmlI9Gx3xKY,8314
27
+ openlit/instrumentation/astra/astra.py,sha256=BHU2iaM8ihDfdyXZQZ3Hdv0sfciSOS1QEsqrLPNGnAk,12081
28
+ openlit/instrumentation/astra/async_astra.py,sha256=rlZeU5eIM_onR7rSxMRO0VSZL_p1eLpsU7nabTgBVlo,12093
29
+ openlit/instrumentation/azure_ai_inference/__init__.py,sha256=H4x-9lyEwen2Bk_Dltpd7z8RGOk1hltjjbuJBXq35HQ,2681
30
+ openlit/instrumentation/azure_ai_inference/async_azure_ai_inference.py,sha256=xI0GDqKmsbSp58IHalpNvEapM_h65oGYDbe24UVyXqg,29974
31
+ openlit/instrumentation/azure_ai_inference/azure_ai_inference.py,sha256=dgQ8GuSO-j0J6K77tcwK0mZSK3JnIdmT60kjwAV1dt8,29870
32
+ openlit/instrumentation/bedrock/__init__.py,sha256=ZdCBjgwK92cclnbFfF90NC6AsRreom3nT3CklbM7EmM,1555
33
+ openlit/instrumentation/bedrock/bedrock.py,sha256=jBDzm005Y9rbcTLxo-yShOtRb65NCDFyUYtggi0XRF0,12264
34
+ openlit/instrumentation/chroma/__init__.py,sha256=4ZeHY1OInRKQbb4qg8BVvGJtWN1XdzW6mosqi7-6ruE,3353
35
+ openlit/instrumentation/chroma/chroma.py,sha256=RGgRVpHdIdxBIZSa9FdaUUEmNOSV84jGkuucC75LdwY,10533
36
+ openlit/instrumentation/cohere/__init__.py,sha256=TIRq1obu-zqBji0HhMbFGfI2q5m-zw0nWbToKeZqpg4,2905
37
+ openlit/instrumentation/cohere/async_cohere.py,sha256=OhhDrQNr6Kc3iNx1oG2FK9WphtDCi1Rdcq0vxowKB1M,30657
38
+ openlit/instrumentation/cohere/cohere.py,sha256=e_GIwa1wrwWaU62wRYjg5veAFSiildWA9gtDOD-mNek,30540
39
+ openlit/instrumentation/controlflow/__init__.py,sha256=Y5xSj6bwkGufG989YtRGujzj8qrV4T5kXr4hzGb2nGk,2168
40
+ openlit/instrumentation/controlflow/controlflow.py,sha256=uWnCRa9nIVgfTpN3_Fc0PSW_3iGeqsoPj-QZ3NW35lg,5558
41
+ openlit/instrumentation/crawl4ai/__init__.py,sha256=TTFFeZkTgPZJAD1Tlr2LK-CTH2A7NkZK-5SHKFfFOtU,1947
42
+ openlit/instrumentation/crawl4ai/async_crawl4ai.py,sha256=TC3Pz4UGsLtPrpKgtHerET1W96p4sJUJ0YPbGdqITAs,4879
43
+ openlit/instrumentation/crawl4ai/crawl4ai.py,sha256=sQ5rL4QSorlBK37Y80vxIIbnMCaq91XWOYj9UEN_cow,4861
44
+ openlit/instrumentation/crewai/__init__.py,sha256=Yh-evzhxG-x3E2oRf71S1NIx_36JGu4TeIqFl1-2H5w,1834
45
+ openlit/instrumentation/crewai/crewai.py,sha256=1HBF04j-WZR5dxZCeFyaq3viaX8GsRR3wotW9wRzgOA,7201
46
+ openlit/instrumentation/dynamiq/__init__.py,sha256=LuIYSQpQH5Pk5Ngl_3Jy3bImGjZgh61La6sbVJfC1Io,2391
47
+ openlit/instrumentation/dynamiq/dynamiq.py,sha256=QKR-O6NupKaXyOAjOrON0V55mQrrY6lZfEUIj7yJGp4,5280
48
+ openlit/instrumentation/elevenlabs/__init__.py,sha256=LNbHWxnkq3ZPOnXKP01Wo0ger-YwC0G2rNzquivYMGQ,2691
49
+ openlit/instrumentation/elevenlabs/async_elevenlabs.py,sha256=eEr-0SIz28JhvJc4zYlcN9o9kNHoUskYVVd8RYclHWM,6822
50
+ openlit/instrumentation/elevenlabs/elevenlabs.py,sha256=5L1mpOYt8zRx5GWC5DzFMmKKE1zFVLKhvl9FNp__NcM,6805
51
+ openlit/instrumentation/embedchain/__init__.py,sha256=x2_qvJTwWog_mH6IY987Bp9mWxHtasqX2nZ3rwA7mb4,1959
52
+ openlit/instrumentation/embedchain/embedchain.py,sha256=CE5AdyQ1j4GhqPXfetTtk8KLS2z0Ul8INcLl5kDBboo,7914
53
+ openlit/instrumentation/firecrawl/__init__.py,sha256=kyVsAiDBC2djifqT2w1cPRAotiEyEabNvnBeSQxi9N8,1876
54
+ openlit/instrumentation/firecrawl/firecrawl.py,sha256=iltF8Qqexz8eL4QddJ5SEYC9fnL9snUWbE1z-bEljGA,3816
55
+ openlit/instrumentation/google_ai_studio/__init__.py,sha256=qKWyN5_BQyRnb0XG-v864Pe8t3OXa0ARYNVeE8mxgSE,2049
56
+ openlit/instrumentation/google_ai_studio/async_google_ai_studio.py,sha256=KsK9T7mLJF1RsW4S5iSOZjzZgLhwD27A5LYe6Dk1JeQ,11036
57
+ openlit/instrumentation/google_ai_studio/google_ai_studio.py,sha256=Q5neTYRDZ692JvABNmLZrSfBusKRHPGrnfO67OUv5sQ,11018
58
+ openlit/instrumentation/gpt4all/__init__.py,sha256=cO8mi3hhPDXcNwb9AwQ3-wQ_ydnOeBRwb0cptlQmAM4,1805
59
+ openlit/instrumentation/gpt4all/gpt4all.py,sha256=Ihzn8vj6uJXn_7Re2tm_VYfiGq-4MUI2MCObU6TaSHs,24107
60
+ openlit/instrumentation/gpu/__init__.py,sha256=flcKWN18lqrSiuqsQAGM7x7gPUr5YuZNSPlrocC1zcE,11028
61
+ openlit/instrumentation/groq/__init__.py,sha256=RszPvlPMD1j_uRu9MweyO_F_BRIqEExuB6sVQB2py4o,1901
62
+ openlit/instrumentation/groq/async_groq.py,sha256=ruBpy5amPZIG4as4s13-4X4B2PzthfzndCy1oyZ8TrM,24696
63
+ openlit/instrumentation/groq/groq.py,sha256=n8_UHC2mJlPHc6KFogDDt1gFhWPa5jAcZznr7nI-_xY,24610
64
+ openlit/instrumentation/haystack/__init__.py,sha256=jZPAXRilKTD1vww_4_K4jhYWNrMXngcs5pI29NTnFvI,1788
65
+ openlit/instrumentation/haystack/haystack.py,sha256=83Dbu6WdtpNXOZbzy8w46FWkfHmFB-fQQFtgkJ80pPI,3921
66
+ openlit/instrumentation/julep/__init__.py,sha256=g-hwXjvXAb5IDs5DR_P8rKsnD4beB9tupAzuuviQT3k,3216
67
+ openlit/instrumentation/julep/async_julep.py,sha256=URZQsxXEaQ4nHmOTeM1tsADRp4xQSe2-4BfCWVwGWDw,5313
68
+ openlit/instrumentation/julep/julep.py,sha256=0bGlsdW32JGu1fEdsfc-MDbOqqbcCrlkl-ojE98Zqys,5316
69
+ openlit/instrumentation/langchain/__init__.py,sha256=cNlumZ8fwLMlGVFMjNEndOIzooD4FQEOINX9tGVksII,3853
70
+ openlit/instrumentation/langchain/async_langchain.py,sha256=u_f7FZThF9VdsOPBlh8W6aytUUTRt9d5z2KD1zbz4UI,18302
71
+ openlit/instrumentation/langchain/langchain.py,sha256=cba9_cIDw652XGmdDXd35zRtoCqa6jQqO274MlPOxKw,18248
72
+ openlit/instrumentation/letta/__init__.py,sha256=K8PtRKxuueyqEYE3LzxWJ74IieNKSI6dmk9sNRd8Mt0,3031
73
+ openlit/instrumentation/letta/letta.py,sha256=y8yZWGtY6lDv4sA2UlUTZjktXxUOYyXatwz_yso-akA,8455
74
+ openlit/instrumentation/litellm/__init__.py,sha256=qRqfwDMhP5adKGI2vRaelAkN12i0e8jtJrT31VFFM5A,2374
75
+ openlit/instrumentation/litellm/async_litellm.py,sha256=BKUdGeJRV0J7ezsYkpVilPUcupcngIJIhEbO93RVTQs,30408
76
+ openlit/instrumentation/litellm/litellm.py,sha256=r6vdeWHiw9BvMXhQdnRxNrhBEYe7bBcHBXa8tpHLgUk,30314
77
+ openlit/instrumentation/llamaindex/__init__.py,sha256=2pmd9BKw3ab0OJ4yuJEg0-Jkn_haDbXvbUm5r2-rOCU,2007
78
+ openlit/instrumentation/llamaindex/llamaindex.py,sha256=MWPM_R1tAaEekMagCwMKpV87ATMNi3VLPbIPj3yMFp4,4078
79
+ openlit/instrumentation/mem0/__init__.py,sha256=IadP3bKgz2HCbnrh9S7AW24uDauGkzsIWeOQaGkOCc4,2447
80
+ openlit/instrumentation/mem0/mem0.py,sha256=ZKMU9W2n_mlWhmiQkGMrwR8OqAZuek6tRbdCDyakDIU,5335
81
+ openlit/instrumentation/milvus/__init__.py,sha256=qQqI-mOXEIsXGYwLyUGLEECcIHCm_6_KQZq0vFL90LY,2991
82
+ openlit/instrumentation/milvus/milvus.py,sha256=4unbncKnGLIAhudJMcxbd1ZmkzvBxLNNCwmHTV6sWkI,9123
83
+ openlit/instrumentation/mistral/__init__.py,sha256=5hh5s2-kudMbfkWD6Lhe5IQvrlZ5qA-Sv3laeXwyaPA,3060
84
+ openlit/instrumentation/mistral/async_mistral.py,sha256=8EDNnLHKei8vdlw4SeOpl6hiYSo7t2M2IlF0EwAvoaM,31099
85
+ openlit/instrumentation/mistral/mistral.py,sha256=U3X2DplgJwULmAtNzy6ZnxvXOI0Rv75PbPiHPi84hh4,30995
86
+ openlit/instrumentation/multion/__init__.py,sha256=Wr3lcDyG_YbOLkCUzBFhraAedF6E113tce8eSWlcz10,3149
87
+ openlit/instrumentation/multion/async_multion.py,sha256=HKp73QOMXxYuou4-S-9WAq3Jigm2Cvc_AysQ8v7loEw,6071
88
+ openlit/instrumentation/multion/multion.py,sha256=SrO25cv7dob1H4r00MsAa13Bj-WNsEwOeCoVfaCxeK8,6053
89
+ openlit/instrumentation/ollama/__init__.py,sha256=JjxSqEegmRoRqIVz7ZAq9dLyXPZ2DqV2wGmgXCENNpw,3004
90
+ openlit/instrumentation/ollama/async_ollama.py,sha256=LhDQPy3wLyNO9JWksUEeCx-DK9oIV3K98Cgwnp4RfKg,6538
91
+ openlit/instrumentation/ollama/ollama.py,sha256=wVyaX0quoiiCj1J3tyTiQx5Du5CmaWmt9e_lpCr7s6A,6434
92
+ openlit/instrumentation/ollama/utils.py,sha256=4QrOtBHHxfDY0iZbymk149-fGwv8rvmqGQOJD73t5LY,14582
93
+ openlit/instrumentation/openai/__init__.py,sha256=dfgMBHd2wAT24uckVBBqTy7pzN34ESzeymKzkUy6t58,4893
94
+ openlit/instrumentation/openai/async_openai.py,sha256=8-I6SMT1bFxNGLf2GW1Yfpny-lCvIcR5coKvytKL_yE,50635
95
+ openlit/instrumentation/openai/openai.py,sha256=t1-9KY1CCqeRno2_gXd3PxFkWm1ySwFweno4st2T3bE,50469
96
+ openlit/instrumentation/phidata/__init__.py,sha256=tqls5-UI6FzbjxYgq_qqAfALhWJm8dHn2NtgqiQA4f8,1557
97
+ openlit/instrumentation/phidata/phidata.py,sha256=-BU_g3FpGcttOt-W-QIER5qquCRORob2UFLdaOW3F_s,4819
98
+ openlit/instrumentation/pinecone/__init__.py,sha256=0guSEPmObaZiOF8yHExpOGY-qW_egHXfZGog3rKGi8M,2596
99
+ openlit/instrumentation/pinecone/pinecone.py,sha256=KtiBqh7QA9_-S8Daj2GsEByy5eLB_Uji-EAbPU4q1T4,8767
100
+ openlit/instrumentation/premai/__init__.py,sha256=uyw3sn5iHuO1Clg7iLs6LYpOWg1ahJp_orb2tySshZE,1836
101
+ openlit/instrumentation/premai/premai.py,sha256=rK039lmhuCLNgOB5Ap_Negz18mth6nrRlzwn1eX457g,27960
102
+ openlit/instrumentation/qdrant/__init__.py,sha256=5prYH46yQt2hSA5zgg7kKM6P_F_7s9OQtfRE_lqsaVc,8970
103
+ openlit/instrumentation/qdrant/async_qdrant.py,sha256=3IMiOt4X6C4JeXgnvpGFY5adyiEu07FJWmYipEk1wRc,15073
104
+ openlit/instrumentation/qdrant/qdrant.py,sha256=KAPvjmUMQO7SAL6seNX54Q_zSUKEEdTt1xoLHJ32NVU,15490
105
+ openlit/instrumentation/reka/__init__.py,sha256=39ZKj44PPUue8feG3bivAejfL66yD23pCJQ8hHnQKbY,1884
106
+ openlit/instrumentation/reka/async_reka.py,sha256=3ZBOlOtcAbyzE1A0XRUxdqxQr-sStrRiyaoUop7rqRc,9413
107
+ openlit/instrumentation/reka/reka.py,sha256=EkOrmAa9quIhmPcA-BcHfiGSXN93wWh_87aH9pYyULk,9395
108
+ openlit/instrumentation/together/__init__.py,sha256=MLLL2t8FyrytpfMueqcwekiqTKn-JN40HBD_LbZS_jQ,2661
109
+ openlit/instrumentation/together/async_together.py,sha256=MLfLI347GjPuT0JP51v-Zo-K7Iqg9ME6QCbmzDgjxpY,30544
110
+ openlit/instrumentation/together/together.py,sha256=D5xRFlgHtv0gszkOXOHcXVjGtrh8OVuqU9JbDgm0zI4,30440
111
+ openlit/instrumentation/transformers/__init__.py,sha256=f-kWX6_VdiOXqDa64iK6oJyYF3xkHuKxIBPTll-W7Lw,1467
112
+ openlit/instrumentation/transformers/transformers.py,sha256=gJpOiDZ76XRqgfOSLnFgLvmwzXAXBpOzSUtiU-nt_3g,9148
113
+ openlit/instrumentation/vertexai/__init__.py,sha256=mT28WCBvQfRCkAWGL6bd0EjEPHvMjaNcz6T3jsLZh8k,3745
114
+ openlit/instrumentation/vertexai/async_vertexai.py,sha256=BNnVQS_4tXWXAknonBmWBCN8rkoBKIr_RW0rwnlJTCI,23022
115
+ openlit/instrumentation/vertexai/vertexai.py,sha256=-wrsYOpFxHOikT4lsBHG58r0Aa_e0NU-j_pWrvW3TQ8,22936
116
+ openlit/instrumentation/vllm/__init__.py,sha256=8Su4DEpxdT2wr4Qr17heakzoGSbuq6ey1MmSVR_vbOA,1508
117
+ openlit/instrumentation/vllm/vllm.py,sha256=MD02lonL6QP0GYUF9sZx-ZC0R-je442ufiE1bH5dNeU,7754
118
+ openlit/otel/events.py,sha256=VrMjTpvnLtYRBHCiFwJojTQqqNpRCxoD4yJYeQrtPsk,3560
119
+ openlit/otel/metrics.py,sha256=URL7gzQbnxaNQJSX7oHRa15v6xi1GFmANn-5uFNL-aY,6378
120
+ openlit/otel/tracing.py,sha256=tjV2bEbEDPUB1Z46gE-UsJsb04sRdFrfbhIDkxViZc0,3103
121
+ openlit/semcov/__init__.py,sha256=kUd-ZSmXkXBo-osVve4ce_XEgr0fgEN7nXxoNm7kfEQ,12798
122
+ openlit-1.33.11.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
123
+ openlit-1.33.11.dist-info/METADATA,sha256=61sZfrJudmaPtlHZeZF0a5uCx0P41aBenq-2-Rqmlak,23512
124
+ openlit-1.33.11.dist-info/WHEEL,sha256=XbeZDeTWKc1w7CSIyre5aMDU_-PohRwTQceYnisIYYY,88
125
+ openlit-1.33.11.dist-info/RECORD,,