
    
@gKm                    2   d dl mZ d dl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ZddlmZ ddl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mZ ddl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-m.Z/ ddl0m1Z1 ddl2m3Z3m4Z4 ddl5m6Z6 ddl7m8Z8 ddl9m:Z: ddl;m<Z< ddl=m>Z> ddl?m@Z@ ddlAmBZB ddlCmDZD ddlEmFZF ddlGmHZH ddgZI G d de          ZJ G d  de          ZK G d! d"          ZL G d# d$          ZM G d% d&          ZN G d' d(          ZOdS ))    )annotations)DictListTypeUnionIterableOptionalcast)partial)LiteralN   )_legacy_response)	NOT_GIVENBodyQueryHeadersNotGiven)maybe_transformasync_maybe_transform)cached_property)SyncAPIResourceAsyncAPIResource)to_streamed_response_wrapper"async_to_streamed_response_wrapper)Stream)completion_create_params)make_request_options)ResponseFormatTvalidate_input_toolsparse_chat_completiontype_to_response_format_param)	ChatModel)ChatCompletionStreamManager AsyncChatCompletionStreamManager)ChatCompletion)ChatCompletionChunk)ParsedChatCompletion)ChatCompletionModality)ChatCompletionToolParam)ChatCompletionAudioParam)ChatCompletionMessageParam) ChatCompletionStreamOptionsParam)$ChatCompletionPredictionContentParam)#ChatCompletionToolChoiceOptionParamCompletionsAsyncCompletionsc                      e Zd ZedEd            ZedFd            ZeeeeeeeeeeeeeeeeeeeeeeeeeedddeddGdAZeeeeeeeeeeeeeeeeeeeeeeeeeedddeddHdDZdS )Ir/   returnCompletionsWithRawResponsec                     t          |           S a  
        This property can be used as a prefix for any HTTP method call to return the
        the raw response object instead of the parsed content.

        For more information, see https://www.github.com/openai/openai-python#accessing-raw-response-data-eg-headers
        )r3   selfs    Z/var/www/piapp/venv/lib/python3.11/site-packages/openai/resources/beta/chat/completions.pywith_raw_responsezCompletions.with_raw_response+   s     *$///     CompletionsWithStreamingResponsec                     t          |           S z
        An alternative to `.with_raw_response` that doesn't eagerly read the response body.

        For more information, see https://www.github.com/openai/openai-python#with_streaming_response
        )r;   r6   s    r8   with_streaming_responsez#Completions.with_streaming_response5   s     0555r:   Naudioresponse_formatfrequency_penaltyfunction_call	functions
logit_biaslogprobsmax_completion_tokens
max_tokensmetadata
modalitiesnparallel_tool_calls
predictionpresence_penaltyseedservice_tierstopstorestream_optionstemperaturetool_choicetoolstop_logprobstop_puserextra_headersextra_query
extra_bodytimeoutmessages$Iterable[ChatCompletionMessageParam]modelUnion[str, ChatModel]r@   -Optional[ChatCompletionAudioParam] | NotGivenrA    type[ResponseFormatT] | NotGivenrB   Optional[float] | NotGivenrC   0completion_create_params.FunctionCall | NotGivenrD   6Iterable[completion_create_params.Function] | NotGivenrE   #Optional[Dict[str, int]] | NotGivenrF   Optional[bool] | NotGivenrG   Optional[int] | NotGivenrH   rI   #Optional[Dict[str, str]] | NotGivenrJ   1Optional[List[ChatCompletionModality]] | NotGivenrK   rL   bool | NotGivenrM   9Optional[ChatCompletionPredictionContentParam] | NotGivenrN   rO   rP   /Optional[Literal['auto', 'default']] | NotGivenrQ   *Union[Optional[str], List[str]] | NotGivenrR   rS   5Optional[ChatCompletionStreamOptionsParam] | NotGivenrT   rU   .ChatCompletionToolChoiceOptionParam | NotGivenrV   ,Iterable[ChatCompletionToolParam] | NotGivenrW   rX   rY   str | NotGivenrZ   Headers | Noner[   Query | Noner\   Body | Noner]   'float | httpx.Timeout | None | NotGiven%ParsedChatCompletion[ResponseFormatT]c                   t                     ddi|pi }dfd}!|                     dt          i d	|d
|d|d|d|d|d|d|	d|
d|d|d|d|d|d|d|dt                    ||||d||||||dt          j                  t          |||| |!          t          t          t          t                            t                    d          S )a  Wrapper over the `client.chat.completions.create()` method that provides richer integrations with Python specific types
        & returns a `ParsedChatCompletion` object, which is a subclass of the standard `ChatCompletion` class.

        You can pass a pydantic model to this method and it will automatically convert the model
        into a JSON schema, send it to the API and parse the response content back into the given model.

        This method will also automatically parse `function` tool calls if:
        - You use the `openai.pydantic_function_tool()` helper method
        - You mark your tool schema with `"strict": True`

        Example usage:
        ```py
        from pydantic import BaseModel
        from openai import OpenAI


        class Step(BaseModel):
            explanation: str
            output: str


        class MathResponse(BaseModel):
            steps: List[Step]
            final_answer: str


        client = OpenAI()
        completion = client.beta.chat.completions.parse(
            model="gpt-4o-2024-08-06",
            messages=[
                {"role": "system", "content": "You are a helpful math tutor."},
                {"role": "user", "content": "solve 8x + 31 = 2"},
            ],
            response_format=MathResponse,
        )

        message = completion.choices[0].message
        if message.parsed:
            print(message.parsed.steps)
            print("answer: ", message.parsed.final_answer)
        ```
        X-Stainless-Helper-Methodbeta.chat.completions.parseraw_completionr%   r2   rx   c                (    t          |           S N)rA   chat_completioninput_tools_parse_chat_completionr|   rA   rV   s    r8   parserz!Completions.parse.<locals>.parser   #    ) / .!   r:   /chat/completionsr^   r`   r@   rB   rC   rD   rE   rF   rG   rH   rI   rJ   rK   rL   rM   rN   rA   F)rO   rP   rQ   rR   streamrS   rT   rU   rV   rW   rX   rY   rZ   r[   r\   r]   post_parserbodyoptionscast_tor   r|   r%   r2   rx   )_validate_input_tools_postr   _type_to_response_formatr   CompletionCreateParamsr   r
   r   r'   r   r%   "r7   r^   r`   r@   rA   rB   rC   rD   rE   rF   rG   rH   rI   rJ   rK   rL   rM   rN   rO   rP   rQ   rR   rS   rT   rU   rV   rW   rX   rY   rZ   r[   r\   r]   r   s"       `                    `        r8   parsezCompletions.parse>   s   ` 	e$$$ ()F
"

	 	 	 	 	 	 	 zz U U ():	
 $]   !*  ,-B !*  !*  *+> !*  '(8!" &'?'P'P#$ !$0 "#&4#.#."$0" ;  > )?A! !D )+'%"   2?CDnUU]  /
 /
 /	
r:   Jcompletion_create_params.ResponseFormat | type[ResponseFormatT] | NotGiven,ChatCompletionStreamManager[ResponseFormatT]c                T   ddi|pi }t          | j        j        j        j        fi d|d|d|dddt          |          d	|d
|d|d|d|	d|
d|d|d|d|d|d|d|d|d|d|d|d|d|d|d|d|d|d |d!|d"|d#|d$| }!t          |!||%          S )&a  Wrapper over the `client.chat.completions.create(stream=True)` method that provides a more granular event API
        and automatic accumulation of each delta.

        This also supports all of the parsing utilities that `.parse()` does.

        Unlike `.create(stream=True)`, the `.stream()` method requires usage within a context manager to prevent accidental leakage of the response:

        ```py
        with client.beta.chat.completions.stream(
            model="gpt-4o-2024-08-06",
            messages=[...],
        ) as stream:
            for event in stream:
                if event.type == "content.delta":
                    print(event.delta, flush=True, end="")
        ```

        When the context manager is entered, a `ChatCompletionStream` instance is returned which, like `.create(stream=True)` is an iterator. The full list of events that are yielded by the iterator are outlined in [these docs](https://github.com/openai/openai-python/blob/main/helpers.md#chat-completions-events).

        When the context manager exits, the response will be closed, however the `stream` instance is still available outside
        the context manager.
        rz   beta.chat.completions.streamr^   r`   r@   r   TrA   rB   rC   rD   rE   rF   rG   rH   rI   rJ   rK   rL   rM   rN   rO   rP   rR   rQ   rS   rT   rU   rV   rW   rX   rY   rZ   r[   r\   r]   rA   r   )r   _clientchatcompletionscreater   r#   "r7   r^   r`   r@   rA   rB   rC   rD   rE   rF   rG   rH   rI   rJ   rK   rL   rM   rN   rO   rP   rQ   rR   rS   rT   rU   rV   rW   rX   rY   rZ   r[   r\   r]   api_requests"                                     r8   r   zCompletions.stream   s   z ()G
"

 =DL)0#=
 #=
 #=
X#=
 %#=
 %	#=

 4#=
 5_EEE#=
 0/#=
 (-#=
  i#=
 "z#=
 X#=
 #8"7#=
 "z#=
 X#=
 "z#=
  a!#=
" !4 3##=
$ "z%#=
& .-'#=
( )#=
* &+#=
, %-#=
. /#=
0 *>1#=
2 $3#=
4 $5#=
6 %7#=
8 &9#=
: %;#=
< =#=
> (-?#=
@ $A#=
B "zC#=
D GE#=
H ++
 
 
 	
r:   )r2   r3   )r2   r;   Br^   r_   r`   ra   r@   rb   rA   rc   rB   rd   rC   re   rD   rf   rE   rg   rF   rh   rG   ri   rH   ri   rI   rj   rJ   rk   rK   ri   rL   rl   rM   rm   rN   rd   rO   ri   rP   rn   rQ   ro   rR   rh   rS   rp   rT   rd   rU   rq   rV   rr   rW   ri   rX   rd   rY   rs   rZ   rt   r[   ru   r\   rv   r]   rw   r2   rx   )Br^   r_   r`   ra   r@   rb   rA   r   rB   rd   rC   re   rD   rf   rE   rg   rF   rh   rG   ri   rH   ri   rI   rj   rJ   rk   rK   ri   rL   rl   rM   rm   rN   rd   rO   ri   rP   rn   rQ   ro   rR   rh   rS   rp   rT   rd   rU   rq   rV   rr   rW   ri   rX   rd   rY   rs   rZ   rt   r[   ru   r\   rv   r]   rw   r2   r   	__name__
__module____qualname__r   r9   r>   r   r   r    r:   r8   r/   r/   *   s_       0 0 0 _0 6 6 6 _6 @I<E8AJSLU:C.7:C/88AHQ&//8PY7@)2HQ;D+4PY2;FO>G1:,5( )-$("&;DIM
 M
 M
 M
 M
 M
h @Ifo8AJSLU:C.7:C/88AHQ&//8PY7@)2HQ;D+4PY2;FO>G1:,5( )-$("&;DIi
 i
 i
 i
 i
 i
 i
 i
r:   c                      e Zd ZedEd            ZedFd            ZeeeeeeeeeeeeeeeeeeeeeeeeeedddeddGdAZeeeeeeeeeeeeeeeeeeeeeeeeeedddeddHdDZdS )Ir0   r2   AsyncCompletionsWithRawResponsec                     t          |           S r5   )r   r6   s    r8   r9   z"AsyncCompletions.with_raw_response:  s     /t444r:   %AsyncCompletionsWithStreamingResponsec                     t          |           S r=   )r   r6   s    r8   r>   z(AsyncCompletions.with_streaming_responseD  s     5T:::r:   Nr?   r^   r_   r`   ra   r@   rb   rA   rc   rB   rd   rC   re   rD   rf   rE   rg   rF   rh   rG   ri   rH   rI   rj   rJ   rk   rK   rL   rl   rM   rm   rN   rO   rP   rn   rQ   ro   rR   rS   rp   rT   rU   rq   rV   rr   rW   rX   rY   rs   rZ   rt   r[   ru   r\   rv   r]   rw   rx   c                  K   t                     ddi|pi }dfd}!|                     dt          i d	|d
|d|d|d|d|d|d|	d|
d|d|d|d|d|d|d|dt                    ||||d||||||dt          j                   d{V t          |||| |!          t          t          t          t                            t                    d           d{V S ) a  Wrapper over the `client.chat.completions.create()` method that provides richer integrations with Python specific types
        & returns a `ParsedChatCompletion` object, which is a subclass of the standard `ChatCompletion` class.

        You can pass a pydantic model to this method and it will automatically convert the model
        into a JSON schema, send it to the API and parse the response content back into the given model.

        This method will also automatically parse `function` tool calls if:
        - You use the `openai.pydantic_function_tool()` helper method
        - You mark your tool schema with `"strict": True`

        Example usage:
        ```py
        from pydantic import BaseModel
        from openai import AsyncOpenAI


        class Step(BaseModel):
            explanation: str
            output: str


        class MathResponse(BaseModel):
            steps: List[Step]
            final_answer: str


        client = AsyncOpenAI()
        completion = await client.beta.chat.completions.parse(
            model="gpt-4o-2024-08-06",
            messages=[
                {"role": "system", "content": "You are a helpful math tutor."},
                {"role": "user", "content": "solve 8x + 31 = 2"},
            ],
            response_format=MathResponse,
        )

        message = completion.choices[0].message
        if message.parsed:
            print(message.parsed.steps)
            print("answer: ", message.parsed.final_answer)
        ```
        rz   r{   r|   r%   r2   rx   c                (    t          |           S r~   r   r   s    r8   r   z&AsyncCompletions.parse.<locals>.parser  r   r:   r   r^   r`   r@   rB   rC   rD   rE   rF   rG   rH   rI   rJ   rK   rL   rM   rN   rA   F)rO   rP   rR   rQ   r   rS   rT   rU   rV   rW   rX   rY   Nr   r   r   )r   r   r   r   r   r   r   r
   r   r'   r   r%   r   s"       `                    `        r8   r   zAsyncCompletions.parseM  s     ` 	e$$$ ()F
"

	 	 	 	 	 	 	 ZZ,U U ():	
 $]   !*  ,-B !*  !*  *+> !*  '(8!" &'?'P'P#$ !$0" #&4#.#."$0" ;  > )?A! ! ! ! ! ! ! !D )+'%"   2?CDnUU]   /
 /
 /
 /
 /
 /
 /
 /
 /	
r:   r   1AsyncChatCompletionStreamManager[ResponseFormatT]c                h   t          |           ddi|pi } | j        j        j        j        d&i d|d|d|dddt          |          d	|d
|d|d|d|	d|
d|d|d|d|d|d|d|d|d|d|d|d|d|d|d|d|d|d |d!|d"|d#|d$| }!t          |!||%          S )'a  Wrapper over the `client.chat.completions.create(stream=True)` method that provides a more granular event API
        and automatic accumulation of each delta.

        This also supports all of the parsing utilities that `.parse()` does.

        Unlike `.create(stream=True)`, the `.stream()` method requires usage within a context manager to prevent accidental leakage of the response:

        ```py
        async with client.beta.chat.completions.stream(
            model="gpt-4o-2024-08-06",
            messages=[...],
        ) as stream:
            async for event in stream:
                if event.type == "content.delta":
                    print(event.delta, flush=True, end="")
        ```

        When the context manager is entered, an `AsyncChatCompletionStream` instance is returned which, like `.create(stream=True)` is an async iterator. The full list of events that are yielded by the iterator are outlined in [these docs](https://github.com/openai/openai-python/blob/main/helpers.md#chat-completions-events).

        When the context manager exits, the response will be closed, however the `stream` instance is still available outside
        the context manager.
        rz   r   r^   r`   r@   r   TrA   rB   rC   rD   rE   rF   rG   rH   rI   rJ   rK   rL   rM   rN   rO   rP   rQ   rR   rS   rT   rU   rV   rW   rX   rY   rZ   r[   r\   r]   r   r   )r   r   r   r   r   r   r$   r   s"                                     r8   r   zAsyncCompletions.stream  s   x 	e$$$ ()G
"

 ;dl'3: "
 "
 "
X"
%"
 %"
 4	"

 5_EEE"
 0/"
 (-"
  i"
 "z"
 X"
 #8"7"
 "z"
 X"
 "z"
 a"
  !4 3!"
" "z#"
$ .-%"
& '"
( &)"
* +"
, %-"
. *>/"
0 $1"
2 $3"
4 %5"
6 &7"
8 %9"
: ;"
< (-="
> $?"
@ "zA"
B GC"
F 0+
 
 
 	
r:   )r2   r   )r2   r   r   )Br^   r_   r`   ra   r@   rb   rA   r   rB   rd   rC   re   rD   rf   rE   rg   rF   rh   rG   ri   rH   ri   rI   rj   rJ   rk   rK   ri   rL   rl   rM   rm   rN   rd   rO   ri   rP   rn   rQ   ro   rR   rh   rS   rp   rT   rd   rU   rq   rV   rr   rW   ri   rX   rd   rY   rs   rZ   rt   r[   ru   r\   rv   r]   rw   r2   r   r   r   r:   r8   r0   r0   9  s_       5 5 5 _5 ; ; ; _; @I<E8AJSLU:C.7:C/88AHQ&//8PY7@)2HQ;D+4PY2;FO>G1:,5( )-$("&;DIM
 M
 M
 M
 M
 M
h @Ifo8AJSLU:C.7:C/88AHQ&//8PY7@)2HQ;D+4PY2;FO>G1:,5( )-$("&;DIj
 j
 j
 j
 j
 j
 j
 j
r:   c                      e Zd ZddZdS )r3   r   r/   r2   Nonec                P    || _         t          j        |j                  | _        d S N)_completionsr   to_raw_response_wrapperr   r7   r   s     r8   __init__z#CompletionsWithRawResponse.__init__J  s(    '%=
 



r:   Nr   r/   r2   r   r   r   r   r   r   r:   r8   r3   r3   I  (        
 
 
 
 
 
r:   r3   c                      e Zd ZddZdS )r   r   r0   r2   r   c                P    || _         t          j        |j                  | _        d S r   )r   r   async_to_raw_response_wrapperr   r   s     r8   r   z(AsyncCompletionsWithRawResponse.__init__S  s(    '%C
 



r:   Nr   r0   r2   r   r   r   r:   r8   r   r   R  r   r:   r   c                      e Zd ZddZdS )r;   r   r/   r2   r   c                F    || _         t          |j                  | _        d S r   )r   r   r   r   s     r8   r   z)CompletionsWithStreamingResponse.__init__\  s%    '1
 



r:   Nr   r   r   r:   r8   r;   r;   [  r   r:   r;   c                      e Zd ZddZdS )r   r   r0   r2   r   c                F    || _         t          |j                  | _        d S r   )r   r   r   r   s     r8   r   z.AsyncCompletionsWithStreamingResponse.__init__e  s%    '7
 



r:   Nr   r   r   r:   r8   r   r   d  r   r:   r   )P
__future__r   typingr   r   r   r   r   r	   r
   	functoolsr   typing_extensionsr   httpx r   _typesr   r   r   r   r   _utilsr   r   _compatr   	_resourcer   r   	_responser   r   
_streamingr   
types.chatr   _base_clientr   lib._parsingr   r   r   r    r   r!   r   types.chat_modelr"   lib.streaming.chatr#   r$   types.chat.chat_completionr%    types.chat.chat_completion_chunkr&   !types.chat.parsed_chat_completionr'   #types.chat.chat_completion_modalityr(   %types.chat.chat_completion_tool_paramr)   &types.chat.chat_completion_audio_paramr*   (types.chat.chat_completion_message_paramr+   /types.chat.chat_completion_stream_options_paramr,   3types.chat.chat_completion_prediction_content_paramr-   3types.chat.chat_completion_tool_choice_option_paramr.   __all__r/   r0   r3   r   r;   r   r   r:   r8   <module>r      s   # " " " " " D D D D D D D D D D D D D D D D D D       % % % % % %  ! ! ! ! ! ! @ @ @ @ @ @ @ @ @ @ @ @ @ @ = = = = = = = = ' ' ' ' ' ' ; ; ; ; ; ; ; ; Z Z Z Z Z Z Z Z ! ! ! ! ! ! 3 3 3 3 3 3 1 1 1 1 1 1            + * * * * * ` ` ` ` ` ` ` ` 9 9 9 9 9 9 D D D D D D F F F F F F J J J J J J M M M M M M O O O O O O S S S S S S ` ` ` ` ` ` h h h h h h g g g g g g,
-L
 L
 L
 L
 L
/ L
 L
 L
^M
 M
 M
 M
 M
' M
 M
 M
`
 
 
 
 
 
 
 

 
 
 
 
 
 
 

 
 
 
 
 
 
 

 
 
 
 
 
 
 
 
 
r:   