
    6i'                     ~    d Z ddlmZmZmZ ddlZddlZddlmZ ddl	m
Z
  ej                  e      Z G d d	e      Zy)
zt
OpenAI-specific batch processing implementation.

This module contains the OpenAI batch processing provider class.
    )AnyOptionalUnionN   )BatchProvider   )BatchJobInfoc                       e Zd ZdZ	 ddeeej                  f   dee	ee
f      defdZdede	ee
f   fdZdedefd	Zded
eddfdZdede	ee
f   fdZdede	ee
f   fdZddedee   fdZy)OpenAIProviderz OpenAI batch processing providerNfile_path_or_buffermetadatareturnc                    	 ddl m}  |       }|ddi}t        j                  d|        t	        |t
              rKt        j                  d|        t        |d      5 }|j                  j                  |d	
      }ddd       nut	        |t        j                        rDt        j                  d       |j                  d       |j                  j                  |d	
      }nt        dt        |             |j                  j                  j                  d|j!                  dd      |      }t        j#                  d|j                          |j                  S # 1 sw Y   pxY w# t        t$        f$ r}	t        j'                  d|	         d}	~	wt(        $ r,}	t        j'                  d|	        t+        d|	       |	d}	~	ww xY w)zSubmit OpenAI batch jobr   OpenAINdescriptionzInstructor batch jobz$Submitting batch job with metadata: zCreating batch file from path: rbbatch)filepurposez'Creating batch file from BytesIO bufferz&Unsupported file_path_or_buffer type: z/v1/chat/completionscompletion_window24h)input_file_idendpointr   r   z"Successfully submitted batch job: z-Validation error in OpenAI batch submission: zFailed to submit OpenAI batch: )openair   loggerdebug
isinstancestropenfilescreateioBytesIOseek
ValueErrortypebatchesidgetinfo	TypeErrorerror	ExceptionRuntimeError)
selfr   r   kwargsr   clientf
batch_file	batch_jobes
             l/root/.openclaw/workspace/visionaryfx/venv/lib/python3.12/site-packages/instructor/batch/providers/openai.pysubmit_batchzOpenAIProvider.submit_batch   s   '	M%XF)+ABLL?zJK-s3>?R>STU-t4 N!'!4!4!W!4!MJN N/<FG#((+#\\00,g 1 
 !<TBU=V<WX  --(mm/"(**-@%"H!	 . I KK<Y\\NKL<<)N N* I& 	LLHLM 	MLL:1#>?!@DE1L	Ms=   AE0 !E$?C$E0 $E-)E0 0G?FG$'GGbatch_idc           
      d   	 ddl m}  |       }|j                  j                  |      }|j                  |j
                  |j                  t        |j                  dd      t        |j                  dd      t        |j                  dd      ddS # t        $ r}t        d|       |d	}~ww xY w)
zGet OpenAI batch statusr   r   total	completedfailed)r;   r<   r=   )r)   status
created_atrequest_countsz#Failed to get OpenAI batch status: N)
r   r   r(   retriever)   r>   r?   getattrr@   r.   r0   r9   r   r2   r   r6   s         r7   
get_statuszOpenAIProvider.get_statusC   s    	N%XFNN++H5Ehh,,#..$U%9%97AF!()=)={A!N%e&:&:HaH#		 	  	NA!EFAM	Ns   BB 	B/B**B/c                 ,   	 ddl m} ddl} |       }|j                  j	                  |      }|j
                  dk7  rt        d|j
                         t        |dd      }|r@t        |dd      }t        |dd      }t        |dd      }	|dkD  r|dk(  rt        d	|	 d
      |j                  sd}
t        |
      D ]  }t        d|z   d      }t        d| d|dz    d|
 d       |j                  |       |j                  j	                  |      }|j                  rt        d|j                           nu|j
                  dk7  rt        d|j
                   d      ||
dz
  k(  st        d|
 dt        t        dd|
z                d|j
                   dt        |dd       d	       |j                  t        d      |j                  j!                  |j                        }|j"                  S # t        $ r}t        d|       |d}~ww xY w)zRetrieve OpenAI batch resultsr   r   Nr<   Batch not completed, status: r@   r=   r;   All z: batch requests failed. No output file will be available. 
         Output file not ready, waiting s (attempt r   /)...Output file now available: Batch status changed to  while waiting for output fileNo output file available after  retries over  seconds. Batch status: , Request counts: unknownz. %Batch has no output file ID availablez#Failed to retrieve OpenAI results: )r   r   timer(   rA   r>   r.   rB   r/   output_file_idrangeminprintsleepsumr!   contenttext)r0   r9   r   rX   r2   r   r@   r<   r=   r;   max_retriesattempt	wait_timefile_responser6   s                  r7   retrieve_resultszOpenAIProvider.retrieve_resultsW   sV   6	N%XFNN++H5E||{*"?~ NOO %U,<dCN#NKC	 1=;A:)q.&ug%_`  '' $[1 G #GR!I 9)KPWZ[P[}\]^i]jjno JJy)"NN33H=E++ ;E<P<P;QRS||{2'6u||nDbc  +/1*=k].Y\]bcdfgjufu]vYwXx y--2\\N:LWUZ\lnwMxLyy{} '0 ##+"#JKK"LL001E1EFM %%% 	NA!EFAM	Ns   E'G6 *BG6 6	H?HH	file_pathc                    	 ddl m} ddl} |       }|j                  j	                  |      }|j
                  dk7  rt        d|j
                         t        |dd      }|r@t        |dd      }t        |dd      }	t        |dd      }
|	dkD  r|dk(  rt        d	|
 d
      |j                  sd}t        |      D ]  }t        d|z   d      }t        d| d|dz    d| d       |j                  |       |j                  j	                  |      }|j                  rt        d|j                           nu|j
                  dk7  rt        d|j
                   d      ||dz
  k(  st        d| dt        t        dd|z                d|j
                   dt        |dd       d	       |j                  t        d      |j                  j!                  |j                        }t#        |d      5 }|j%                  |j&                         ddd       y# 1 sw Y   yxY w# t        $ r}t        d|       |d}~ww xY w)z'Download OpenAI batch results to a filer   r   Nr<   rF   r@   r=   r;   rG   z9 batch requests failed. No output file will be available.rH   rI   rJ   rK   rL   r   rM   rN   rO   rP   rQ   rR   rS   rT   rU   rV   .rW   wz#Failed to download OpenAI results: )r   r   rX   r(   rA   r>   r.   rB   r/   rY   rZ   r[   r\   r]   r^   r!   r_   r    writer`   )r0   r9   rf   r   rX   r2   r   r@   r<   r=   r;   ra   rb   rc   rd   r3   r6   s                    r7   download_resultszOpenAIProvider.download_results   s|   7	N%XFNN++H5E||{*"?~ NOO %U,<dCN#NKC	 1=;A:)q.&ug%^_  '' $[1 G #GR!I 9)KPWZ[P[}\]^i]jjno JJy)"NN33H=E++ ;E<P<P;QRS||{2'6u||nDbc  +/1'=k].Y\]bcdfgjufu]vYwXx y--2\\N:LWUZ\lnwMxLyyz| '0 ##+"#JKK"LL001E1EFMi% ,**+, , , 	NA!EFAM	Ns=   E'H' *BH' 6HH' H$ H' $H' '	I0H??Ic                     	 ddl m}  |       }|j                  j                  |      }|j	                         S # t
        $ r}t        d|       |d}~ww xY w)zCancel OpenAI batch jobr   r   zFailed to cancel OpenAI batch: N)r   r   r(   cancel
model_dumpr.   rC   s         r7   cancel_batchzOpenAIProvider.cancel_batch   s\    	J%XFNN))(3E##%% 	J=aSABI	Js   7: 	AAAc                     	 ddl m}  |       }|j                  j                  |      }|j                  |j
                  ddS # t        $ r}t        d|       |d}~ww xY w)zDelete OpenAI batch jobr   r   z&OpenAI does not support batch deletion)r)   r>   messagezFailed to delete OpenAI batch: N)r   r   r(   rA   r)   r>   r.   rC   s         r7   delete_batchzOpenAIProvider.delete_batch   sj    	J%XFNN++H5Ehh,,C 
  	J=aSABI	Js   AA 	A!AA!limitc                    	 ddl m}  |       }|j                  j                  |      }|j                  D cg c]%  }t        j                  |j                               ' c}S c c}w # t        $ r}t        d|       |d}~ww xY w)zList OpenAI batch jobsr   r   )rs   zFailed to list OpenAI batches: N)	r   r   r(   listdatar	   from_openairn   r.   )r0   rs   r   r2   r(   r   r6   s          r7   list_batcheszOpenAIProvider.list_batches   s    		J%XFnn)))6GJQ,,AF(()9)9);<    	J=aSABI	Js(   7A+ *A&#A+ &A+ +	B4BB)N)rH   )__name__
__module____qualname____doc__r   r   r#   r$   r   dictr   r8   rD   re   rk   ro   rr   intru   r	   rx        r7   r   r      s    *
 .2.M"3

?3.M 4S>*.M
 
.M`N3 N4S> N(8N 8N 8Nt9N 9N 9N 9Nv	JS 	JT#s(^ 	JJS JT#s(^ J J# JtL/A Jr   r   )r|   typingr   r   r   r#   loggingbaser   modelsr	   	getLoggerry   r   r   r   r   r7   <module>r      s@    ( ' 	   !			8	$bJ] bJr   