openlit 1.24.0__tar.gz → 1.25.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {openlit-1.24.0 → openlit-1.25.0}/PKG-INFO +2 -1
- {openlit-1.24.0 → openlit-1.25.0}/pyproject.toml +1 -1
- {openlit-1.24.0 → openlit-1.25.0}/src/openlit/__init__.py +69 -0
- {openlit-1.24.0 → openlit-1.25.0}/src/openlit/instrumentation/langchain/langchain.py +9 -9
- {openlit-1.24.0 → openlit-1.25.0}/LICENSE +0 -0
- {openlit-1.24.0 → openlit-1.25.0}/README.md +0 -0
- {openlit-1.24.0 → openlit-1.25.0}/src/openlit/__helpers.py +0 -0
- {openlit-1.24.0 → openlit-1.25.0}/src/openlit/instrumentation/anthropic/__init__.py +0 -0
- {openlit-1.24.0 → openlit-1.25.0}/src/openlit/instrumentation/anthropic/anthropic.py +0 -0
- {openlit-1.24.0 → openlit-1.25.0}/src/openlit/instrumentation/anthropic/async_anthropic.py +0 -0
- {openlit-1.24.0 → openlit-1.25.0}/src/openlit/instrumentation/azure_ai_inference/__init__.py +0 -0
- {openlit-1.24.0 → openlit-1.25.0}/src/openlit/instrumentation/azure_ai_inference/async_azure_ai_inference.py +0 -0
- {openlit-1.24.0 → openlit-1.25.0}/src/openlit/instrumentation/azure_ai_inference/azure_ai_inference.py +0 -0
- {openlit-1.24.0 → openlit-1.25.0}/src/openlit/instrumentation/bedrock/__init__.py +0 -0
- {openlit-1.24.0 → openlit-1.25.0}/src/openlit/instrumentation/bedrock/bedrock.py +0 -0
- {openlit-1.24.0 → openlit-1.25.0}/src/openlit/instrumentation/chroma/__init__.py +0 -0
- {openlit-1.24.0 → openlit-1.25.0}/src/openlit/instrumentation/chroma/chroma.py +0 -0
- {openlit-1.24.0 → openlit-1.25.0}/src/openlit/instrumentation/cohere/__init__.py +0 -0
- {openlit-1.24.0 → openlit-1.25.0}/src/openlit/instrumentation/cohere/cohere.py +0 -0
- {openlit-1.24.0 → openlit-1.25.0}/src/openlit/instrumentation/elevenlabs/__init__.py +0 -0
- {openlit-1.24.0 → openlit-1.25.0}/src/openlit/instrumentation/elevenlabs/async_elevenlabs.py +0 -0
- {openlit-1.24.0 → openlit-1.25.0}/src/openlit/instrumentation/elevenlabs/elevenlabs.py +0 -0
- {openlit-1.24.0 → openlit-1.25.0}/src/openlit/instrumentation/embedchain/__init__.py +0 -0
- {openlit-1.24.0 → openlit-1.25.0}/src/openlit/instrumentation/embedchain/embedchain.py +0 -0
- {openlit-1.24.0 → openlit-1.25.0}/src/openlit/instrumentation/google_ai_studio/__init__.py +0 -0
- {openlit-1.24.0 → openlit-1.25.0}/src/openlit/instrumentation/google_ai_studio/async_google_ai_studio.py +0 -0
- {openlit-1.24.0 → openlit-1.25.0}/src/openlit/instrumentation/google_ai_studio/google_ai_studio.py +0 -0
- {openlit-1.24.0 → openlit-1.25.0}/src/openlit/instrumentation/gpt4all/__init__.py +0 -0
- {openlit-1.24.0 → openlit-1.25.0}/src/openlit/instrumentation/gpt4all/gpt4all.py +0 -0
- {openlit-1.24.0 → openlit-1.25.0}/src/openlit/instrumentation/gpu/__init__.py +0 -0
- {openlit-1.24.0 → openlit-1.25.0}/src/openlit/instrumentation/groq/__init__.py +0 -0
- {openlit-1.24.0 → openlit-1.25.0}/src/openlit/instrumentation/groq/async_groq.py +0 -0
- {openlit-1.24.0 → openlit-1.25.0}/src/openlit/instrumentation/groq/groq.py +0 -0
- {openlit-1.24.0 → openlit-1.25.0}/src/openlit/instrumentation/haystack/__init__.py +0 -0
- {openlit-1.24.0 → openlit-1.25.0}/src/openlit/instrumentation/haystack/haystack.py +0 -0
- {openlit-1.24.0 → openlit-1.25.0}/src/openlit/instrumentation/langchain/__init__.py +0 -0
- {openlit-1.24.0 → openlit-1.25.0}/src/openlit/instrumentation/llamaindex/__init__.py +0 -0
- {openlit-1.24.0 → openlit-1.25.0}/src/openlit/instrumentation/llamaindex/llamaindex.py +0 -0
- {openlit-1.24.0 → openlit-1.25.0}/src/openlit/instrumentation/milvus/__init__.py +0 -0
- {openlit-1.24.0 → openlit-1.25.0}/src/openlit/instrumentation/milvus/milvus.py +0 -0
- {openlit-1.24.0 → openlit-1.25.0}/src/openlit/instrumentation/mistral/__init__.py +0 -0
- {openlit-1.24.0 → openlit-1.25.0}/src/openlit/instrumentation/mistral/async_mistral.py +0 -0
- {openlit-1.24.0 → openlit-1.25.0}/src/openlit/instrumentation/mistral/mistral.py +0 -0
- {openlit-1.24.0 → openlit-1.25.0}/src/openlit/instrumentation/ollama/__init__.py +0 -0
- {openlit-1.24.0 → openlit-1.25.0}/src/openlit/instrumentation/ollama/async_ollama.py +0 -0
- {openlit-1.24.0 → openlit-1.25.0}/src/openlit/instrumentation/ollama/ollama.py +0 -0
- {openlit-1.24.0 → openlit-1.25.0}/src/openlit/instrumentation/openai/__init__.py +0 -0
- {openlit-1.24.0 → openlit-1.25.0}/src/openlit/instrumentation/openai/async_azure_openai.py +0 -0
- {openlit-1.24.0 → openlit-1.25.0}/src/openlit/instrumentation/openai/async_openai.py +0 -0
- {openlit-1.24.0 → openlit-1.25.0}/src/openlit/instrumentation/openai/azure_openai.py +0 -0
- {openlit-1.24.0 → openlit-1.25.0}/src/openlit/instrumentation/openai/openai.py +0 -0
- {openlit-1.24.0 → openlit-1.25.0}/src/openlit/instrumentation/pinecone/__init__.py +0 -0
- {openlit-1.24.0 → openlit-1.25.0}/src/openlit/instrumentation/pinecone/pinecone.py +0 -0
- {openlit-1.24.0 → openlit-1.25.0}/src/openlit/instrumentation/qdrant/__init__.py +0 -0
- {openlit-1.24.0 → openlit-1.25.0}/src/openlit/instrumentation/qdrant/qdrant.py +0 -0
- {openlit-1.24.0 → openlit-1.25.0}/src/openlit/instrumentation/transformers/__init__.py +0 -0
- {openlit-1.24.0 → openlit-1.25.0}/src/openlit/instrumentation/transformers/transformers.py +0 -0
- {openlit-1.24.0 → openlit-1.25.0}/src/openlit/instrumentation/vertexai/__init__.py +0 -0
- {openlit-1.24.0 → openlit-1.25.0}/src/openlit/instrumentation/vertexai/async_vertexai.py +0 -0
- {openlit-1.24.0 → openlit-1.25.0}/src/openlit/instrumentation/vertexai/vertexai.py +0 -0
- {openlit-1.24.0 → openlit-1.25.0}/src/openlit/instrumentation/vllm/__init__.py +0 -0
- {openlit-1.24.0 → openlit-1.25.0}/src/openlit/instrumentation/vllm/vllm.py +0 -0
- {openlit-1.24.0 → openlit-1.25.0}/src/openlit/otel/metrics.py +0 -0
- {openlit-1.24.0 → openlit-1.25.0}/src/openlit/otel/tracing.py +0 -0
- {openlit-1.24.0 → openlit-1.25.0}/src/openlit/semcov/__init__.py +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: openlit
|
3
|
-
Version: 1.
|
3
|
+
Version: 1.25.0
|
4
4
|
Summary: OpenTelemetry-native Auto instrumentation library for monitoring LLM Applications and GPUs, facilitating the integration of observability into your GenAI-driven projects
|
5
5
|
Home-page: https://github.com/openlit/openlit/tree/main/openlit/python
|
6
6
|
Keywords: OpenTelemetry,otel,otlp,llm,tracing,openai,anthropic,claude,cohere,llm monitoring,observability,monitoring,gpt,Generative AI,chatGPT,gpu
|
@@ -12,6 +12,7 @@ Classifier: Programming Language :: Python :: 3.9
|
|
12
12
|
Classifier: Programming Language :: Python :: 3.10
|
13
13
|
Classifier: Programming Language :: Python :: 3.11
|
14
14
|
Classifier: Programming Language :: Python :: 3.12
|
15
|
+
Classifier: Programming Language :: Python :: 3.13
|
15
16
|
Requires-Dist: boto3 (>=1.34.0,<2.0.0)
|
16
17
|
Requires-Dist: botocore (>=1.34.0,<2.0.0)
|
17
18
|
Requires-Dist: gpustat (>=1.1.1,<2.0.0)
|
@@ -1,6 +1,6 @@
|
|
1
1
|
[tool.poetry]
|
2
2
|
name = "openlit"
|
3
|
-
version = "1.
|
3
|
+
version = "1.25.0"
|
4
4
|
description = "OpenTelemetry-native Auto instrumentation library for monitoring LLM Applications and GPUs, facilitating the integration of observability into your GenAI-driven projects"
|
5
5
|
authors = ["OpenLIT"]
|
6
6
|
repository = "https://github.com/openlit/openlit/tree/main/openlit/python"
|
@@ -7,9 +7,11 @@ large language models (LLMs).
|
|
7
7
|
|
8
8
|
from typing import Dict
|
9
9
|
import logging
|
10
|
+
import os
|
10
11
|
from importlib.util import find_spec
|
11
12
|
from functools import wraps
|
12
13
|
from contextlib import contextmanager
|
14
|
+
import requests
|
13
15
|
|
14
16
|
|
15
17
|
# Import internal modules for setting up tracing and fetching pricing info.
|
@@ -316,6 +318,73 @@ def init(environment="default", application_name="default", tracer=None, otlp_en
|
|
316
318
|
except Exception as e:
|
317
319
|
logger.error("Error during openLIT initialization: %s", e)
|
318
320
|
|
321
|
+
def get_prompt(url=None, name=None, api_key=None, prompt_id=None,
|
322
|
+
version=None, should_compile=None, variables=None, meta_properties=None):
|
323
|
+
"""
|
324
|
+
Retrieve and returns the prompt from OpenLIT Prompt Hub
|
325
|
+
"""
|
326
|
+
|
327
|
+
def get_env_variable(name, arg_value, error_message):
|
328
|
+
"""
|
329
|
+
Retrieve an environment variable if the argument is not provided
|
330
|
+
and raise an error if both are not set.
|
331
|
+
"""
|
332
|
+
if arg_value is not None:
|
333
|
+
return arg_value
|
334
|
+
value = os.getenv(name)
|
335
|
+
if not value:
|
336
|
+
logging.error(error_message)
|
337
|
+
raise RuntimeError(error_message)
|
338
|
+
return value
|
339
|
+
|
340
|
+
# Validate and set the base URL
|
341
|
+
url = get_env_variable(
|
342
|
+
'OPENLIT_URL',
|
343
|
+
url,
|
344
|
+
'Missing OpenLIT URL: Provide as arg or set OPENLIT_URL env var.'
|
345
|
+
)
|
346
|
+
|
347
|
+
# Validate and set the API key
|
348
|
+
api_key = get_env_variable(
|
349
|
+
'OPENLIT_API_KEY',
|
350
|
+
api_key,
|
351
|
+
'Missing API key: Provide as arg or set OPENLIT_API_KEY env var.'
|
352
|
+
)
|
353
|
+
|
354
|
+
# Construct the API endpoint
|
355
|
+
endpoint = url + "/api/prompt/get-compiled"
|
356
|
+
|
357
|
+
# Prepare the payload
|
358
|
+
payload = {
|
359
|
+
'name': name,
|
360
|
+
'promptId': prompt_id,
|
361
|
+
'version': version,
|
362
|
+
'shouldCompile': should_compile,
|
363
|
+
'variables': variables,
|
364
|
+
'metaProperties': meta_properties
|
365
|
+
}
|
366
|
+
|
367
|
+
# Remove None values from payload
|
368
|
+
payload = {k: v for k, v in payload.items() if v is not None}
|
369
|
+
|
370
|
+
# Prepare headers
|
371
|
+
headers = {
|
372
|
+
'Authorization': f'Bearer {api_key}',
|
373
|
+
'Content-Type': 'application/json'
|
374
|
+
}
|
375
|
+
|
376
|
+
try:
|
377
|
+
# Make the POST request to the API with headers
|
378
|
+
response = requests.post(endpoint, json=payload, headers=headers, timeout=120)
|
379
|
+
|
380
|
+
# Check if the response is successful
|
381
|
+
response.raise_for_status()
|
382
|
+
|
383
|
+
# Return the JSON response
|
384
|
+
return response.json()
|
385
|
+
except requests.RequestException as error:
|
386
|
+
print(f"Error fetching prompt: {error}")
|
387
|
+
return None
|
319
388
|
|
320
389
|
def trace(wrapped):
|
321
390
|
"""
|
@@ -623,9 +623,11 @@ def achat(gen_ai_endpoint, version, environment, application_name,
|
|
623
623
|
input_tokens = response.response_metadata.get("prompt_eval_count", 0)
|
624
624
|
output_tokens = response.response_metadata.get("eval_count", 0)
|
625
625
|
|
626
|
+
prompt = "" if isinstance(args[0], list) else args[0]
|
627
|
+
model = getattr(instance, 'model_name', getattr(instance, 'model', 'gpt-4'))
|
626
628
|
# Calculate cost of the operation
|
627
629
|
cost = get_chat_model_cost(
|
628
|
-
|
630
|
+
model,
|
629
631
|
pricing_info, input_tokens, output_tokens
|
630
632
|
)
|
631
633
|
|
@@ -641,15 +643,13 @@ def achat(gen_ai_endpoint, version, environment, application_name,
|
|
641
643
|
span.set_attribute(SemanticConvetion.GEN_AI_APPLICATION_NAME,
|
642
644
|
application_name)
|
643
645
|
span.set_attribute(SemanticConvetion.GEN_AI_REQUEST_MODEL,
|
644
|
-
|
646
|
+
model)
|
645
647
|
span.set_attribute(SemanticConvetion.GEN_AI_REQUEST_TEMPERATURE,
|
646
|
-
str(getattr(instance, 'temperature')))
|
648
|
+
str(getattr(instance, 'temperature',1)))
|
647
649
|
span.set_attribute(SemanticConvetion.GEN_AI_REQUEST_TOP_K,
|
648
|
-
str(getattr(instance, 'top_k')))
|
650
|
+
str(getattr(instance, 'top_k',1)))
|
649
651
|
span.set_attribute(SemanticConvetion.GEN_AI_REQUEST_TOP_P,
|
650
|
-
str(getattr(instance, 'top_p')))
|
651
|
-
span.set_attribute(SemanticConvetion.GEN_AI_RESPONSE_FINISH_REASON,
|
652
|
-
[response.response_metadata["done_reason"]])
|
652
|
+
str(getattr(instance, 'top_p',1)))
|
653
653
|
span.set_attribute(SemanticConvetion.GEN_AI_REQUEST_IS_STREAM,
|
654
654
|
False)
|
655
655
|
span.set_attribute(SemanticConvetion.GEN_AI_USAGE_PROMPT_TOKENS,
|
@@ -664,7 +664,7 @@ def achat(gen_ai_endpoint, version, environment, application_name,
|
|
664
664
|
span.add_event(
|
665
665
|
name=SemanticConvetion.GEN_AI_CONTENT_PROMPT_EVENT,
|
666
666
|
attributes={
|
667
|
-
SemanticConvetion.GEN_AI_CONTENT_PROMPT:
|
667
|
+
SemanticConvetion.GEN_AI_CONTENT_PROMPT: prompt,
|
668
668
|
},
|
669
669
|
)
|
670
670
|
span.add_event(
|
@@ -689,7 +689,7 @@ def achat(gen_ai_endpoint, version, environment, application_name,
|
|
689
689
|
SemanticConvetion.GEN_AI_TYPE:
|
690
690
|
SemanticConvetion.GEN_AI_TYPE_CHAT,
|
691
691
|
SemanticConvetion.GEN_AI_REQUEST_MODEL:
|
692
|
-
|
692
|
+
model
|
693
693
|
}
|
694
694
|
|
695
695
|
metrics["genai_requests"].add(1, attributes)
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{openlit-1.24.0 → openlit-1.25.0}/src/openlit/instrumentation/azure_ai_inference/__init__.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{openlit-1.24.0 → openlit-1.25.0}/src/openlit/instrumentation/elevenlabs/async_elevenlabs.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{openlit-1.24.0 → openlit-1.25.0}/src/openlit/instrumentation/google_ai_studio/google_ai_studio.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|