
    Ig='                       d dl mZ d dlZd dl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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jL                  e'      Z(ejR                  d d       Z*d!dZ+d"dZ,d#dZ-d$dZ.d%dZ/d&dZ0d'dZ1	 	 	 d(	 	 	 	 	 	 	 	 	 	 	 	 	 d)dZ2 G d ded      Z3dddd	 	 	 	 	 	 	 	 	 d*dZ4y)+    )annotationsN)defaultdict)TYPE_CHECKINGAnyCallableDefaultDictDictListMapping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    W/var/www/html/answerous/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 ]3  }|j                  j                  s|j                  j                  |d<    n t	        t               }| D ]V  }|j                  j
                  r!|dxx   |j                  j
                  z  cc<   |j                  j                  r|j                  d      sddd|d<   |j                  j                  j                  r.|d   dxx   |j                  j                  j                  z  cc<   |j                  j                  j                  r.|d   d	xx   |j                  j                  j                  z  cc<   |j                  j                  s|j                  j                  D ]   }||j                     j                  |       " Y |r%|j                         D cg c]  }d  c}|d
<   |j                         D ]  \  }}|t        d |D        d       t        d |D        d       d|d
   |<   |D ]  }	|	j                   s|d
   |   j                  d      sddd|d
   |   d<   |	j                   j                  r,|d
   |   d   }
|
dxx   |	j                   j                  z  cc<   |	j                   j                  s|d
   |   d   }
|
d	xx   |	j                   j                  z  cc<     | d   j                  t        d |D        d       |dS c c}w )N	assistant rolecontentrH   rI   function_call)name	argumentsrK   rL   
tool_callsc              3  N   K   | ]  }|j                   s|j                     y wN)id.0cs     r#   	<genexpr>z"_reduce_choices.<locals>.<genexpr>k   s     CQaddADDC   %%c              3  N   K   | ]  }|j                   s|j                     y wrO   )typerQ   s     r#   rT   z"_reduce_choices.<locals>.<genexpr>l   s     I!&&affIrU   )indexrP   rW   functionr   c              3  N   K   | ]  }|j                   s|j                     y wrO   )finish_reasonrQ   s     r#   rT   z"_reduce_choices.<locals>.<genexpr>~   s     J!//Q__JrU   )rX   r[   message)listreverseddeltarH   r   rI   rJ   r=   rK   rL   rM   rX   appendkeysr&   nextrY   )choicesreversed_choicesr\   rS   rM   	tool_call_rX   tool_call_chunkschunkfn_s              r#   _reduce_choicesrj   N   s   HW-.G  77<<ggllGFO ?J$>OJ 677??I!''//177  ;;/46R+H(ww$$))(0AGG4I4I4N4NN0ww$$..(59N9N9X9XX577WW// 6	177#**9566 /9/@ A! A'1'7'7'9 	E#E#C*:CTJI.>I4P,GL!%(
 * E>>"<07;;JG$&)+D-e4Z@ ~~**%l3E::FFu~~':'::~~//%l3E::FK(ENN,D,DD(E	E( !!J&6J
  ) !Bs   	L	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 )	Nrc   r\   rE   rF   rG   usageusage_metadata)
r   r]   rc   rX   r`   
model_dumpvaluesrj   pop_create_usage_metadata)
all_chunkschoices_by_indexrh   choicer+   rc   oai_token_usages          r#   _reduce_chatrw      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   rl   textrc   )rc   ry   r`   joinro   )rs   all_contentrh   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   )rv   r   r   r   r   r   r-   r.   s           r#   rr   rr      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)Nrm   rn   z"Error processing chat completion: output)ro   rq   rr   BaseExceptionr)   debug)outputsrdictrv   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)rK   run_type	reduce_fnprocess_inputs_invocation_params_fnprocess_outputsr   r   )r   	traceabler0   
r   argsr@   	decoratorinvocation_params_fnrK   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   rK   r   tracing_extrar   r   r   r   r   s	   ``` ``  @r#   _get_wrapperr      sw      bF___%%* J J &J ___%,1 P P &P "**?;7GGrC   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     s    ))
&&rC   r   F)total
ChatOpenAI)r   	chat_namecompletions_namec          
     t   t        | j                  j                  j                  |t        |t        j                  t        d      t              | j                  j                  _        t        | j                  j                  |t        |t        j                  t        d            | 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   )
r   r   completionsr   rw   r   partialrB   r   r|   )r   r   r   r   s       r#   wrap_openair     s    , &2&&#&../GP0&FKK" !-!!#&../GO!F MrC   )returnzOptional[Type])r+   dictr   r   )r?   r>   r@   r   )rc   zList[Choice]r   r   )rs   zList[ChatCompletionChunk]r   r   )rs   zList[Completion]r   r   )rv   r   r   r   )r   r   )NNN)r   r   rK   r>   r   r   r   Optional[TracingExtra]r   Optional[Callable]r   r   r   r   )
r   r   r   r   r   r>   r   r>   r   r   )5
__future__r   r   loggingcollectionsr   typingr   r   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   rj   rw   r|   rr   r   r   r   r   r   rC   r#   <module>r      s_   "   #    ( ) ! R R* 
 3 CuX}c9:;			8	$  "4n* B
#" -1/3*.&H&H
&H &H *	&H
 -&H (&H &HR'9E ' -1!$%% *% 	%
 % %rC   