# This file was auto-generated by Fern from our API Definition.

import typing
import uuid

from ..core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
from ..core.request_options import RequestOptions
from .raw_client import AsyncRawTranscribeClient, RawTranscribeClient
from .types.batch_audio_source import BatchAudioSource
from .types.batch_file_content_type import BatchFileContentType
from .types.batch_file_detail import BatchFileDetail
from .types.batch_file_metadata import BatchFileMetadata
from .types.batch_file_upload_response import BatchFileUploadResponse
from .types.batch_status_response import BatchStatusResponse
from .types.batch_transcription_response import BatchTranscriptionResponse
from .types.list_batch_files_response import ListBatchFilesResponse
from .types.processing_mode import ProcessingMode
from .types.transcription import Transcription
from .types.transcription_id import TranscriptionId
from .types.transcription_info import TranscriptionInfo
from .types.transcription_request_info import TranscriptionRequestInfo
from .types.transcription_summary import TranscriptionSummary

# this is used as the default value for optional parameters
OMIT = typing.cast(typing.Any, ...)


class TranscribeClient:
    def __init__(self, *, client_wrapper: SyncClientWrapper):
        self._raw_client = RawTranscribeClient(client_wrapper=client_wrapper)

    @property
    def with_raw_response(self) -> RawTranscribeClient:
        """
        Retrieves a raw implementation of this client that returns raw responses.

        Returns
        -------
        RawTranscribeClient
        """
        return self._raw_client

    def create_transcription(
        self,
        *,
        info: TranscriptionRequestInfo,
        audio_url: typing.Optional[str] = OMIT,
        audio_file: typing.Optional[str] = OMIT,
        request_options: typing.Optional[RequestOptions] = None,
    ) -> TranscriptionId:
        """
        Create a new transcription

        Parameters
        ----------
        info : TranscriptionRequestInfo
            Transcription parameters

        audio_url : typing.Optional[str]
            URL to a downloadable audio file. Must be a direct link to the file (not a streaming or preview link). If the URL is not directly downloadable, consider using our Link API to extract a downloadable link from supported sites. Either audio_url or audio_file must be provided, but not both.

        audio_file : typing.Optional[str]
            Base64 encoded audio file content. Either audio_url or audio_file must be provided, but not both.

            ## Base64 Encoding Example

            **Python:**
            ```python
            import base64
            from soferai import SoferAI

            # Initialize client
            client = SoferAI(api_key="your_api_key_here")

            # Read and encode audio file
            with open("audio.mp3", "rb") as f:
                base64_audio = base64.b64encode(f.read()).decode("utf-8")

            # Create transcription request
            response = client.transcribe.create_transcription(
                audio_file=base64_audio,
                info={
                    "model": "v1",
                    "primary_language": "en",
                    "hebrew_word_format": ["he"],
                    "title": "My Shiur Transcription",
                },
            )

            print(f"Transcription ID: {response}")
            ```

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

        Returns
        -------
        TranscriptionId
            The unique identifier for the newly created transcription.
            Use this ID to check the status of the transcription or to retrieve the transcription result.

        Examples
        --------
        from soferai import SoferAI
        from soferai.transcribe import TranscriptionRequestInfo

        client = SoferAI(
            api_key="YOUR_API_KEY",
        )
        client.transcribe.create_transcription(
            info=TranscriptionRequestInfo(),
        )
        """
        _response = self._raw_client.create_transcription(
            info=info, audio_url=audio_url, audio_file=audio_file, request_options=request_options
        )
        return _response.data

    def create_batch_transcription(
        self,
        *,
        info: TranscriptionRequestInfo,
        processing_mode: typing.Optional[ProcessingMode] = OMIT,
        batch_file_id: typing.Optional[uuid.UUID] = OMIT,
        audio_sources: typing.Optional[typing.Sequence[BatchAudioSource]] = OMIT,
        batch_title: typing.Optional[str] = OMIT,
        batch_id: typing.Optional[uuid.UUID] = OMIT,
        request_options: typing.Optional[RequestOptions] = None,
    ) -> BatchTranscriptionResponse:
        """
        Create multiple transcriptions in a single batch request.

        **Choose a processing mode:**

        - **Express mode**: Transcriptions start immediately. Max 10 files. Higher cost. Pass `audio_sources` directly in the request.
        - **Standard mode**: Transcriptions processed within 24 hours. Max 500 files. Lower cost. First upload a manifest via [Upload Batch File](/api-reference/transcribe/upload-batch-file), then pass the `batch_file_id` here.

        All files in the batch share the same transcription settings (model, language, etc.) defined in `info`.

        Parameters
        ----------
        info : TranscriptionRequestInfo
            Transcription settings applied to all files in the batch (model, language, etc.)

        processing_mode : typing.Optional[ProcessingMode]
            Choose how the batch is processed:
            - `standard` (default): Lower cost, processed within 24 hours. Max 500 files. Use with `batch_file_id`.
            - `express`: Higher cost, starts immediately. Max 10 files. Use with `audio_sources`.

        batch_file_id : typing.Optional[uuid.UUID]
            **For standard mode only.** ID of a previously uploaded batch manifest.

            Get this by calling [Upload Batch File](/api-reference/transcribe/upload-batch-file) first.

        audio_sources : typing.Optional[typing.Sequence[BatchAudioSource]]
            **For express mode only.** List of audio URLs to transcribe (max 10).

            Each item needs an `audio_url` and can optionally include a `title`.

        batch_title : typing.Optional[str]
            Default title prefix for transcriptions. Individual items can override this. Items without titles become "{batch_title} - Item 1", "{batch_title} - Item 2", etc.

        batch_id : typing.Optional[uuid.UUID]
            Custom UUID for this batch. Auto-generated if not provided.

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

        Returns
        -------
        BatchTranscriptionResponse
            Returns the batch ID and individual transcription IDs. Use [Get Batch Status](/api-reference/transcribe/get-batch-status) to track progress.

        Examples
        --------
        from soferai import SoferAI
        from soferai.transcribe import BatchAudioSource, TranscriptionRequestInfo

        client = SoferAI(
            api_key="YOUR_API_KEY",
        )
        client.transcribe.create_batch_transcription(
            audio_sources=[
                BatchAudioSource(
                    audio_url="https://example.com/audio1.mp3",
                    title="Rabbi Cohen's Shiur on Shabbos",
                ),
                BatchAudioSource(
                    audio_url="https://example.com/audio2.mp3",
                    title="Rabbi Cohen's Shiur on Kashrus",
                ),
            ],
            info=TranscriptionRequestInfo(
                model="v1",
                primary_language="en",
                hebrew_word_format=["en", "he"],
                num_speakers=1,
            ),
            batch_title="Rabbi Cohen Shiurim",
            processing_mode="express",
        )
        """
        _response = self._raw_client.create_batch_transcription(
            info=info,
            processing_mode=processing_mode,
            batch_file_id=batch_file_id,
            audio_sources=audio_sources,
            batch_title=batch_title,
            batch_id=batch_id,
            request_options=request_options,
        )
        return _response.data

    def upload_batch_file(
        self,
        *,
        content_type: BatchFileContentType,
        json_items: typing.Optional[typing.Sequence[BatchAudioSource]] = OMIT,
        jsonl: typing.Optional[str] = OMIT,
        metadata: typing.Optional[BatchFileMetadata] = OMIT,
        request_options: typing.Optional[RequestOptions] = None,
    ) -> BatchFileUploadResponse:
        """
        Upload a batch manifest containing audio URLs for standard mode batch processing.

        **Workflow:**
        1. Upload your manifest here to get a `batch_file_id`
        2. Use that ID in [Create Batch Transcription](/api-reference/transcribe/create-batch-transcription) with `processing_mode: "standard"`

        The manifest is a list of audio sources (max 500), each with a URL and optional title. You can provide it as a JSON array or JSONL format.

        Parameters
        ----------
        content_type : BatchFileContentType
            Format of your manifest data

        json_items : typing.Optional[typing.Sequence[BatchAudioSource]]
            **For JSON format.** Array of audio sources to transcribe (max 500).

        jsonl : typing.Optional[str]
            **For JSONL format.** One audio source per line as JSON, separated by newlines (max 500 lines).

            Example: `{"audio_url": "https://..."}\n{"audio_url": "https://..."}`

        metadata : typing.Optional[BatchFileMetadata]
            Optional title and description for this manifest

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

        Returns
        -------
        BatchFileUploadResponse

        Examples
        --------
        from soferai import SoferAI
        from soferai.transcribe import BatchAudioSource, BatchFileMetadata

        client = SoferAI(
            api_key="YOUR_API_KEY",
        )
        client.transcribe.upload_batch_file(
            content_type="json",
            json_items=[
                BatchAudioSource(
                    audio_url="https://example.com/shiur1.mp3",
                    title="Parshas Bereishis - Rabbi Cohen",
                ),
                BatchAudioSource(
                    audio_url="https://example.com/shiur2.mp3",
                    title="Parshas Noach - Rabbi Cohen",
                ),
                BatchAudioSource(
                    audio_url="https://example.com/shiur3.mp3",
                    title="Parshas Lech Lecha - Rabbi Cohen",
                ),
            ],
            metadata=BatchFileMetadata(
                title="Rabbi Cohen Weekly Parsha Series",
                description="Shiurim from Fall 2024",
            ),
        )
        """
        _response = self._raw_client.upload_batch_file(
            content_type=content_type,
            json_items=json_items,
            jsonl=jsonl,
            metadata=metadata,
            request_options=request_options,
        )
        return _response.data

    def list_batch_files(self, *, request_options: typing.Optional[RequestOptions] = None) -> ListBatchFilesResponse:
        """
        List all batch file manifests you've uploaded. Use this to find a `batch_file_id` for starting a standard mode batch.

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

        Returns
        -------
        ListBatchFilesResponse

        Examples
        --------
        from soferai import SoferAI

        client = SoferAI(
            api_key="YOUR_API_KEY",
        )
        client.transcribe.list_batch_files()
        """
        _response = self._raw_client.list_batch_files(request_options=request_options)
        return _response.data

    def get_batch_file(
        self, batch_file_id: uuid.UUID, *, request_options: typing.Optional[RequestOptions] = None
    ) -> BatchFileDetail:
        """
        Get details about a specific batch file manifest, including its validation status. Check this after uploading to ensure your manifest is valid before starting a batch.

        Parameters
        ----------
        batch_file_id : uuid.UUID
            The batch file ID returned from [Upload Batch File](/api-reference/transcribe/upload-batch-file)

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

        Returns
        -------
        BatchFileDetail

        Examples
        --------
        import uuid

        from soferai import SoferAI

        client = SoferAI(
            api_key="YOUR_API_KEY",
        )
        client.transcribe.get_batch_file(
            batch_file_id=uuid.UUID(
                "d5e9c84f-c2b2-4bf4-b4b0-7ffd7a9ffc32",
            ),
        )
        """
        _response = self._raw_client.get_batch_file(batch_file_id, request_options=request_options)
        return _response.data

    def get_batch_status(
        self, batch_id: uuid.UUID, *, request_options: typing.Optional[RequestOptions] = None
    ) -> BatchStatusResponse:
        """
        Check the progress of a batch transcription. Returns counts of completed, failed, and pending transcriptions, plus details for each individual transcription.

        Parameters
        ----------
        batch_id : uuid.UUID
            The batch ID returned from [Create Batch Transcription](/api-reference/transcribe/create-batch-transcription)

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

        Returns
        -------
        BatchStatusResponse

        Examples
        --------
        import uuid

        from soferai import SoferAI

        client = SoferAI(
            api_key="YOUR_API_KEY",
        )
        client.transcribe.get_batch_status(
            batch_id=uuid.UUID(
                "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
            ),
        )
        """
        _response = self._raw_client.get_batch_status(batch_id, request_options=request_options)
        return _response.data

    def get_transcription_status(
        self, transcription_id: uuid.UUID, *, request_options: typing.Optional[RequestOptions] = None
    ) -> TranscriptionInfo:
        """
        Get transcription status

        Parameters
        ----------
        transcription_id : uuid.UUID
            ID of the transcription. Use the ID returned from the Create Transcription endpoint.

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

        Returns
        -------
        TranscriptionInfo

        Examples
        --------
        import uuid

        from soferai import SoferAI

        client = SoferAI(
            api_key="YOUR_API_KEY",
        )
        client.transcribe.get_transcription_status(
            transcription_id=uuid.UUID(
                "d5e9c84f-c2b2-4bf4-b4b0-7ffd7a9ffc32",
            ),
        )
        """
        _response = self._raw_client.get_transcription_status(transcription_id, request_options=request_options)
        return _response.data

    def get_transcription(
        self,
        transcription_id: uuid.UUID,
        *,
        filter_hebrew_word_format: typing.Optional[str] = None,
        request_options: typing.Optional[RequestOptions] = None,
    ) -> Transcription:
        """
        Get transcription

        Parameters
        ----------
        transcription_id : uuid.UUID
            ID of the transcription. Use the ID returned from the Create Transcription endpoint.

        filter_hebrew_word_format : typing.Optional[str]
            Optionally filter the response to a single Hebrew word format. If set to 'en', the response text will have Hebrew characters removed and timestamps will exclude words tagged with 'he'. If set to 'he', italicized transliterations are removed from the text and timestamps will exclude words tagged only with 'en'. If set to 'hybrid', the response includes both transliteration and Hebrew characters for each word.

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

        Returns
        -------
        Transcription

        Examples
        --------
        import uuid

        from soferai import SoferAI

        client = SoferAI(
            api_key="YOUR_API_KEY",
        )
        client.transcribe.get_transcription(
            transcription_id=uuid.UUID(
                "d5e9c84f-c2b2-4bf4-b4b0-7ffd7a9ffc32",
            ),
        )
        """
        _response = self._raw_client.get_transcription(
            transcription_id, filter_hebrew_word_format=filter_hebrew_word_format, request_options=request_options
        )
        return _response.data

    def list_transcriptions(
        self, *, request_options: typing.Optional[RequestOptions] = None
    ) -> typing.List[TranscriptionSummary]:
        """
        Get all transcriptions for the authenticated user

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

        Returns
        -------
        typing.List[TranscriptionSummary]

        Examples
        --------
        from soferai import SoferAI

        client = SoferAI(
            api_key="YOUR_API_KEY",
        )
        client.transcribe.list_transcriptions()
        """
        _response = self._raw_client.list_transcriptions(request_options=request_options)
        return _response.data


class AsyncTranscribeClient:
    def __init__(self, *, client_wrapper: AsyncClientWrapper):
        self._raw_client = AsyncRawTranscribeClient(client_wrapper=client_wrapper)

    @property
    def with_raw_response(self) -> AsyncRawTranscribeClient:
        """
        Retrieves a raw implementation of this client that returns raw responses.

        Returns
        -------
        AsyncRawTranscribeClient
        """
        return self._raw_client

    async def create_transcription(
        self,
        *,
        info: TranscriptionRequestInfo,
        audio_url: typing.Optional[str] = OMIT,
        audio_file: typing.Optional[str] = OMIT,
        request_options: typing.Optional[RequestOptions] = None,
    ) -> TranscriptionId:
        """
        Create a new transcription

        Parameters
        ----------
        info : TranscriptionRequestInfo
            Transcription parameters

        audio_url : typing.Optional[str]
            URL to a downloadable audio file. Must be a direct link to the file (not a streaming or preview link). If the URL is not directly downloadable, consider using our Link API to extract a downloadable link from supported sites. Either audio_url or audio_file must be provided, but not both.

        audio_file : typing.Optional[str]
            Base64 encoded audio file content. Either audio_url or audio_file must be provided, but not both.

            ## Base64 Encoding Example

            **Python:**
            ```python
            import base64
            from soferai import SoferAI

            # Initialize client
            client = SoferAI(api_key="your_api_key_here")

            # Read and encode audio file
            with open("audio.mp3", "rb") as f:
                base64_audio = base64.b64encode(f.read()).decode("utf-8")

            # Create transcription request
            response = client.transcribe.create_transcription(
                audio_file=base64_audio,
                info={
                    "model": "v1",
                    "primary_language": "en",
                    "hebrew_word_format": ["he"],
                    "title": "My Shiur Transcription",
                },
            )

            print(f"Transcription ID: {response}")
            ```

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

        Returns
        -------
        TranscriptionId
            The unique identifier for the newly created transcription.
            Use this ID to check the status of the transcription or to retrieve the transcription result.

        Examples
        --------
        import asyncio

        from soferai import AsyncSoferAI
        from soferai.transcribe import TranscriptionRequestInfo

        client = AsyncSoferAI(
            api_key="YOUR_API_KEY",
        )


        async def main() -> None:
            await client.transcribe.create_transcription(
                info=TranscriptionRequestInfo(),
            )


        asyncio.run(main())
        """
        _response = await self._raw_client.create_transcription(
            info=info, audio_url=audio_url, audio_file=audio_file, request_options=request_options
        )
        return _response.data

    async def create_batch_transcription(
        self,
        *,
        info: TranscriptionRequestInfo,
        processing_mode: typing.Optional[ProcessingMode] = OMIT,
        batch_file_id: typing.Optional[uuid.UUID] = OMIT,
        audio_sources: typing.Optional[typing.Sequence[BatchAudioSource]] = OMIT,
        batch_title: typing.Optional[str] = OMIT,
        batch_id: typing.Optional[uuid.UUID] = OMIT,
        request_options: typing.Optional[RequestOptions] = None,
    ) -> BatchTranscriptionResponse:
        """
        Create multiple transcriptions in a single batch request.

        **Choose a processing mode:**

        - **Express mode**: Transcriptions start immediately. Max 10 files. Higher cost. Pass `audio_sources` directly in the request.
        - **Standard mode**: Transcriptions processed within 24 hours. Max 500 files. Lower cost. First upload a manifest via [Upload Batch File](/api-reference/transcribe/upload-batch-file), then pass the `batch_file_id` here.

        All files in the batch share the same transcription settings (model, language, etc.) defined in `info`.

        Parameters
        ----------
        info : TranscriptionRequestInfo
            Transcription settings applied to all files in the batch (model, language, etc.)

        processing_mode : typing.Optional[ProcessingMode]
            Choose how the batch is processed:
            - `standard` (default): Lower cost, processed within 24 hours. Max 500 files. Use with `batch_file_id`.
            - `express`: Higher cost, starts immediately. Max 10 files. Use with `audio_sources`.

        batch_file_id : typing.Optional[uuid.UUID]
            **For standard mode only.** ID of a previously uploaded batch manifest.

            Get this by calling [Upload Batch File](/api-reference/transcribe/upload-batch-file) first.

        audio_sources : typing.Optional[typing.Sequence[BatchAudioSource]]
            **For express mode only.** List of audio URLs to transcribe (max 10).

            Each item needs an `audio_url` and can optionally include a `title`.

        batch_title : typing.Optional[str]
            Default title prefix for transcriptions. Individual items can override this. Items without titles become "{batch_title} - Item 1", "{batch_title} - Item 2", etc.

        batch_id : typing.Optional[uuid.UUID]
            Custom UUID for this batch. Auto-generated if not provided.

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

        Returns
        -------
        BatchTranscriptionResponse
            Returns the batch ID and individual transcription IDs. Use [Get Batch Status](/api-reference/transcribe/get-batch-status) to track progress.

        Examples
        --------
        import asyncio

        from soferai import AsyncSoferAI
        from soferai.transcribe import BatchAudioSource, TranscriptionRequestInfo

        client = AsyncSoferAI(
            api_key="YOUR_API_KEY",
        )


        async def main() -> None:
            await client.transcribe.create_batch_transcription(
                audio_sources=[
                    BatchAudioSource(
                        audio_url="https://example.com/audio1.mp3",
                        title="Rabbi Cohen's Shiur on Shabbos",
                    ),
                    BatchAudioSource(
                        audio_url="https://example.com/audio2.mp3",
                        title="Rabbi Cohen's Shiur on Kashrus",
                    ),
                ],
                info=TranscriptionRequestInfo(
                    model="v1",
                    primary_language="en",
                    hebrew_word_format=["en", "he"],
                    num_speakers=1,
                ),
                batch_title="Rabbi Cohen Shiurim",
                processing_mode="express",
            )


        asyncio.run(main())
        """
        _response = await self._raw_client.create_batch_transcription(
            info=info,
            processing_mode=processing_mode,
            batch_file_id=batch_file_id,
            audio_sources=audio_sources,
            batch_title=batch_title,
            batch_id=batch_id,
            request_options=request_options,
        )
        return _response.data

    async def upload_batch_file(
        self,
        *,
        content_type: BatchFileContentType,
        json_items: typing.Optional[typing.Sequence[BatchAudioSource]] = OMIT,
        jsonl: typing.Optional[str] = OMIT,
        metadata: typing.Optional[BatchFileMetadata] = OMIT,
        request_options: typing.Optional[RequestOptions] = None,
    ) -> BatchFileUploadResponse:
        """
        Upload a batch manifest containing audio URLs for standard mode batch processing.

        **Workflow:**
        1. Upload your manifest here to get a `batch_file_id`
        2. Use that ID in [Create Batch Transcription](/api-reference/transcribe/create-batch-transcription) with `processing_mode: "standard"`

        The manifest is a list of audio sources (max 500), each with a URL and optional title. You can provide it as a JSON array or JSONL format.

        Parameters
        ----------
        content_type : BatchFileContentType
            Format of your manifest data

        json_items : typing.Optional[typing.Sequence[BatchAudioSource]]
            **For JSON format.** Array of audio sources to transcribe (max 500).

        jsonl : typing.Optional[str]
            **For JSONL format.** One audio source per line as JSON, separated by newlines (max 500 lines).

            Example: `{"audio_url": "https://..."}\n{"audio_url": "https://..."}`

        metadata : typing.Optional[BatchFileMetadata]
            Optional title and description for this manifest

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

        Returns
        -------
        BatchFileUploadResponse

        Examples
        --------
        import asyncio

        from soferai import AsyncSoferAI
        from soferai.transcribe import BatchAudioSource, BatchFileMetadata

        client = AsyncSoferAI(
            api_key="YOUR_API_KEY",
        )


        async def main() -> None:
            await client.transcribe.upload_batch_file(
                content_type="json",
                json_items=[
                    BatchAudioSource(
                        audio_url="https://example.com/shiur1.mp3",
                        title="Parshas Bereishis - Rabbi Cohen",
                    ),
                    BatchAudioSource(
                        audio_url="https://example.com/shiur2.mp3",
                        title="Parshas Noach - Rabbi Cohen",
                    ),
                    BatchAudioSource(
                        audio_url="https://example.com/shiur3.mp3",
                        title="Parshas Lech Lecha - Rabbi Cohen",
                    ),
                ],
                metadata=BatchFileMetadata(
                    title="Rabbi Cohen Weekly Parsha Series",
                    description="Shiurim from Fall 2024",
                ),
            )


        asyncio.run(main())
        """
        _response = await self._raw_client.upload_batch_file(
            content_type=content_type,
            json_items=json_items,
            jsonl=jsonl,
            metadata=metadata,
            request_options=request_options,
        )
        return _response.data

    async def list_batch_files(
        self, *, request_options: typing.Optional[RequestOptions] = None
    ) -> ListBatchFilesResponse:
        """
        List all batch file manifests you've uploaded. Use this to find a `batch_file_id` for starting a standard mode batch.

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

        Returns
        -------
        ListBatchFilesResponse

        Examples
        --------
        import asyncio

        from soferai import AsyncSoferAI

        client = AsyncSoferAI(
            api_key="YOUR_API_KEY",
        )


        async def main() -> None:
            await client.transcribe.list_batch_files()


        asyncio.run(main())
        """
        _response = await self._raw_client.list_batch_files(request_options=request_options)
        return _response.data

    async def get_batch_file(
        self, batch_file_id: uuid.UUID, *, request_options: typing.Optional[RequestOptions] = None
    ) -> BatchFileDetail:
        """
        Get details about a specific batch file manifest, including its validation status. Check this after uploading to ensure your manifest is valid before starting a batch.

        Parameters
        ----------
        batch_file_id : uuid.UUID
            The batch file ID returned from [Upload Batch File](/api-reference/transcribe/upload-batch-file)

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

        Returns
        -------
        BatchFileDetail

        Examples
        --------
        import asyncio
        import uuid

        from soferai import AsyncSoferAI

        client = AsyncSoferAI(
            api_key="YOUR_API_KEY",
        )


        async def main() -> None:
            await client.transcribe.get_batch_file(
                batch_file_id=uuid.UUID(
                    "d5e9c84f-c2b2-4bf4-b4b0-7ffd7a9ffc32",
                ),
            )


        asyncio.run(main())
        """
        _response = await self._raw_client.get_batch_file(batch_file_id, request_options=request_options)
        return _response.data

    async def get_batch_status(
        self, batch_id: uuid.UUID, *, request_options: typing.Optional[RequestOptions] = None
    ) -> BatchStatusResponse:
        """
        Check the progress of a batch transcription. Returns counts of completed, failed, and pending transcriptions, plus details for each individual transcription.

        Parameters
        ----------
        batch_id : uuid.UUID
            The batch ID returned from [Create Batch Transcription](/api-reference/transcribe/create-batch-transcription)

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

        Returns
        -------
        BatchStatusResponse

        Examples
        --------
        import asyncio
        import uuid

        from soferai import AsyncSoferAI

        client = AsyncSoferAI(
            api_key="YOUR_API_KEY",
        )


        async def main() -> None:
            await client.transcribe.get_batch_status(
                batch_id=uuid.UUID(
                    "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
                ),
            )


        asyncio.run(main())
        """
        _response = await self._raw_client.get_batch_status(batch_id, request_options=request_options)
        return _response.data

    async def get_transcription_status(
        self, transcription_id: uuid.UUID, *, request_options: typing.Optional[RequestOptions] = None
    ) -> TranscriptionInfo:
        """
        Get transcription status

        Parameters
        ----------
        transcription_id : uuid.UUID
            ID of the transcription. Use the ID returned from the Create Transcription endpoint.

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

        Returns
        -------
        TranscriptionInfo

        Examples
        --------
        import asyncio
        import uuid

        from soferai import AsyncSoferAI

        client = AsyncSoferAI(
            api_key="YOUR_API_KEY",
        )


        async def main() -> None:
            await client.transcribe.get_transcription_status(
                transcription_id=uuid.UUID(
                    "d5e9c84f-c2b2-4bf4-b4b0-7ffd7a9ffc32",
                ),
            )


        asyncio.run(main())
        """
        _response = await self._raw_client.get_transcription_status(transcription_id, request_options=request_options)
        return _response.data

    async def get_transcription(
        self,
        transcription_id: uuid.UUID,
        *,
        filter_hebrew_word_format: typing.Optional[str] = None,
        request_options: typing.Optional[RequestOptions] = None,
    ) -> Transcription:
        """
        Get transcription

        Parameters
        ----------
        transcription_id : uuid.UUID
            ID of the transcription. Use the ID returned from the Create Transcription endpoint.

        filter_hebrew_word_format : typing.Optional[str]
            Optionally filter the response to a single Hebrew word format. If set to 'en', the response text will have Hebrew characters removed and timestamps will exclude words tagged with 'he'. If set to 'he', italicized transliterations are removed from the text and timestamps will exclude words tagged only with 'en'. If set to 'hybrid', the response includes both transliteration and Hebrew characters for each word.

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

        Returns
        -------
        Transcription

        Examples
        --------
        import asyncio
        import uuid

        from soferai import AsyncSoferAI

        client = AsyncSoferAI(
            api_key="YOUR_API_KEY",
        )


        async def main() -> None:
            await client.transcribe.get_transcription(
                transcription_id=uuid.UUID(
                    "d5e9c84f-c2b2-4bf4-b4b0-7ffd7a9ffc32",
                ),
            )


        asyncio.run(main())
        """
        _response = await self._raw_client.get_transcription(
            transcription_id, filter_hebrew_word_format=filter_hebrew_word_format, request_options=request_options
        )
        return _response.data

    async def list_transcriptions(
        self, *, request_options: typing.Optional[RequestOptions] = None
    ) -> typing.List[TranscriptionSummary]:
        """
        Get all transcriptions for the authenticated user

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

        Returns
        -------
        typing.List[TranscriptionSummary]

        Examples
        --------
        import asyncio

        from soferai import AsyncSoferAI

        client = AsyncSoferAI(
            api_key="YOUR_API_KEY",
        )


        async def main() -> None:
            await client.transcribe.list_transcriptions()


        asyncio.run(main())
        """
        _response = await self._raw_client.list_transcriptions(request_options=request_options)
        return _response.data
