o
    qmis                     @   s   d dl 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 ddlmZ dd	lmZ dd
lmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddl m!Z!m"Z" e #e j$dZ%G dd dZ&G dd dZ'dS )    N   )AsyncClientWrapperSyncClientWrapper)RequestOptions)LanguageIdentificationResponse)NumeralsFormat)SpokenFormNumeralsFormat)TranslateMode)TranslateModel)TranslateSourceLanguage)TranslateSpeakerGender)TranslateTargetLanguage)TranslationResponse)TranslatiterateTargetLanguage)TransliterateMode)TransliterateSourceLanguage)TransliterationResponse   )AsyncRawTextClientRawTextClient.c                   @     e Zd ZdefddZedefddZeeeeeddd	e	d
e
dedeje deje deje deje deje deje defddZddd	e	deje defddZeeeddd	e	d
ededeje deje deje deje defddZdS )
TextClientclient_wrapperc                C      t |d| _d S N)r   )r   _raw_clientselfr    r   H/home/ubuntu/.local/lib/python3.10/site-packages/sarvamai/text/client.py__init__      zTextClient.__init__returnc                 C      | j S )z
        Retrieves a raw implementation of this client that returns raw responses.

        Returns
        -------
        RawTextClient
        r   r   r   r   r   with_raw_response      	zTextClient.with_raw_responseNspeaker_gendermodemodeloutput_scriptnumerals_formatrequest_optionsinputsource_language_codetarget_language_coder)   r*   r+   r,   r-   r.   c       	         C   s$   | j j|||||||||	d	}
|
jS )u  
        **Translation** converts text from one language to another while preserving its meaning.
        For Example: **'मैं ऑफिस जा रहा हूँ'** translates to **'I am going to the office'** in English, where the script and language change, but the original meaning remains the same.

        Available languages:
        - **`bn-IN`**: Bengali
        - **`en-IN`**: English
        - **`gu-IN`**: Gujarati
        - **`hi-IN`**: Hindi
        - **`kn-IN`**: Kannada
        - **`ml-IN`**: Malayalam
        - **`mr-IN`**: Marathi
        - **`od-IN`**: Odia
        - **`pa-IN`**: Punjabi
        - **`ta-IN`**: Tamil
        - **`te-IN`**: Telugu

        ### Newly added languages:
        - **`as-IN`**: Assamese
        - **`brx-IN`**: Bodo
        - **`doi-IN`**: Dogri
        - **`kok-IN`**: Konkani
        - **`ks-IN`**: Kashmiri
        - **`mai-IN`**: Maithili
        - **`mni-IN`**: Manipuri (Meiteilon)
        - **`ne-IN`**: Nepali
        - **`sa-IN`**: Sanskrit
        - **`sat-IN`**: Santali
        - **`sd-IN`**: Sindhi
        - **`ur-IN`**: Urdu

        For hands-on practice, you can explore the notebook tutorial on [Translate API Tutorial](https://github.com/sarvamai/sarvam-ai-cookbook/blob/main/notebooks/translate/Translate_API_Tutorial.ipynb).

        Parameters
        ----------
        input : str
            The text you want to translate is the input text that will be processed by the translation model. The maximum is 1000 characters for Mayura:v1 and 2000 characters for Sarvam-Translate:v1.

        source_language_code : TranslateSourceLanguage
            Source language code for translation input.

            **mayura:v1 Languages:** Bengali, English, Gujarati, Hindi, Kannada, Malayalam, Marathi, Odia, Punjabi, Tamil, Telugu

            **sarvam-translate:v1 Languages:** All mayura:v1 languages and Assamese, Bodo, Dogri, Konkani, Kashmiri, Maithili, Manipuri, Nepali, Sanskrit, Santali, Sindhi, Urdu

            **Note:** mayura:v1 supports automatic language detection using 'auto' as the source language code.


        target_language_code : TranslateTargetLanguage
            The language code of the translated text. This specifies the target language for translation.

            **mayura:v1 Languages:** Bengali, English, Gujarati, Hindi, Kannada, Malayalam, Marathi, Odia, Punjabi, Tamil, Telugu

            **sarvam-translate:v1 Languages:** All mayura:v1 and Assamese, Bodo, Dogri, Konkani, Kashmiri, Maithili, Manipuri, Nepali, Sanskrit, Santali, Sindhi, Urdu


        speaker_gender : typing.Optional[TranslateSpeakerGender]
            Please specify the gender of the speaker for better translations.

        mode : typing.Optional[TranslateMode]
            Specifies the tone or style of the translation.

            **Model Support:**
            - **mayura:v1**: Supports formal, classic-colloquial, and modern-colloquial modes
            - **sarvam-translate:v1**: Only formal mode is supported

            **Default:** formal

        model : typing.Optional[TranslateModel]
            Specifies the translation model to use.
            - mayura:v1: Supports 12 languages with all modes, output scripts, and automatic language detection.
            - sarvam-translate:v1: Supports all 22 scheduled languages of India, formal mode only.

        output_script : typing.Optional[TransliterateMode]
            **output_script**: This is an optional parameter which controls the transliteration style applied to the output text.

            **Transliteration**: Converting text from one script to another while preserving pronunciation.

            For mayura:v1 - We support transliteration with four options:
            - **`null`**(default): No transliteration applied.
            - **`roman`**: Transliteration in Romanized script.
            - **`fully-native`**: Transliteration in the native script with formal style.
            - **`spoken-form-in-native`**: Transliteration in the native script with spoken style.

            For sarvam-translate:v1 - Transliteration is not supported.
            ### Example:
            English: Your EMI of Rs. 3000 is pending.
            Default modern translation: आपका Rs. 3000 का EMI pending है (when `null` is passed).

            With postprocessing enabled:
            - **roman output**: aapka Rs. 3000 ka EMI pending hai.

        numerals_format : typing.Optional[NumeralsFormat]
            `numerals_format` is an optional parameter with two options (supported for both mayura:v1 and sarvam-translate:v1):

            - **`international`** (default): Uses regular numerals (0-9).
            - **`native`**: Uses language-specific native numerals.

            ### Example:
            - If `international` format is selected, we use regular numerals (0-9). For example: `मेरा phone number है: 9840950950`.
            - If `native` format is selected, we use language-specific native numerals, like: `मेरा phone number है: ९८४०९५०९५०`.

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        TranslationResponse
            Successful Response

        Examples
        --------
        from sarvamai import SarvamAI

        client = SarvamAI(
            api_subscription_key="YOUR_API_SUBSCRIPTION_KEY",
        )
        client.text.translate(
            input="input",
            source_language_code="auto",
            target_language_code="bn-IN",
        )
        	r/   r0   r1   r)   r*   r+   r,   r-   r.   r   	translatedatar   r/   r0   r1   r)   r*   r+   r,   r-   r.   	_responser   r   r   r4   )   s    	zTextClient.translater.   c                C   s   | j j||d}|jS )a  
        Identifies the language (e.g., en-IN, hi-IN) and script (e.g., Latin, Devanagari) of the input text, supporting multiple languages.

        Parameters
        ----------
        input : str
            The text input for language and script identification. Max Input Limit is 1000 characters

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        LanguageIdentificationResponse
            Successful Response

        Examples
        --------
        from sarvamai import SarvamAI

        client = SarvamAI(
            api_subscription_key="YOUR_API_SUBSCRIPTION_KEY",
        )
        client.text.identify_language(
            input="input",
        )
        r/   r.   r   identify_languager5   r   r/   r.   r7   r   r   r   r;      s   zTextClient.identify_languager-   spoken_form_numerals_languagespoken_formr.   r>   r?   c          	   	   C   s    | j j|||||||d}|jS )uN  
        **Transliteration** converts text from one script to another while preserving the original pronunciation. For example, **'नमस्ते'** becomes **'namaste'** in English, and **'how are you'** can be written as **'हाउ आर यू'** in Devanagari. This process ensures that the sound of the original text remains intact, even when written in a different script.

        Transliteration is useful when you want to represent words phonetically across different writing systems, such as converting **'मैं ऑफिस जा रहा हूँ'** to **'main office ja raha hun'** in English letters.

        **Translation**, on the other hand, converts text from one language to another while preserving the meaning rather than pronunciation. For example, **'मैं ऑफिस जा रहा हूँ'** translates to **'I am going to the office'** in English, changing both the script and the language while conveying the intended message.
        ### Examples of **Transliteration**:
        - **'Good morning'** becomes **'गुड मॉर्निंग'** in Hindi, where the pronunciation is preserved but the meaning is not translated.
        - **'सुप्रभात'** becomes **'suprabhat'** in English.

        Available languages:
        - **`en-IN`**: English
        - **`hi-IN`**: Hindi
        - **`bn-IN`**: Bengali
        - **`gu-IN`**: Gujarati
        - **`kn-IN`**: Kannada
        - **`ml-IN`**: Malayalam
        - **`mr-IN`**: Marathi
        - **`od-IN`**: Odia
        - **`pa-IN`**: Punjabi
        - **`ta-IN`**: Tamil
        - **`te-IN`**: Telugu

        For hands-on practice, you can explore the notebook tutorial on [Transliterate API Tutorial](https://github.com/sarvamai/sarvam-ai-cookbook/blob/main/notebooks/transliterate/Transliterate_API_Tutorial.ipynb).

        Parameters
        ----------
        input : str
            The text you want to transliterate.

        source_language_code : TransliterateSourceLanguage
            The language code of the input text. This specifies the source language for transliteration.



             Note:  The source language should either be an Indic language or English. As we supports both Indic-to-English and English-to-Indic transliteration.


        target_language_code : TranslatiterateTargetLanguage
            The language code of the transliteration text. This specifies the target language for transliteration.



             Note:The target language should either be an Indic language or English. As we supports both Indic-to-English and English-to-Indic transliteration.


        numerals_format : typing.Optional[NumeralsFormat]
            `numerals_format` is an optional parameter with two options:

            - **`international`** (default): Uses regular numerals (0-9).
            - **`native`**: Uses language-specific native numerals.

            ### Example:
            - If `international` format is selected, we use regular numerals (0-9). For example: `मेरा phone number है: 9840950950`.
            - If `native` format is selected, we use language-specific native numerals, like: `मेरा phone number है: ९८४०९५०९५०`.

        spoken_form_numerals_language : typing.Optional[SpokenFormNumeralsFormat]
            `spoken_form_numerals_language` is an optional parameter with two options and only works when spoken_form is true:

            - **`english`** : Numbers in the text will be spoken in English.
            - **`native(default)`**: Numbers in the text will be spoken in the native language.

            ### Examples:
            - **Input:** "मेरे पास ₹200 है"
              - If `english` format is selected: "मेरे पास टू हन्डर्ड रूपीस है"
              - If `native` format is selected: "मेरे पास दो सौ रुपये है"


        spoken_form : typing.Optional[bool]
              - Default: `False`
              - Converts text into a natural spoken form when `True`.
              - **Note:** No effect if output language is `en-IN`.

            ### Example:
            - **Input:** `मुझे कल 9:30am को appointment है`
              - **Output:** `मुझे कल सुबह साढ़े नौ बजे को अपॉइंटमेंट है`

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        TransliterationResponse
            Successful Response

        Examples
        --------
        from sarvamai import SarvamAI

        client = SarvamAI(
            api_subscription_key="YOUR_API_SUBSCRIPTION_KEY",
        )
        client.text.transliterate(
            input="input",
            source_language_code="auto",
            target_language_code="bn-IN",
        )
        r/   r0   r1   r-   r>   r?   r.   r   transliterater5   	r   r/   r0   r1   r-   r>   r?   r.   r7   r   r   r   rB      s   m	zTextClient.transliterate)__name__
__module____qualname__r   r    propertyr   r&   OMITstrr   r   typingOptionalr   r	   r
   r   r   r   r   r4   r   r;   r   r   r   boolr   rB   r   r   r   r   r      sz    	

 
'	
r   c                   @   r   )AsyncTextClientr   c                C   r   r   )r   r   r   r   r   r   r    Y  r!   zAsyncTextClient.__init__r"   c                 C   r#   )z
        Retrieves a raw implementation of this client that returns raw responses.

        Returns
        -------
        AsyncRawTextClient
        r$   r%   r   r   r   r&   \  r'   z!AsyncTextClient.with_raw_responseNr(   r/   r0   r1   r)   r*   r+   r,   r-   r.   c       	            s,   | j j|||||||||	d	I dH }
|
jS )ug  
        **Translation** converts text from one language to another while preserving its meaning.
        For Example: **'मैं ऑफिस जा रहा हूँ'** translates to **'I am going to the office'** in English, where the script and language change, but the original meaning remains the same.

        Available languages:
        - **`bn-IN`**: Bengali
        - **`en-IN`**: English
        - **`gu-IN`**: Gujarati
        - **`hi-IN`**: Hindi
        - **`kn-IN`**: Kannada
        - **`ml-IN`**: Malayalam
        - **`mr-IN`**: Marathi
        - **`od-IN`**: Odia
        - **`pa-IN`**: Punjabi
        - **`ta-IN`**: Tamil
        - **`te-IN`**: Telugu

        ### Newly added languages:
        - **`as-IN`**: Assamese
        - **`brx-IN`**: Bodo
        - **`doi-IN`**: Dogri
        - **`kok-IN`**: Konkani
        - **`ks-IN`**: Kashmiri
        - **`mai-IN`**: Maithili
        - **`mni-IN`**: Manipuri (Meiteilon)
        - **`ne-IN`**: Nepali
        - **`sa-IN`**: Sanskrit
        - **`sat-IN`**: Santali
        - **`sd-IN`**: Sindhi
        - **`ur-IN`**: Urdu

        For hands-on practice, you can explore the notebook tutorial on [Translate API Tutorial](https://github.com/sarvamai/sarvam-ai-cookbook/blob/main/notebooks/translate/Translate_API_Tutorial.ipynb).

        Parameters
        ----------
        input : str
            The text you want to translate is the input text that will be processed by the translation model. The maximum is 1000 characters for Mayura:v1 and 2000 characters for Sarvam-Translate:v1.

        source_language_code : TranslateSourceLanguage
            Source language code for translation input.

            **mayura:v1 Languages:** Bengali, English, Gujarati, Hindi, Kannada, Malayalam, Marathi, Odia, Punjabi, Tamil, Telugu

            **sarvam-translate:v1 Languages:** All mayura:v1 languages and Assamese, Bodo, Dogri, Konkani, Kashmiri, Maithili, Manipuri, Nepali, Sanskrit, Santali, Sindhi, Urdu

            **Note:** mayura:v1 supports automatic language detection using 'auto' as the source language code.


        target_language_code : TranslateTargetLanguage
            The language code of the translated text. This specifies the target language for translation.

            **mayura:v1 Languages:** Bengali, English, Gujarati, Hindi, Kannada, Malayalam, Marathi, Odia, Punjabi, Tamil, Telugu

            **sarvam-translate:v1 Languages:** All mayura:v1 and Assamese, Bodo, Dogri, Konkani, Kashmiri, Maithili, Manipuri, Nepali, Sanskrit, Santali, Sindhi, Urdu


        speaker_gender : typing.Optional[TranslateSpeakerGender]
            Please specify the gender of the speaker for better translations.

        mode : typing.Optional[TranslateMode]
            Specifies the tone or style of the translation.

            **Model Support:**
            - **mayura:v1**: Supports formal, classic-colloquial, and modern-colloquial modes
            - **sarvam-translate:v1**: Only formal mode is supported

            **Default:** formal

        model : typing.Optional[TranslateModel]
            Specifies the translation model to use.
            - mayura:v1: Supports 12 languages with all modes, output scripts, and automatic language detection.
            - sarvam-translate:v1: Supports all 22 scheduled languages of India, formal mode only.

        output_script : typing.Optional[TransliterateMode]
            **output_script**: This is an optional parameter which controls the transliteration style applied to the output text.

            **Transliteration**: Converting text from one script to another while preserving pronunciation.

            For mayura:v1 - We support transliteration with four options:
            - **`null`**(default): No transliteration applied.
            - **`roman`**: Transliteration in Romanized script.
            - **`fully-native`**: Transliteration in the native script with formal style.
            - **`spoken-form-in-native`**: Transliteration in the native script with spoken style.

            For sarvam-translate:v1 - Transliteration is not supported.
            ### Example:
            English: Your EMI of Rs. 3000 is pending.
            Default modern translation: आपका Rs. 3000 का EMI pending है (when `null` is passed).

            With postprocessing enabled:
            - **roman output**: aapka Rs. 3000 ka EMI pending hai.

        numerals_format : typing.Optional[NumeralsFormat]
            `numerals_format` is an optional parameter with two options (supported for both mayura:v1 and sarvam-translate:v1):

            - **`international`** (default): Uses regular numerals (0-9).
            - **`native`**: Uses language-specific native numerals.

            ### Example:
            - If `international` format is selected, we use regular numerals (0-9). For example: `मेरा phone number है: 9840950950`.
            - If `native` format is selected, we use language-specific native numerals, like: `मेरा phone number है: ९८४०९५०९५०`.

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        TranslationResponse
            Successful Response

        Examples
        --------
        import asyncio

        from sarvamai import AsyncSarvamAI

        client = AsyncSarvamAI(
            api_subscription_key="YOUR_API_SUBSCRIPTION_KEY",
        )


        async def main() -> None:
            await client.text.translate(
                input="input",
                source_language_code="auto",
                target_language_code="bn-IN",
            )


        asyncio.run(main())
        r2   Nr3   r6   r   r   r   r4   g  s    zAsyncTextClient.translater8   c                   s   | j j||dI dH }|jS )at  
        Identifies the language (e.g., en-IN, hi-IN) and script (e.g., Latin, Devanagari) of the input text, supporting multiple languages.

        Parameters
        ----------
        input : str
            The text input for language and script identification. Max Input Limit is 1000 characters

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        LanguageIdentificationResponse
            Successful Response

        Examples
        --------
        import asyncio

        from sarvamai import AsyncSarvamAI

        client = AsyncSarvamAI(
            api_subscription_key="YOUR_API_SUBSCRIPTION_KEY",
        )


        async def main() -> None:
            await client.text.identify_language(
                input="input",
            )


        asyncio.run(main())
        r9   Nr:   r<   r   r   r   r;     s   &z!AsyncTextClient.identify_languager=   r>   r?   c          	   	      s(   | j j|||||||dI dH }|jS )u  
        **Transliteration** converts text from one script to another while preserving the original pronunciation. For example, **'नमस्ते'** becomes **'namaste'** in English, and **'how are you'** can be written as **'हाउ आर यू'** in Devanagari. This process ensures that the sound of the original text remains intact, even when written in a different script.

        Transliteration is useful when you want to represent words phonetically across different writing systems, such as converting **'मैं ऑफिस जा रहा हूँ'** to **'main office ja raha hun'** in English letters.

        **Translation**, on the other hand, converts text from one language to another while preserving the meaning rather than pronunciation. For example, **'मैं ऑफिस जा रहा हूँ'** translates to **'I am going to the office'** in English, changing both the script and the language while conveying the intended message.
        ### Examples of **Transliteration**:
        - **'Good morning'** becomes **'गुड मॉर्निंग'** in Hindi, where the pronunciation is preserved but the meaning is not translated.
        - **'सुप्रभात'** becomes **'suprabhat'** in English.

        Available languages:
        - **`en-IN`**: English
        - **`hi-IN`**: Hindi
        - **`bn-IN`**: Bengali
        - **`gu-IN`**: Gujarati
        - **`kn-IN`**: Kannada
        - **`ml-IN`**: Malayalam
        - **`mr-IN`**: Marathi
        - **`od-IN`**: Odia
        - **`pa-IN`**: Punjabi
        - **`ta-IN`**: Tamil
        - **`te-IN`**: Telugu

        For hands-on practice, you can explore the notebook tutorial on [Transliterate API Tutorial](https://github.com/sarvamai/sarvam-ai-cookbook/blob/main/notebooks/transliterate/Transliterate_API_Tutorial.ipynb).

        Parameters
        ----------
        input : str
            The text you want to transliterate.

        source_language_code : TransliterateSourceLanguage
            The language code of the input text. This specifies the source language for transliteration.



             Note:  The source language should either be an Indic language or English. As we supports both Indic-to-English and English-to-Indic transliteration.


        target_language_code : TranslatiterateTargetLanguage
            The language code of the transliteration text. This specifies the target language for transliteration.



             Note:The target language should either be an Indic language or English. As we supports both Indic-to-English and English-to-Indic transliteration.


        numerals_format : typing.Optional[NumeralsFormat]
            `numerals_format` is an optional parameter with two options:

            - **`international`** (default): Uses regular numerals (0-9).
            - **`native`**: Uses language-specific native numerals.

            ### Example:
            - If `international` format is selected, we use regular numerals (0-9). For example: `मेरा phone number है: 9840950950`.
            - If `native` format is selected, we use language-specific native numerals, like: `मेरा phone number है: ९८४०९५०९५०`.

        spoken_form_numerals_language : typing.Optional[SpokenFormNumeralsFormat]
            `spoken_form_numerals_language` is an optional parameter with two options and only works when spoken_form is true:

            - **`english`** : Numbers in the text will be spoken in English.
            - **`native(default)`**: Numbers in the text will be spoken in the native language.

            ### Examples:
            - **Input:** "मेरे पास ₹200 है"
              - If `english` format is selected: "मेरे पास टू हन्डर्ड रूपीस है"
              - If `native` format is selected: "मेरे पास दो सौ रुपये है"


        spoken_form : typing.Optional[bool]
              - Default: `False`
              - Converts text into a natural spoken form when `True`.
              - **Note:** No effect if output language is `en-IN`.

            ### Example:
            - **Input:** `मुझे कल 9:30am को appointment है`
              - **Output:** `मुझे कल सुबह साढ़े नौ बजे को अपॉइंटमेंट है`

        request_options : typing.Optional[RequestOptions]
            Request-specific configuration.

        Returns
        -------
        TransliterationResponse
            Successful Response

        Examples
        --------
        import asyncio

        from sarvamai import AsyncSarvamAI

        client = AsyncSarvamAI(
            api_subscription_key="YOUR_API_SUBSCRIPTION_KEY",
        )


        async def main() -> None:
            await client.text.transliterate(
                input="input",
                source_language_code="auto",
                target_language_code="bn-IN",
            )


        asyncio.run(main())
        r@   NrA   rC   r   r   r   rB   -  s   u	zAsyncTextClient.transliterate)rD   rE   rF   r   r    rG   r   r&   rH   rI   r   r   rJ   rK   r   r	   r
   r   r   r   r   r4   r   r;   r   r   r   rL   r   rB   r   r   r   r   rM   X  sz    	

 
/	
rM   )(rJ   core.client_wrapperr   r   core.request_optionsr   &types.language_identification_responser   types.numerals_formatr   !types.spoken_form_numerals_formatr   types.translate_moder	   types.translate_modelr
   types.translate_source_languager   types.translate_speaker_genderr   types.translate_target_languager   types.translation_responser   %types.translatiterate_target_languager   types.transliterate_moder   #types.transliterate_source_languager   types.transliteration_responser   
raw_clientr   r   castAnyrH   r   rM   r   r   r   r   <module>   s,     @