o
    êi#                     @   sp   d Z ddlmZ ddlZddlmZmZ ddlmZm	Z	m
Z
mZmZmZmZmZ G dd dZG d	d
 d
ZdS )zMain Fish Audio client classes.    )OptionalN   )AsyncClientWrapperClientWrapper)	ASRClientAccountClientAsyncAccountClientAsyncASRClientAsyncTTSClientAsyncVoicesClient	TTSClientVoicesClientc                
   @      e Zd ZdZddddddee deded	eej fd
dZ	e
defddZe
defddZe
defddZe
defddZdddZdd Zdd ZdS )	FishAudioa  
    Synchronous Fish Audio API client.

    Example:
        ```python
        from fishaudio import FishAudio

        client = FishAudio(api_key="your_api_key")

        # Generate speech
        audio = client.tts.convert(text="Hello world")
        with open("output.mp3", "wb") as f:
            for chunk in audio:
                f.write(chunk)

        # List voices
        voices = client.voices.list(page_size=20)
        print(f"Found {voices.total} voices")
        ```
    Nhttps://api.fish.audio      n@api_keybase_urltimeouthttpx_clientr   r   r   r   c                C   .   t ||||d| _d| _d| _d| _d| _dS )a  
        Initialize Fish Audio client.

        Args:
            api_key: API key (can also use FISH_API_KEY env var)
            base_url: API base URL
            timeout: Request timeout in seconds
            httpx_client: Optional custom HTTP client
        r   N)r   _client_wrapper_tts_asr_voices_accountselfr   r   r   r    r   D/home/ubuntu/.local/lib/python3.10/site-packages/fishaudio/client.py__init__*      
zFishAudio.__init__returnc                 C      | j du rt| j| _ | j S z'Access TTS (text-to-speech) operations.N)r   r   r   r   r   r   r    ttsH      
zFishAudio.ttsc                 C   r$   z'Access ASR (speech-to-text) operations.N)r   r   r   r&   r   r   r    asrO   r(   zFishAudio.asrc                 C   r$   z#Access voice management operations.N)r   r   r   r&   r   r   r    voicesV   r(   zFishAudio.voicesc                 C   r$   z"Access account/billing operations.N)r   r   r   r&   r   r   r    account]   r(   zFishAudio.accountc                 C   s   | j   dS zClose the HTTP client.Nr   closer&   r   r   r    r1   d   s   zFishAudio.closec                 C   s   | S Nr   r&   r   r   r    	__enter__h   s   zFishAudio.__enter__c                 C   s   |    d S r2   r1   r   exc_typeexc_valexc_tbr   r   r    __exit__k   s   zFishAudio.__exit__r#   N)__name__
__module____qualname____doc__r   strfloathttpxClientr!   propertyr   r'   r   r*   r   r,   r   r.   r1   r3   r9   r   r   r   r    r      s4    

r   c                
   @   r   )AsyncFishAudioao  
    Asynchronous Fish Audio API client.

    Example:
        ```python
        from fishaudio import AsyncFishAudio

        async def main():
            client = AsyncFishAudio(api_key="your_api_key")

            # Generate speech
            audio = client.tts.convert(text="Hello world")
            async with aiofiles.open("output.mp3", "wb") as f:
                async for chunk in audio:
                    await f.write(chunk)

            # List voices
            voices = await client.voices.list(page_size=20)
            print(f"Found {voices.total} voices")

        asyncio.run(main())
        ```
    Nr   r   r   r   r   r   r   c                C   r   )a  
        Initialize async Fish Audio client.

        Args:
            api_key: API key (can also use FISH_API_KEY env var)
            base_url: API base URL
            timeout: Request timeout in seconds
            httpx_client: Optional custom async HTTP client
        r   N)r   r   r   r   r   r   r   r   r   r    r!      r"   zAsyncFishAudio.__init__r#   c                 C   r$   r%   )r   r
   r   r&   r   r   r    r'      r(   zAsyncFishAudio.ttsc                 C   r$   r)   )r   r	   r   r&   r   r   r    r*      r(   zAsyncFishAudio.asrc                 C   r$   r+   )r   r   r   r&   r   r   r    r,      r(   zAsyncFishAudio.voicesc                 C   r$   r-   )r   r   r   r&   r   r   r    r.      r(   zAsyncFishAudio.accountc                    s   | j  I dH  dS r/   r0   r&   r   r   r    r1      s   zAsyncFishAudio.closec                    s   | S r2   r   r&   r   r   r    
__aenter__   s   zAsyncFishAudio.__aenter__c                    s   |   I d H  d S r2   r4   r5   r   r   r    	__aexit__   s   zAsyncFishAudio.__aexit__r:   )r;   r<   r=   r>   r   r?   r@   rA   AsyncClientr!   rC   r
   r'   r	   r*   r   r,   r   r.   r1   rE   rF   r   r   r   r    rD   o   s4    

rD   )r>   typingr   rA   corer   r   	resourcesr   r   r   r	   r
   r   r   r   r   rD   r   r   r   r    <module>   s    ([