
    g#                       U d dl m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' ddl(m)Z)m*Z* ddl+m,Z, ddl-m.Z/ ddl0m1Z1  e	dd      Z2dZ3de4d<   ef	 	 	 d#dZ5	 	 	 	 	 	 	 	 d$dZ6d%dZ7	 	 	 	 	 	 d&dZ8	 	 	 	 	 	 d'dZ9	 	 	 	 d(dZ:ed	 	 	 	 	 d)dZ;	 	 	 	 d*dZ<d+dZ=d,d Z>d-d!Z?	 	 	 	 d.d"Z@y)/    )annotationsN)TYPE_CHECKINGAnyIterablecast)TypeVar	TypeGuardassert_never   )PydanticFunctionTool   )	NOT_GIVENNotGiven)is_dictis_given)PYDANTIC_V2model_parse_json)construct_type_unchecked)is_basemodel_typeto_strict_json_schemais_dataclass_like_type)	ParsedChoiceChatCompletionParsedFunctionParsedChatCompletionChatCompletionMessageParsedFunctionToolCallChatCompletionToolParamParsedChatCompletionMessagecompletion_create_params)LengthFinishReasonErrorContentFilterFinishReasonError)FunctionDefinition)ResponseFormat)FunctionResponseFormatT)defaultNone_default_response_formatc                    t        |       sy | D ]I  }|d   dk7  rt        d|d    d      |d   j                  d      }|dus6t        d|d   d    d       y )	NtypefunctionzECurrently only `function` tool types support auto-parsing; Received ``strictTnamez@` is not strict. Only `strict` function tools can be auto-parsed)r   
ValueErrorget)toolstoolr.   s      U/var/www/openai/venv/lib/python3.12/site-packages/openai/lib/_parsing/_completions.pyvalidate_input_toolsr5   '   s     E?<:%WX\]cXdWeefg  j!%%h/D$V,--mn      c                   t        |      r|D cg c]  }| }}ng }g }|j                  D ]e  }|j                  dk(  rt        |      |j                  dk(  r
t	               |j
                  }g }|j                  r|j                  D ]  }|j                  dk(  rc|j                         }	|j                  t        i |	di t        t        |	d         dt        ||j                        iit                     ut         rt#        |       |j                  |        |j                  t        t        t        t$              t'        |          i |j                         di |j                         t)        | |	      |d
i             h t        t*        t,           t        t        t        t*              t'        |          i |j                         d|i            S c c}w )Nlength)
completioncontent_filterr,   parsed_arguments)input_toolsr,   )valuetype_messageresponse_formatr?   )parsed
tool_calls)r>   r=   choices)r   rD   finish_reasonr!   r"   r?   rC   r+   to_dictappendr   r   r   parse_function_tool_argumentsr,   r   r   r
   r   solve_response_format_tmaybe_parse_contentr   r&   )
rA   r<   chat_completiontrD   choicer?   rC   	tool_calltool_call_dicts
             r4   parse_chat_completionrP   :   s    "-.+Qq+.35G!))8+)_EE#33022..35
$//	>>Z/%.%6%6%8N%%0#"0# * -"&*3z0J&K-"$68U4?)J\J\9&-"# #9 # +%%i0) 0, 	$3-.Eo.VW
nn&
  !//+ "5,;$+# '1 
	
C *d _- s012I/2Z[!))+7	
	 	o /s   	G)c                .    t        fd| D        d       S )Nc              3  l   K   | ]+  }|j                  d i       j                  d      k(  s(| - yw)r,   r/   N)r1   ).0rL   r/   s     r4   	<genexpr>z)get_input_tool_by_name.<locals>.<genexpr>   s0     UKq155R+@+D+DV+LPT+TKs   )44)nextr<   r/   s    `r4   get_input_tool_by_namerW      s    UKUW[\\r6   c                V   t        | |j                        }|sy t        t        |j	                  d            }t        |t              r t        |j                  |j                        S t        t        |      }|j	                  d      sy t        j                  |j                        S )NrV   r,   r.   )rW   r/   r   objectr1   
isinstancer   r   model	argumentsr#   jsonloads)r<   r,   
input_toolinput_fns       r4   rH   rH      s     (KhmmTJFJNN:67H(010B0BCC&1H<<!::h(())r6   c                v    t        |       r.|j                  "|j                  st        | |j                        S y N)has_rich_response_formatcontentrefusal_parse_contentr@   s     r4   rJ   rJ      s2    
  0W__5PY`YhYhow??r6   c                <    t        |       r| S t        dt              S )zReturn the runtime type for the given response format.

    If no response format is given, or if we won't auto-parse the response format
    then we default to `None`.
    type[ResponseFormatT])rc   r   r)   rA   s    r4   rI   rI      s!      0')ABBr6   )r<   c                L    t        |       ry|xs g D ]  }t        |      s y y)NTF)rc   is_parseable_tool)rA   r<   r_   s      r4   has_parseable_inputrl      s1    
  0!'R'
Z( ( r6   c                4    t        |       syt        |       ryy)NFT)r   is_response_format_paramri   s    r4   rc   rc      s     O$0r6   c                    t        |       S rb   )r   ri   s    r4   rn   rn      s    ?##r6   c                    t        t        | j                  d            }t        |t              ryt        t
        |      j                  d      xs dS )Nr,   Tr.   F)r   rY   r1   rZ   r   r#   )r_   r`   s     r4   rk   rk      sC    FJNN:67H(01"H-11(;DuDr6   c                    t        |       rt        t        t        | |            S t	        |       r8t
        st        d|        t        j                  |       j                  |      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)rA   rd   s     r4   rf   rf      so    )O%5ow%OPPo.XYhXijkk##O4BB7KK
I/IZ[
\\r6   c                0   t        |       st        S t        |       r| S t        t        |       } d }t        |       r| j                  }| }n;t        |       r"| j                  }t        j                  |       }nt        d|        dt        |      |dddS )Nz#Unsupported response_format type - json_schemaT)schemar/   r.   )r+   rw   )r   r   rn   r   r+   r   __name__r   rs   rt   rr   r   )rA   json_schema_typer/   s      r4   type_to_response_format_paramr{      s     O$0
 41OTX)''*		0''#//@=o=NOPP +,<=
 r6   )r2   ,Iterable[ChatCompletionToolParam] | NotGivenreturnr(   )rA   zJtype[ResponseFormatT] | completion_create_params.ResponseFormat | NotGivenr<   r|   rK   z-ChatCompletion | ParsedChatCompletion[object]r}   z%ParsedChatCompletion[ResponseFormatT])r<   list[ChatCompletionToolParam]r/   strr}   zChatCompletionToolParam | None)r<   r~   r,   zFunction | ParsedFunctionr}   rY   )rA   6type[ResponseFormatT] | ResponseFormatParam | NotGivenr?   z;ChatCompletionMessage | ParsedChatCompletionMessage[object]r}   zResponseFormatT | None)rA   r   r}   rh   )rA   z%type | ResponseFormatParam | NotGivenr<   r|   r}   bool)rA   r   r}   z TypeGuard[type[ResponseFormatT]])rA   rY   r}   zTypeGuard[ResponseFormatParam])r_   r   r}   r   )rA   rh   rd   r   r}   r&   )rA   z9type | completion_create_params.ResponseFormat | NotGivenr}   zResponseFormatParam | NotGiven)A
__future__r   r]   typingr   r   r   r   typing_extensionsr   r	   r
   rs   _toolsr   _typesr   r   _utilsr   r   _compatr   r   _modelsr   	_pydanticr   r   r   
types.chatr   r   r   r   r   r   r   r   r    _exceptionsr!   r"   types.shared_paramsr#   #types.chat.completion_create_paramsr$   ResponseFormatParam,types.chat.chat_completion_message_tool_callr%   r&   r)   __annotations__r5   rP   rW   rH   rJ   rI   rl   rc   rn   rk   rf   r{    r6   r4   <module>r      sw   "  5 5 > >  ) ) ' 4 / X X
 
 
 S 5 X D
 "& $ % ;D7	&G_G >G C	G
 +GT]*1*=V**&K I 	CKCC" AJ: > 
		K	%	$E
] N # r6   