U
    Zhu                     @  sx  d dl mZ d dlmZmZmZmZ d dlmZ d dl	Z	ddl
mZ ddlmZmZmZmZmZ ddlmZmZ dd	lmZ d
dlmZmZmZmZmZmZ ddlmZm Z  ddl!m"Z"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l0m1Z1 ddl2m3Z3 ddgZ4G dd deZ5G dd de Z6G dd dZ7G dd dZ8G dd dZ9G dd dZ:dS )     )annotations)DictUnionIterableOptional)LiteralN   )_legacy_response)	NOT_GIVENBodyQueryHeadersNotGiven)maybe_transformasync_maybe_transform)cached_property   )CheckpointsAsyncCheckpointsCheckpointsWithRawResponseAsyncCheckpointsWithRawResponse CheckpointsWithStreamingResponse%AsyncCheckpointsWithStreamingResponse)SyncAPIResourceAsyncAPIResource)to_streamed_response_wrapper"async_to_streamed_response_wrapper)SyncCursorPageAsyncCursorPage)AsyncPaginatormake_request_options)job_list_paramsjob_create_paramsjob_list_events_params)Metadata)FineTuningJob)FineTuningJobEventJobs	AsyncJobsc                   @  sn  e Zd ZeddddZeddddZeddd	d
ZeeeeeeedddeddddddddddddddddddZdddedddddddddd Z	eeeddded!d"d#d$ddddd%d&d'd(Z
dddeddddddddd)d*Zeeddded+dd"d#ddddd,d-d.d/Zdddeddddddddd0d1Zdddeddddddddd2d3ZdS )4r'   r   returnc                 C  s
   t | jS N)r   _clientself r/   J/tmp/pip-unpacked-wheel-693nel7n/openai/resources/fine_tuning/jobs/jobs.pycheckpoints&   s    zJobs.checkpointsJobsWithRawResponsec                 C  s   t | S a  
        This property can be used as a prefix for any HTTP method call to return
        the raw response object instead of the parsed content.

        For more information, see https://www.github.com/openai/openai-python#accessing-raw-response-data-eg-headers
        )r2   r-   r/   r/   r0   with_raw_response*   s    zJobs.with_raw_responseJobsWithStreamingResponsec                 C  s   t | S z
        An alternative to `.with_raw_response` that doesn't eagerly read the response body.

        For more information, see https://www.github.com/openai/openai-python#with_streaming_response
        )r5   r-   r/   r/   r0   with_streaming_response4   s    zJobs.with_streaming_responseNhyperparametersintegrationsmetadatamethodseedsuffixvalidation_fileextra_headersextra_query
extra_bodytimeoutSUnion[str, Literal[('babbage-002', 'davinci-002', 'gpt-3.5-turbo', 'gpt-4o-mini')]]str,job_create_params.Hyperparameters | NotGiven<Optional[Iterable[job_create_params.Integration]] | NotGivenOptional[Metadata] | NotGiven#job_create_params.Method | NotGivenOptional[int] | NotGivenOptional[str] | NotGivenHeaders | NoneQuery | NoneBody | None'float | httpx.Timeout | None | NotGivenr%   modeltraining_filer9   r:   r;   r<   r=   r>   r?   r@   rA   rB   rC   r*   c                C  s:   | j dt|||||||||	d	tjt|
|||dtdS )  
        Creates a fine-tuning job which begins the process of creating a new model from
        a given dataset.

        Response includes details of the enqueued job including job status and the name
        of the fine-tuned models once complete.

        [Learn more about fine-tuning](https://platform.openai.com/docs/guides/model-optimization)

        Args:
          model: The name of the model to fine-tune. You can select one of the
              [supported models](https://platform.openai.com/docs/guides/fine-tuning#which-models-can-be-fine-tuned).

          training_file: The ID of an uploaded file that contains training data.

              See [upload file](https://platform.openai.com/docs/api-reference/files/create)
              for how to upload a file.

              Your dataset must be formatted as a JSONL file. Additionally, you must upload
              your file with the purpose `fine-tune`.

              The contents of the file should differ depending on if the model uses the
              [chat](https://platform.openai.com/docs/api-reference/fine-tuning/chat-input),
              [completions](https://platform.openai.com/docs/api-reference/fine-tuning/completions-input)
              format, or if the fine-tuning method uses the
              [preference](https://platform.openai.com/docs/api-reference/fine-tuning/preference-input)
              format.

              See the
              [fine-tuning guide](https://platform.openai.com/docs/guides/model-optimization)
              for more details.

          hyperparameters: The hyperparameters used for the fine-tuning job. This value is now deprecated
              in favor of `method`, and should be passed in under the `method` parameter.

          integrations: A list of integrations to enable for your fine-tuning job.

          metadata: Set of 16 key-value pairs that can be attached to an object. This can be useful
              for storing additional information about the object in a structured format, and
              querying for objects via API or the dashboard.

              Keys are strings with a maximum length of 64 characters. Values are strings with
              a maximum length of 512 characters.

          method: The method used for fine-tuning.

          seed: The seed controls the reproducibility of the job. Passing in the same seed and
              job parameters should produce the same results, but may differ in rare cases. If
              a seed is not specified, one will be generated for you.

          suffix: A string of up to 64 characters that will be added to your fine-tuned model
              name.

              For example, a `suffix` of "custom-model-name" would produce a model name like
              `ft:gpt-4o-mini:openai:custom-model-name:7p4lURel`.

          validation_file: The ID of an uploaded file that contains validation data.

              If you provide this file, the data is used to generate validation metrics
              periodically during fine-tuning. These metrics can be viewed in the fine-tuning
              results file. The same data should not be present in both train and validation
              files.

              Your dataset must be formatted as a JSONL file. You must upload your file with
              the purpose `fine-tune`.

              See the
              [fine-tuning guide](https://platform.openai.com/docs/guides/model-optimization)
              for more details.

          extra_headers: Send extra headers

          extra_query: Add additional query parameters to the request

          extra_body: Add additional JSON properties to the request

          timeout: Override the client-level default timeout for this request, in seconds
        /fine_tuning/jobs	rQ   rR   r9   r:   r;   r<   r=   r>   r?   r@   rA   rB   rC   bodyoptionscast_to)_postr   r"   JobCreateParamsr    r%   r.   rQ   rR   r9   r:   r;   r<   r=   r>   r?   r@   rA   rB   rC   r/   r/   r0   create=   s.    a   zJobs.createrV   fine_tuning_job_idr@   rA   rB   rC   r*   c                C  s4   |st d|| jd| t||||dtdS )  
        Get info about a fine-tuning job.

        [Learn more about fine-tuning](https://platform.openai.com/docs/guides/model-optimization)

        Args:
          extra_headers: Send extra headers

          extra_query: Add additional query parameters to the request

          extra_body: Add additional JSON properties to the request

          timeout: Override the client-level default timeout for this request, in seconds
        AExpected a non-empty value for `fine_tuning_job_id` but received /fine_tuning/jobs/rV   rY   rZ   
ValueError_getr    r%   r.   r`   r@   rA   rB   rC   r/   r/   r0   retrieve   s       zJobs.retrieveafterlimitr;   r@   rA   rB   rC   str | NotGivenint | NotGiven#Optional[Dict[str, str]] | NotGivenzSyncCursorPage[FineTuningJob]rk   rl   r;   r@   rA   rB   rC   r*   c                C  s4   | j dtt t||||t|||dtjdtdS a  
        List your organization's fine-tuning jobs

        Args:
          after: Identifier for the last job from the previous pagination request.

          limit: Number of fine-tuning jobs to retrieve.

          metadata: Optional metadata filter. To filter, use the syntax `metadata[k]=v`.
              Alternatively, set `metadata=null` to indicate no metadata.

          extra_headers: Send extra headers

          extra_query: Add additional query parameters to the request

          extra_body: Add additional JSON properties to the request

          timeout: Override the client-level default timeout for this request, in seconds
        rT   )rk   rl   r;   r@   rA   rB   rC   querypagerY   rQ   )_get_api_listr   r%   r    r   r!   JobListParamsr.   rk   rl   r;   r@   rA   rB   rC   r/   r/   r0   list   s$     z	Jobs.listc                C  s6   |st d|| jd| dt||||dtdS )W  
        Immediately cancel a fine-tune job.

        Args:
          extra_headers: Send extra headers

          extra_query: Add additional query parameters to the request

          extra_body: Add additional JSON properties to the request

          timeout: Override the client-level default timeout for this request, in seconds
        rb   rc   /cancelrV   rd   rf   r[   r    r%   rh   r/   r/   r0   cancel  s    
   zJobs.cancelrk   rl   r@   rA   rB   rC   z"SyncCursorPage[FineTuningJobEvent]r`   rk   rl   r@   rA   rB   rC   r*   c                C  sL   |st d|| jd| dtt t||||t||dtjdtdS a  
        Get status updates for a fine-tuning job.

        Args:
          after: Identifier for the last event from the previous pagination request.

          limit: Number of events to retrieve.

          extra_headers: Send extra headers

          extra_query: Add additional query parameters to the request

          extra_body: Add additional JSON properties to the request

          timeout: Override the client-level default timeout for this request, in seconds
        rb   rc   z/events)rk   rl   rr   rt   )rf   rv   r   r&   r    r   r#   JobListEventsParamsr.   r`   rk   rl   r@   rA   rB   rC   r/   r/   r0   list_events,  s&    
zJobs.list_eventsc                C  s6   |st d|| jd| dt||||dtdS )J  
        Pause a fine-tune job.

        Args:
          extra_headers: Send extra headers

          extra_query: Add additional query parameters to the request

          extra_body: Add additional JSON properties to the request

          timeout: Override the client-level default timeout for this request, in seconds
        rb   rc   /pauserV   rd   r|   rh   r/   r/   r0   pause^  s    
   z
Jobs.pausec                C  s6   |st d|| jd| dt||||dtdS )K  
        Resume a fine-tune job.

        Args:
          extra_headers: Send extra headers

          extra_query: Add additional query parameters to the request

          extra_body: Add additional JSON properties to the request

          timeout: Override the client-level default timeout for this request, in seconds
        rb   rc   /resumerV   rd   r|   rh   r/   r/   r0   resume  s    
   zJobs.resume__name__
__module____qualname__r   r1   r4   r7   r
   r^   ri   ry   r}   r   r   r   r/   r/   r/   r0   r'   %   sj   	,}& :% 8'c                   @  sn  e Zd ZeddddZeddddZeddd	d
ZeeeeeeedddeddddddddddddddddddZdddedddddddddd Z	eeeddded!d"d#d$ddddd%d&d'd(Z
dddeddddddddd)d*Zeeddded+dd"d#ddddd,d-d.d/Zdddeddddddddd0d1Zdddeddddddddd2d3ZdS )4r(   r   r)   c                 C  s
   t | jS r+   )r   r,   r-   r/   r/   r0   r1     s    zAsyncJobs.checkpointsAsyncJobsWithRawResponsec                 C  s   t | S r3   )r   r-   r/   r/   r0   r4     s    zAsyncJobs.with_raw_responseAsyncJobsWithStreamingResponsec                 C  s   t | S r6   )r   r-   r/   r/   r0   r7     s    z!AsyncJobs.with_streaming_responseNr8   rD   rE   rF   rG   rH   rI   rJ   rK   rL   rM   rN   rO   r%   rP   c                  sF   | j dt|||||||||	d	tjI dH t|
|||dtdI dH S )rS   rT   rU   NrV   rW   )r[   r   r"   r\   r    r%   r]   r/   r/   r0   r^     s.    a   zAsyncJobs.createrV   r_   c                  s:   |st d|| jd| t||||dtdI dH S )ra   rb   rc   rV   rd   Nre   rh   r/   r/   r0   ri   0  s       zAsyncJobs.retrieverj   rm   rn   ro   z=AsyncPaginator[FineTuningJob, AsyncCursorPage[FineTuningJob]]rp   c                C  s4   | j dtt t||||t|||dtjdtdS rq   )rv   r   r%   r    r   r!   rw   rx   r/   r/   r0   ry   S  s$     zAsyncJobs.listc                  s<   |st d|| jd| dt||||dtdI dH S )rz   rb   rc   r{   rV   rd   Nr|   rh   r/   r/   r0   r}     s    
   zAsyncJobs.cancelr~   zGAsyncPaginator[FineTuningJobEvent, AsyncCursorPage[FineTuningJobEvent]]r   c                C  sL   |st d|| jd| dtt t||||t||dtjdtdS r   )rf   rv   r   r&   r    r   r#   r   r   r/   r/   r0   r     s&    
zAsyncJobs.list_eventsc                  s<   |st d|| jd| dt||||dtdI dH S )r   rb   rc   r   rV   rd   Nr|   rh   r/   r/   r0   r     s    
   zAsyncJobs.pausec                  s<   |st d|| jd| dt||||dtdI dH S )r   rb   rc   r   rV   rd   Nr|   rh   r/   r/   r0   r     s    
   zAsyncJobs.resumer   r/   r/   r/   r0   r(     sj   	,}& :% 8'c                   @  s.   e Zd ZdddddZedddd	Zd
S )r2   r'   Nonejobsr*   c                 C  sl   || _ t|j| _t|j| _t|j| _t|j| _t|j| _t|j| _t|j	| _	d S r+   )
_jobsr	   Zto_raw_response_wrapperr^   ri   ry   r}   r   r   r   r.   r   r/   r/   r0   __init__  s,    zJobsWithRawResponse.__init__r   r)   c                 C  s   t | jjS r+   )r   r   r1   r-   r/   r/   r0   r1   7  s    zJobsWithRawResponse.checkpointsNr   r   r   r   r   r1   r/   r/   r/   r0   r2     s   r2   c                   @  s.   e Zd ZdddddZedddd	Zd
S )r   r(   r   r   c                 C  sl   || _ t|j| _t|j| _t|j| _t|j| _t|j| _t|j| _t|j	| _	d S r+   )
r   r	   Zasync_to_raw_response_wrapperr^   ri   ry   r}   r   r   r   r   r/   r/   r0   r   =  s,    z!AsyncJobsWithRawResponse.__init__r   r)   c                 C  s   t | jjS r+   )r   r   r1   r-   r/   r/   r0   r1   V  s    z$AsyncJobsWithRawResponse.checkpointsNr   r/   r/   r/   r0   r   <  s   r   c                   @  s.   e Zd ZdddddZedddd	Zd
S )r5   r'   r   r   c                 C  s^   || _ t|j| _t|j| _t|j| _t|j| _t|j| _t|j| _t|j| _d S r+   )	r   r   r^   ri   ry   r}   r   r   r   r   r/   r/   r0   r   \  s,    z"JobsWithStreamingResponse.__init__r   r)   c                 C  s   t | jjS r+   )r   r   r1   r-   r/   r/   r0   r1   u  s    z%JobsWithStreamingResponse.checkpointsNr   r/   r/   r/   r0   r5   [  s   r5   c                   @  s.   e Zd ZdddddZedddd	Zd
S )r   r(   r   r   c                 C  s^   || _ t|j| _t|j| _t|j| _t|j| _t|j| _t|j| _t|j| _d S r+   )	r   r   r^   ri   ry   r}   r   r   r   r   r/   r/   r0   r   {  s,    z'AsyncJobsWithStreamingResponse.__init__r   r)   c                 C  s   t | jjS r+   )r   r   r1   r-   r/   r/   r0   r1     s    z*AsyncJobsWithStreamingResponse.checkpointsNr   r/   r/   r/   r0   r   z  s   r   );
__future__r   typingr   r   r   r   Ztyping_extensionsr   Zhttpx r	   _typesr
   r   r   r   r   _utilsr   r   _compatr   r1   r   r   r   r   r   r   Z	_resourcer   r   	_responser   r   Z
paginationr   r   Z_base_clientr   r    Ztypes.fine_tuningr!   r"   r#   Ztypes.shared_params.metadatar$   Z!types.fine_tuning.fine_tuning_jobr%   Z'types.fine_tuning.fine_tuning_job_eventr&   __all__r'   r(   r2   r   r5   r   r/   r/   r/   r0   <module>   s6      ~  ~