o
    i̭                 
   @  s  U d dl mZ d dlZd dlZd dlZd dlmZmZm	Z	 d dl
mZ d dlmZmZmZ d dlmZ d dl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mZ ddl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l!m*Z+m,Z-m.Z. ddl/m0Z0m1Z1m2Z2m3Z3 ddl4m5Z5 ddl6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@mAZAmBZBmCZCmDZDmEZEmFZFmGZGmHZHmIZImJZJmKZKmLZLmMZMmNZN ddlOmPZPmQZQ ddlRmSZSmTZT ddlUmVZVmWZW ddlXmYZY ddlZm[Z[ ddlm\Z\m]Z]m^Z^m_Z_m`Z`maZa zd dlbmcZcmdZdmeZemfZf d dlgmhZhmiZimjZj d dlkmlZlmmZmmnZnmoZompZp d dlqmrZr d dlsmtZt d d lumvZvmwZw d d!lxmyZy d d"lzm{Z{ d d#l|m}Z} d d$l~mZ d d%lmZmZmZ d d&lmZmZmZ d d'lmZmZ d d(lmZ d d)lmZ d d*lmZ d d+lmZ W n ey Z zed,edZ[ww erd d-lbmZmZ eZn#zd d-lbmZmZ eZW n ey   d d.lbmcZcmZ ecZeZY nw d/ZeehB Z	 d0Zd1ed2< 	 d3d4d5d6d5d7Zd8ed9< d4d6d3d:d:d;Zd<ed=< G d>d? d?eYd@dAZedBG dCdD dDed@dAZG dEdF dFed@dAZed@dGG dHdI dIe\ZedJed@dGG dKdL dLeZed@dGG dMdN dNe\ZeG dOdP dPe^ZeG dQdR dRe^Zdud[d\Zdvd_d`ZdwdedfZdxdidjZdydmdnZdzdpdqZd{dsdtZdS )|    )annotationsN)AsyncIterableAsyncIteratorSequence)asynccontextmanager)	dataclassfieldreplace)datetime)TYPE_CHECKINGAnyLiteralcastoverload)ValidationError)to_json)assert_never
deprecated   )ModelHTTPErrorUnexpectedModelBehavior_utilsusage)DEFAULT_OUTPUT_TOOL_NAMEOutputObjectDefinition)
RunContext)$split_content_into_text_and_thinking)guard_tool_call_idnow_utcnumber_to_datetime)CodeExecutionToolImageGenerationToolMCPServerToolWebSearchTool)	UserError)AudioUrlBinaryContentBinaryImageBuiltinToolCallPartBuiltinToolReturnPart
CachePointDocumentUrlFilePartFinishReasonImageUrlModelMessageModelRequestModelResponseModelResponsePartModelResponseStreamEventPartStartEventRetryPromptPartSystemPromptPartTextPartThinkingPartToolCallPartToolReturnPartUserPromptPartVideoUrl)ModelProfileModelProfileSpec)OpenAIModelProfileOpenAISystemPromptRole)Providerinfer_provider)ModelSettings)ToolDefinition   )ModelModelRequestParametersStreamedResponsecheck_allow_model_requestsdownload_itemget_user_agent)	NOT_GIVENAPIStatusErrorAsyncOpenAIAsyncStream)	AllModelschat	responses)ChatCompletionChunk#ChatCompletionContentPartImageParam(ChatCompletionContentPartInputAudioParamChatCompletionContentPartParam"ChatCompletionContentPartTextParam)ImageURL)
InputAudio)FileFileFile)#ChatCompletionMessageCustomToolCall)%ChatCompletionMessageFunctionToolCall)*ChatCompletionMessageFunctionToolCallParam)$ChatCompletionPredictionContentParam)WebSearchOptionsWebSearchOptionsUserLocation'WebSearchOptionsUserLocationApproximate)ComputerToolParamFileSearchToolParamWebSearchToolParam)FunctionCallOutputMessage)Summary)ResponseStatus)ReasoningEffort)	Reasoningu   Please install `openai` to use the OpenAI model, you can use the `openai` optional group — `pip install "pydantic-ai-slim[openai]"`)Omitomit)rL   NotGiven)OpenAIModelOpenAIChatModelOpenAIResponsesModelOpenAIModelSettingsOpenAIChatModelSettingsOpenAIResponsesModelSettingsOpenAIModelNamezx-openai-connectorzLiteral['x-openai-connector']$MCP_SERVER_TOOL_CONNECTOR_URI_SCHEMEstoplength	tool_callcontent_filter)rw   rx   
tool_callsrz   function_callz^dict[Literal['stop', 'length', 'tool_calls', 'content_filter', 'function_call'], FinishReason]_CHAT_FINISH_REASON_MAPerror)max_output_tokensrz   	completed	cancelledfailedzSdict[Literal['max_output_tokens', 'content_filter'] | ResponseStatus, FinishReason]_RESPONSES_FINISH_REASON_MAPc                   @  sL   e Zd ZU dZded< 	 ded< 	 ded< 	 ded	< 	 d
ed< 	 ded< dS )rs   z*Settings used for an OpenAI model request.rj   openai_reasoning_effortboolopenai_logprobsintopenai_top_logprobsstropenai_userz.Literal['auto', 'default', 'flex', 'priority']openai_service_tierr_   openai_predictionN__name__
__module____qualname____doc____annotations__ r   r   _/var/www/html/karishye-ai-python/venv/lib/python3.10/site-packages/pydantic_ai/models/openai.pyrs      s   
 rs   F)totalz&Use `OpenAIChatModelSettings` instead.c                   @     e Zd ZdZdS )rr   z/Deprecated alias for `OpenAIChatModelSettings`.Nr   r   r   r   r   r   r   r   rr      s    rr   c                   @  sj   e Zd ZU dZded< 	 ded< 	 ded< 	 ded< 	 d	ed
< 	 ded< 	 ded< 	 ded< 	 ded< dS )rt   zSettings used for an OpenAI Responses model request.

    ALL FIELDS MUST BE `openai_` PREFIXED SO YOU CAN MERGE THEM WITH OTHER MODELS.
    zFSequence[FileSearchToolParam | WebSearchToolParam | ComputerToolParam]openai_builtin_toolszLiteral['detailed', 'concise']!openai_reasoning_generate_summaryopenai_reasoning_summaryr   openai_send_reasoning_idszLiteral['disabled', 'auto']openai_truncationz Literal['low', 'medium', 'high']openai_text_verbosityzLiteral['auto'] | stropenai_previous_response_id%openai_include_code_execution_outputs!openai_include_web_search_sourcesNr   r   r   r   r   rt      s(   
 	

rt   )initc                      s  e Zd ZU dZeddZded< eddZded< eddZded	< e	d
ddddqddZ
ede	d
dddddrddZ
d
ddddds fddZ
edtdd Zedud!d"Zedtd#d$Zeeddvd%d&Zdwd-d.Ze	dxdyd2d3Ze	dzd8d9Ze	d{d<d9Zd|d?d9Zd}dBdCZd~dEdFZddHdIZddKdLZddNdOZeddSdTZddXdYZdd]d^ZddbdcZddgdhZeddjdkZ eddodpZ!  Z"S )rp   zA model that uses the OpenAI API.

    Internally, this uses the [OpenAI Python client](https://github.com/openai/openai-python) to interact with the API.

    Apart from `__init__`, all methods are private or match those of the base class.
    FreprrN   clientru   _model_nameProvider[AsyncOpenAI]	_provideropenaiNproviderprofilesettings
model_namer   Literal['azure', 'deepseek', 'cerebras', 'fireworks', 'github', 'grok', 'heroku', 'moonshotai', 'ollama', 'openai', 'openai-chat', 'openrouter', 'together', 'vercel', 'litellm', 'nebius', 'ovhcloud', 'gateway'] | Provider[AsyncOpenAI]r   ModelProfileSpec | Noner   ModelSettings | NonereturnNonec                C     d S Nr   selfr   r   r   r   r   r   r   __init__"  s   zOpenAIChatModel.__init__zASet the `system_prompt_role` in the `OpenAIModelProfile` instead.)r   r   system_prompt_roler   r   OpenAISystemPromptRole | Nonec                C  r   r   r   r   r   r   r   r   r   r   r   r   r   @  s   c                  sl   || _ t|trt|dkrdn|}|| _|j| _t j||p!|jd |dur4t	|d
| j| _dS dS )a+  Initialize an OpenAI model.

        Args:
            model_name: The name of the OpenAI model to use. List of model names available
                [here](https://github.com/openai/openai-python/blob/v1.54.3/src/openai/types/chat_model.py#L7)
                (Unfortunately, despite being ask to do so, OpenAI do not provide `.inv` files for their API).
            provider: The provider to use. Defaults to `'openai'`.
            profile: The model profile to use. Defaults to a profile picked by the provider based on the model name.
            system_prompt_role: The role to use for the system prompt message. If not provided, defaults to `'system'`.
                In the future, this may be inferred from the model name.
            settings: Default model settings for this model instance.
        gatewaygateway/openair   r   N)openai_system_prompt_role)r   
isinstancer   rB   r   r   superr   model_profiler?   updater   r   	__class__r   r   r   `  s   )
r   c                 C     t | jjS r   r   r   base_urlr   r   r   r   r        zOpenAIChatModel.base_urlc                 C     | j S zThe model name.r   r   r   r   r   r        zOpenAIChatModel.model_namec                 C     | j jS zThe model provider.r   namer   r   r   r   system     zOpenAIChatModel.systemc                 C  s   t | jjS r   )r?   from_profiler   r   r   r   r   r   r     s   z"OpenAIChatModel.system_prompt_rolemessageslist[ModelMessage]model_settingsmodel_request_parametersrG   r1   c                   sF   t   | ||\}}| |dtt|pi |I d H }| |}|S NF)rI   prepare_request_completions_creater   rs   _process_response)r   r   r   r   responsemodel_responser   r   r   request  s   

zOpenAIChatModel.requestrun_contextRunContext[Any] | NoneAsyncIterator[StreamedResponse]c              	   C    t   | ||\}}| |dtt|pi |I d H }|4 I d H  | ||I d H V  W d   I d H  d S 1 I d H s>w   Y  d S NT)rI   r   r   r   rs   _process_streamed_responser   r   r   r   r   r   r   r   r   request_stream     
.zOpenAIChatModel.request_streamstreamLiteral[True]rs    AsyncStream[ChatCompletionChunk]c                      d S r   r   r   r   r   r   r   r   r   r   r        z#OpenAIChatModel._completions_createLiteral[False]chat.ChatCompletionc                   r   r   r   r   r   r   r   r     r   r   6chat.ChatCompletion | AsyncStream[ChatCompletionChunk]c              
     s  |  |}| |}|sd }n|jst| jjrd}nd}| ||I d H }d }	|jdkr>|j	}
|
d us8J | 
|
}	n|jdkrK| jjrKddi}	t| jj}|D ]}||d  qTz
|di }|dt  | jjjjd.i d	| jd
|d|dtd|ptd|ptd|d|rddintd|dtd|dtd|dtd|	ptd|dtd|dtd|dtd|ptd|dtd |d!td"|d"td#|d#td$|d$td%|d%td&|d&td'|d(td)|d*td|d+|d+I d H W S d|dtd |d!td"|d"td#|d#td$|d$td%|d%td&|d&td'|d(td)|d*td|d+|d+I d H W S  ty } z|j }d,krt|| j|jd-| d }~ww )/Nrequiredautonativepromptedtypejson_objectextra_headers
User-Agentmodelr   parallel_tool_callstoolstool_choicer   stream_optionsinclude_usageTrw   stop_sequencesmax_completion_tokens
max_tokenstimeoutresponse_formatseedreasoning_effortr   userr   web_search_optionsservice_tierr   
predictionr   temperaturetop_ppresence_penaltyfrequency_penalty
logit_biaslogprobsr   top_logprobsr   
extra_body  status_coder   bodyr   )
_get_tools_get_web_search_optionsallow_text_outputr?   r   r   $openai_supports_tool_choice_required_map_messagesoutput_modeoutput_object_map_json_schemasupports_json_object_output!openai_unsupported_model_settingspopget
setdefaultrK   r   rQ   completionscreater   OMITrL   rM   r  r   r   r  )r   r   r   r   r   r   r  r   openai_messagesr  r  unsupported_model_settingssettingr   er  r   r   r   r     s   


	



r   chat.ChatCompletion | strc              
     s  t |tjs
td|jrt|j}n
t }t| |_|j	r/|j	d  }r/|j
du r/d|_
z
tj| }W n tyM } ztd| |d}~ww |j	d }g }t|jdd }ri|td| jd t|jdd }r}|td| jd |jjr| fd	d
t|jj jjD  |jjdur|jjD ]+}t |trt|jj|jj|jd}	nt |trt dt!| t"|	|	_#||	 qi }
|j$dur|j$jrdd |j$jD |
d< |j
}||
d< t%&|}t'|t(| j)j j)j* j+|j,||
pd|j j)j|dS )AProcess a non-streamed response, and prepare a message to return.zJInvalid response from OpenAI chat completions endpoint, expected JSON datar   Nrw   z8Invalid response from OpenAI chat completions endpoint: reasoning_content)idcontentprovider_name	reasoningc                 3  s.    | ]}t |trt|d  jdn|V  qdS )r/  )r.  r0  N)r   r8   r	   r   ).0partr   r   r   	<genexpr>Q  s
    
z4OpenAIChatModel._process_response.<locals>.<genexpr>)tool_call_idz#Custom tool calls are not supportedc                 S  s,   g | ]}|j |j|jd d |jD dqS )c                 S  s   g | ]}|j |j|jd qS )tokenbyteslogprobr6  )r2  tlpr   r   r   
<listcomp>l  s    z@OpenAIChatModel._process_response.<locals>.<listcomp>.<listcomp>r7  r8  r9  r  r<  )r2  lpr   r   r   r;  g  s    	z5OpenAIChatModel._process_response.<locals>.<listcomp>r  finish_reason)partsr   r   	timestampprovider_detailsprovider_response_idr0  r>  )-r   rQ   ChatCompletionr   createdr   _now_utcr   r@  choicesr>  model_validate
model_dumpr   getattrmessageappendr8   r   r/  extendr   r   thinking_tagsr{   r]   r9   functionr   	argumentsr.  r\   RuntimeErrorr   _guard_tool_call_idr5  r  r}   r"  r1   
_map_usager   r   r   r   )r   r   r@  choicer*  itemsr-  r1  cr3  vendor_detailsraw_finish_reasonr>  r   r   r   r   &  sf   



	

z!OpenAIChatModel._process_responseOpenAIStreamedResponsec              	     s`   t |}| I dH }t|t jrtd|jp| j}t||| j	|t
|j| jj| jjdS )HProcess a streamed response, and prepare a streaming response to return.N5Streamed response ended without content or tool calls)r   r   _model_profile	_response
_timestamp_provider_name_provider_url)r   PeekableAsyncStreampeekr   Unsetr   r   r   rX  r   r   rD  r   r   r   )r   r   r   peekable_responsefirst_chunkr   r   r   r   r     s"   
z*OpenAIChatModel._process_streamed_response"list[chat.ChatCompletionToolParam]c                       fdd|j  D S )Nc                      g | ]}  |qS r   _map_tool_definitionr2  rr   r   r   r;        z.OpenAIChatModel._get_tools.<locals>.<listcomp>	tool_defsvaluesr   r   r   r   r   r       zOpenAIChatModel._get_toolsWebSearchOptions | Nonec              	   C  s   |j D ]>}t|tr8t| jjstd| jd|j	r0t
|jtdtd	i |j	dd  S t
|jd  S td|jj dd S )
Nz@WebSearchTool is not supported with `OpenAIChatModel` and model z,. Please use `OpenAIResponsesModel` instead.approximate)r   rs  )search_context_sizeuser_location)rt  `zO` is not supported by `OpenAIChatModel`. If it should be, please file an issue.r   )builtin_toolsr   r#   r?   r   r   openai_chat_supports_web_searchr$   r   ru  r`   rt  ra   rb   r   r   )r   r   toolr   r   r   r    s&   


z'OpenAIChatModel._get_web_search_options%list[chat.ChatCompletionMessageParam]c              	     sX  g }|D ]}t |tr| |2 z3 dH W }|| q6 qt |trg }g }|jD ]F}t |tr9||j q+t |trQ| j	j
\}}	|d||j|	g q+t |tr_|| | q+t |ttB rgq+t |trmq+t| q+tjdd}
|rd||
d< nd|
d< |r||
d< ||
 qt| q| || }r|dtj|d	d
 |S )zQJust maps a `pydantic_ai.Message` to a `openai.types.ChatCompletionMessageParam`.N
	assistant)rolez

r/  r{   r   r   )r/  r}  )r   r0   _map_user_messagerK  r1   r?  r7   r/  r8   r   rM  joinr9   _map_tool_callr(   r)   r,   r   rQ   #ChatCompletionAssistantMessageParam_get_instructionsinsert ChatCompletionSystemMessageParam)r   r   r   r'  rJ  itemtextsr{   	start_tagend_tagmessage_paraminstructionsr   r   r   r    sD   








zOpenAIChatModel._map_messagestr9   r^   c                 C  s    t t| dd| j|  ddS )Nr  rN  )r   rO  )r.  r   rN  )r^   rQ  	tool_nameargs_as_json_strr  r   r   r   r    s
   zOpenAIChatModel._map_tool_callor   ,chat.completion_create_params.ResponseFormatc                 C  sL   d|j pt|jdd}|jr|j|d d< t| jjr$|j|d d< |S )Njson_schema)r   schema)r   r  descriptionstrict	r   r   r  r  r?   r   r   &openai_supports_strict_tool_definitionr  r   r  response_format_paramr   r   r   r    s   z OpenAIChatModel._map_json_schemafrD   chat.ChatCompletionToolParamc                 C  sB   d|j |jpd|jdd}|jrt| jjr|j|d d< |S )NrN   )r   r  
parameters)r   rN  r  )r   r  parameters_json_schemar  r?   r   r   r  )r   r  
tool_paramr   r   r   ri    s   z$OpenAIChatModel._map_tool_definitionrJ  r0   .AsyncIterable[chat.ChatCompletionMessageParam]c                 C s  |j D ]}t|tr8t| jj}|dkr tjd|j	dV  q|dkr.tj
d|j	dV  qtjd|j	dV  qt|trG| |I d H V  qt|tr[tjdt|d| dV  qt|tr|jd u rptj
d| dV  qtjdt|d| dV  qt| qd S )N	developerr}  r/  r  r   ry  r  )r}  r5  r/  )r?  r   r6   r?   r   r   r   rQ   #ChatCompletionDeveloperMessageParamr/  ChatCompletionUserMessageParamr  r;   _map_user_promptr:   ChatCompletionToolMessageParamrQ  model_response_strr5   r  r   r   )r   rJ  r3  r   r   r   r   r~    s6   








z!OpenAIChatModel._map_user_messager3  r;   #chat.ChatCompletionUserMessageParamc           
   	     s  t |jtr|j}nVg }|jD ]O}t |tr#|t|dd qt |trWd|ji}|j }r:|dd|d< |j	rMt
|dddI d H }|d	 |d< |t|d
d qt |tr| |jrt|| j|jd|j|jd q|jrt|jd}|j }r|dd|d< |t|d
d q|jr|jdv sJ tt|jd|jd}|t|dd q|jr|tt|jd|j ddd qtd|j t |t rt
|dddI d H }|d dv sJ d|d  t|d	 |d d}|t|dd qt |t!rL| |jr-t
|ddI d H }	|| j|	d	 |j|jd qt
|dddI d H }|tt|d	 d|d  ddd qt |t"rVt#dt |t$r]qt%| qt&j'd|dS )Ntextr  r   urldetailr   
base64_uri	extensiondata_formattype_formatdata	image_url)r  r   zutf-8)
media_type
identifier)r  )wavmp3)r  formatinput_audio)r  r   	filename.)	file_datafilenamefile)r  r   !Unsupported binary content type: base64	data_typezUnsupported audio format: )r  z$VideoUrl is not supported for OpenAIr  r  )(r   r/  r   rK  rW   r.   r  vendor_metadatar"  force_downloadrJ   rT   r&   _is_text_like_media_typer  _inline_text_file_partr  decoder  is_imagerX   data_uriis_audior  rY   r  	b64encoderU   is_documentrZ   r[   rP  r%   r+   r<   NotImplementedErrorr*   r   rQ   r  )
r   r3  r/  r  r  metadataimage_contentaudiodownloaded_itemdownloaded_textr   r   r   r  "  s   









	
z OpenAIChatModel._map_user_promptr  c                 C  s6   |  dp| dkp| dp| dkp| dp| dv S )Nztext/zapplication/jsonz+jsonzapplication/xmlz+xml)zapplication/x-yamlzapplication/yaml)
startswithendswith)r  r   r   r   r  x  s   
z(OpenAIChatModel._is_text_like_media_typer  r  rW   c                C  s2   d d| d| d| d| dg} t| ddS )Nr{  z-----BEGIN FILE id="z" type="z"-----z-----END FILE id="r  r  )r  rW   )r  r  r  r   r   r   r    s   
z&OpenAIChatModel._inline_text_file_part)
r   ru   r   r   r   r   r   r   r   r   )r   ru   r   r   r   r   r   r   r   r   r   r   )
r   ru   r   r   r   r   r   r   r   r   r   r   r   ru   )r   r   )r   r   r   r   r   rG   r   r1   r   
r   r   r   r   r   rG   r   r   r   r   )
r   r   r   r   r   rs   r   rG   r   r   )
r   r   r   r   r   rs   r   rG   r   r   )
r   r   r   r   r   rs   r   rG   r   r   )r   r+  r   r1   )r   r   r   rG   r   rX  )r   rG   r   re  )r   rG   r   rr  )r   r   r   rG   r   rz  )r  r9   r   r^   )r  r   r   r  )r  rD   r   r  )rJ  r0   r   r  )r3  r;   r   r  )r  r   r   r   )r  r   r  r   r  r   r   rW   )#r   r   r   r   r   r   r   r   r   r   r   r   propertyr   r   r   r   r   r   r   r   r   r   r  r  r  staticmethodr  r  ri  r~  r  r  r  __classcell__r   r   r   r   rp     sn   
 65


H
\


/



V
rp   a!  `OpenAIModel` was renamed to `OpenAIChatModel` to clearly distinguish it from `OpenAIResponsesModel` which uses OpenAI's newer Responses API. Use that unless you're using an OpenAI Chat Completions-compatible API, or require a feature that the Responses API doesn't support yet like audio.c                   @  r   )ro   z'Deprecated alias for `OpenAIChatModel`.Nr   r   r   r   r   ro     s    ro   c                      s8  e Zd ZU dZeddZded< eddZded< eddZded	< d
dddd\ fddZ	e
d]ddZe
d^ddZe
d]ddZd_d$d%Ze	d`dad*d+Zdbd.d/Zdcd2d3Zeddd7d8Zeded:d8Zdfd=d8Zdgd?d@ZdhdBdCZdidEdFZdjdJdKZdkdMdNZdldPdQZdmdUdVZedndZd[Z  ZS )orq   a|  A model that uses the OpenAI Responses API.

    The [OpenAI Responses API](https://platform.openai.com/docs/api-reference/responses) is the
    new API for OpenAI models.

    If you are interested in the differences between the Responses API and the Chat Completions API,
    see the [OpenAI API docs](https://platform.openai.com/docs/guides/responses-vs-chat-completions).
    Fr   rN   r   ru   r   r   r   r   Nr   r   r   Literal['openai', 'deepseek', 'azure', 'openrouter', 'grok', 'fireworks', 'together', 'nebius', 'ovhcloud', 'gateway'] | Provider[AsyncOpenAI]r   r   r   r   c                  sL   || _ t|trt|dkrdn|}|| _|j| _t j||p!|jd dS )ax  Initialize an OpenAI Responses model.

        Args:
            model_name: The name of the OpenAI model to use.
            provider: The provider to use. Defaults to `'openai'`.
            profile: The model profile to use. Defaults to a profile picked by the provider based on the model name.
            settings: Default model settings for this model instance.
        r   r   r   N)	r   r   r   rB   r   r   r   r   r   r   r   r   r   r     s   
zOpenAIResponsesModel.__init__r   r   c                 C  r   r   r   r   r   r   r   r     r   zOpenAIResponsesModel.base_urlc                 C  r   r   r   r   r   r   r   r     r   zOpenAIResponsesModel.model_namec                 C  r   r   r   r   r   r   r   r     r   zOpenAIResponsesModel.systemr   "list[ModelRequest | ModelResponse]r   r   rG   r1   c                   sD   t   | ||\}}| |dtt|pi |I d H }| ||S r   )rI   r   _responses_creater   rt   r   )r   r   r   r   r   r   r   r   r     s   
zOpenAIResponsesModel.requestr   r   r   r   c              	   C r   r   )rI   r   r  r   rt   r   r   r   r   r   r     r   z#OpenAIResponsesModel.request_streamr   responses.Responsec              
   C  s  t |j}g }|jD ]%}t|tjrD|j}|jr4|jD ]}|t	|j
|j||r+| jndd d}qq
|rC|t	d|j|| jd q
t|tjrb|jD ]}t|tjr`|t|j
|jd qMq
t|tjrx|t|j|j|j|jd q
t|tjrt|| j\}	}
}||	 |r|| ||
 q
t|tjrt|| j\}	}
||	 ||
 q
t|tjjrt|| j\}	}
}||	 |r|| ||
 q
t|tjrq
t|tjrq
t|tjj rq
t|tj!rq
t|tjj"rt#|| j\}	}
||	 ||
 q
t|tjj$r't%|| j\}	}
||	 ||
 q
t|tjj&r0	 q
d}d}|j' }r>|j(n|j)}|rMd|i}t*+|}t,|t-|| j.j| j.j/| j0|j1|j|| j.j||dS )r,  N)r/  r.  	signaturer0  r  )r.  )r5  r.  r>  )r?  r   r   rB  r@  r0  r>  rA  )2r   
created_atoutputr   rR   ResponseReasoningItemencrypted_contentsummaryrK  r8   r  r.  r   ResponseOutputMessager/  ResponseOutputTextr7   ResponseFunctionToolCallr9   r   rO  call_idResponseCodeInterpreterToolCall_map_code_interpreter_tool_callrL  ResponseFunctionWebSearch_map_web_search_tool_callresponse_output_itemImageGenerationCall_map_image_generation_tool_callResponseComputerToolCallResponseCustomToolCallLocalShellCallResponseFileSearchToolCallMcpCall_map_mcp_callMcpListTools_map_mcp_list_toolsMcpApprovalRequestincomplete_detailsreasonstatusr   r"  r1   rR  r   r   r   r   )r   r   r   r@  rT  r  r  r  r/  	call_partreturn_part
file_parts	file_partr>  rA  detailsrW  r   r   r   r     s   

	









z&OpenAIResponsesModel._process_response*AsyncStream[responses.ResponseStreamEvent]OpenAIResponsesStreamedResponsec                   sf   t |}| I dH }t|t jrtdt|tjsJ t||j	j
|t|j	j| jj| jjdS )rY  NrZ  )r   r   r\  r]  r^  r_  )r   r`  ra  r   rb  r   rR   ResponseCreatedEventr  r   r   r   r  r   r   r   )r   r   r   rc  rd  r   r   r   r   g  s   

z/OpenAIResponsesModel._process_streamed_responser   r   rt   c                   r   r   r   r   r   r   r   r  |  r   z&OpenAIResponsesModel._responses_creater   c                   r   r   r   r   r   r   r   r    r   r   ?responses.Response | AsyncStream[responses.ResponseStreamEvent]c              
     s  |  |t|dg  | | }t| j}|sd }n|js'|jr'd}nd}|d}|dkr9| 	|\}}| 
|||I d H \}	}
| |}d }|jdkrb|j}|d usZJ d| |i}n#|jdkr| jjrddd	ii}t|	tsxJ |
d
tjd|	d t}	|d }r|pi }||d< |j}|D ]}||d  qg }|jr|d |dr|d |dr|d z|di }|dt  | jjjd/i d|
d| jd|	d|dtd|ptd|ptd|dtd|d|dtd |d td!|d"td#|d#td$|d%td&|p!td'|d(|d)td*|p1td+|pGtd|d,|d,I d H W S d|d,|d,I d H W S  t yv } z|j! }d-krqt"|| j#|j$d.| d }~ww )0Nr   r   r   r   r   r  r   r   r   r   r   r  r   	verbosityzreasoning.encrypted_contentr   zcode_interpreter_call.outputsr   zweb_search_call.action.sourcesr   r   inputr   r  r   r   r   r   r  r   r  r  
truncationr   r  r	  r   previous_response_idr1  r  r   r  includer  r  r  r   )%_get_builtin_toolslistr"  r  r?   r   r   r  r  *_get_previous_response_id_and_new_messagesr  _get_reasoningr  r  r  r  r   r   r  rR   EasyInputMessageParamr&  r   r!  +openai_supports_encrypted_reasoning_contentrK  r#  rK   r   r%  r   rL   rM   r  r   r   r  )r   r   r   r   r   r   r   r   r  r  r'  r1  r  r  r  r(  r)  r  r   r*  r  r   r   r   r    s   







	



Reasoning | Omitc                 C  sl   | dd }| dd }| dd }|r|rtd|d ur&tdt |}|d u r0|d u r0tS t||dS )Nr   r   r   zV`openai_reasoning_summary` and `openai_reasoning_generate_summary` cannot both be set.zY`openai_reasoning_generate_summary` is deprecated, use `openai_reasoning_summary` instead)effortr  )r"  
ValueErrorwarningswarnDeprecationWarningr&  rk   )r   r   r  reasoning_summaryreasoning_generate_summaryr   r   r   r
    s   z#OpenAIResponsesModel._get_reasoning!list[responses.FunctionToolParam]c                   rf  )Nc                   rg  r   rh  rj  r   r   r   r;    rl  z3OpenAIResponsesModel._get_tools.<locals>.<listcomp>rm  rp  r   r   r   r    rq  zOpenAIResponsesModel._get_toolslist[responses.ToolParam]c           	      C  s  g }d}|j D ]}t|tr-tjd|jd}|jr'tjjdddi|j|d< |	| qt|t
r?d}|	ddd	id
 qt|trtjjd|jdd}|jrV|j|d< |jd ur`|j|d< |jrh|j|d< |jrp|j|d< |jtd r|jjddd\}}||d< n|j|d< |	| qt|trd}|	tjjd|j|j|j|j|jpd|j|j|j d	 qt!d|j"j# d|j$r|s|	ddi |S )NF
web_search)r   rt  r   rs  ru  Tcode_interpreterr   )r   	containermcpnever)r   server_labelrequire_approvalauthorizationallowed_toolsserver_descriptionheaders:rE   )maxsplitconnector_id
server_urlimage_generationpng)	r   
backgroundinput_fidelity
moderationoutput_compressionoutput_formatpartial_imagesqualitysizerv  zT` is not supported by `OpenAIResponsesModel`. If it should be, please file an issue.r   )%rw  r   r#   rR   re   rt  ru  web_search_tool_paramUserLocationrK  r    r"   r  Mcpr.  authorization_tokenr  r  r!  r  r  rv   splitr!   ImageGenerationr(  r)  r*  r+  r,  r-  r.  r/  r$   r   r   allow_image_output)	r   r   r   has_image_generating_toolry  web_search_toolmcp_tool_r$  r   r   r   r    sr   














z'OpenAIResponsesModel._get_builtin_toolsr  rD   responses.FunctionToolParamc                 C  s*   |j |jd|jt|jot| jjdS )NrN  )r   r  r   r  r  )	r   r  r  r   r  r?   r   r   r  )r   r  r   r   r   ri  @  s   z)OpenAIResponsesModel._map_tool_definition%tuple[str | None, list[ModelMessage]]c                 C  s`   d }g }t |D ]}t|tr|j| jkr|j} n|| q|r,|r,|tt |fS d |fS r   )reversedr   r1   r0  r   rB  rK  r  )r   r   r  trimmed_messagesmr   r   r   r	  K  s   z?OpenAIResponsesModel._get_previous_response_id_and_new_messages9tuple[str | Omit, list[responses.ResponseInputItemParam]]c           !        sb  t | j}|d|j}g }|D ]}t|tr|jD ]{}t|tr0|	t
jd|jd qt|trA|	| |I dH  qt|tr`t|d}	t|	\}	}
td|	| d}|	| qt|tr|jdu rz|	tdd	| d
gd qt|d}	t|	\}	}
td|	| d}|	| qt| qqt|tr|o|j| jk}d}d}d}d}|jD ]i}t|tr|jr|r|du s|d |jkrt
jd|jg ddd}|	| g |d t
j|jdg d|d< q|	t
jd|jd qt|t r4t|d}	t|	\}	}|p|j}t
j!|j|" |	dd}|j#r$d|d< |r.|r.||d< |	| qt|t$r |j| jkr|r|jt%j&krs|j'rs|(  }rs|d }rst
j)|j'|d|dddd}|	| q|jt*j&kr|j'r|(  }rt
j+|j't,t
j-j.|ddd}|	| q|jt/j&kr|j'rt,t
j0j1|j'dd}|	| q|j2t3j&r|j'r|j4ddd  }r|(  }r|d  }r|d!krt
j0j5|j'd"|g d#}|	| q|d$kr|d% }r|d& }rt
j0j6|j'||t7|8 ddd'd(}|	| qt|t9r|j| jkr|r|jt%j&kr]|dur]t|jt:r]t,t:t;t<f |j }r]|d }r]||d< q|jt*j&kr|durt|jt:rt,t:t;t<f |j }r|d }r||d< q|jt/j&krq|j2t3j&r	 qt|t=rqt|t>r|jr|rd}|j?r|j| jkr|jr|j?}|du s|d |jkr|s|jrt
j@|jg |d)d*}|	| |jr|dusJ g |d+ tA|jd,d-|d+< q|jB\}}|	t
jdd.C||j|gd qt| qqt| q| D||p,tE} | |fS )/zSJust maps a `pydantic_ai.Message` to a `openai.types.responses.ResponseInputParam`.r   r   r  Nr  function_call_output)r   r  r  r  
input_text)r   r  r.  r|  rJ  r   )r}  r.  r/  r   r  r/  output_text)r  r   r   r|   )r   rO  r  r   r  container_idcodecode_interpreter_call)r.  rE  rD  outputsr  r   web_search_call)r.  actionr  r   image_generation_call)r.  r   r"  rE   rI  
list_toolsmcp_list_tools)r.  r   r  r   	call_toolr  	tool_argsmcp_call)r.  r  r   rO  r~   r  r   r1  )r.  r  r  r   r  summary_textr  r{  )Fr?   r   r   r"  r  r   r0   r?  r6   rK  rR   r  r/  r;   r  r:   rQ  _split_combined_tool_call_idrf   r  r5   r  rg   r   r   r1   r0  r   r7   r.  ResponseOutputMessageParamResponseOutputTextParamr9   ResponseFunctionToolCallParamr  3openai_responses_requires_function_call_status_noner(   r    kindr5  args_as_dict$ResponseCodeInterpreterToolCallParamr#   ResponseFunctionWebSearchParamr   "response_function_web_search_paramActionr!   response_input_item_paramr  r  r"   r4  r  r  r   r  r)   dictr   r   r,   r8   r  ResponseReasoningItemParamrh   rM  r  r  r&  )!r   r   r   r   r   send_item_idsr'  rJ  r3  r  r:  r  message_itemreasoning_itemweb_search_itemcode_interpreter_itemr.  paramargsrD  image_generation_item	server_idrI  mcp_list_tools_itemr  rN  mcp_call_itemr/  r  r  r  r  r  r   r   r   r  a  s  






















	








  
1z"OpenAIResponsesModel._map_messagesr  r   1responses.ResponseFormatTextJSONSchemaConfigParamc                 C  s@   d|j pt|jd}|jr|j|d< t| jjr|j|d< |S )Nr  )r   r   r  r  r  r  r  r   r   r   r  I  s   

z%OpenAIResponsesModel._map_json_schemar3  r;   responses.EasyInputMessageParamc              	     s  t | jtr| j}ng }| jD ]}t |tr"|tj|dd qt |trl|jrId}|j }r<t	t
d |dd}|tj|jd|d q|jr]|tjd|jd	|j d
 q|jrdtdtd|j t |trd}|j}|j }rt	t
d |dd}|jrt|dddI d H }|d }|tj|d|d qt |trt|dddI d H }|tjd|d d	|d  d
 qt |trt|dddI d H }|tjd|d d	|d  d
 qt |trtdt |trqt| qtjd|dS )NrB  r  r   )r   lowhighr  input_image)r  r   r  
input_filer  )r   r  r  zBAudio as binary content is not supported for OpenAI Responses API.r  r  r  r  r  r  z%VideoUrl is not supported for OpenAI.r  r  )r   r/  r   rK  rR   ResponseInputTextParamr&   r  r  r   r   r"  ResponseInputImageParamr  r  ResponseInputFileParamr  r  r  rP  r  r.   r  r  rJ   r%   r+   r<   r*   r   r  )r3  r/  r  r  r  r  r  r   r   r   r  U  s   













z%OpenAIResponsesModel._map_user_prompt)r   ru   r   r  r   r   r   r   r  r  )r   r  r   r   r   rG   r   r1   r   r  )r   r  r   rG   r   r1   )r   r  r   rG   r   r  )
r   r  r   r   r   rt   r   rG   r   r  )
r   r  r   r   r   rt   r   rG   r   r  )
r   r  r   r   r   rt   r   rG   r   r  )r   rt   r   r  )r   rG   r   r  )r   rG   r   r  )r  rD   r   r;  )r   r   r   r<  )r   r   r   rt   r   rG   r   r@  )r  r   r   rj  )r3  r;   r   rk  )r   r   r   r   r   r   r   r   r   r   r  r   r   r   r   r   r   r   r   r   r  r
  r  r  ri  r	  r  r  r  r  r  r   r   r   r   rq     sH   
 	%


h

Z


B

 
irq   c                   @  sv   e Zd ZU dZded< ded< ded< ded	< d
ed< d
ed< dddZedddZedddZedddZ	dS )rX  z7Implementation of `StreamedResponse` for OpenAI models.ru   r   r=   r[  z"AsyncIterable[ChatCompletionChunk]r\  r
   r]  r   r^  r_  r   'AsyncIterator[ModelResponseStreamEvent]c           	   	   C s  | j 2 z3 d H W }|  jt|| j| j| j7  _|jr |j| _|jr'|j| _z|j	d }W n	 t
y7   Y qw |jd u r>q|j }rNd|i| _t|| _t|jdd  }rc| jjdd|| jdV  t|jdd  }rx| jjdd|| jdV  |jj}|r| jjd|| jj| jjd}|d urt|trt|jtrd|j_| j|j_|V  |jjpg D ]}| jj|j|j o|j j!|j o|j j"|jd}|d ur|V  qq6 d S )	Nr   r>  r-  )vendor_part_idr.  r/  r0  r1  r/  )rt  r/  rM  ignore_leading_whitespace)rt  r  re  r5  )#r\  _usagerR  r^  r_  r   r.  rB  r   rF  
IndexErrordeltar>  rA  r}   r"  rI  _parts_managerhandle_thinking_deltar0  r/  handle_text_deltar[  rM  "ignore_streamed_leading_whitespacer   r4   r3  r8   r{   handle_tool_call_deltaindexrN  r   rO  )	r   chunkrS  rW  r-  r1  r/  maybe_eventdtcr   r   r   _get_event_iterator  sp   




z*OpenAIStreamedResponse._get_event_iteratorc                 C  r   z#Get the model name of the response.r   r   r   r   r   r     r   z!OpenAIStreamedResponse.model_namec                 C  r   zGet the provider name.r^  r   r   r   r   r0    r   z$OpenAIStreamedResponse.provider_namec                 C  r   z"Get the timestamp of the response.r]  r   r   r   r   r@    r   z OpenAIStreamedResponse.timestampNr   rs  r  r  r   r
   )
r   r   r   r   r   r  r  r   r0  r@  r   r   r   r   rX    s   
 
ErX  c                   @  sx   e Zd ZU dZded< ded< ded< ded	< ded
< dddZdddZedddZedddZ	edddZ
dS )r  z>Implementation of `StreamedResponse` for OpenAI Responses API.ru   r   z,AsyncIterable[responses.ResponseStreamEvent]r\  r
   r]  r   r^  r_  r   rs  c                 C sZ	  | j 2 z3 d H W }t|tjr7|  j| |j7  _|jj }r%|jn|jj	}|r6d|i| _
t|| _qt|tjr>qt|tjrEqt|tjrU|jjrT|jj| _qt|tjrg|  j| |j7  _qt|tjr| jj|j|jd}|d ur~|V  qt|tjrqt|tjr|  j| |j7  _qt|tjr|  j| |j7  _qt|tjrt|jtjr| jj|jj|jj |jj!|jj"|jjdV  qt|jtj#rqt|jtj$rqt|jtj%rt&|j| j'\}}| jj(|jj dt)|d ddV  qt|jtj*rUt+|j| j'\}}}|, }|d d }|-ds-J d	|d
| jj(|jj dt)|d ddV  | jj|jj d|d}|d urT|V  qt|jtj.j/rwt0|j| j'\}}}| jj(|jj d|dV  qt|jtj.j1rt2|j| j'\}}|, }|d d }|-dsJ d	|d| jj(|jj dt)|d ddV  | jj|jj d|d}|d ur|V  qt|jtj.j3rt4|j| j'\}}| jj(|jj d|dV  qt56d| t7 qt|tj8rt|jtj#r|jj9 }	r| jj:|jj d|jj|	| j'dV  qt|jtj*rYt+|j| j'\}}
}t;|D ]\}}| jj(|jj d| |dV  q4| jj(|jj d|
dV  qt|jtj%rt&|j| j'\}}
| jj|jj d|j<d}|d ur|V  | jj(|jj d|
dV  qt|jtj.j/rt0|j| j'\}}
}|r| jj(|jj d|dV  | jj(|jj d|
dV  qt|jtj.j1rt2|j| j'\}}
| jj(|jj d|
dV  qt|jtj.j3rt4|j| j'\}}
| jj(|jj d|
dV  qt|tj=r | jj:|j d|j> |j?j@|jdV  qt|tjAr(qt|tjBr0qt|tjCrK| jj:|j d|j> |j|jdV  qt|tjDrSqt|tjEro| jjF|j|j|jd}|d urn|V  qt|tjGrwqt|tjHrqt|tjIrqt|tjJrqt|tjKrqt|tjLrtM|jN dd }| jj|j d|d}|d ur|V  qt|tjOr| jj|j ddd}|d ur|V  qt|tjPrqt|tjQrqt|tjRrqt|tjSrqt|tjTrqt|tjUr
qt|tjVr7tW|dd}tXtYtZ[|j\d| d|jd}| jj(|j d|dV  qt|tj]rS| jj|j ddd}|d urR|V  qt|tj^rp| jj|j d|jd}|d uro|V  qt|tj_rxqt|tj`rqt|tjarqt|tjbrqt|tjcrqt|tjdrqt56d| t7 q6 d S ) Nr>  )rt  re  )rt  r  re  r5  r.  z-call)re  )rt  r3  z"code":"z	Expected z to end in `"code":"`z"tool_args":z to end in `"tool_args":"`zPHandling of this item type is not yet implemented. Please report on our GitHub: z-0)rt  r.  r  r0  z-file-z-returnz-file-)rt  r/  r.  rE   z"}r,  r'  image/r  r  r/  r.  }zQHandling of this event type is not yet implemented. Please report on our GitHub: )er\  r   rR   ResponseCompletedEventrv  rR  r   r  r  r  rA  r   r"  r>  ResponseContentPartAddedEventResponseContentPartDoneEventr   r.  rB  ResponseFailedEvent'ResponseFunctionCallArgumentsDeltaEventry  r}  item_idrx  &ResponseFunctionCallArgumentsDoneEventResponseIncompleteEventResponseInProgressEventResponseOutputItemAddedEventr  r  handle_tool_call_partr   rO  r  r  r  r  r  r0  handle_partr	   r  r  r  r  r  r  r  r  r  r  r  r  r  UserWarningResponseOutputItemDoneEventr  rz  	enumeratere  &ResponseReasoningSummaryPartAddedEventsummary_indexr3  r  %ResponseReasoningSummaryPartDoneEvent%ResponseReasoningSummaryTextDoneEvent&ResponseReasoningSummaryTextDeltaEvent&ResponseOutputTextAnnotationAddedEventResponseTextDeltaEventr{  ResponseTextDoneEvent$ResponseWebSearchCallInProgressEvent#ResponseWebSearchCallSearchingEvent#ResponseWebSearchCallCompletedEventResponseAudioDeltaEvent)ResponseCodeInterpreterCallCodeDeltaEventr   r  (ResponseCodeInterpreterCallCodeDoneEvent)ResponseCodeInterpreterCallCompletedEvent*ResponseCodeInterpreterCallInProgressEvent,ResponseCodeInterpreterCallInterpretingEvent"ResponseImageGenCallCompletedEvent#ResponseImageGenCallGeneratingEvent#ResponseImageGenCallInProgressEvent%ResponseImageGenCallPartialImageEventrI  r,   r'   r  	b64decodepartial_image_b64!ResponseMcpCallArgumentsDoneEvent"ResponseMcpCallArgumentsDeltaEvent#ResponseMcpListToolsInProgressEvent"ResponseMcpListToolsCompletedEventResponseMcpListToolsFailedEventResponseMcpCallInProgressEventResponseMcpCallFailedEventResponseMcpCallCompletedEvent)r   r  r  rW  r  r  r:  	args_jsonargs_json_deltar  r  r  ir  json_args_deltar,  r   r   r   r    s  



















  z3OpenAIResponsesStreamedResponse._get_event_iteratorr   r  c                 C  s   t || j| j| jS r   )rR  r^  r_  r   )r   r   r   r   r   rR  /  s   z*OpenAIResponsesStreamedResponse._map_usagec                 C  r   r  r   r   r   r   r   r   2  r   z*OpenAIResponsesStreamedResponse.model_namec                 C  r   r  r  r   r   r   r   r0  7  r   z-OpenAIResponsesStreamedResponse.provider_namec                 C  r   r  r  r   r   r   r   r@  <  r   z)OpenAIResponsesStreamedResponse.timestampNr  )r   r  r  r  r  )r   r   r   r   r   r  rR  r  r   r0  r@  r   r   r   r   r  	  s"   
 
  
r  r   >chat.ChatCompletion | ChatCompletionChunk | responses.Responser   r   provider_urlr   r   usage.RequestUsagec           	      C  s   | j }|d u rt  S |jdd}dd | D }t||d}t|tjr<d}t|dd d ur7|j	j
|d< nd	|d< nd
}|jd urM||jjdd t jj|||d||dS )NT)exclude_nonec                 S  s(   i | ]\}}|d vrt |tr||qS )>   input_tokenstotal_tokensoutput_tokensprompt_tokenscompletion_tokens)r   r   )r2  kvr   r   r   
<dictcomp>M  s    z_map_usage.<locals>.<dictcomp>)r   r   rR   output_tokens_detailsreasoning_tokensr   rQ   r   )r   r  provider_fallback
api_flavorr  )r   RequestUsagerH  rT  r]  r   rR   ResponseUsagerI  r  r  completion_tokens_detailsr   extract)	r   r   r  r   response_usage
usage_datar  response_datar  r   r   r   rR  B  s0   

rR  combined_idtuple[str, str | None]c                 C  s(   d| v r|  dd\}}||fS | d fS )N|rE   )r4  )r  r  r.  r   r   r   rQ  k  s   rQ  r  )responses.ResponseCodeInterpreterToolCallr0  Atuple[BuiltinToolCallPart, BuiltinToolReturnPart, list[FilePart]]c                 C  s   d| j i}g }g }| jr:| jD ]*}t|tjjr'|tt	|j
| jd qt|tjjr5||j qt| q|r@||d< ttj| j| j| jpKdd|dttj| j||d|fS )Nr  r  logsr  )rD  rE  r  r5  re  r0  r  r5  r/  r0  )r  rG  r   rR   #response_code_interpreter_tool_callOutputImagerK  r,   r'   from_data_urir  r.  
OutputLogsr  r   r(   r    rV  rD  rE  r)   )r  r0  resultr  r  r  r   r   r   r  u  sD   


	r  #responses.ResponseFunctionWebSearch1tuple[BuiltinToolCallPart, BuiltinToolReturnPart]c                 C  sd   d }d| j i}| j }r|jdd}|dd  }r||d< ttj| j||dttj| j||dfS )Nr  json)modesourcesr  r  )	r  rI  rH  r!  r(   r#   rV  r.  r)   )r  r0  re  r  rI  r  r   r   r   r    s(   
r  2responses.response_output_item.ImageGenerationCallBtuple[BuiltinToolCallPart, BuiltinToolReturnPart, FilePart | None]c           	      C  s   d| j i}t| dd  }r||d< t| dd  }r||d< t| dd  }r)||d< t| dd  }r5||d< t| dd}d }| jrVttt| jd| d	| jd
}d|d< tt	j
| j|dtt	j
| j||d|fS )Nr  r(  r.  r/  revised_promptr,  r'  r  r  r  r   )r  r5  r0  r  )r  rI  r  r,   r'   r  r  r.  r(   r!   rV  r)   )	r  r0  r  r(  r.  r/  r  r,  r  r   r   r   r    sD   
	r  +responses.response_output_item.McpListToolsc                 C  sH   d tj| jg}t|| j|ddidt|| j| jdddhd|d	fS )
Nr"  rI  rK  )r  r5  r0  re  r  r   r~   )r  r  r  )r  r"   rV  r  r(   r.  r)   rH  r  r0  r  r   r   r   r    s   r  &responses.response_output_item.McpCallc                 C  s\   d tj| jg}t|| jd| j| jrt	| jni d|dt
|| j| j| jd|dfS )Nr"  rM  )rI  r  rN  r  )r  r~   r  )r  r"   rV  r  r(   r.  r   rO  r  loadsr)   r  r~   r  r   r   r   r  	  s&   
r  )
r   r  r   r   r  r   r   r   r   r  )r  r   r   r  )r  r  r0  r   r   r  )r  r  r0  r   r   r  )r  r  r0  r   r   r  )r  r  r0  r   r   r  )r  r  r0  r   r   r  )
__future__r   _annotationsr  r  r  collections.abcr   r   r   
contextlibr   dataclassesr   r   r	   r
   typingr   r   r   r   r   pydanticr   pydantic_corer   typing_extensionsr   r   r  r   r   r   r   _outputr   r   _run_contextr   _thinking_partr   r   rQ  r   rE  r   rw  r    r!   r"   r#   
exceptionsr$   r   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   profilesr=   r>   profiles.openair?   r@   	providersrA   rB   r   rC   r   rD   rF   rG   rH   rI   rJ   rK   r   rL   rM   rN   rO   openai.typesrP   rQ   rR   openai.types.chatrS   rT   rU   rV   rW   :openai.types.chat.chat_completion_content_part_image_paramrX   @openai.types.chat.chat_completion_content_part_input_audio_paramrY   4openai.types.chat.chat_completion_content_part_paramrZ   r[   :openai.types.chat.chat_completion_message_custom_tool_callr\   <openai.types.chat.chat_completion_message_function_tool_callr]   Bopenai.types.chat.chat_completion_message_function_tool_call_paramr^   :openai.types.chat.chat_completion_prediction_content_paramr_   *openai.types.chat.completion_create_paramsr`   ra   rb   openai.types.responsesrc   rd   re   +openai.types.responses.response_input_paramrf   rg   4openai.types.responses.response_reasoning_item_paramrh   &openai.types.responses.response_statusri   openai.types.sharedrj   openai.types.shared_paramsrk   ImportError_import_errorrl   rm   r&  rn   __all__r   ru   rv   r   r}   r   rs   rr   rt   rp   ro   rq   rX  r  rR  rQ  r  r  r  r  r  r   r   r   r   <module>   s    h 

	&M    ~      _  
:
)


.
 
0