1919 raise DidNotEnable ("LiteLLM not installed" )
2020
2121
22- def _get_provider_from_model (model ):
23- # type: (str) -> str
24- """Extract provider name from model string using LiteLLM's logic"""
25- if not model :
26- return "unknown"
27-
28- # Common provider prefixes/patterns
29- if model .startswith ("gpt-" ) or model .startswith ("o1-" ) or "openai/" in model :
30- return "openai"
31- elif model .startswith ("claude-" ) or "anthropic/" in model :
32- return "anthropic"
33- elif (
34- model .startswith ("gemini-" )
35- or "google/" in model
36- or model .startswith ("vertex_ai/" )
37- ):
38- return "google"
39- elif "cohere/" in model or model .startswith ("command-" ):
40- return "cohere"
41- elif "azure/" in model :
42- return "azure"
43- elif "bedrock/" in model :
44- return "bedrock"
45- elif "ollama/" in model :
46- return "ollama"
47- else :
48- # Try to use LiteLLM's internal provider detection if available
49- try :
50- if hasattr (litellm , "get_llm_provider" ):
51- provider_info = litellm .get_llm_provider (model )
52- if isinstance (provider_info , tuple ) and len (provider_info ) > 1 :
53- return provider_info [1 ] or "unknown"
54- return "unknown"
55- except Exception :
56- return "unknown"
57-
58-
5922def _get_metadata_dict (kwargs ):
6023 # type: (Dict[str, Any]) -> Dict[str, Any]
6124 """Get the metadata dictionary from the kwargs."""
62- return kwargs .setdefault ("litellm_params" , {}).setdefault ("metadata" , {})
25+ litellm_params = kwargs .setdefault ("litellm_params" , {})
26+
27+ # we need this weird little dance, as metadata might be set but may be None initially
28+ metadata = litellm_params .get ("metadata" )
29+ if metadata is None :
30+ metadata = {}
31+ litellm_params ["metadata" ] = metadata
32+ return metadata
6333
6434
65- def _input_callback (
66- kwargs , # type: Dict[str, Any]
67- ):
68- # type: (...) -> None
35+ def _input_callback (kwargs ):
36+ # type: (Dict[str, Any]) -> None
6937 """Handle the start of a request."""
7038 integration = sentry_sdk .get_client ().get_integration (LiteLLMIntegration )
7139
7240 if integration is None :
7341 return
7442
7543 # Get key parameters
76- model = kwargs .get ("model" , "" )
44+ full_model = kwargs .get ("model" , "" )
45+ try :
46+ model , provider , _ , _ = litellm .get_llm_provider (full_model )
47+ except Exception :
48+ model = full_model
49+ provider = "unknown"
50+
7751 messages = kwargs .get ("messages" , [])
7852 operation = "chat" if messages else "embeddings"
7953
@@ -93,11 +67,8 @@ def _input_callback(
9367 _get_metadata_dict (kwargs )["_sentry_span" ] = span
9468
9569 # Set basic data
96- set_data_normalized (span , SPANDATA .GEN_AI_SYSTEM , "litellm" )
70+ set_data_normalized (span , SPANDATA .GEN_AI_SYSTEM , provider )
9771 set_data_normalized (span , SPANDATA .GEN_AI_OPERATION_NAME , operation )
98- set_data_normalized (
99- span , "gen_ai.litellm.provider" , _get_provider_from_model (model )
100- )
10172
10273 # Record messages if allowed
10374 if messages and should_send_default_pii () and integration .include_prompts :
@@ -131,13 +102,8 @@ def _input_callback(
131102 set_data_normalized (span , f"gen_ai.litellm.{ key } " , value )
132103
133104
134- def _success_callback (
135- kwargs , # type: Dict[str, Any]
136- completion_response , # type: Any
137- start_time , # type: datetime
138- end_time , # type: datetime
139- ):
140- # type: (...) -> None
105+ def _success_callback (kwargs , completion_response , start_time , end_time ):
106+ # type: (Dict[str, Any], Any, datetime, datetime) -> None
141107 """Handle successful completion."""
142108
143109 span = _get_metadata_dict (kwargs ).get ("_sentry_span" )
@@ -196,13 +162,8 @@ def _success_callback(
196162 span .__exit__ (None , None , None )
197163
198164
199- def _failure_callback (
200- kwargs , # type: Dict[str, Any]
201- exception , # type: Exception
202- start_time , # type: datetime
203- end_time , # type: datetime
204- ):
205- # type: (...) -> None
165+ def _failure_callback (kwargs , exception , start_time , end_time ):
166+ # type: (Dict[str, Any], Exception, datetime, datetime) -> None
206167 """Handle request failure."""
207168 span = _get_metadata_dict (kwargs ).get ("_sentry_span" )
208169 if span is None :
0 commit comments