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.
- openlit/__helpers.py +73 -0
- openlit/__init__.py +38 -11
- openlit/instrumentation/ag2/__init__.py +9 -10
- openlit/instrumentation/ag2/ag2.py +133 -68
- openlit/instrumentation/ai21/__init__.py +6 -5
- openlit/instrumentation/ai21/ai21.py +71 -534
- openlit/instrumentation/ai21/async_ai21.py +71 -534
- openlit/instrumentation/ai21/utils.py +407 -0
- openlit/instrumentation/anthropic/__init__.py +3 -3
- openlit/instrumentation/anthropic/anthropic.py +4 -4
- openlit/instrumentation/anthropic/async_anthropic.py +4 -4
- openlit/instrumentation/assemblyai/__init__.py +2 -2
- openlit/instrumentation/assemblyai/assemblyai.py +3 -3
- openlit/instrumentation/astra/__init__.py +25 -25
- openlit/instrumentation/astra/astra.py +2 -2
- openlit/instrumentation/astra/async_astra.py +2 -2
- openlit/instrumentation/azure_ai_inference/__init__.py +5 -5
- openlit/instrumentation/azure_ai_inference/async_azure_ai_inference.py +8 -8
- openlit/instrumentation/azure_ai_inference/azure_ai_inference.py +8 -8
- openlit/instrumentation/bedrock/__init__.py +2 -2
- openlit/instrumentation/bedrock/bedrock.py +3 -3
- openlit/instrumentation/chroma/__init__.py +9 -9
- openlit/instrumentation/chroma/chroma.py +2 -2
- openlit/instrumentation/cohere/__init__.py +7 -7
- openlit/instrumentation/cohere/async_cohere.py +9 -9
- openlit/instrumentation/cohere/cohere.py +9 -9
- openlit/instrumentation/controlflow/__init__.py +4 -4
- openlit/instrumentation/controlflow/controlflow.py +2 -2
- openlit/instrumentation/crawl4ai/__init__.py +3 -3
- openlit/instrumentation/crawl4ai/async_crawl4ai.py +2 -2
- openlit/instrumentation/crawl4ai/crawl4ai.py +2 -2
- openlit/instrumentation/crewai/__init__.py +3 -3
- openlit/instrumentation/crewai/crewai.py +2 -2
- openlit/instrumentation/dynamiq/__init__.py +5 -5
- openlit/instrumentation/dynamiq/dynamiq.py +2 -2
- openlit/instrumentation/elevenlabs/__init__.py +5 -5
- openlit/instrumentation/elevenlabs/async_elevenlabs.py +3 -3
- openlit/instrumentation/elevenlabs/elevenlabs.py +3 -3
- openlit/instrumentation/embedchain/__init__.py +2 -2
- openlit/instrumentation/embedchain/embedchain.py +4 -4
- openlit/instrumentation/firecrawl/__init__.py +3 -3
- openlit/instrumentation/firecrawl/firecrawl.py +2 -2
- openlit/instrumentation/google_ai_studio/__init__.py +3 -3
- openlit/instrumentation/google_ai_studio/async_google_ai_studio.py +3 -3
- openlit/instrumentation/google_ai_studio/google_ai_studio.py +3 -3
- openlit/instrumentation/gpt4all/__init__.py +3 -3
- openlit/instrumentation/gpt4all/gpt4all.py +7 -7
- openlit/instrumentation/groq/__init__.py +3 -3
- openlit/instrumentation/groq/async_groq.py +5 -5
- openlit/instrumentation/groq/groq.py +5 -5
- openlit/instrumentation/haystack/__init__.py +2 -2
- openlit/instrumentation/haystack/haystack.py +2 -2
- openlit/instrumentation/julep/__init__.py +7 -7
- openlit/instrumentation/julep/async_julep.py +3 -3
- openlit/instrumentation/julep/julep.py +3 -3
- openlit/instrumentation/langchain/__init__.py +2 -2
- openlit/instrumentation/langchain/async_langchain.py +13 -9
- openlit/instrumentation/langchain/langchain.py +13 -8
- openlit/instrumentation/letta/__init__.py +7 -7
- openlit/instrumentation/letta/letta.py +5 -5
- openlit/instrumentation/litellm/__init__.py +5 -5
- openlit/instrumentation/litellm/async_litellm.py +8 -8
- openlit/instrumentation/litellm/litellm.py +8 -8
- openlit/instrumentation/llamaindex/__init__.py +2 -2
- openlit/instrumentation/llamaindex/llamaindex.py +2 -2
- openlit/instrumentation/mem0/__init__.py +2 -2
- openlit/instrumentation/mem0/mem0.py +2 -2
- openlit/instrumentation/milvus/__init__.py +2 -2
- openlit/instrumentation/milvus/milvus.py +2 -2
- openlit/instrumentation/mistral/__init__.py +7 -7
- openlit/instrumentation/mistral/async_mistral.py +10 -10
- openlit/instrumentation/mistral/mistral.py +10 -10
- openlit/instrumentation/multion/__init__.py +7 -7
- openlit/instrumentation/multion/async_multion.py +5 -5
- openlit/instrumentation/multion/multion.py +5 -5
- openlit/instrumentation/ollama/__init__.py +11 -9
- openlit/instrumentation/ollama/async_ollama.py +71 -465
- openlit/instrumentation/ollama/ollama.py +71 -465
- openlit/instrumentation/ollama/utils.py +333 -0
- openlit/instrumentation/openai/__init__.py +11 -11
- openlit/instrumentation/openai/async_openai.py +18 -18
- openlit/instrumentation/openai/openai.py +18 -18
- openlit/instrumentation/phidata/__init__.py +2 -2
- openlit/instrumentation/phidata/phidata.py +2 -2
- openlit/instrumentation/pinecone/__init__.py +6 -6
- openlit/instrumentation/pinecone/pinecone.py +2 -2
- openlit/instrumentation/premai/__init__.py +3 -3
- openlit/instrumentation/premai/premai.py +7 -7
- openlit/instrumentation/qdrant/__init__.py +2 -2
- openlit/instrumentation/qdrant/async_qdrant.py +2 -2
- openlit/instrumentation/qdrant/qdrant.py +2 -2
- openlit/instrumentation/reka/__init__.py +3 -3
- openlit/instrumentation/reka/async_reka.py +3 -3
- openlit/instrumentation/reka/reka.py +3 -3
- openlit/instrumentation/together/__init__.py +5 -5
- openlit/instrumentation/together/async_together.py +8 -8
- openlit/instrumentation/together/together.py +8 -8
- openlit/instrumentation/transformers/__init__.py +2 -2
- openlit/instrumentation/transformers/transformers.py +4 -4
- openlit/instrumentation/vertexai/__init__.py +9 -9
- openlit/instrumentation/vertexai/async_vertexai.py +4 -4
- openlit/instrumentation/vertexai/vertexai.py +4 -4
- openlit/instrumentation/vllm/__init__.py +2 -2
- openlit/instrumentation/vllm/vllm.py +3 -3
- openlit/otel/events.py +85 -0
- openlit/otel/tracing.py +3 -13
- openlit/semcov/__init__.py +13 -1
- {openlit-1.33.10.dist-info → openlit-1.33.11.dist-info}/METADATA +2 -2
- openlit-1.33.11.dist-info/RECORD +125 -0
- openlit-1.33.10.dist-info/RECORD +0 -122
- {openlit-1.33.10.dist-info → openlit-1.33.11.dist-info}/LICENSE +0 -0
- {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,
|
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
|
-
|
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
|
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
|
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
|
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,
|
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
|
-
|
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
|
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
|
-
|
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,
|
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,
|
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
|
-
-
|
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
|
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
|
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
|
-
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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,
|
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
|
-
|
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
|
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
|
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,
|
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
|
-
|
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
|
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
|
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
|
-
|
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,
|
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,
|
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
|
-
|
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
|
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.
|
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()
|
openlit/semcov/__init__.py
CHANGED
@@ -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
|
-
#
|
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.
|
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
|
-
| `
|
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,,
|