mirror of
https://github.com/BerriAI/litellm.git
synced 2025-04-26 03:04:13 +00:00
Merge 82f1ce29ee
into b82af5b826
This commit is contained in:
commit
9a6805edfa
3 changed files with 17 additions and 19 deletions
|
@ -417,7 +417,7 @@ class OpenTelemetry(CustomLogger):
|
||||||
if not function:
|
if not function:
|
||||||
continue
|
continue
|
||||||
|
|
||||||
prefix = f"{SpanAttributes.LLM_REQUEST_FUNCTIONS}.{i}"
|
prefix = f"{SpanAttributes.LLM_REQUEST_FUNCTIONS.value}.{i}"
|
||||||
self.safe_set_attribute(
|
self.safe_set_attribute(
|
||||||
span=span,
|
span=span,
|
||||||
key=f"{prefix}.name",
|
key=f"{prefix}.name",
|
||||||
|
@ -473,7 +473,7 @@ class OpenTelemetry(CustomLogger):
|
||||||
_value = _function.get(key)
|
_value = _function.get(key)
|
||||||
if _value:
|
if _value:
|
||||||
kv_pairs[
|
kv_pairs[
|
||||||
f"{SpanAttributes.LLM_COMPLETIONS}.{idx}.function_call.{key}"
|
f"{SpanAttributes.LLM_COMPLETIONS.value}.{idx}.function_call.{key}"
|
||||||
] = _value
|
] = _value
|
||||||
|
|
||||||
return kv_pairs
|
return kv_pairs
|
||||||
|
@ -634,7 +634,7 @@ class OpenTelemetry(CustomLogger):
|
||||||
if prompt.get("role"):
|
if prompt.get("role"):
|
||||||
self.safe_set_attribute(
|
self.safe_set_attribute(
|
||||||
span=span,
|
span=span,
|
||||||
key=f"{SpanAttributes.LLM_PROMPTS}.{idx}.role",
|
key=f"{SpanAttributes.LLM_PROMPTS.value}.{idx}.role",
|
||||||
value=prompt.get("role"),
|
value=prompt.get("role"),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -643,7 +643,7 @@ class OpenTelemetry(CustomLogger):
|
||||||
prompt["content"] = str(prompt.get("content"))
|
prompt["content"] = str(prompt.get("content"))
|
||||||
self.safe_set_attribute(
|
self.safe_set_attribute(
|
||||||
span=span,
|
span=span,
|
||||||
key=f"{SpanAttributes.LLM_PROMPTS}.{idx}.content",
|
key=f"{SpanAttributes.LLM_PROMPTS.value}.{idx}.content",
|
||||||
value=prompt.get("content"),
|
value=prompt.get("content"),
|
||||||
)
|
)
|
||||||
#############################################
|
#############################################
|
||||||
|
@ -655,14 +655,14 @@ class OpenTelemetry(CustomLogger):
|
||||||
if choice.get("finish_reason"):
|
if choice.get("finish_reason"):
|
||||||
self.safe_set_attribute(
|
self.safe_set_attribute(
|
||||||
span=span,
|
span=span,
|
||||||
key=f"{SpanAttributes.LLM_COMPLETIONS}.{idx}.finish_reason",
|
key=f"{SpanAttributes.LLM_COMPLETIONS.value}.{idx}.finish_reason",
|
||||||
value=choice.get("finish_reason"),
|
value=choice.get("finish_reason"),
|
||||||
)
|
)
|
||||||
if choice.get("message"):
|
if choice.get("message"):
|
||||||
if choice.get("message").get("role"):
|
if choice.get("message").get("role"):
|
||||||
self.safe_set_attribute(
|
self.safe_set_attribute(
|
||||||
span=span,
|
span=span,
|
||||||
key=f"{SpanAttributes.LLM_COMPLETIONS}.{idx}.role",
|
key=f"{SpanAttributes.LLM_COMPLETIONS.value}.{idx}.role",
|
||||||
value=choice.get("message").get("role"),
|
value=choice.get("message").get("role"),
|
||||||
)
|
)
|
||||||
if choice.get("message").get("content"):
|
if choice.get("message").get("content"):
|
||||||
|
@ -674,7 +674,7 @@ class OpenTelemetry(CustomLogger):
|
||||||
)
|
)
|
||||||
self.safe_set_attribute(
|
self.safe_set_attribute(
|
||||||
span=span,
|
span=span,
|
||||||
key=f"{SpanAttributes.LLM_COMPLETIONS}.{idx}.content",
|
key=f"{SpanAttributes.LLM_COMPLETIONS.value}.{idx}.content",
|
||||||
value=choice.get("message").get("content"),
|
value=choice.get("message").get("content"),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
@ -1,8 +1,6 @@
|
||||||
# What is this?
|
# What is this?
|
||||||
## Unit tests for opentelemetry integration
|
## Unit tests for opentelemetry integration
|
||||||
|
|
||||||
# What is this?
|
|
||||||
## Unit test for presidio pii masking
|
|
||||||
import sys, os, asyncio, time, random
|
import sys, os, asyncio, time, random
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
import traceback
|
import traceback
|
||||||
|
@ -17,7 +15,7 @@ sys.path.insert(
|
||||||
) # Adds the parent directory to the system path
|
) # Adds the parent directory to the system path
|
||||||
import pytest
|
import pytest
|
||||||
import litellm
|
import litellm
|
||||||
from unittest.mock import patch, MagicMock, AsyncMock
|
from unittest.mock import patch, MagicMock
|
||||||
from base_test import BaseLoggingCallbackTest
|
from base_test import BaseLoggingCallbackTest
|
||||||
from litellm.types.utils import ModelResponse
|
from litellm.types.utils import ModelResponse
|
||||||
|
|
||||||
|
@ -26,15 +24,14 @@ class TestOpentelemetryUnitTests(BaseLoggingCallbackTest):
|
||||||
def test_parallel_tool_calls(self, mock_response_obj: ModelResponse):
|
def test_parallel_tool_calls(self, mock_response_obj: ModelResponse):
|
||||||
tool_calls = mock_response_obj.choices[0].message.tool_calls
|
tool_calls = mock_response_obj.choices[0].message.tool_calls
|
||||||
from litellm.integrations.opentelemetry import OpenTelemetry
|
from litellm.integrations.opentelemetry import OpenTelemetry
|
||||||
from litellm.proxy._types import SpanAttributes
|
|
||||||
|
|
||||||
kv_pair_dict = OpenTelemetry._tool_calls_kv_pair(tool_calls)
|
kv_pair_dict = OpenTelemetry._tool_calls_kv_pair(tool_calls)
|
||||||
|
|
||||||
assert kv_pair_dict == {
|
assert kv_pair_dict == {
|
||||||
f"{SpanAttributes.LLM_COMPLETIONS}.0.function_call.arguments": '{"city": "New York"}',
|
"gen_ai.completion.0.function_call.arguments": '{"city": "New York"}',
|
||||||
f"{SpanAttributes.LLM_COMPLETIONS}.0.function_call.name": "get_weather",
|
"gen_ai.completion.0.function_call.name": "get_weather",
|
||||||
f"{SpanAttributes.LLM_COMPLETIONS}.1.function_call.arguments": '{"city": "New York"}',
|
"gen_ai.completion.1.function_call.arguments": '{"city": "New York"}',
|
||||||
f"{SpanAttributes.LLM_COMPLETIONS}.1.function_call.name": "get_news",
|
"gen_ai.completion.1.function_call.name": "get_news",
|
||||||
}
|
}
|
||||||
|
|
||||||
@pytest.mark.asyncio
|
@pytest.mark.asyncio
|
||||||
|
|
|
@ -1,8 +1,5 @@
|
||||||
import json
|
|
||||||
import os
|
import os
|
||||||
import sys
|
import sys
|
||||||
from datetime import datetime
|
|
||||||
from unittest.mock import AsyncMock
|
|
||||||
|
|
||||||
sys.path.insert(
|
sys.path.insert(
|
||||||
0, os.path.abspath("../..")
|
0, os.path.abspath("../..")
|
||||||
|
@ -10,7 +7,7 @@ sys.path.insert(
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
import litellm
|
import litellm
|
||||||
from litellm.integrations.opentelemetry import OpenTelemetry, OpenTelemetryConfig, Span
|
from litellm.integrations.opentelemetry import OpenTelemetry, OpenTelemetryConfig
|
||||||
import asyncio
|
import asyncio
|
||||||
import logging
|
import logging
|
||||||
from opentelemetry.sdk.trace.export.in_memory_span_exporter import InMemorySpanExporter
|
from opentelemetry.sdk.trace.export.in_memory_span_exporter import InMemorySpanExporter
|
||||||
|
@ -86,6 +83,10 @@ def validate_litellm_request(span):
|
||||||
"llm.usage.total_tokens",
|
"llm.usage.total_tokens",
|
||||||
"gen_ai.usage.completion_tokens",
|
"gen_ai.usage.completion_tokens",
|
||||||
"gen_ai.usage.prompt_tokens",
|
"gen_ai.usage.prompt_tokens",
|
||||||
|
"gen_ai.prompt.0.role",
|
||||||
|
"gen_ai.prompt.0.content",
|
||||||
|
"gen_ai.completion.0.role",
|
||||||
|
"gen_ai.completion.0.content",
|
||||||
]
|
]
|
||||||
|
|
||||||
# get the str of all the span attributes
|
# get the str of all the span attributes
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue