
    6|h0                       d dl mZ d dlZd dlZd dlmZ d dlmZ d dlm	Z	m
Z
mZmZmZmZmZmZmZmZ d dlmZ d dlmZ d dlmZ d d	lmZmZmZ e	rd d
lmZmZ d dl m!Z!m"Z"m#Z# d dl$m%Z%  ededde
f         Z& ejN                  e(      Z)ejT                  d"d       Z+d#dZ,d$dZ-d%dZ.d&dZ/d'dZ0d(dZ1d)dZ2	 	 	 d*	 	 	 	 	 	 	 	 	 	 	 	 	 d+dZ3	 	 d,	 	 	 	 	 	 	 	 	 d-dZ4 G d ded      Z5dddd 	 	 	 	 	 	 	 	 	 d.d!Z6y)/    )annotationsN)defaultdict)Mapping)
TYPE_CHECKINGAnyCallableDefaultDictDictListOptionalTypeTypeVarUnion)	TypedDict)client)run_helpers)InputTokenDetailsOutputTokenDetailsUsageMetadata)AsyncOpenAIOpenAI)ChatCompletionChunkChoiceChoiceDeltaToolCall)
CompletionCr   r   )boundc                 2    	 ddl m}  | S # t        $ r Y y w xY w)Nr   NotGiven)openai._typesr    ImportErrorr   s    Y/var/www/html/test/engine/venv/lib/python3.12/site-packages/langsmith/wrappers/_openai.py_get_not_givenr$   (   s!    * s   
 	c                    	 t               }|| S | j                         D ci c]  \  }}t        ||      r|| c}}S c c}}w # t        $ r$}t        j                  d|        | cY d }~S d }~ww xY w)NzError stripping NotGiven: )r$   items
isinstance	Exceptionloggererror)d	not_givenkves        r#   _strip_not_givenr0   2   sn    "$	H!"KA*Q	2J1KKK 1!56s7   A A AAA A 	A4A/)A4/A4c                    t        |      }|j                  d      }|rt        |t              r|g}d| |j                  dd       |j                  dd       |j                  dd       |dS )Nstopopenaimodeltemperature
max_tokens)ls_providerls_model_typels_model_namels_temperaturels_max_tokensls_stop)r0   getr'   str)
model_typekwargsstrippedr2   s       r#   _infer_invocation_paramsrB   =   sl    'H<<D
4%v  #!gt4",,}d;!lD9     c                   t        t        |             }ddd}|D ]A  }t        |d      st        |j                  dd       s(|j                  j
                  |d<    n t        t               }| D ]N  }t        |d      st        |j                  dd       s)t        |j                  dd       r!|dxx   |j                  j                  z  cc<   t        |j                  dd       r|j                  d      sddd|d<   t        |j                  j                  d	d       }|r|d   d	xx   |z  cc<   t        |j                  j                  d
d       }|r|d   d
xx   |z  cc<   t        |j                  dd       s|j                  j                  }|*|D ]   }||j                     j                  |       " Q |r|j                         D 	cg c]  }	d  c}	|d<   |j                         D ]  \  }
}|
t        d |D        d       t        d |D        d       d|d   |
<   |D ]  }t        |dd       s|d   |
   j                  d      sddd|d   |
   d<   t        |j                   d	d       }|r|d   |
   d   }|d	xx   |z  cc<   t        |j                   d
d       }|s|d   |
   d   }|d
xx   |z  cc<     | rt        | d   dd      ndt        d |D        d       |dS c c}	w )N	assistant rolecontentdeltarH   rI   function_call)name	argumentsrL   rM   
tool_callsc              3  N   K   | ]  }|j                   s|j                     y wN)id.0cs     r#   	<genexpr>z"_reduce_choices.<locals>.<genexpr>p   s     CQaddADDC   %%c              3  N   K   | ]  }|j                   s|j                     y wrP   )typerR   s     r#   rU   z"_reduce_choices.<locals>.<genexpr>q   s     I!&&affIrV   )indexrQ   rX   functionr   rY   c              3  N   K   | ]  }t        |d d      r|j                    yw)finish_reasonN)getattrr\   rR   s     r#   rU   z"_reduce_choices.<locals>.<genexpr>   s(      1ot4 s   #%)rY   r\   message)listreversedhasattrr]   rJ   rH   r   rI   r=   rK   rN   rY   appendkeysr&   nextrZ   )choicesreversed_choicesr^   rT   rN   name_
arguments_tool_calls_list	tool_call_rY   tool_call_chunkschunkfn_s                 r#   _reduce_choicesro   N   s   HW-.G  1g7177FD#AggllGFO ?J$>OJ >1g7177It#Dqww	40	"aggoo5"qww6{{?38:/LGO, 5 5vtDO,V4=4$QWW%:%:KN
O,[9ZG9qwwd3"#''"4"4".%4 >	"177+229=>!>$ /9/@ A! A'1'7'7'9 	7#E#C*:CTJI.>I4P,GL!%(
 * 75*d3"<07;;JG$&)+D-e4Z@ $ENNFDAE%l3E::FFu,!(d!KJ!%l3E::FK(J6(7	7, 5<Wa0)
 
  - !Bs   	K3c                v   t        t              }| D ]1  }|j                  D ]   }||j                     j	                  |       " 3 | r>| d   j                         }|j                         D cg c]  }t        |       c}|d<   n
dddddigi}|j                  dd       }|rt        |      nd |d<   |S c c}w )	Nre   r^   rE   rF   rG   usageusage_metadata)
r   r_   re   rY   rb   
model_dumpvaluesro   pop_create_usage_metadata)
all_chunkschoices_by_indexrm   choicer+   re   oai_token_usages          r#   _reduce_chatr|      s    7B47H :mm 	:FV\\*11&9	:: rN%%'4D4K4K4M
)0OG$
) )kb%IJKL eeGT*O3B/  H
s   -B6c                    g }| D ]/  }|j                   d   j                  }||j                  |       1 dj                  |      }| r| d   j	                         }d|ig|d<   |S dd|igi}|S )Nr   rF   rq   textre   )re   r~   rb   joinrt   )rx   all_contentrm   rI   r+   s        r#   _reduce_completionsr      s    K (--"''w'( ggk"GrN%%')*) H &'*+,HrC   c                   | j                  d      xs d}| j                  d      xs d}| j                  d      xs ||z   }| j                  d      xs i j                  d      | j                  d      xs i j                  d      d}| j                  d	      xs i j                  d      | j                  d	      xs i j                  d
      d}t        |||t        di |j                         D ci c]  \  }}|	|| c}}t	        di |j                         D ci c]  \  }}|	|| c}}      S c c}}w c c}}w )Nprompt_tokensr   completion_tokenstotal_tokensprompt_tokens_detailsaudio_tokenscached_tokens)audio
cache_readcompletion_tokens_detailsreasoning_tokens)r   	reasoning)input_tokensoutput_tokensr   input_token_detailsoutput_token_details )r=   r   r   r&   r   )r{   r   r   r   r   r   r-   r.   s           r#   rw   rw      sk   "&&7<1L#''(;<AM"&&~6V,:VL!%%&=>D"II
 '**+BCIrNN
	! "%%&ABHbMM
 &))*EFL"QQ
	" !#!- 
 3 9 9 ;M1q}q!tM
 0 
 4 : : <N1q!tN

 

 N Os   7
EE&
E1Ec                    	 | j                         }|j                  dd       }|rt        |      nd |d<   |S # t        $ r&}t        j                  d|        d| icY d }~S d }~ww xY w)Nrr   rs   z"Error processing chat completion: output)rt   rv   rw   BaseExceptionr)   debug)outputsrdictr{   r/   s       r#   _process_chat_completionr      ss    	#""$))GT27F"?3D 	  #9!=>'""#s   58 	A'A"A'"A'c           	          |xs i t        j                         ddd fd       }t        j                         ddd fd       }t        j                         r|S |S )NF)streamc           
     l    t        j                  dd| rnd t        d	}  |      |d| i|S NllmrL   run_type	reduce_fnprocess_inputs_invocation_params_fnprocess_outputsr   r   )r   	traceabler0   
r   argsr@   	decoratorinvocation_params_fnrL   original_creater   r   textras
       r#   createz_get_wrapper.<locals>.create   sV    )) 
#)it+"6+
 
	 *y)4II&IIrC   c           
        K   t        |      }t        j                  dd| rnd t         d	}  |      |d| i| d {   S 7 wr   )r0   r   r   r   s
       r#   acreatez_get_wrapper.<locals>.acreate   sj     !&))) 
#)it+"6+
 
	 0Y/OfOOOOOs   AAAA)r   bool	functoolswrapsr   is_async)	r   rL   r   tracing_extrar   r   r   r   r   s	   ``` ``  @r#   _get_wrapperr      sw      bF___%%* J J &J ___%,1 P P &P "**?;7GGrC   c                     |xs i t        j                          fd       }t        j                          fd       }t        j                         r|S |S )Nc            
     h    t        j                  ddd t        t        d}  |      | i |S Nr   r   r   )r   r   r0   r   r   r@   r   r   rL   original_parser   s      r#   parsez!_get_parse_wrapper.<locals>.parse  sM    )) 
+"64
 
	 )y($9&99rC   c            
        K   t        |      }t        j                  ddd t         t        d}  |      | i | d {   S 7 wr   )r0   r   r   r   r   s      r#   aparsez"_get_parse_wrapper.<locals>.aparse!  sa     !&))) 
+"64
 
	 /Y~.?????s   AAA	Ar   )r   rL   r   r   r   r   r   s   `` `  @r#   _get_parse_wrapperr     sc      bF__^$
: %
: __^$@ %@ !)).96DuDrC   c                  ,    e Zd ZU ded<   ded<   ded<   y)TracingExtrazOptional[Mapping[str, Any]]metadatazOptional[List[str]]tagszOptional[ls_client.Client]r   N)__name__
__module____qualname____annotations__r   rC   r#   r   r   2  s    ))
&&rC   r   F)total
ChatOpenAI)r   	chat_namecompletions_namec          
     0   t        | j                  j                  j                  |t        |t        j                  t        d      t              | j                  j                  _        t        | j                  j                  |t        |t        j                  t        d            | j                  _        t        | d      rt        | j                  d      rt        | j                  j                  d      rt        | j                  j                  j                  d      rrt        | j                  j                  j                  j                  ||t        j                  t        d            | j                  j                  j                  _        | S )a)  Patch the OpenAI client to make it traceable.

    Args:
        client (Union[OpenAI, AsyncOpenAI]): The client to patch.
        tracing_extra (Optional[TracingExtra], optional): Extra tracing information.
            Defaults to None.
        chat_name (str, optional): The run name for the chat completions endpoint.
            Defaults to "ChatOpenAI".
        completions_name (str, optional): The run name for the completions endpoint.
            Defaults to "OpenAI".

    Returns:
        Union[OpenAI, AsyncOpenAI]: The patched client.

    chat)r   r   r   r   )r   r   betacompletionsr   )r   r   r   r   r|   r   partialrB   r   r   ra   r   r   r   )r   r   r   r   s       r#   wrap_openair   8  s%   , &2&&#&../GP0&FKK" !-!!#&../GO!F 	FKK(FKK$$m4FKK$$00':-?KK((..'!*!2!23KV!T	.
$$* MrC   )returnzOptional[Type])r+   dictr   r   )r?   r>   r@   r   )re   zList[Choice]r   r   )rx   zList[ChatCompletionChunk]r   r   )rx   zList[Completion]r   r   )r{   r   r   r   )r   r   )NNN)r   r   rL   r>   r   r   r   Optional[TracingExtra]r   Optional[Callable]r   r   r   r   )NN)
r   r   rL   r>   r   r   r   r   r   r   )
r   r   r   r   r   r>   r   r>   r   r   )7
__future__r   r   loggingcollectionsr   collections.abcr   typingr   r   r   r	   r
   r   r   r   r   r   typing_extensionsr   	langsmithr   	ls_clientr   langsmith.schemasr   r   r   r3   r   r   'openai.types.chat.chat_completion_chunkr   r   r   openai.types.completionr   r   	getLoggerr   r)   	lru_cacher$   r0   rB   ro   r|   r   rw   r   r   r   r   r   r   rC   r#   <module>r      s   "   # #   ( ) ! R R* 
 3 CuX}c9:;			8	$  "?D* B
#" -1/3*.&H&H
&H &H *	&H
 -&H (&H &HX -1/3	#E#E
#E *#E -	#E
 #EL'9E ' -1!$44 *4 	4
 4 4rC   