openlit 1.30.2__py3-none-any.whl → 1.30.3__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.
@@ -7,10 +7,10 @@ from opentelemetry.instrumentation.instrumentor import BaseInstrumentor
7
7
  from wrapt import wrap_function_wrapper
8
8
 
9
9
  from openlit.instrumentation.litellm.litellm import (
10
- completion
10
+ completion, embedding
11
11
  )
12
12
  from openlit.instrumentation.litellm.async_litellm import (
13
- acompletion
13
+ acompletion, aembedding
14
14
  )
15
15
 
16
16
  _instruments = ("litellm >= 1.52.6",)
@@ -48,6 +48,20 @@ class LiteLLMInstrumentor(BaseInstrumentor):
48
48
  tracer, pricing_info, trace_content, metrics, disable_metrics),
49
49
  )
50
50
 
51
+ wrap_function_wrapper(
52
+ "litellm",
53
+ "embedding",
54
+ embedding("litellm.embedding", version, environment, application_name,
55
+ tracer, pricing_info, trace_content, metrics, disable_metrics),
56
+ )
57
+
58
+ wrap_function_wrapper(
59
+ "litellm",
60
+ "aembedding",
61
+ aembedding("litellm.embedding", version, environment, application_name,
62
+ tracer, pricing_info, trace_content, metrics, disable_metrics),
63
+ )
64
+
51
65
 
52
66
  def _uninstrument(self, **kwargs):
53
67
  # Proper uninstrumentation logic to revert patched methods
@@ -8,6 +8,7 @@ from opentelemetry.trace import SpanKind, Status, StatusCode
8
8
  from opentelemetry.sdk.resources import TELEMETRY_SDK_NAME
9
9
  from openlit.__helpers import (
10
10
  get_chat_model_cost,
11
+ get_embed_model_cost,
11
12
  openai_tokens,
12
13
  handle_exception,
13
14
  response_as_dict,
@@ -404,3 +405,117 @@ def acompletion(gen_ai_endpoint, version, environment, application_name,
404
405
  return response
405
406
 
406
407
  return wrapper
408
+
409
+ def aembedding(gen_ai_endpoint, version, environment, application_name,
410
+ tracer, pricing_info, trace_content, metrics, disable_metrics):
411
+ """
412
+ Generates a telemetry wrapper for embeddings to collect metrics.
413
+
414
+ Args:
415
+ gen_ai_endpoint: Endpoint identifier for logging and tracing.
416
+ version: Version of the monitoring package.
417
+ environment: Deployment environment (e.g., production, staging).
418
+ application_name: Name of the application using the OpenAI API.
419
+ tracer: OpenTelemetry tracer for creating spans.
420
+ pricing_info: Information used for calculating the cost of OpenAI usage.
421
+ trace_content: Flag indicating whether to trace the actual content.
422
+
423
+ Returns:
424
+ A function that wraps the embeddings method to add telemetry.
425
+ """
426
+
427
+ async def wrapper(wrapped, instance, args, kwargs):
428
+ """
429
+ Wraps the 'embeddings' API call to add telemetry.
430
+
431
+ This collects metrics such as execution time, cost, and token usage, and handles errors
432
+ gracefully, adding details to the trace for observability.
433
+
434
+ Args:
435
+ wrapped: The original 'embeddings' method to be wrapped.
436
+ instance: The instance of the class where the original method is defined.
437
+ args: Positional arguments for the 'embeddings' method.
438
+ kwargs: Keyword arguments for the 'embeddings' method.
439
+
440
+ Returns:
441
+ The response from the original 'embeddings' method.
442
+ """
443
+
444
+ with tracer.start_as_current_span(gen_ai_endpoint, kind= SpanKind.CLIENT) as span:
445
+ response = await wrapped(*args, **kwargs)
446
+ response_dict = response_as_dict(response)
447
+ try:
448
+ # Calculate cost of the operation
449
+ cost = get_embed_model_cost(kwargs.get("model", "text-embedding-ada-002"),
450
+ pricing_info, response_dict.get('usage').get('prompt_tokens'))
451
+
452
+ # Set Span attributes
453
+ span.set_attribute(TELEMETRY_SDK_NAME, "openlit")
454
+ span.set_attribute(SemanticConvetion.GEN_AI_SYSTEM,
455
+ SemanticConvetion.GEN_AI_SYSTEM_OPENAI)
456
+ span.set_attribute(SemanticConvetion.GEN_AI_TYPE,
457
+ SemanticConvetion.GEN_AI_TYPE_EMBEDDING)
458
+ span.set_attribute(SemanticConvetion.GEN_AI_ENDPOINT,
459
+ gen_ai_endpoint)
460
+ span.set_attribute(SemanticConvetion.GEN_AI_ENVIRONMENT,
461
+ environment)
462
+ span.set_attribute(SemanticConvetion.GEN_AI_APPLICATION_NAME,
463
+ application_name)
464
+ span.set_attribute(SemanticConvetion.GEN_AI_REQUEST_MODEL,
465
+ kwargs.get("model", "text-embedding-ada-002"))
466
+ span.set_attribute(SemanticConvetion.GEN_AI_REQUEST_EMBEDDING_FORMAT,
467
+ kwargs.get("encoding_format", "float"))
468
+ # span.set_attribute(SemanticConvetion.GEN_AI_REQUEST_EMBEDDING_DIMENSION,
469
+ # kwargs.get("dimensions", "null"))
470
+ span.set_attribute(SemanticConvetion.GEN_AI_REQUEST_USER,
471
+ kwargs.get("user", ""))
472
+ span.set_attribute(SemanticConvetion.GEN_AI_USAGE_PROMPT_TOKENS,
473
+ response_dict.get('usage').get('prompt_tokens'))
474
+ span.set_attribute(SemanticConvetion.GEN_AI_USAGE_TOTAL_TOKENS,
475
+ response_dict.get('usage').get('total_tokens'))
476
+ span.set_attribute(SemanticConvetion.GEN_AI_USAGE_COST,
477
+ cost)
478
+ if trace_content:
479
+ span.add_event(
480
+ name=SemanticConvetion.GEN_AI_CONTENT_PROMPT_EVENT,
481
+ attributes={
482
+ SemanticConvetion.GEN_AI_CONTENT_PROMPT: kwargs.get("input", ""),
483
+ },
484
+ )
485
+
486
+ span.set_status(Status(StatusCode.OK))
487
+
488
+ if disable_metrics is False:
489
+ attributes = {
490
+ TELEMETRY_SDK_NAME:
491
+ "openlit",
492
+ SemanticConvetion.GEN_AI_APPLICATION_NAME:
493
+ application_name,
494
+ SemanticConvetion.GEN_AI_SYSTEM:
495
+ SemanticConvetion.GEN_AI_SYSTEM_OPENAI,
496
+ SemanticConvetion.GEN_AI_ENVIRONMENT:
497
+ environment,
498
+ SemanticConvetion.GEN_AI_TYPE:
499
+ SemanticConvetion.GEN_AI_TYPE_EMBEDDING,
500
+ SemanticConvetion.GEN_AI_REQUEST_MODEL:
501
+ kwargs.get("model", "text-embedding-ada-002")
502
+ }
503
+
504
+ metrics["genai_requests"].add(1, attributes)
505
+ metrics["genai_total_tokens"].add(
506
+ response_dict.get('usage').get('total_tokens'), attributes)
507
+ metrics["genai_prompt_tokens"].add(
508
+ response_dict.get('usage').get('prompt_tokens'), attributes)
509
+ metrics["genai_cost"].record(cost, attributes)
510
+
511
+ # Return original response
512
+ return response
513
+
514
+ except Exception as e:
515
+ handle_exception(span, e)
516
+ logger.error("Error in trace creation: %s", e)
517
+
518
+ # Return original response
519
+ return response
520
+
521
+ return wrapper
@@ -8,6 +8,7 @@ from opentelemetry.trace import SpanKind, Status, StatusCode
8
8
  from opentelemetry.sdk.resources import TELEMETRY_SDK_NAME
9
9
  from openlit.__helpers import (
10
10
  get_chat_model_cost,
11
+ get_embed_model_cost,
11
12
  openai_tokens,
12
13
  handle_exception,
13
14
  response_as_dict,
@@ -404,3 +405,117 @@ def completion(gen_ai_endpoint, version, environment, application_name,
404
405
  return response
405
406
 
406
407
  return wrapper
408
+
409
+ def embedding(gen_ai_endpoint, version, environment, application_name,
410
+ tracer, pricing_info, trace_content, metrics, disable_metrics):
411
+ """
412
+ Generates a telemetry wrapper for embeddings to collect metrics.
413
+
414
+ Args:
415
+ gen_ai_endpoint: Endpoint identifier for logging and tracing.
416
+ version: Version of the monitoring package.
417
+ environment: Deployment environment (e.g., production, staging).
418
+ application_name: Name of the application using the OpenAI API.
419
+ tracer: OpenTelemetry tracer for creating spans.
420
+ pricing_info: Information used for calculating the cost of OpenAI usage.
421
+ trace_content: Flag indicating whether to trace the actual content.
422
+
423
+ Returns:
424
+ A function that wraps the embeddings method to add telemetry.
425
+ """
426
+
427
+ def wrapper(wrapped, instance, args, kwargs):
428
+ """
429
+ Wraps the 'embeddings' API call to add telemetry.
430
+
431
+ This collects metrics such as execution time, cost, and token usage, and handles errors
432
+ gracefully, adding details to the trace for observability.
433
+
434
+ Args:
435
+ wrapped: The original 'embeddings' method to be wrapped.
436
+ instance: The instance of the class where the original method is defined.
437
+ args: Positional arguments for the 'embeddings' method.
438
+ kwargs: Keyword arguments for the 'embeddings' method.
439
+
440
+ Returns:
441
+ The response from the original 'embeddings' method.
442
+ """
443
+
444
+ with tracer.start_as_current_span(gen_ai_endpoint, kind= SpanKind.CLIENT) as span:
445
+ response = wrapped(*args, **kwargs)
446
+ response_dict = response_as_dict(response)
447
+ try:
448
+ # Calculate cost of the operation
449
+ cost = get_embed_model_cost(kwargs.get("model", "text-embedding-ada-002"),
450
+ pricing_info, response_dict.get('usage').get('prompt_tokens'))
451
+
452
+ # Set Span attributes
453
+ span.set_attribute(TELEMETRY_SDK_NAME, "openlit")
454
+ span.set_attribute(SemanticConvetion.GEN_AI_SYSTEM,
455
+ SemanticConvetion.GEN_AI_SYSTEM_OPENAI)
456
+ span.set_attribute(SemanticConvetion.GEN_AI_TYPE,
457
+ SemanticConvetion.GEN_AI_TYPE_EMBEDDING)
458
+ span.set_attribute(SemanticConvetion.GEN_AI_ENDPOINT,
459
+ gen_ai_endpoint)
460
+ span.set_attribute(SemanticConvetion.GEN_AI_ENVIRONMENT,
461
+ environment)
462
+ span.set_attribute(SemanticConvetion.GEN_AI_APPLICATION_NAME,
463
+ application_name)
464
+ span.set_attribute(SemanticConvetion.GEN_AI_REQUEST_MODEL,
465
+ kwargs.get("model", "text-embedding-ada-002"))
466
+ span.set_attribute(SemanticConvetion.GEN_AI_REQUEST_EMBEDDING_FORMAT,
467
+ kwargs.get("encoding_format", "float"))
468
+ # span.set_attribute(SemanticConvetion.GEN_AI_REQUEST_EMBEDDING_DIMENSION,
469
+ # kwargs.get("dimensions", "null"))
470
+ span.set_attribute(SemanticConvetion.GEN_AI_REQUEST_USER,
471
+ kwargs.get("user", ""))
472
+ span.set_attribute(SemanticConvetion.GEN_AI_USAGE_PROMPT_TOKENS,
473
+ response_dict.get('usage').get('prompt_tokens'))
474
+ span.set_attribute(SemanticConvetion.GEN_AI_USAGE_TOTAL_TOKENS,
475
+ response_dict.get('usage').get('total_tokens'))
476
+ span.set_attribute(SemanticConvetion.GEN_AI_USAGE_COST,
477
+ cost)
478
+ if trace_content:
479
+ span.add_event(
480
+ name=SemanticConvetion.GEN_AI_CONTENT_PROMPT_EVENT,
481
+ attributes={
482
+ SemanticConvetion.GEN_AI_CONTENT_PROMPT: kwargs.get("input", ""),
483
+ },
484
+ )
485
+
486
+ span.set_status(Status(StatusCode.OK))
487
+
488
+ if disable_metrics is False:
489
+ attributes = {
490
+ TELEMETRY_SDK_NAME:
491
+ "openlit",
492
+ SemanticConvetion.GEN_AI_APPLICATION_NAME:
493
+ application_name,
494
+ SemanticConvetion.GEN_AI_SYSTEM:
495
+ SemanticConvetion.GEN_AI_SYSTEM_OPENAI,
496
+ SemanticConvetion.GEN_AI_ENVIRONMENT:
497
+ environment,
498
+ SemanticConvetion.GEN_AI_TYPE:
499
+ SemanticConvetion.GEN_AI_TYPE_EMBEDDING,
500
+ SemanticConvetion.GEN_AI_REQUEST_MODEL:
501
+ kwargs.get("model", "text-embedding-ada-002")
502
+ }
503
+
504
+ metrics["genai_requests"].add(1, attributes)
505
+ metrics["genai_total_tokens"].add(
506
+ response_dict.get('usage').get('total_tokens'), attributes)
507
+ metrics["genai_prompt_tokens"].add(
508
+ response_dict.get('usage').get('prompt_tokens'), attributes)
509
+ metrics["genai_cost"].record(cost, attributes)
510
+
511
+ # Return original response
512
+ return response
513
+
514
+ except Exception as e:
515
+ handle_exception(span, e)
516
+ logger.error("Error in trace creation: %s", e)
517
+
518
+ # Return original response
519
+ return response
520
+
521
+ return wrapper
@@ -446,11 +446,11 @@ def async_embedding(gen_ai_endpoint, version, environment, application_name,
446
446
 
447
447
  with tracer.start_as_current_span(gen_ai_endpoint, kind= SpanKind.CLIENT) as span:
448
448
  response = await wrapped(*args, **kwargs)
449
-
449
+ response_dict = response_as_dict(response)
450
450
  try:
451
451
  # Calculate cost of the operation
452
452
  cost = get_embed_model_cost(kwargs.get("model", "text-embedding-ada-002"),
453
- pricing_info, response.usage.prompt_tokens)
453
+ pricing_info, response_dict.get('usage').get('prompt_tokens'))
454
454
 
455
455
  # Set Span attributes
456
456
  span.set_attribute(TELEMETRY_SDK_NAME, "openlit")
@@ -473,9 +473,9 @@ def async_embedding(gen_ai_endpoint, version, environment, application_name,
473
473
  span.set_attribute(SemanticConvetion.GEN_AI_REQUEST_USER,
474
474
  kwargs.get("user", ""))
475
475
  span.set_attribute(SemanticConvetion.GEN_AI_USAGE_PROMPT_TOKENS,
476
- response.usage.prompt_tokens)
476
+ response_dict.get('usage').get('prompt_tokens'))
477
477
  span.set_attribute(SemanticConvetion.GEN_AI_USAGE_TOTAL_TOKENS,
478
- response.usage.total_tokens)
478
+ response_dict.get('usage').get('total_tokens'))
479
479
  span.set_attribute(SemanticConvetion.GEN_AI_USAGE_COST,
480
480
  cost)
481
481
  if trace_content:
@@ -505,8 +505,10 @@ def async_embedding(gen_ai_endpoint, version, environment, application_name,
505
505
  }
506
506
 
507
507
  metrics["genai_requests"].add(1, attributes)
508
- metrics["genai_total_tokens"].add(response.usage.total_tokens, attributes)
509
- metrics["genai_prompt_tokens"].add(response.usage.prompt_tokens, attributes)
508
+ metrics["genai_total_tokens"].add(
509
+ response_dict.get('usage').get('total_tokens'), attributes)
510
+ metrics["genai_prompt_tokens"].add(
511
+ response_dict.get('usage').get('prompt_tokens'), attributes)
510
512
  metrics["genai_cost"].record(cost, attributes)
511
513
 
512
514
  # Return original response
@@ -446,11 +446,11 @@ def embedding(gen_ai_endpoint, version, environment, application_name,
446
446
 
447
447
  with tracer.start_as_current_span(gen_ai_endpoint, kind= SpanKind.CLIENT) as span:
448
448
  response = wrapped(*args, **kwargs)
449
-
449
+ response_dict = response_as_dict(response)
450
450
  try:
451
451
  # Calculate cost of the operation
452
452
  cost = get_embed_model_cost(kwargs.get("model", "text-embedding-ada-002"),
453
- pricing_info, response.usage.prompt_tokens)
453
+ pricing_info, response_dict.get('usage').get('prompt_tokens'))
454
454
 
455
455
  # Set Span attributes
456
456
  span.set_attribute(TELEMETRY_SDK_NAME, "openlit")
@@ -473,9 +473,9 @@ def embedding(gen_ai_endpoint, version, environment, application_name,
473
473
  span.set_attribute(SemanticConvetion.GEN_AI_REQUEST_USER,
474
474
  kwargs.get("user", ""))
475
475
  span.set_attribute(SemanticConvetion.GEN_AI_USAGE_PROMPT_TOKENS,
476
- response.usage.prompt_tokens)
476
+ response_dict.get('usage').get('prompt_tokens'))
477
477
  span.set_attribute(SemanticConvetion.GEN_AI_USAGE_TOTAL_TOKENS,
478
- response.usage.total_tokens)
478
+ response_dict.get('usage').get('total_tokens'))
479
479
  span.set_attribute(SemanticConvetion.GEN_AI_USAGE_COST,
480
480
  cost)
481
481
  if trace_content:
@@ -505,8 +505,10 @@ def embedding(gen_ai_endpoint, version, environment, application_name,
505
505
  }
506
506
 
507
507
  metrics["genai_requests"].add(1, attributes)
508
- metrics["genai_total_tokens"].add(response.usage.total_tokens, attributes)
509
- metrics["genai_prompt_tokens"].add(response.usage.prompt_tokens, attributes)
508
+ metrics["genai_total_tokens"].add(
509
+ response_dict.get('usage').get('total_tokens'), attributes)
510
+ metrics["genai_prompt_tokens"].add(
511
+ response_dict.get('usage').get('prompt_tokens'), attributes)
510
512
  metrics["genai_cost"].record(cost, attributes)
511
513
 
512
514
  # Return original response
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: openlit
3
- Version: 1.30.2
3
+ Version: 1.30.3
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
@@ -72,7 +72,7 @@ This project proudly follows and maintains the [Semantic Conventions](https://gi
72
72
  | [✅ Cohere](https://docs.openlit.io/latest/integrations/cohere) | | [✅ EmbedChain](https://docs.openlit.io/latest/integrations/embedchain) | |
73
73
  | [✅ Mistral](https://docs.openlit.io/latest/integrations/mistral) | | [✅ Guardrails](https://docs.openlit.io/latest/integrations/guardrails) | |
74
74
  | [✅ Azure OpenAI](https://docs.openlit.io/latest/integrations/azure-openai) | | [✅ CrewAI](https://docs.openlit.io/latest/integrations/crewai) | |
75
- | [✅ Azure AI Inference](https://docs.openlit.io/latest/integrations/azure-ai-inference) | |
75
+ | [✅ Azure AI Inference](https://docs.openlit.io/latest/integrations/azure-ai-inference) | | [✅ DSPy](https://docs.openlit.io/latest/integrations/dspy) | |
76
76
  | [✅ GitHub AI Models](https://docs.openlit.io/latest/integrations/github-models) | | | |
77
77
  | [✅ HuggingFace Transformers](https://docs.openlit.io/latest/integrations/huggingface) | | | |
78
78
  | [✅ Amazon Bedrock](https://docs.openlit.io/latest/integrations/bedrock) | | | |
@@ -84,6 +84,7 @@ This project proudly follows and maintains the [Semantic Conventions](https://gi
84
84
  | [✅ Google AI Studio](https://docs.openlit.io/latest/integrations/google-ai-studio) | | | |
85
85
  | [✅ NVIDIA NIM](https://docs.openlit.io/latest/integrations/nvidia-nim) | | | |
86
86
 
87
+
87
88
  ## Supported Destinations
88
89
  - [✅ OpenTelemetry Collector](https://docs.openlit.io/latest/connections/otelcol)
89
90
  - [✅ Prometheus + Tempo](https://docs.openlit.io/latest/connections/prometheus-tempo)
@@ -44,9 +44,9 @@ openlit/instrumentation/haystack/__init__.py,sha256=QK6XxxZUHX8vMv2Crk7rNBOc64iO
44
44
  openlit/instrumentation/haystack/haystack.py,sha256=oQIZiDhdp3gnJnhYQ1OouJMc9YT0pQ-_31cmNuopa68,3891
45
45
  openlit/instrumentation/langchain/__init__.py,sha256=0AI2Dnqw81IcJw3jM--gGkv_HRh2GtosOGJjvOpw7Zk,3431
46
46
  openlit/instrumentation/langchain/langchain.py,sha256=g3HDKPq498KitHuQxxfQzvRq9MKAZaR0jStQYTLx_-M,35592
47
- openlit/instrumentation/litellm/__init__.py,sha256=XV3PxqhlZYoJ3FbVr9MiWPogrE3_HOAv-BvOObylU4M,1866
48
- openlit/instrumentation/litellm/async_litellm.py,sha256=fmOpzjhfnYubFdlJYA7R0n2rxxrO78FBb6q1iCf2_HQ,21829
49
- openlit/instrumentation/litellm/litellm.py,sha256=zO-L8-Yai0uqDl4J7i7Y8ETL87EpozevfgQdGMLsu4Y,21742
47
+ openlit/instrumentation/litellm/__init__.py,sha256=Z-LsVHKJdPganHfJA_rWg7xAfQYkvLfpLdF-eckU4qY,2401
48
+ openlit/instrumentation/litellm/async_litellm.py,sha256=1MKNZbvKaf1lFWbXi1MQy3qFNNeXawav34SDlOQ_H3w,27544
49
+ openlit/instrumentation/litellm/litellm.py,sha256=4YqCQ4CEQ4sfDu7pTlnflL_AfUqYEQdJDTO7nHJ6noY,27450
50
50
  openlit/instrumentation/llamaindex/__init__.py,sha256=vPtK65G6b-TwJERowVRUVl7f_nBSlFdwPBtpg8dOGos,1977
51
51
  openlit/instrumentation/llamaindex/llamaindex.py,sha256=uiIigbwhonSbJWA7LpgOVI1R4kxxPODS1K5wyHIQ4hM,4048
52
52
  openlit/instrumentation/milvus/__init__.py,sha256=qi1yfmMrvkDtnrN_6toW8qC9BRL78bq7ayWpObJ8Bq4,2961
@@ -59,9 +59,9 @@ openlit/instrumentation/ollama/async_ollama.py,sha256=7lbikD-I9k8VL63idqj3VMEfiE
59
59
  openlit/instrumentation/ollama/ollama.py,sha256=lBt1d3rFnF1tFbfdOccwjEafHnmTAUGsiOKSHku6Fkw,31277
60
60
  openlit/instrumentation/openai/__init__.py,sha256=AZ2cPr3TMKkgGdMl_yXMeSi7bWhtmMqOW1iHdzHHGHA,16265
61
61
  openlit/instrumentation/openai/async_azure_openai.py,sha256=XbST1UE_zXzNL6RX2XwCsK_a6IhG9PHVTMKBjGrUcB0,48961
62
- openlit/instrumentation/openai/async_openai.py,sha256=IYJAHXxG7O7jxDL3OYNpT4ybmjUoMXTKXjjg1ns-HMg,49985
62
+ openlit/instrumentation/openai/async_openai.py,sha256=XFsfN81mbmdgRON2dwmt8pypqoTnlrNWer1eit7wZbQ,50176
63
63
  openlit/instrumentation/openai/azure_openai.py,sha256=dZUc5MtCwg_sZJWiruG6exYGhPAm-339sqs3sKZNRPU,48761
64
- openlit/instrumentation/openai/openai.py,sha256=iJA8xaqlydfltHogoTsClIVZDJxO-yGRMSRppNYJ8iM,49814
64
+ openlit/instrumentation/openai/openai.py,sha256=qP3ahUyMGjmq2ZB8apqnERal7kz49uW5DaxDU9FBQdk,50005
65
65
  openlit/instrumentation/pinecone/__init__.py,sha256=Mv9bElqNs07_JQkYyNnO0wOM3hdbprmw7sttdMeKC7g,2526
66
66
  openlit/instrumentation/pinecone/pinecone.py,sha256=0EhLmtOuvwWVvAKh3e56wyd8wzQq1oaLOmF15SVHxVE,8765
67
67
  openlit/instrumentation/qdrant/__init__.py,sha256=GMlZgRBKoQMgrL4cFbAKwytfdTHLzJEIuTQMxp0uZO0,8940
@@ -77,7 +77,7 @@ openlit/instrumentation/vllm/vllm.py,sha256=lDzM7F5pgxvh8nKL0dcKB4TD0Mc9wXOWeXOs
77
77
  openlit/otel/metrics.py,sha256=y7SQDTyfLakMrz0V4DThN-WAeap7YZzyndeYGSP6nVg,4516
78
78
  openlit/otel/tracing.py,sha256=fG3vl-flSZ30whCi7rrG25PlkIhhr8PhnfJYCkZzCD0,3895
79
79
  openlit/semcov/__init__.py,sha256=_IjU498Sc0Rjz55y9S3dUelgRalmrzzBgFglPzOlIfk,9137
80
- openlit-1.30.2.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
81
- openlit-1.30.2.dist-info/METADATA,sha256=zw2zPD40FD12g3Ri3_MAvdF4JulDNsKojxcWGvyiXEg,20841
82
- openlit-1.30.2.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
83
- openlit-1.30.2.dist-info/RECORD,,
80
+ openlit-1.30.3.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
81
+ openlit-1.30.3.dist-info/METADATA,sha256=Ej7sFOJ8OV2V00Vx_Oki13Q4pyvqYQS7_inRYngrIx8,20915
82
+ openlit-1.30.3.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
83
+ openlit-1.30.3.dist-info/RECORD,,