
    j                         d dl Z d dlZd dlmZmZmZ d dlmZ d dlm	Z	m
Z
 d dlm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 erd dlmZ  ej2                  e      Z G d d      Zy)    N)ListOptionalTYPE_CHECKING)sequence_splitter)messagesstreamer)client)types   )experiment_itemexperiments_client   )	constantshelpers   )base_prompt)score_resultc                      e Zd Z	 	 ddedee   dedej                  dej                  de	j                  deeej                        d	eee      d
dfdZed
efd       Zed
efd       Zed
efd       Zed
eee      fd       Zej*                  d
efd       Zed
ej                  fd       Zd
ej2                  j4                  fdZdeej:                     d
dfdZ	 	 ddee   de d
eejB                     fdZ"ded   d
dfdZ#y)
ExperimentNidnamedataset_namerest_clientr   r   promptstagsreturnc	                 t    || _         || _        || _        || _        || _        || _        || _        || _        y N)_id_name_dataset_name_rest_client_prompts	_streamer_experiments_client_tags)	selfr   r   r   r   r   r   r   r   s	            /Users/manta/Documents/Projects/TheRoad-I1/backend/.venv/lib/python3.12/site-packages/opik/api_objects/experiment/experiment.py__init__zExperiment.__init__   s?     
)'!#5 
    c                     | j                   S r   )r   r'   s    r(   r   zExperiment.id(   s    xxr*   c                     | j                   S r   )r!   r,   s    r(   r   zExperiment.dataset_name,   s    !!!r*   c                     | j                   | j                   S | j                  j                  j                  | j                        j
                  }|| _         |S N)r   )r    r"   experimentsget_experiment_by_idr   r   )r'   r   s     r(   r   zExperiment.name0   sK    ::!::  ,,AATWWAMRR
r*   c                     | j                   S r   )r&   r,   s    r(   r   zExperiment.tags:   s    zzr*   c                 v    | j                   j                  j                  | j                        j                  S )N)r   )r"   datasetsget_dataset_by_identifierr!   r   r,   s    r(   
dataset_idzExperiment.dataset_id>   s5      ))CC++ D 

"	r*   c                 .    | j                   j                  S r   )r"   r0   r,   s    r(   experiments_rest_clientz"Experiment.experiments_rest_clientD   s      ,,,r*   c                 b    | j                   j                  j                  | j                        S r/   )r"   r0   r1   r   r,   s    r(   get_experiment_datazExperiment.get_experiment_dataH   s&      ,,AATWWAMMr*   experiment_items_referencesc                    |D cg c]a  }t        j                  t        j                         | j                  |j
                  |j                  |j                  |j                        c }}t        j                  |t        j                        }|D ]3  }t        j                  |      }| j                  j                  |       5 yc c}w )aG  
        Creates a new experiment item by linking the existing trace and dataset item.

        Args:
            experiment_items_references: The list of ExperimentItemReferences objects, containing
                trace id and dataset item id to link together into experiment item.

        Returns:
            None
        )r   experiment_iddataset_item_idtrace_idproject_nameexecution_policy)
max_length)batchN)r   ExperimentItemMessager   generate_idr   r>   r?   r@   rA   r   split_into_batchesr   FEEDBACK_SCORES_MAX_BATCH_SIZE!CreateExperimentItemsBatchMessager$   put)r'   r;   itemexperiment_item_messagesbatchesrC   %create_experiment_items_batch_messages          r(   insertzExperiment.insertK   s    0 4
$
 4 **&&("gg $ 4 4!..!%!6!6 4 	! 
$
 $66$ ??

 E::G 2 NNDE	 %
$
s   A&Cmax_resultstruncatec                 r    |d}| j                   j                  | j                  | j                  g||      S )a  
        Retrieves and returns a list of experiment items for this experiment.

        Args:
            max_results: Maximum number of experiment items to retrieve. Defaults to 10000 if not specified.
            truncate: Whether to truncate the items returned by the backend. Defaults to False.

        Returns:
            List of ExperimentItemContent objects for this experiment.
        '  )r   experiment_idsrP   rO   )r%   !find_experiment_items_for_datasetr   r   )r'   rO   rP   s      r(   	get_itemszExperiment.get_itemsr   sF     K''II** GG9#	 J 
 	
r*   score_resultszscore_result.ScoreResultc                    g }|D ]K  }|j                   rt        j                  |j                  |j                        }|j                  |       M |r2| j                  j                  j                  | j                  |       yy)z+Log experiment-level scores to the backend.)r   value)r   experiment_scoresN)
scoring_failedrest_api_typesExperimentScorer   rX   appendr"   r0   update_experimentr   )r'   rV   rY   score_result_experiment_scores        r(   log_experiment_scoresz Experiment.log_experiment_scores   s    
 CE*M++-=="''#))  $$%56 + ));;77"3 <  r*   )NN)rR   F)$__name__
__module____qualname__strr   rest_api_clientOpikApir   Streamerr   ExperimentsClientr   r   
BasePromptr)   propertyr   r   r   r   	functoolscached_propertyr6   r8   r[   experiment_publicExperimentPublicr:   r   ExperimentItemReferencesrN   intboolExperimentItemContentrU   ra    r*   r(   r   r      s    ;?$( sm 	
 %,, ## /@@ ${5567 tCy! 
( C   "c " " c   htCy)   C  
 -)J)J - -N^%E%E%V%V N%F%)/*R*R%S%F 
%FR &+
c]
 
 
o33	4	
267 
r*   r   )rl   loggingtypingr   r   r    opik.message_processing.batchingr   opik.message_processingr   r   opik.rest_apir	   rf   r
   r[    r   r   r   r   api_objects.promptr   opik.evaluation.metricsr   	getLoggerrb   LOGGERr   rt   r*   r(   <module>r      sJ      0 0 > 6 3 1 1 ! -4			8	$M Mr*   