
    {h                     F    d Z ddlmZmZ ddlmZ ddlmZ  G d de      Zy	)
zt
OpenAI-specific batch processing implementation.

This module contains the OpenAI batch processing provider class.
    )AnyOptional   )BatchProvider   )BatchJobInfoc                       e Zd ZdZ	 dde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metadatareturnc                 p   	 ddl m}  |       }|ddi}t        |d      5 }|j                  j	                  |d      }ddd       |j
                  j	                  j                  d	|j                  d
d      |      }|j                  S # 1 sw Y   NxY w# t        $ r}	t        d|	       |	d}	~	ww xY w)zSubmit OpenAI batch jobr   OpenAINdescriptionzInstructor batch jobrbbatch)filepurposez/v1/chat/completionscompletion_window24h)input_file_idendpointr   r   zFailed to submit OpenAI batch: )	openair   openfilescreatebatchesidget	Exception)
selfr   r   kwargsr   clientf
batch_file	batch_jobes
             b/var/www/html/hubwallet-dev/venv/lib/python3.12/site-packages/instructor/batch/providers/openai.pysubmit_batchzOpenAIProvider.submit_batch   s    	J%XF)+ABi& J!#\\00a0I
J --(mm/"(**-@%"H!	 . I <<J J  	J=aSABI	Js.   B BAB BB 	B5!B00B5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   r0   r1   getattrr2   r!   r"   r+   r   r$   r   r(   s         r)   
get_statuszOpenAIProvider.get_status(   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                 r   	 ddl m}  |       }|j                  j                  |      }|j                  dk7  rt        d|j                         |j                  st        d      |j                  j                  |j                        }|j                  S # t
        $ r}t        d|       |d}~ww xY w)zRetrieve OpenAI batch resultsr   r   r.   Batch not completed, status: No output file availablez#Failed to retrieve OpenAI results: N)
r   r   r   r3   r0   r!   output_file_idr   contenttext)r"   r+   r   r$   r   file_responser(   s          r)   retrieve_resultszOpenAIProvider.retrieve_results<   s    	N%XFNN++H5E||{*"?~ NOO'' :;;"LL001E1EFM %%% 	NA!EFAM	Ns   BB 	B6"B11B6c                    	 ddl m}  |       }|j                  j                  |      }|j                  dk7  rt        d|j                         |j                  s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   r.   r8   r9   wNz#Failed to download OpenAI results: )r   r   r   r3   r0   r!   r:   r   r;   r   writer<   )	r"   r+   r   r   r$   r   r=   r%   r(   s	            r)   download_resultszOpenAIProvider.download_resultsO   s    	N%XFNN++H5E||{*"?~ NOO'' :;;"LL001E1EFMi% ,**+, , , 	NA!EFAM	Ns6   BC
 B>5C
 >CC
 C
 
	C'C""C'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!   r5   s         r)   cancel_batchzOpenAIProvider.cancel_batchc   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   r0   messagezFailed to delete OpenAI batch: N)r   r   r   r3   r   r0   r!   r5   s         r)   delete_batchzOpenAIProvider.delete_batchn   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   )rJ   zFailed to list OpenAI batches: N)	r   r   r   listdatar   from_openairE   r!   )r"   rJ   r   r$   r   r   r(   s          r)   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)
   )__name__
__module____qualname____doc__strr   dictr   r*   r6   r>   rB   rF   rI   intrL   r   rO        r)   r
   r
      s    * DHJJ(0c3h(@J	J2N3 N4S> N(N N N&N N N N(	JS 	JT#s(^ 	JJS JT#s(^ J J# JtL/A JrY   r
   N)	rT   typingr   r   baser   modelsr   r
   rX   rY   r)   <module>r]      s%    !  !}J] }JrY   