§
    ~ŠtjYO  ã                  óä  — 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 d dlmZ d dlmZ d dlmZ d d	lmZ d d
l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! d dl"m#Z#  ededde
f         ¬¦  «        Z$ ej%        e&¦  «        Z'ej(        dJd„¦   «         Z)dKd„Z*dKd„Z+dLd!„Z,dMd#„Z-dNd&„Z.dOd)„Z/dPd+„Z0dQd.„Z1	 	 	 dRdSd8„Z2	 	 dTdUd:„Z3dVd=„Z4 G d>„ d?ed@¬A¦  «        Z5ddBddCœdWdG„Z6dXdI„Z7dS )Yé    )ÚannotationsN)Údefaultdict)ÚMapping)ÚTYPE_CHECKINGÚAnyÚCallableÚOptionalÚTypeVarÚUnion)Ú	TypedDict)Úclient)Úrun_helpers)Úapply_default_ls_agent_type)Ú_create_usage_metadata)ÚAsyncOpenAIÚOpenAI)ÚChatCompletionChunkÚChoiceÚChoiceDeltaToolCall)Ú
Completion)ÚResponseStreamEventÚCr   r   )ÚboundÚreturnútuple[type, ...]c                 ó¬   — g } 	 ddl m}m} |                      |¦  «         |                      |¦  «         n# t          $ r Y nw xY wt          | ¦  «        S )z4Get NotGiven/Omit sentinel types used by OpenAI SDK.r   )ÚNotGivenÚOmit)Úopenai._typesr   r   ÚappendÚImportErrorÚtuple)Útypesr   r   s      úX/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/langsmith/wrappers/_openai.pyÚ_get_omit_typesr%   *   s{   € ð  €EðØ0Ð0Ð0Ð0Ð0Ð0Ð0Ð0à�Š�XÑÔÐØ�Š�TÑÔÐÐøÝð ð ð Øˆðøøøõ �‰<Œ<Ðs   „27 ·
AÁAÚdÚdictc                óÖ   ‡— 	 t          ¦   «         Š‰s| S ˆfd„|                      ¦   «         D ¦   «         S # t          $ r)}t                               d|› �¦  «         | cY d }~S d }~ww xY w)Nc                ój   •— i | ]/\  }}t          |‰¦  «        s|                     d ¦  «        r|®,||“Œ0S )Úextra_)Ú
isinstanceÚ
startswith)Ú.0ÚkÚvÚ
omit_typess      €r$   ú
<dictcomp>z$_strip_not_given.<locals>.<dictcomp>>   sX   ø€ ð 
ð 
ð 
á��1Ý˜q *Ñ-Ô-ð
ð 34·,²,¸xÑ2HÔ2Hð
ð NOÈYð ˆqàMVÈYÈYó    zError stripping NotGiven: )r%   ÚitemsÚ	ExceptionÚloggerÚerror)r&   Úer0   s     @r$   Ú_strip_not_givenr8   9   sž   ø€ ðÝ$Ñ&Ô&ˆ
Øð 	ØˆHð
ð 
ð 
ð 
àŸš™	œ	ð
ñ 
ô 
ð 	
øõ
 ð ð ð Ý�ŠÐ5°!Ð5Ð5Ñ6Ô6Ð6Øˆˆˆˆˆˆøøøøðøøøs   ƒ5 •5 µ
A(¿A#ÁA(Á#A(c                ó²   — t          | ¦  «        } d| v rC| d         }t          |d¦  «        r+	 i | ¥d|                     ¦   «         i¥S # t          $ r Y nw xY w| S )zCStrip `NotGiven` values and serialize `text_format` to JSON schema.Útext_formatÚmodel_json_schema)r8   Úhasattrr;   r4   )r&   r:   s     r$   Ú_process_inputsr=   H   s’   € å˜ÑÔ€Að ˜ÐÐØ˜Ô&ˆÝ�;Ð 3Ñ4Ô4ð 	ððØðà! ;×#@Ò#@Ñ#BÔ#Bðð ð øõ ð ð ð Ø�ðøøøà€Hs   ­A Á
AÁAÚ
model_typeÚstrÚproviderÚprepopulated_invocation_paramsÚuse_responses_apiÚboolÚkwargsc           	     ó  ‡	— t          |¦  «        }|                     d¦  «        }|rt          |t          ¦  «        r|g}h d£Š	ˆ	fd„|                     ¦   «         D ¦   «         }|rd|d<   |                     d¦  «        }t          |t
          ¦  «        si }i |¥|| |                     d¦  «        |                     d¦  «        |                     d	¦  «        p)|                     d
¦  «        p|                     d¦  «        |i |¥|¥dœ¥S )NÚstop>   ÚnÚseedÚuserÚtop_pÚlogprobsÚ	reasoningÚ	verbosityÚ
logit_biasÚ
modalitiesÚ
predictionÚ
truncationÚservice_tierÚtop_logprobsÚstream_optionsÚresponse_formatÚpresence_penaltyÚprompt_cache_keyÚreasoning_effortÚfrequency_penaltyÚweb_search_optionsÚparallel_tool_callsc                ó$   •— i | ]\  }}|‰v ¯	||“ŒS © r]   )r-   r.   r/   Úallowed_invocation_keyss      €r$   r1   z,_infer_invocation_params.<locals>.<dictcomp>‚   s1   ø€ ð ð ð Ù��A¨QÐ2IÐ-IÐ-Iˆˆ1Ð-IÐ-IÐ-Ir2   TrB   ÚmetadataÚmodelÚtemperatureÚ
max_tokensÚmax_completion_tokensÚmax_output_tokens)Úls_providerÚls_model_typeÚls_model_nameÚls_temperatureÚls_max_tokensÚls_stopÚls_invocation_params)r8   Úgetr+   r?   r3   r   )
r>   r@   rA   rB   rD   ÚstrippedrF   Úinvocation_paramsÚrequest_metadatar^   s
            @r$   Ú_infer_invocation_paramsrp   Z   s_  ø€ õ   Ñ'Ô'€Hà�<Š<˜ÑÔ€DØð •
˜4¥Ñ%Ô%ð Øˆvˆðð ð Ðð2ð ð ð Ø!ŸšÑ)Ô)ðñ ô Ðð ð 6Ø15ÐÐ-Ñ.à—|’| JÑ/Ô/ÐÝÐ&­Ñ0Ô0ð ØÐðØ
ðàØ#Ø!Ÿš gÑ.Ô.Ø"Ÿ,š, }Ñ5Ô5Ø!Ÿš lÑ3Ô3ð -Ø�<Š<Ð/Ñ0Ô0ð-à�<Š<Ð+Ñ,Ô,Øð!
Ø,ð!
àð!
ðð ð ð r2   Útextrac                ó¸   — t          | ¦  «        }t          |                     d¦  «        pi ¦  «        }t          |t          j        ¦   «         ¦  «         ||d<   |S )a$  Return textra with ls_agent_type defaulted at the wrapper-config layer.

    A user-supplied value (including None) is preserved unchanged; None flows
    through as an explicit opt-out that overrides any propagated parent tag via
    traceable's metadata_.update(wrapper_metadata) step.
    r_   )r'   rl   r   r   Úget_current_run_tree)rq   Úresultr_   s      r$   Ú$_traceable_kwargs_with_ls_agent_typeru   ž   sU   € õ �&‰\Œ\€FÝ�F—J’J˜zÑ*Ô*Ð0¨bÑ1Ô1€HÝ ­+Ô*JÑ*LÔ*LÑMÔMÐMØ!€Fˆ:ÑØ€Mr2   Úchoicesúlist[Choice]c                óö  — t          t          | ¦  «        ¦  «        }dddœ}|D ]9}t          |d¦  «        r't          |j        dd ¦  «        r|j        j        |d<    nŒ:t          t           ¦  «        }| D �]&}t          |d¦  «        �rt          |j        dd ¦  «        r|dxx         |j        j        z  cc<   t          |j        dd ¦  «        rƒ|                     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 ¦  «        r3|j        j
        }|�%|D ]"}||j                                      |¦  «         Œ#�Œ(|�r%d„ t          t          |                     ¦   «         ¦  «        dz   ¦  «        D ¦   «         |d<   |                     ¦   «         D ]Ò\  }	}
|	t#          d„ |
D ¦   «         d ¦  «        t#          d„ |
D ¦   «         d ¦  «        dddœdœ|d         |	<   |
D ]‡}t          |dd ¦  «        rtt          |j        d	d ¦  «        }|r"|d         |	         d         d	xx         |z  cc<   t          |j        d
d ¦  «        }|r"|d         |	         d         d
xx         |z  cc<   ŒˆŒÓ| rt          | d         dd¦  «        ndt#          d„ |D ¦   «         d ¦  «        |dœS )NÚ	assistantÚ ©ÚroleÚcontentÚdeltar|   r}   Úfunction_call)ÚnameÚ	argumentsr€   r�   Ú
tool_callsc                ó   — g | ]}d ‘ŒS ©Nr]   )r-   Ú_s     r$   ú
<listcomp>z#_reduce_choices.<locals>.<listcomp>Ê   s   € Ð QÐ QÐ Q¨! Ð QÐ QÐ Qr2   é   c              3  ó2   K  — | ]}|j         ¯	|j         V — Œd S r„   )Úid©r-   Úcs     r$   ú	<genexpr>z"_reduce_choices.<locals>.<genexpr>Î   s+   è è € ÐCÐC Q¸a¼dÐC˜AœDÐCÐCÐCÐCÐCÐCr2   c              3  ó2   K  — | ]}|j         ¯	|j         V — Œd S r„   )ÚtyperŠ   s     r$   rŒ   z"_reduce_choices.<locals>.<genexpr>Ï   s+   è è € ÐIÐI¨À!Ä&ÐI˜aœfÐIÐIÐIÐIÐIÐIr2   )Úindexr‰   rŽ   Úfunctionr�   r   r�   c              3  óF   K  — | ]}t          |d d¦  «        ¯|j        V — ŒdS )Úfinish_reasonN)Úgetattrr’   rŠ   s     r$   rŒ   z"_reduce_choices.<locals>.<genexpr>ß   sJ   è è € ð ð àÝ˜1˜o¨tÑ4Ô4ðØ”ðð ð ð ð ð r2   )r�   r’   Úmessage)ÚlistÚreversedr<   r“   r~   r|   r   r}   rl   r   r‚   r�   r    ÚrangeÚmaxÚkeysr3   Únextr�   )rv   Úreversed_choicesr”   r‹   r‚   Úname_Ú
arguments_Útool_calls_listÚ	tool_callr�   Útool_call_chunksÚchunks               r$   Ú_reduce_choicesr¢   ¬   sÊ  € Ý�H WÑ-Ô-Ñ.Ô.ÐàØðð €Gð ð ð ˆÝ�1�gÑÔð 	¥7¨1¬7°F¸DÑ#AÔ#Að 	ØœgœlˆG�F‰OØˆEøÝ>IÍ$Ñ>OÔ>O€JØð Fñ FˆÝ�1�gÑÔñ 	FÝ�q”w 	¨4Ñ0Ô0ð 6Ø˜	Ð"Ð"Ô" a¤g¤oÑ5Ð"Ð"Ñ"Ý�q”w °Ñ6Ô6ð HØ—{’{ ?Ñ3Ô3ð MØ8:ÈÐ/LÐ/L�G˜OÑ,Ý ¤Ô 5°v¸tÑDÔD�Øð >Ø˜OÔ,¨VÐ4Ð4Ô4¸Ñ=Ð4Ð4Ñ4Ý$ Q¤WÔ%:¸KÈÑNÔN�
Øð HØ˜OÔ,¨[Ð9Ð9Ô9¸ZÑGÐ9Ð9Ñ9Ý�q”w ¨dÑ3Ô3ð FØ"#¤'Ô"4�Ø"Ð.Ø%4ð Fð F˜	Ø" 9¤?Ô3×:Ò:¸9ÑEÔEÐEÐEùØñ Ø QÐ Q­uµS¸¿ºÑ9JÔ9JÑ5KÔ5KÈaÑ5OÑ/PÔ/PÐ QÑ QÔ Qˆ�ÑØ'1×'7Ò'7Ñ'9Ô'9ð 	ð 	Ñ#ˆEÐ#àÝÐCÐCÐ*:ÐCÑCÔCÀTÑJÔJÝÐIÐIÐ.>ÐIÑIÔIÈ4ÑPÔPØ%'°bÐ9Ð9ð	,ð ,ˆG�LÔ! %Ñ(ð *ð 	ð 	�Ý˜5 *¨dÑ3Ô3ð Ý# E¤N°F¸DÑAÔA�EØð RØ Ô-¨eÔ4°ZÔ@ÀÐHÐHÔHÈEÑQÐHÐHÑHÝ!(¨¬¸ÀdÑ!KÔ!K�JØ!ð Ø Ô-¨eÔ4°ZÔ@ÀÐMÐMÔMØ&ñÐMÐMÑMøð	ð 5<ÐB•˜ œ W¨aÑ0Ô0Ð0ÀÝðð à)ðñ ô ð
 ñ
ô 
ð ðð ð r2   Ú
all_chunksúlist[ChatCompletionChunk]c                ót  — t          t          ¦  «        }| D ],}|j        D ]"}||j                                      |¦  «         Œ#Œ-| r<| d                              ¦   «         }d„ |                     ¦   «         D ¦   «         |d<   n
dddddœigi}|                     dd ¦  «        }|rt          |¦  «        nd |d	<   |S )
Néÿÿÿÿc                ó,   — g | ]}t          |¦  «        ‘ŒS r]   )r¢   )r-   rv   s     r$   r†   z _reduce_chat.<locals>.<listcomp>ñ   s-   € ð 
ð 
ð 
Ø)0�O˜GÑ$Ô$ð
ð 
ð 
r2   rv   r”   ry   rz   r{   ÚusageÚusage_metadata)	r   r•   rv   r�   r    Ú
model_dumpÚvaluesÚpopr   )r£   Úchoices_by_indexr¡   Úchoicer&   Úoai_token_usages         r$   Ú_reduce_chatr°   ê   sú   € Ý7BÅ4Ñ7HÔ7HÐØð :ð :ˆØ”mð 	:ð 	:ˆFØ˜Vœ\Ô*×1Ò1°&Ñ9Ô9Ð9Ð9ð	:àð MØ�rŒN×%Ò%Ñ'Ô'ˆð
ð 
Ø4D×4KÒ4KÑ4MÔ4Mð
ñ 
ô 
ˆˆ)‰ˆð ˜)¨kÀbÐ%IÐ%IÐJÐKÐLˆð —e’e˜G TÑ*Ô*€Oà3BÐLÕ˜Ñ/Ô/Ð/Èð ÐÑð €Hr2   úlist[Completion]c                óè   — g }| D ]+}|j         d         j        }|�|                     |¦  «         Œ,d                     |¦  «        }| r#| d                              ¦   «         }d|ig|d<   ndd|igi}|S )Nr   rz   r¦   Útextrv   )rv   r³   r    Újoinrª   )r£   Úall_contentr¡   r}   r&   s        r$   Ú_reduce_completionsr¶   ÿ   s˜   € Ø€KØð (ð (ˆØ”- Ô"Ô'ˆØÐØ×Ò˜wÑ'Ô'Ð'øØ�gŠg�kÑ"Ô"€GØð -Ø�rŒN×%Ò%Ñ'Ô'ˆØ Ð)Ð*ˆˆ)‰ˆà˜& 'Ð*Ð+Ð,ˆà€Hr2   Úoutputsr   c                ó´  — 	 t          | d¦  «        r:t          | j        ¦  «        r&	 |                      ¦   «         } n# t          $ r Y nw xY w|                      ¦   «         }|                     dd ¦  «        }|r#t          ||                     d¦  «        ¦  «        nd |d<   |S # t          $ r+}t           
                    d|› �¦  «         d| icY d }~S d }~ww xY w)NÚparser¨   rR   r©   z"Error processing chat completion: Úoutput)r<   Úcallabler¹   r4   rª   r¬   r   rl   ÚBaseExceptionr5   Údebug)r·   Úrdictr¯   r7   s       r$   Ú_process_chat_completionr¿     s  € ð#õ
 �7˜GÑ$Ô$ð 	­°'´-Ñ)@Ô)@ð 	ðØ!Ÿ-š-™/œ/��øÝð ð ð Ø�ðøøøð ×"Ò"Ñ$Ô$ˆØŸ)š) G¨TÑ2Ô2ˆð ðÕ" ?°E·I²I¸nÑ4MÔ4MÑNÔNÐNàð 	ÐÑð
 ˆøÝð #ð #ð #Ý�ŠÐ=¸!Ð=Ð=Ñ>Ô>Ð>Ø˜'Ð"Ð"Ð"Ð"Ð"Ð"Ð"øøøøð#øøøs>   ‚$B" §< »B" ¼
A	ÁB" ÁA	Á	AB" Â"
CÂ, CÃCÃCÚoriginal_creater   r€   Ú	reduce_fnÚtracing_extraúOptional[TracingExtra]Úinvocation_params_fnúOptional[Callable]Úprocess_outputsc                óÖ   ‡ ‡‡‡‡‡— |pi Št          j        ‰ ¦  «        ˆˆˆ ˆˆˆfd„¦   «         }t          j        ‰ ¦  «        ˆˆˆ ˆˆˆfd„¦   «         }t          j        ‰ ¦  «        r|n|S )Nc            
     ó¬   •— t          j        d‰d|                     d¦  «        du r‰nd t          ‰‰dœt	          ‰¦  «        ¤Ž}  |‰¦  «        | i |¤ŽS ©NÚllmÚstreamT©r€   Úrun_typerÁ   Úprocess_inputsÚ_invocation_params_fnrÆ   r]   ©r   Ú	traceablerl   r=   ru   ©	ÚargsrD   Ú	decoratorrÄ   r€   rÀ   rÆ   rÁ   rq   s	      €€€€€€r$   Úcreatez_get_wrapper.<locals>.create2  s~   ø€ åÔ)ð 
ØØØ#)§:¢:¨hÑ#7Ô#7¸4Ð#?Ð#?�i�iÀTÝ*Ø"6Ø+ð
ð 
õ 3°6Ñ:Ô:ð
ð 
ˆ	ð *ˆyˆy˜Ñ)Ô)¨4Ð:°6Ð:Ð:Ð:r2   c            
   Ÿ  ó¼   •K  — t          j        d‰d|                     d¦  «        du r‰nd t          ‰‰dœt	          ‰¦  «        ¤Ž}  |‰¦  «        | i |¤Žƒ d {V —†S rÉ   rÐ   rÒ   s	      €€€€€€r$   Úacreatez_get_wrapper.<locals>.acreate@  s”   øè è € åÔ)ð 
ØØØ#)§:¢:¨hÑ#7Ô#7¸4Ð#?Ð#?�i�iÀTÝ*Ø"6Ø+ð
ð 
õ 3°6Ñ:Ô:ð
ð 
ˆ	ð 0�Y�Y˜Ñ/Ô/°Ð@¸Ð@Ð@Ð@Ð@Ð@Ð@Ð@Ð@Ð@r2   ©Ú	functoolsÚwrapsr   Úis_async)	rÀ   r€   rÁ   rÂ   rÄ   rÆ   rÕ   r×   rq   s	   ``` ``  @r$   Ú_get_wrapperrÜ   (  sÊ   øøøøøø€ ð Ð ˜b€Få„_�_Ñ%Ô%ð;ð ;ð ;ð ;ð ;ð ;ð ;ð ;ð ;ñ &Ô%ð;õ „_�_Ñ%Ô%ð
Að 
Að 
Að 
Að 
Að 
Að 
Að 
Að 
Añ &Ô%ð
Aõ "Ô*¨?Ñ;Ô;ÐGˆ7ˆ7ÀÐGr2   Úoriginal_parsec                óÐ   ‡ ‡‡‡‡— |pi Št          j        ‰ ¦  «        ˆˆˆ ˆˆfd„¦   «         }t          j        ‰ ¦  «        ˆˆˆ ˆˆfd„¦   «         }t          j        ‰ ¦  «        r|n|S )Nc            
     óz   •— t          j        d‰dd t          ‰‰dœt          ‰¦  «        ¤Ž}  |‰¦  «        | i |¤ŽS ©NrÊ   rÌ   r]   ©r   rÑ   r=   ru   ©rÓ   rD   rÔ   rÄ   r€   rÝ   rÆ   rq   s      €€€€€r$   r¹   z!_get_parse_wrapper.<locals>.parseY  sd   ø€ åÔ)ð 
ØØØÝ*Ø"6Ø+ð
ð 
õ 3°6Ñ:Ô:ð
ð 
ˆ	ð )ˆyˆy˜Ñ(Ô(¨$Ð9°&Ð9Ð9Ð9r2   c            
   Ÿ  óŠ   •K  — t          j        d‰dd t          ‰‰dœt          ‰¦  «        ¤Ž}  |‰¦  «        | i |¤Žƒ d {V —†S rà   rá   râ   s      €€€€€r$   Úaparsez"_get_parse_wrapper.<locals>.aparsef  sz   øè è € åÔ)ð 
ØØØÝ*Ø"6Ø+ð
ð 
õ 3°6Ñ:Ô:ð
ð 
ˆ	ð /�Y�Y˜~Ñ.Ô.°Ð?¸Ð?Ð?Ð?Ð?Ð?Ð?Ð?Ð?Ð?r2   rØ   )rÝ   r€   rÆ   rÂ   rÄ   r¹   rä   rq   s   ``` `  @r$   Ú_get_parse_wrapperrå   P  s¾   øøøøø€ ð Ð ˜b€Få„_�^Ñ$Ô$ð
:ð 
:ð 
:ð 
:ð 
:ð 
:ð 
:ð 
:ñ %Ô$ð
:õ „_�^Ñ$Ô$ð
@ð 
@ð 
@ð 
@ð 
@ð 
@ð 
@ð 
@ñ %Ô$ð
@õ !Ô)¨.Ñ9Ô9ÐDˆ6ˆ6¸uÐDr2   Úeventsúlist[ResponseStreamEvent]c                óR   — | D ]#}|j         dk    rt          |j        ¦  «        c S Œ$i S )Nzresponse.completed)rŽ   Ú_process_responses_api_outputÚresponse)ræ   Úevents     r$   Ú_reduce_response_eventsrì   v  sA   € Øð Að AˆØŒ:Ð-Ò-Ð-Ý0°´Ñ@Ô@Ð@Ð@Ð@ð .à€Ir2   c                  ó.   — e Zd ZU ded<   ded<   ded<   dS )ÚTracingExtrazOptional[Mapping[str, Any]]r_   zOptional[list[str]]ÚtagszOptional[ls_client.Client]r   N)Ú__name__Ú
__module__Ú__qualname__Ú__annotations__r]   r2   r$   rî   rî   }  s6   € € € € € € Ø)Ð)Ð)Ñ)ØÐÐÑØ&Ð&Ð&Ñ&Ð&Ð&r2   rî   F)ÚtotalÚ
ChatOpenAI)rÂ   Ú	chat_nameÚcompletions_namer   rö   r÷   c               óÆ  — |pi }t          |                     d¦  «        pi ¦  «        }|                     di ¦  «        }d„ |                     ¦   «         D ¦   «         }|r||d<   d}	 ddlm}m}	 t          | |	¦  «        st          | |¦  «        rd}d}d	}n# t          $ r Y nw xY wt          | j
        j        j        |t          |t          j        t           d
||d¦  «        t"          ¬¦  «        | j
        j        _        t          | j        j        |t$          |t          j        t           d||d¦  «        ¬¦  «        | j        _        t'          | d¦  «        rªt'          | j        d
¦  «        r•t'          | j        j
        d¦  «        r{t'          | j        j
        j        d¦  «        r\t+          | j        j
        j        j        |t"          |t          j        t           d
||d¦  «        ¬¦  «        | j        j
        j        _        t'          | d
¦  «        r�t'          | j
        d¦  «        rlt'          | j
        j        d¦  «        rRt+          | j
        j        j        |t"          |t          j        t           d
||d¦  «        ¬¦  «        | j
        j        _        t'          | d¦  «        rÀt'          | j        d¦  «        rNt          | j        j        |t0          t2          |t          j        t           d
||d¦  «        ¬¦  «        | j        _        t'          | j        d¦  «        rHt+          | j        j        |t2          |t          j        t           d
||d¦  «        ¬¦  «        | j        _        | S )ay  Patch the OpenAI client to make it traceable.

    Supports:
        - Chat and Responses API's
        - Sync and async OpenAI clients
        - `create` and `parse` methods
        - With and without streaming
        - `with_raw_response` API for accessing HTTP headers

    Args:
        client: The client to patch.
        tracing_extra: Extra tracing information.
        chat_name: The run name for the chat completions endpoint.
        completions_name: The run name for the completions endpoint.

    Returns:
        The patched client.

    Example:
        ```python
        import openai
        from langsmith import wrappers

        # Use OpenAI client same as you normally would.
        client = wrappers.wrap_openai(openai.OpenAI())

        # Chat API:
        messages = [
            {"role": "system", "content": "You are a helpful assistant."},
            {
                "role": "user",
                "content": "What physics breakthroughs do you predict will happen by 2300?",
            },
        ]
        completion = client.chat.completions.create(
            model="gpt-4o-mini", messages=messages
        )
        print(completion.choices[0].message.content)

        # Responses API:
        response = client.responses.create(
            model="gpt-4o-mini",
            messages=messages,
        )
        print(response.output_text)

        # With raw response to access headers:
        raw_response = client.chat.completions.with_raw_response.create(
            model="gpt-4o-mini", messages=messages
        )
        print(raw_response.headers)  # Access HTTP headers
        completion = raw_response.parse()  # Get parsed response
        ```

    !!! warning "Behavior changed in `langsmith` 0.3.16"

        Support for Responses API added.

    !!! warning "Behavior changed in `langsmith` 0.3.x"

        Support for `with_raw_response` API added.
    r_   rk   c                ó&   — i | ]\  }}|d k    ¯||“ŒS )r_   r]   )r-   r.   r/   s      r$   r1   zwrap_openai.<locals>.<dictcomp>Ï  s*   € ð (ð (ð (Ù��A°!°z²/°/ˆˆ1°/°/°/r2   Úopenair   )ÚAsyncAzureOpenAIÚAzureOpenAIÚazureÚAzureChatOpenAIrü   ÚchatF)rÂ   rÄ   rÆ   rÊ   )rÂ   rÄ   ÚbetaÚcompletionsr¹   Ú	responsesrÕ   T)rÆ   rÂ   rÄ   )r'   rl   r¬   r3   rú   rû   rü   r+   r!   rÜ   rÿ   r  rÕ   r°   rÙ   Úpartialrp   r¿   r¶   r<   r   rå   r¹   r  rì   ré   )
r   rÂ   rö   r÷   r_   rA   Útracing_extra_restre   rû   rü   s
             r$   Úwrap_openair  ƒ  sÇ  € ðJ "Ð' R€Mõ �M×%Ò% jÑ1Ô1Ð7°RÑ8Ô8€HØ%-§\¢\Ð2HÈ"Ñ%MÔ%MÐ"ð(ð (Ø&×,Ò,Ñ.Ô.ð(ñ (ô (Ðð ð 2Ø)1Ð˜:Ñ&à€KðØ8Ð8Ð8Ð8Ð8Ð8Ð8Ð8å�f˜kÑ*Ô*ð 	-­j¸ÐAQÑ.RÔ.Rð 	-Ø!ˆKØ)ˆIØ,ÐøøÝð ð ð Øˆðøøøõ &2ØŒÔÔ&ØÝØ(Ý&Ô.Ý$ØØØ*Øñ
ô 
õ 1ð&ñ &ô &€F„KÔÔ"õ !-ØÔÔ!ØÝØ(Ý&Ô.Ý$ØØØ*Øñ
ô 
ð!ñ !ô !€FÔÔõ  	�˜ÑÔð
å�F”K Ñ(Ô(ð
õ �F”KÔ$ mÑ4Ô4ð
õ �F”KÔ$Ô0°'Ñ:Ô:ð	
õ .@ØŒKÔÔ(Ô.ØÝ$Ø,Ý!*Ô!2Ý(ØØØ.Øñ"ô "ð.
ñ .
ô .
ˆŒÔÔ$Ô*õ  	�˜ÑÔð
å�F”K Ñ/Ô/ð
õ �F”KÔ+¨WÑ5Ô5ð
õ
 );ØŒKÔ#Ô)ØÝ$Ø,Ý!*Ô!2Ý(ØØØ.Øñ"ô "ð)
ñ )
ô )
ˆŒÔÔ%õ ˆv�{Ñ#Ô#ð Ý�6Ô# XÑ.Ô.ð 	Ý&2ØÔ Ô'ØÝ'Ý =Ø0Ý%.Ô%6Ý,ØØØ2Øñ&ô &ð'ñ 'ô 'ˆFÔÔ#õ �6Ô# WÑ-Ô-ð 	Ý%7ØÔ Ô&ØÝ-Ø0Ý%.Ô%6Ý,ØØØ2Øñ&ô &ð&ñ &ô &ˆFÔÔ"ð €Ms   Á'.B Â
B#Â"B#rê   c                óv  — | r¶	 t          | d¦  «        r:t          | j        ¦  «        r&	 |                      ¦   «         } n# t          $ r Y nw xY w|                      dd¬¦  «        }|                     dd ¦  «        x}r&t          ||                     d¦  «        ¦  «        |d<   |S # t          $ r d| icY S w xY wi S )	Nr¹   TÚjson)Úexclude_noneÚmoder¨   rR   r©   rº   )r<   r»   r¹   r4   rª   r¬   r   rl   )rê   rº   r¨   s      r$   ré   ré   J  sû   € Øð (ð	(å�x Ñ)Ô)ð ­h°x´~Ñ.FÔ.Fð ðØ'Ÿ~š~Ñ/Ô/�H�HøÝ ð ð ð Ø�Dðøøøð ×(Ò(°dÀÐ(ÑHÔHˆFØŸ
š
 7¨DÑ1Ô1Ð1ˆuð Ý+AØ˜6Ÿ:š: nÑ5Ô5ñ,ô ,�Ð'Ñ(ð ˆMøÝð 	(ð 	(ð 	(Ø˜hÐ'Ð'Ð'Ð'ð	(øøøà€Is2   „$B% ©> ½B% ¾
AÁB% Á
AÁAB% Â%B6Â5B6)r   r   )r&   r'   r   r'   )
r>   r?   r@   r?   rA   r'   rB   rC   rD   r'   )rq   r'   r   r'   )rv   rw   r   r'   )r£   r¤   r   r'   )r£   r±   r   r'   )r·   r   )NNN)rÀ   r   r€   r?   rÁ   r   rÂ   rÃ   rÄ   rÅ   rÆ   rÅ   r   r   )NN)rÝ   r   r€   r?   rÆ   r   rÂ   rÃ   rÄ   rÅ   r   r   )ræ   rç   r   r'   )
r   r   rÂ   rÃ   rö   r?   r÷   r?   r   r   )rê   r   r   r'   )8Ú
__future__r   rÙ   ÚloggingÚcollectionsr   Úcollections.abcr   Útypingr   r   r   r	   r
   r   Útyping_extensionsr   Ú	langsmithr   Ú	ls_clientr   Ú"langsmith._internal._ls_agent_typer   Úlangsmith._internal._usager   rú   r   r   Ú'openai.types.chat.chat_completion_chunkr   r   r   Úopenai.types.completionr   Úopenai.types.responsesr   r   Ú	getLoggerrð   r5   Ú	lru_cacher%   r8   r=   rp   ru   r¢   r°   r¶   r¿   rÜ   rå   rì   rî   r  ré   r]   r2   r$   ú<module>r     sX  ðØ "Ð "Ð "Ð "Ð "Ð "à Ð Ð Ð Ø €€€Ø #Ð #Ð #Ð #Ð #Ð #Ø #Ð #Ð #Ð #Ð #Ð #ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð (Ð 'Ð 'Ð 'Ð 'Ð 'à )Ð )Ð )Ð )Ð )Ð )Ø !Ð !Ð !Ð !Ð !Ð !Ø JÐ JÐ JÐ JÐ JÐ Jð
 >Ð =Ð =Ð =Ð =Ð =àð ;Ø*Ð*Ð*Ð*Ð*Ð*Ð*Ð*ðð ð ð ð ð ð ð ð ð ð
 3Ð2Ð2Ð2Ð2Ð2Ø:Ð:Ð:Ð:Ð:Ð:ð €GˆC�u˜X }°cÐ9Ô:Ð;Ñ;Ô;€Ø	ˆÔ	˜8Ñ	$Ô	$€ð Ôðð ð ñ Ôððð ð ð ðð ð ð ð$Að Að Að AðHð ð ð ð;ð ;ð ;ð ;ð|ð ð ð ð*ð ð ð ð #ð #ð #ð #ð: -1Ø/3Ø*.ð%Hð %Hð %Hð %Hð %HðX -1Ø/3ð#Eð #Eð #Eð #Eð #EðLð ð ð ð'ð 'ð 'ð 'ð '�9 Eð 'ñ 'ô 'ð 'ð -1Ø!Ø$ðDð Dð Dð Dð Dð DðNð ð ð ð ð r2   