o
    Тi                     @  s   d 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mZ G dd dee
ZeG d	d
 d
ZeG dd dZeG dd dZG dd deZdS )z
Abstract provider interface. Both AI Studio and OpenRouter implement this.
The batch_cycle engine calls provider.send_batch() agnostic of backend.
    )annotations)ABCabstractmethod)	dataclassfield)Enum)AnyOptionalc                   @  s   e Zd ZdZdZdZdZdS )RequestStatussuccessrate_limitederrortimeoutN)__name__
__module____qualname__SUCCESSRATE_LIMITEDERRORTIMEOUT r   r   0/home/ubuntu/transcripts/./src/providers/base.pyr
      s
    r
   c                   @  s:   e Zd ZU ded< ded< ded< ded< dZded< dS )	TranscriptionRequeststr
segment_idaudio_base64language_codeoriginal_filez
audio/flac	mime_typeN)r   r   r   __annotations__r   r   r   r   r   r      s   
 r   c                   @  sJ   e Zd ZU dZded< dZded< dZded< dZded< dZded	< d
S )
TokenUsager   intinput_tokensoutput_tokenscached_tokenstotal_tokensFbool	cache_hitN)	r   r   r   r"   r   r#   r$   r%   r'   r   r   r   r   r       s   
 r    c                   @  s`   e Zd ZU ded< ded< dZded< eedZd	ed
< dZded< dZ	ded< dZ
ded< dS )TranscriptionResponser   r   r
   statusNzOptional[dict]transcription_data)default_factoryr    token_usageg        float
latency_ms error_messager   raw_response)r   r   r   r   r*   r   r    r,   r.   r0   r1   r   r   r   r   r(   &   s   
 r(   c                   @  sD   e Zd ZedddZedd
dZedddZedddZdS )BaseProviderrequestslist[TranscriptionRequest]returnlist[TranscriptionResponse]c                   s   dS )z4Send a batch of transcription requests concurrently.Nr   )selfr3   r   r   r   
send_batch3   s   zBaseProvider.send_batchresponser   r&   c                 C     dS )z0Check if the response used cached prompt tokens.Nr   r7   r9   r   r   r   verify_cache_hit8      zBaseProvider.verify_cache_hitr    c                 C  r:   )z&Extract token usage from raw response.Nr   r;   r   r   r   get_token_usage=   r=   zBaseProvider.get_token_usager   c                 C  s   d S )Nr   )r7   r   r   r   get_provider_nameB   s   zBaseProvider.get_provider_nameN)r3   r4   r5   r6   )r9   r   r5   r&   )r9   r   r5   r    )r5   r   )r   r   r   r   r8   r<   r>   r?   r   r   r   r   r2   1   s    r2   N)__doc__
__future__r   abcr   r   dataclassesr   r   enumr   typingr   r	   r   r
   r   r    r(   r2   r   r   r   r   <module>   s    
