66from deepeval .metrics import BaseMetric
77try :
88 from portkey_ai import Portkey
9- from portkey_ai .api_resources .apis .chat_complete import Completions
9+ from portkey_ai .api_resources .apis .chat_complete import Completions , ChatCompletions
1010 is_portkey_installed = True
1111except Exception :
1212 is_portkey_installed = False
@@ -44,7 +44,7 @@ def new_create(*args, **kwargs):
4444 func_name = "LLM" ,
4545 ) as observer :
4646 result = original_create (* args , ** kwargs )
47- observer .result = result
47+ observer .result = extract_chat_completion_messages ( result )
4848 current_span_context .get ().input = kwargs .get ("messages" )
4949 return result
5050
@@ -53,4 +53,27 @@ def new_create(*args, **kwargs):
5353
5454def instrument ():
5555 is_portkey_available ()
56- _patch_portkey_init ()
56+ _patch_portkey_init ()
57+
58+ def extract_chat_completion_messages (result : ChatCompletions ):
59+ try :
60+ choices = None
61+ if hasattr (result , "choices" ):
62+ choices = result .choices
63+ elif isinstance (result , dict ):
64+ choices = result .get ("choices" )
65+
66+ messages = []
67+ if isinstance (choices , list ):
68+ for c in choices :
69+ message = None
70+ if hasattr (c , "message" ):
71+ message = c .message
72+ elif isinstance (c , dict ):
73+ message = c .get ("message" )
74+ if message is not None :
75+ messages .append (make_json_serializable (message ))
76+
77+ return messages if messages else make_json_serializable (result )
78+ except Exception :
79+ return make_json_serializable (result )
0 commit comments