# What is this? ## Unit tests for opentelemetry integration # What is this? ## Unit test for presidio pii masking import sys, os, asyncio, time, random from datetime import datetime import traceback from dotenv import load_dotenv load_dotenv() import os import asyncio sys.path.insert( 0, os.path.abspath("../..") ) # Adds the parent directory to the system path import pytest import litellm from unittest.mock import patch, MagicMock, AsyncMock from base_test import BaseLoggingCallbackTest from litellm.types.utils import ModelResponse class TestOpentelemetryUnitTests(BaseLoggingCallbackTest): def test_parallel_tool_calls(self, mock_response_obj: ModelResponse): tool_calls = mock_response_obj.choices[0].message.tool_calls from litellm.integrations.opentelemetry import OpenTelemetry from litellm.proxy._types import SpanAttributes kv_pair_dict = OpenTelemetry._tool_calls_kv_pair(tool_calls) assert kv_pair_dict == { f"{SpanAttributes.LLM_COMPLETIONS}.0.function_call.arguments": '{"city": "New York"}', f"{SpanAttributes.LLM_COMPLETIONS}.0.function_call.name": "get_weather", f"{SpanAttributes.LLM_COMPLETIONS}.1.function_call.arguments": '{"city": "New York"}', f"{SpanAttributes.LLM_COMPLETIONS}.1.function_call.name": "get_news", } @pytest.mark.asyncio async def test_opentelemetry_integration(self): """ Unit test to confirm the parent otel span is ended """ parent_otel_span = MagicMock() litellm.callbacks = ["otel"] await litellm.acompletion( model="gpt-3.5-turbo", messages=[{"role": "user", "content": "Hello, world!"}], mock_response="Hey!", metadata={"litellm_parent_otel_span": parent_otel_span}, ) await asyncio.sleep(1) parent_otel_span.end.assert_called_once()