o
    ưi                     @   s  d Z ddlmZ ddlZddlmZmZmZmZ ddl	m
Z
 ddlmZ ddlmZ ddlmZmZmZmZmZmZmZmZ e Zejd	d
geegeddeefdededee de
fddZejd	d
geegedddddddeefdededee dee dee dee dee dee de
fddZejdd
geegeddeefdedededee de
f
ddZejdd
geegeddeefdedededee de
f
dd Z ej!dd
geegeddeefdedededee de
f
d!d"Z"ejd#d
geegeddeefdedededee de
f
d$d%Z#ejd&d'geegeddeefdedededee de
f
d(d)Z$ejd&d'geegeddddddeefdedededee dee dee dee dee de
fd*d+Z%ejd,d'geegeddeefded-edededee de
fd.d/Z&ejd,d'geegeddeefded-edededee de
fd0d1Z'ej!d,d'geegeddeefded-edededee de
fd2d3Z(dS )4z(
OpenAI Evals API endpoints - /v1/evals
    )OptionalN)	APIRouterDependsRequestResponse)UserAPIKeyAuth)user_api_key_auth)ProxyBaseLLMRequestProcessing)CancelEvalResponseCancelRunResponseDeleteEvalResponseEvalListEvalsResponseListRunsResponseRunRunDeleteResponsez	/v1/evalszOpenAI Evals API)tagsdependenciesZresponse_modelZopenaifastapi_responserequestcustom_llm_provideruser_api_key_dictc              
      sJ  ddl m}m}m}m}m}m}	m}
m}m	}m
}m} | I dH }|r)t|ni }|dp;|jdp;|jd}|rB||d< d|vrJ||d< t|d}z=|jdi d|d	| d
|ddd|d|d|d|d|d|dd|d|d|d|
d|	d|I dH W S  ty } z|j||||dI dH d}~ww )a  
    Create a new evaluation.

    Model-based routing (for multi-account support):
    - Pass model via header: `x-litellm-model: gpt-4-account-1`
    - Pass model via query: `?model=gpt-4-account-1`
    - Pass model via body: `{"model": "gpt-4-account-1"}`

    Example usage:
    ```bash
    curl -X POST "http://localhost:4000/v1/evals"       -H "Authorization: Bearer your-key"       -H "Content-Type: application/json"       -d '{
        "name": "Test Eval",
        "data_source_config": {"type": "file", "file_id": "file-abc123"},
        "testing_criteria": {"graders": [{"type": "llm_as_judge"}]}
      }'
    ```

    Returns: Eval object with id, status, timestamps, etc.
    r   general_settings
llm_routerproxy_configproxy_logging_objselect_data_generatoruser_api_baseuser_max_tokens
user_modeluser_request_timeoutuser_temperatureversionNmodelx-litellm-modelr   datar   r   r   
route_typeZacreate_evalr   r   r   r   r   r    r"   r!   r   r   r#   er   r   r#    litellm.proxy.proxy_serverr   r   r   r   r   r   r   r    r!   r"   r#   bodyorjsonloadsgetquery_paramsheadersr	   base_process_llm_request	Exception_handle_llm_api_exception)r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r.   r'   r$   	processorr*   r+   r+   e/home/app/Keep/.python/lib/python3.10/site-packages/litellm/proxy/openai_evals_endpoints/endpoints.pycreate_eval   sr   4"




	

r9      limitafterbeforeorderorder_byc	              
      s  ddl m}	m}
m}m}m}m}m}m}m	}m
}m} | I dH }|r)t|ni }d|vr7|dur7||d< d|vrC|durC||d< d|vrO|durO||d< d|vr[|dur[||d< d|vrg|durg||d< |d	pw|jd	pw|jd
}|r~||d	< d|vr||d< t|d}z=|jdi d|d| d|ddd|d|
d|	d|d|d	|d	d|d|d|d|d|d|I dH W S  ty } z|j||||dI dH d}~ww )a  
    List evaluations with pagination.

    Model-based routing (for multi-account support):
    - Pass model via header: `x-litellm-model: gpt-4-account-1`
    - Pass model via query: `?model=gpt-4-account-1`
    - Pass model via body: `{"model": "gpt-4-account-1"}`

    Example usage:
    ```bash
    curl "http://localhost:4000/v1/evals?limit=10"       -H "Authorization: Bearer your-key"
    ```

    Returns: ListEvalsResponse with list of evaluations
    r   r   Nr;   r<   r=   r>   r?   r$   r%   r   r&   r   r   r   r(   Zalist_evalsr   r   r   r   r   r    r"   r!   r   r   r#   r)   r+   r,   )r   r   r;   r<   r=   r>   r?   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r.   r'   r$   r7   r*   r+   r+   r8   
list_evalsz   s   4!




	

r@   z/v1/evals/{eval_id}eval_idc              
      R  ddl m}m}m}m}m}	m}
m}m}m	}m
}m} | I dH }|r)t|ni }| |d< |dp?|jdp?|jd}|rF||d< d|vrN||d< t|d}z=|jdi d	|d
|d|ddd|d|d|d|d|	d|dd|d|d|d|d|
d|I dH W S  ty } z|j||||dI dH d}~ww )a  
    Get a specific evaluation by ID.

    Model-based routing (for multi-account support):
    - Pass model via header: `x-litellm-model: gpt-4-account-1`
    - Pass model via query: `?model=gpt-4-account-1`
    - Pass model via body: `{"model": "gpt-4-account-1"}`

    Example usage:
    ```bash
    curl "http://localhost:4000/v1/evals/eval_123"       -H "Authorization: Bearer your-key"
    ```

    Returns: Eval object
    r   r   NrA   r$   r%   r   r&   r   r   r   r(   Z	aget_evalr   r   r   r   r   r    r"   r!   r   r   r#   r)   r+   r,   rA   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r.   r'   r$   r7   r*   r+   r+   r8   get_eval   t   4




	

rD   c              
      rB   )a  
    Update an evaluation.

    Model-based routing (for multi-account support):
    - Pass model via header: `x-litellm-model: gpt-4-account-1`
    - Pass model via query: `?model=gpt-4-account-1`
    - Pass model via body: `{"model": "gpt-4-account-1"}`

    Example usage:
    ```bash
    curl -X POST "http://localhost:4000/v1/evals/eval_123"       -H "Authorization: Bearer your-key"       -H "Content-Type: application/json"       -d '{"name": "Updated Name"}'
    ```

    Returns: Updated Eval object
    r   r   NrA   r$   r%   r   r&   r   r   r   r(   Zaupdate_evalr   r   r   r   r   r    r"   r!   r   r   r#   r)   r+   r,   rC   r+   r+   r8   update_eval?  st   4




	

rF   c              
      rB   )a  
    Delete an evaluation.

    Model-based routing (for multi-account support):
    - Pass model via header: `x-litellm-model: gpt-4-account-1`
    - Pass model via query: `?model=gpt-4-account-1`
    - Pass model via body: `{"model": "gpt-4-account-1"}`

    Example usage:
    ```bash
    curl -X DELETE "http://localhost:4000/v1/evals/eval_123"       -H "Authorization: Bearer your-key"
    ```

    Returns: DeleteEvalResponse with deletion confirmation
    r   r   NrA   r$   r%   r   r&   r   r   r   r(   Zadelete_evalr   r   r   r   r   r    r"   r!   r   r   r#   r)   r+   r,   rC   r+   r+   r8   delete_eval  rE   rG   z/v1/evals/{eval_id}/cancelc              
      rB   )a  
    Cancel a running evaluation.

    Model-based routing (for multi-account support):
    - Pass model via header: `x-litellm-model: gpt-4-account-1`
    - Pass model via query: `?model=gpt-4-account-1`
    - Pass model via body: `{"model": "gpt-4-account-1"}`

    Example usage:
    ```bash
    curl -X POST "http://localhost:4000/v1/evals/eval_123/cancel"       -H "Authorization: Bearer your-key"
    ```

    Returns: CancelEvalResponse with cancellation confirmation
    r   r   NrA   r$   r%   r   r&   r   r   r   r(   Zacancel_evalr   r   r   r   r   r    r"   r!   r   r   r#   r)   r+   r,   rC   r+   r+   r8   cancel_eval  rE   rH   z/v1/evals/{eval_id}/runszOpenAI Evals API - Runsc              
      sx  ddl m}m}m}m}m}	m}
m}m}m	}m
}m} | I dH }|r)t|ni }| |d< |jdpR|jdpR|dpRt|dtrQ|di dnd}|rY||d< d|vra||d< t|d	}z=|jdi d
|d|d|ddd|d|d|d|d|	d|dd|d|d|d|d|
d|I dH W S  ty } z|j||||dI dH d}~ww )a  
    Create a new run for an evaluation.

    Model-based routing (for multi-account support):
    - Pass model via header: `x-litellm-model: gpt-4-account-1`
    - Pass model via query: `?model=gpt-4-account-1`
    - Pass model via body: `{"model": "gpt-4-account-1"}`
    - Pass model via completion.model: `{"completion": {"model": "gpt-4-account-1"}}`

    Example usage:
    ```bash
    curl -X POST "http://localhost:4000/v1/evals/eval_123/runs"       -H "Authorization: Bearer your-key"       -H "Content-Type: application/json"       -d '{
        "data_source": {"type": "dataset", "dataset_id": "dataset_123"},
        "completion": {"model": "gpt-4", "temperature": 0.7}
      }'
    ```

    Returns: Run object with id, status, timestamps, etc.
    r   r   NrA   r%   r$   
completionr   r&   r   r   r   r(   Zacreate_runr   r   r   r   r   r    r"   r!   r   r   r#   r)   r+   )r-   r   r   r   r   r   r   r   r    r!   r"   r#   r.   r/   r0   r3   r1   r2   
isinstancedictr	   r4   r5   r6   rC   r+   r+   r8   
create_runY  sx   4#
$

	

rL   c	              
      sx  ddl m}	m}
m}m}m}m}m}m}m	}m
}m} | ||||d}|jdp.|jd}|r5||d< d|vr=||d< t|d}za|jdi d|d	|d
|ddd|d|
d|	d|d|d|ddurqt|dndd|d|d|d|d|d|I dH W S d|d|d|d|d|d|I dH W S  ty } z|j||||dI dH d}~ww )a  
    List all runs for an evaluation with pagination.

    Model-based routing (for multi-account support):
    - Pass model via header: `x-litellm-model: gpt-4-account-1`
    - Pass model via query: `?model=gpt-4-account-1`

    Example usage:
    ```bash
    curl "http://localhost:4000/v1/evals/eval_123/runs?limit=10"       -H "Authorization: Bearer your-key"
    ```

    Returns: ListRunsResponse with list of runs
    r   r   )rA   r;   r<   r=   r>   r%   r$   r   r&   r   r   r   r(   Z
alist_runsr   r   r   r   r   Nr    r"   r!   r   r   r#   r)   r+   )r-   r   r   r   r   r   r   r   r    r!   r"   r#   r3   r1   r2   r	   r4   strr5   r6   )rA   r   r   r;   r<   r=   r>   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r'   r$   r7   r*   r+   r+   r8   	list_runs  s   4 	

	 

rN   z!/v1/evals/{eval_id}/runs/{run_id}run_idc              
      s2  ddl m}m}m}m}	m}
m}m}m}m	}m
}m} | |d}|jdp+|jd}|r2||d< d|vr>|dur>||d< t|d}z=|jdi d	|d
|d|ddd|	d|d|d|d|
d|dd|d|d|d|d|d|I dH W S  ty } z|j|||	|dI dH d}~ww )a  
    Get a specific run by ID.

    Model-based routing (for multi-account support):
    - Pass model via header: `x-litellm-model: gpt-4-account-1`
    - Pass model via query: `?model=gpt-4-account-1`

    Example usage:
    ```bash
    curl "http://localhost:4000/v1/evals/eval_123/runs/run_456"       -H "Authorization: Bearer your-key"
    ```

    Returns: Run object with full details
    r   r   )rA   rO   r%   r$   r   Nr&   r   r   r   r(   Zaget_runr   r   r   r   r   r    r"   r!   r   r   r#   r)   r+   )r-   r   r   r   r   r   r   r   r    r!   r"   r#   r3   r1   r2   r	   r4   r5   r6   )rA   rO   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r'   r$   r7   r*   r+   r+   r8   get_run  sp   4

	

rP   c              
      Z  ddl m}m}m}m}	m}
m}m}m}m	}m
}m} | I dH }|r)t|ni }| |d< ||d< |dpC|jdpC|jd}|rJ||d< d|vrR||d< t|d	}z=|jdi d
|d|d|ddd|	d|d|d|d|
d|dd|d|d|d|d|d|I dH W S  ty } z|j|||	|dI dH d}~ww )a  
    Cancel a running run.

    Model-based routing (for multi-account support):
    - Pass model via header: `x-litellm-model: gpt-4-account-1`
    - Pass model via query: `?model=gpt-4-account-1`

    Example usage:
    ```bash
    curl -X POST "http://localhost:4000/v1/evals/eval_123/runs/run_456/cancel"       -H "Authorization: Bearer your-key"
    ```

    Returns: CancelRunResponse with cancellation confirmation
    r   r   NrA   rO   r$   r%   r   r&   r   r   r   r(   Zacancel_runr   r   r   r   r   r    r"   r!   r   r   r#   r)   r+   r,   rA   rO   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r.   r'   r$   r7   r*   r+   r+   r8   
cancel_runt  v   4




	

rS   c              
      rQ   )a  
    Delete a run.

    Model-based routing (for multi-account support):
    - Pass model via header: `x-litellm-model: gpt-4-account-1`
    - Pass model via query: `?model=gpt-4-account-1`

    Example usage:
    ```bash
    curl -X DELETE "http://localhost:4000/v1/evals/eval_123/runs/run_456"       -H "Authorization: Bearer your-key"
    ```

    Returns: RunDeleteResponse with deletion confirmation
    r   r   NrA   rO   r$   r%   r   r&   r   r   r   r(   Zadelete_runr   r   r   r   r   r    r"   r!   r   r   r#   r)   r+   r,   rR   r+   r+   r8   
delete_run  rT   rU   ))__doc__typingr   r/   Zfastapir   r   r   r   Zlitellm.proxy._typesr   Z$litellm.proxy.auth.user_api_key_authr   Z'litellm.proxy.common_request_processingr	   Zlitellm.types.llms.openai_evalsr
   r   r   r   r   r   r   r   ZrouterpostrM   r9   r1   intr@   rD   rF   deleterG   rH   rL   rN   rP   rS   rU   r+   r+   r+   r8   <module>   s   (	Y		c
V
X
V
Z
]
	YSW