o
    ùT·j#  ã                   @  sÄ   d dl mZ d dlZd dl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mZmZ dd	lmZ dd
lmZ ddlmZ dZdZe ¡ Zddd„Zedd�G dd„ dƒƒZG dd„ dƒZdS )é    )ÚannotationsN)ÚCallable)ÚfieldsÚ	dataclass)ÚLiteralÚ	TypeGuardé   )ÚGroupingUpdateÚTranscriptFragmentÚTranscriptGrouperOptionsé   )ÚServerEvent)ÚOpenAIError)ÚTranscriptGroupingiÿÿÿl   ÿÿÿÿ Úoptionsr   Úreturnc                 C  sl   t | ƒD ]/}|jdkrqt| |jƒ}t|tƒs)t|ttfƒr)d|  kr(tks3n t|j› dt› �ƒ‚q| S )NÚadditional_acknowledgmentsr   z' must be a finite number between 0 and )	r   ÚnameÚgetattrÚ
isinstanceÚboolÚintÚfloatÚMAX_TIMEOUT_MSr   )r   ÚfieldÚvalue© r   úd/home/dinkstrade/pdmp-scanner/venv/lib/python3.10/site-packages/openai/lib/live/_transcript_state.pyÚvalidated_options   s   
.ÿr   T)Úfrozenc                   @  s   e Zd ZU ded< ded< dS )Ú_ReceivedFragmentr
   Úfragmentr   Úreceived_atN)Ú__name__Ú
__module__Ú__qualname__Ú__annotations__r   r   r   r   r       s   
 r    c                   @  sn   e Zd ZdZd(dd	„Zd)dd„Zed*dd„ƒZd+dd„Zd,dd„Z	d-dd„Z
d.dd „Zd,d!d"„Zd/d%d&„Zd'S )0ÚTranscriptStatezSClock-driven state shared by the sync and async adapters; callers serialize access.r   r   ÚnowúCallable[[], float]r   ÚNonec                 C  sD   || _ tt|ƒdttƒ› �ƒ| _tƒ | _g | _d | _	d | _
d| _d S )NÚsegment_F)Ú_nowr   r   ÚnextÚ_GROUPER_IDSÚ	_groupingÚsetÚ	_seen_idsÚ_pendingÚ_anchorÚ_last_start_msÚclosed)Úselfr   r(   r   r   r   Ú__init__&   s   
zTranscriptState.__init__Úeventr   úlist[GroupingUpdate] | Nonec           
        s   | j rtdƒ‚|jdkr|  d¡S |jdvrd S t|dd ƒ}t|dd ƒ}t|dd ƒ}t|dd ƒ}|jd	kr7d
nd‰ t|tƒrS|rSt|tƒrS|  |¡rS|  |¡rS||k rWtdƒ‚|| jv r^d S | j 	|¡ |shd S t
ˆ |t|ƒt|ƒƒ}t||  ¡ ƒ}g }| jr…| jd jnd }	|	d ur°|	j|kr°|	j|kr°| j |¡ t‡ fdd„| jD ƒƒr®| |  ¡ ¡ |S | |  ¡ ¡ | jjˆ krÈ| |  |g¡¡ |S | j |¡ |S )Nz7Cannot push events after closing the transcript grouperzsession.closedÚsession_closed)úsession.input_transcript.deltazsession.output_transcript.deltaÚevent_idÚdeltaÚstart_msÚend_msr;   ÚuserÚ	assistantz\Invalid public Live transcript delta: expected an ID, text, and a nonnegative timed intervalr   c                 3  s   � | ]	}|j jˆ kV  qd S ©N)r!   Úspeaker©Ú.0Úpart©rC   r   r   Ú	<genexpr>U   s   € z'TranscriptState.push.<locals>.<genexpr>)r5   r   ÚtypeÚfinishr   r   ÚstrÚ_valid_timestampr1   Úaddr
   r   r    r,   r2   r!   r>   r?   ÚappendÚanyÚextendÚ_flush_pendingr/   rC   Ú_commit)
r6   r8   r<   Útextr>   r?   r!   ÚreceivedÚupdatesÚpendingr   rG   r   Úpush/   s\   


ÿÿþýüûÿ
ûÿzTranscriptState.pushr   ÚobjectúTypeGuard[int | float]c                 C  s>   t | tƒ ot | ttfƒod|   kotkn  ot| ƒ| kS ©Nr   )r   r   r   r   Ú_MAX_SAFE_INTEGER)r   r   r   r   rL   _   s   ÿþ
üz TranscriptState._valid_timestampÚreasonú#Literal['manual', 'session_closed']úlist[GroupingUpdate]c                 C  sJ   | j rg S |dv sJ ‚d| _ |  ¡ }| | j |  ¡ |¡¡ | j ¡  |S )N)Úmanualr:   T)r5   rQ   rP   r/   ÚcloseÚ_source_nowr1   Úclear)r6   r\   rU   r   r   r   rJ   j   s   
zTranscriptState.finishc                 C  s"   |   ¡ }| | j |  ¡ ¡¡ |S rB   )rQ   rP   r/   Úadvancera   )r6   rU   r   r   r   Útickt   s   zTranscriptState.tickú
int | Nonec                 C  sd   | j rd S | j ¡ }| jr| jd jd |  ¡  }n|d ur%||  ¡  }nd S ttt	dt
 |¡ƒƒS )Nr   é2   )r5   r/   Údeadliner2   r"   r,   ra   Úminr   ÚmaxÚmathÚceil)r6   rg   Údelayr   r   r   rl   y   s   
zTranscriptState.delayr   c                 C  s.   | j d u rdS | j \}}|td|  ¡ | ƒ S rZ   )r3   ri   r,   )r6   Ú	source_msr"   r   r   r   ra   …   s   

zTranscriptState._source_nowc                 C  s   | j g }| _ |  |¡S rB   )r2   rR   )r6   rV   r   r   r   rQ   ‹   s   
zTranscriptState._flush_pendingÚ	fragmentsúlist[_ReceivedFragment]c                 C  s´   |sg S |d j }g }| jd ur%|j| jk r%| | j |  ¡ d¡¡ d | _|j| _t| jd ur4| jd ndgdd„ |D ƒ¢R Ž tdd„ |D ƒƒf| _| | j 	dd„ |D ƒ¡¡ |S )Nr   Útimestamp_resetc                 s  s   � | ]}|j jV  qd S rB   )r!   r?   rD   r   r   r   rH   ™   s   € z*TranscriptState._commit.<locals>.<genexpr>c                 s  s   � | ]}|j V  qd S rB   )r"   rD   r   r   r   rH   š   s   € c                 S  s   g | ]}|j ‘qS r   )r!   rD   r   r   r   Ú
<listcomp>œ   s    z+TranscriptState._commit.<locals>.<listcomp>)
r!   r4   r>   rP   r/   r`   ra   r3   ri   Úprocess)r6   rn   ÚfirstrU   r   r   r   rR   �   s   
,þzTranscriptState._commitN)r   r   r(   r)   r   r*   )r8   r   r   r9   )r   rX   r   rY   )r\   r]   r   r^   )r   r^   )r   re   )r   r   )rn   ro   r   r^   )r#   r$   r%   Ú__doc__r7   rW   ÚstaticmethodrL   rJ   rd   rl   ra   rQ   rR   r   r   r   r   r'   #   s    

	0






r'   )r   r   r   r   )Ú
__future__r   rj   Ú	itertoolsÚtypingr   Údataclassesr   r   Útyping_extensionsr   r   Ú_typesr	   r
   r   Ú
types.liver   Ú_exceptionsr   Ú_transcript_groupingr   r   r[   Úcountr.   r   r    r'   r   r   r   r   Ú<module>   s"    

