
    .h                        U d dl mZ d dl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 dd
lmZ daded<   ddZdZdZ G d de          ZdS )    )annotationsN)AsyncOpenAIDefaultAsyncHttpxClient   )_openai_shared   )STTModelTTSModelVoiceModelProvider   )OpenAISTTModel)OpenAITTSModelzhttpx.AsyncClient | None_http_clientreturnhttpx.AsyncClientc                 :    t           t                      a t           S )N)r   r        f/var/www/FlaskApp/flask-venv/lib/python3.11/site-packages/agents/voice/models/openai_model_provider.pyshared_http_clientr      s    .00r   zgpt-4o-transcribezgpt-4o-mini-ttsc                  @    e Zd ZdZddddddddZddZddZddZdS )OpenAIVoiceModelProviderz/A voice model provider that uses OpenAI models.N)api_keybase_urlopenai_clientorganizationprojectr   
str | Noner   r   AsyncOpenAI | Noner   r   r   Nonec               ~    |||
J d            || _         dS d| _         || _        || _        || _        || _        dS )ao  Create a new OpenAI voice model provider.

        Args:
            api_key: The API key to use for the OpenAI client. If not provided, we will use the
                default API key.
            base_url: The base URL to use for the OpenAI client. If not provided, we will use the
                default base URL.
            openai_client: An optional OpenAI client to use. If not provided, we will create a new
                OpenAI client using the api_key and base_url.
            organization: The organization to use for the OpenAI client.
            project: The project to use for the OpenAI client.
        Nz>Don't provide api_key or base_url if you provide openai_client)_client_stored_api_key_stored_base_url_stored_organization_stored_project)selfr   r   r   r   r   s         r   __init__z!OpenAIVoiceModelProvider.__init__   s_    * $?x'7'7P (8'7'7 0=DLLLDL#*D $,D!(4D%#*D   r   r   c                    | j         _t          j                    pFt          | j        pt          j                    | j        | j        | j        t                                | _         | j         S )N)r   r   r   r   http_client)
r"   r   get_default_openai_clientr   r#   get_default_openai_keyr$   r%   r&   r   )r'   s    r   _get_clientz$OpenAIVoiceModelProvider._get_clientA   sl    <)CEE ,W0U0W0W.!6,.00J J JDL |r   
model_namer	   c                T    t          |pt          |                                           S )zGet a speech-to-text model by name.

        Args:
            model_name: The name of the model to get.

        Returns:
            The speech-to-text model.
        )r   DEFAULT_STT_MODELr-   r'   r.   s     r   get_stt_modelz&OpenAIVoiceModelProvider.get_stt_modelM   &     j=,=t?O?O?Q?QRRRr   r
   c                T    t          |pt          |                                           S )zGet a text-to-speech model by name.

        Args:
            model_name: The name of the model to get.

        Returns:
            The text-to-speech model.
        )r   DEFAULT_TTS_MODELr-   r1   s     r   get_tts_modelz&OpenAIVoiceModelProvider.get_tts_modelX   r3   r   )r   r   r   r   r   r   r   r   r   r   r   r    )r   r   )r.   r   r   r	   )r.   r   r   r
   )__name__
__module____qualname____doc__r(   r-   r2   r6   r   r   r   r   r      s        99
 ##,0#'"+ + + + + +F
 
 
 
	S 	S 	S 	S	S 	S 	S 	S 	S 	Sr   r   )r   r   )
__future__r   httpxopenair   r   modelsr   modelr	   r
   r   
openai_sttr   
openai_ttsr   r   __annotations__r   r0   r5   r   r   r   r   <module>rC      s   " " " " " " "  7 7 7 7 7 7 7 7 $ $ $ $ $ $ : : : : : : : : : : & & & & & & & & & & & &)- - - - -
    ( % FS FS FS FS FS1 FS FS FS FS FSr   