o
    ùT·j=(  ã                   @  sÞ  U d dl mZ d dlZd dlZd dlmZmZmZmZ d dl	m
Z
mZmZ d dlZddlmZ ddlmZmZ dd	lmZmZ dd
lmZmZ ddlmZ ddlmZmZ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+m,Z, ddl-m.Z. ddl/m0Z1 ddl2m3Z3 e
ddd�Z4dZ5de6d< e 7d¡Z8de6d< dZdd„Z9efd[d"d#„Z:efd\d%d&„Z;efd]d(d)„Z<d^d0d1„Z=d_d6d7„Z>d`d;d<„Z?dadAdB„Z@edCœdbdFdG„ZAdcdIdJ„ZBdddMdN„ZCdedPdQ„ZDdfdTdU„ZEdgdXdY„ZFdS )hé    )ÚannotationsN)ÚTYPE_CHECKINGÚAnyÚIterableÚcast)ÚTypeVarÚ	TypeGuardÚassert_neveré   )ÚPydanticFunctionToolé   )ÚOmitÚomit)Úis_dictÚis_given)ÚPYDANTIC_V1Úmodel_parse_json)Úconstruct_type_unchecked)Úis_basemodel_typeÚto_strict_json_schemaÚis_dataclass_like_type)
ÚParsedChoiceÚChatCompletionÚParsedFunctionÚParsedChatCompletionÚChatCompletionMessageÚParsedFunctionToolCallÚParsedChatCompletionMessageÚChatCompletionToolUnionParamÚChatCompletionFunctionToolParamÚcompletion_create_params)ÚLengthFinishReasonErrorÚContentFilterFinishReasonError)ÚFunctionDefinition)ÚResponseFormat)ÚFunctionÚResponseFormatT)ÚdefaultÚNoneÚ_default_response_formatzopenai.lib.parsingzlogging.LoggerÚlogÚtoolr   Úreturnú*TypeGuard[ChatCompletionFunctionToolParam]c                 C  s*   | d dksdS | d   d¡durdS dS )zDCheck if the given tool is a strict ChatCompletionFunctionToolParam.ÚtypeÚfunctionFÚstrictT©Úget)r+   © r3   úc/home/dinkstrade/pdmp-scanner/venv/lib/python3.10/site-packages/openai/lib/_parsing/_completions.pyÚ$is_strict_chat_completion_tool_param+   s
   r5   Útoolsú-Iterable[ChatCompletionToolUnionParam] | Omitú0Iterable[ChatCompletionFunctionToolParam] | Omitc                 C  s   t | ƒstS dd„ | D ƒS )zMSelect only the strict ChatCompletionFunctionToolParams from the given tools.c                 S  s   g | ]}t |ƒr|‘qS r3   )r5   ©Ú.0Útr3   r3   r4   Ú
<listcomp>>   s    z7select_strict_chat_completion_tools.<locals>.<listcomp>)r   r   ©r6   r3   r3   r4   Ú#select_strict_chat_completion_tools7   s   r>   ú)list[ChatCompletionToolUnionParam] | Omitc                 C  s   t | ƒstS t| ƒS ©N)r   r   Úlistr=   r3   r3   r4   Úmaterialize_input_toolsA   s   rB   ú,list[ChatCompletionFunctionToolParam] | Omitc                 C  sz   t | ƒ}t|ƒs
tS |D ])}|d dkrtd|d › d�ƒ‚|d  d¡}|dur5td|d d › d�ƒ‚qttt |ƒS )	Nr.   r/   zECurrently only `function` tool types support auto-parsing; Received `ú`r0   TÚnamez@` is not strict. Only `strict` function tools can be auto-parsed)rB   r   r   Ú
ValueErrorr2   r   rA   r   )r6   Úinput_toolsr+   r0   r3   r3   r4   Úvalidate_input_toolsJ   s   ÿÿÿrH   Úresponse_formatúFtype[ResponseFormatT] | completion_create_params.ResponseFormat | OmitrG   Úchat_completionú-ChatCompletion | ParsedChatCompletion[object]ú%ParsedChatCompletion[ResponseFormatT]c           	      C  sf  t |ƒrdd„ |D ƒ}ng }g }|jD ]�}|jdkrt|d�‚|jdkr)t|d�‚|j}g }|jr~|jD ]I}|jdkr_| ¡ }| 	t
i |¥di tt|d ƒ¥dt||jd�i¥i¥td	�¡ q4|jd
krqtjd|j|jjdd� q4trxt|ƒ q4| 	|¡ q4| 	t
tt i | ¡ ¥di | ¡ ¥t| |d�|r˜|nd dœ¥i¥d�¡ qt
tt i | ¡ ¥d|i¥d�S )Nc                 S  s   g | ]}|‘qS r3   r3   r9   r3   r3   r4   r<   g   s    z)parse_chat_completion.<locals>.<listcomp>Úlength)Ú
completionÚcontent_filterr/   Úparsed_arguments)rG   r/   )ÚvalueÚtype_Úcustomz?Custom tool calls are not callable. Ignoring tool call: %s - %sr
   )Ú
stacklevelÚmessage©rI   rV   )ÚparsedÚ
tool_calls)rS   rR   Úchoices)r   rZ   Úfinish_reasonr!   r"   rV   rY   r.   Úto_dictÚappendr   r   r   Úparse_function_tool_argumentsr/   r   r*   ÚwarningÚidrT   rE   r   r	   r   r&   Úmaybe_parse_contentr   )	rI   rG   rK   rZ   ÚchoicerV   rY   Ú	tool_callÚtool_call_dictr3   r3   r4   Úparse_chat_completion`   s†   






ÿÿÿþþ	öÿ
ü
ÿÿþ
úþþÿÿþþre   ú"list[ChatCompletionToolUnionParam]rE   Ústrú&ChatCompletionFunctionToolParam | Nonec                   s   t ‡ fdd„| D ƒd ƒS )Nc                 3  s6   � | ]}|d  dkr|  di ¡  d¡ˆ kr|V  qdS )r.   r/   rE   Nr1   r9   ©rE   r3   r4   Ú	<genexpr>²   s   €4 z)get_input_tool_by_name.<locals>.<genexpr>)Únext©rG   rE   r3   ri   r4   Úget_input_tool_by_name¯   s   rm   r/   úFunction | ParsedFunctionúobject | Nonec                 C  sb   t | |jd�}|sd S tt| d¡ƒ}t|tƒrt|j|j	ƒS tt
|ƒ}| d¡s+d S t |j	¡S )Nrl   r/   r0   )rm   rE   r   Úobjectr2   Ú
isinstancer   r   ÚmodelÚ	argumentsr#   ÚjsonÚloads)rG   r/   Ú
input_toolÚinput_fnr3   r3   r4   r^   µ   s   


r^   ú2type[ResponseFormatT] | ResponseFormatParam | OmitrV   ú;ChatCompletionMessage | ParsedChatCompletionMessage[object]úResponseFormatT | Nonec                 C  s$   t | ƒr|jr|jst| |jƒS d S r@   )Úhas_rich_response_formatÚcontentÚrefusalÚ_parse_contentrW   r3   r3   r4   ra   È   s   ra   )rG   ú!type | ResponseFormatParam | OmitÚboolc                 C  s,   t | ƒrdS |p	g D ]	}t|ƒr dS q
dS )NTF)r{   Úis_parseable_tool)rI   rG   rv   r3   r3   r4   Úhas_parseable_inputÓ   s   ÿr‚   ú TypeGuard[type[ResponseFormatT]]c                 C  s   t | ƒsdS t| ƒrdS dS )NFT)r   Úis_response_format_param©rI   r3   r3   r4   r{   â   s
   r{   rp   úTypeGuard[ResponseFormatParam]c                 C  s   t | ƒS r@   )r   r…   r3   r3   r4   r„   î   s   r„   rv   c                 C  sB   | d dkrdS t t|  d¡ƒ}t|tƒrdS t t|ƒ d¡p dS )Nr.   r/   FTr0   )r   rp   r2   rq   r   r#   )rv   rw   r3   r3   r4   r�   ò   s   
r�   útype[ResponseFormatT]r|   c                 C  sP   t | ƒrttt| |ƒƒS t| ƒr!trtd| › �ƒ‚t | ¡ 	|¡S td| › �ƒ‚)Nz:Non BaseModel types are only supported with Pydantic v2 - z3Unable to automatically parse response format type )
r   r   r&   r   r   r   Ú	TypeErrorÚpydanticÚTypeAdapterÚvalidate_json)rI   r|   r3   r3   r4   r~   ý   s   r~   ú5type | completion_create_params.ResponseFormat | OmitúResponseFormatParam | Omitc                 C  sx   t | ƒstS t| ƒr| S tt| ƒ} d }t| ƒr| j}| }nt| ƒr*| j}t 	| ¡}nt
d| › �ƒ‚dt|ƒ|ddœdœS )Nz#Unsupported response_format type - Újson_schemaT)ÚschemarE   r0   )r.   rŽ   )r   r   r„   r   r.   r   Ú__name__r   r‰   rŠ   rˆ   r   )rI   Újson_schema_typerE   r3   r3   r4   Útype_to_response_format_param
  s&   
ýþr’   )r+   r   r,   r-   )r6   r7   r,   r8   )r6   r7   r,   r?   )r6   r7   r,   rC   )rI   rJ   rG   r7   rK   rL   r,   rM   )rG   rf   rE   rg   r,   rh   )rG   rf   r/   rn   r,   ro   )rI   rx   rV   ry   r,   rz   )rI   r   rG   r7   r,   r€   )rI   rx   r,   rƒ   )rI   rp   r,   r†   )rv   r   r,   r€   )rI   r‡   r|   rg   r,   r&   )rI   rŒ   r,   r�   )GÚ
__future__r   rt   ÚloggingÚtypingr   r   r   r   Útyping_extensionsr   r   r	   r‰   Ú_toolsr   Ú_typesr   r   Ú_utilsr   r   Ú_compatr   r   Ú_modelsr   Ú	_pydanticr   r   r   Ú
types.chatr   r   r   r   r   r   r   r   r   r    Ú_exceptionsr!   r"   Útypes.shared_paramsr#   Ú#types.chat.completion_create_paramsr$   ÚResponseFormatParamÚ5types.chat.chat_completion_message_function_tool_callr%   r&   r)   Ú__annotations__Ú	getLoggerr*   r5   r>   rB   rH   re   rm   r^   ra   r‚   r{   r„   r�   r~   r’   r3   r3   r3   r4   Ú<module>   sR    0ý
ÿÿ
ÿ

O

ý



