
    jor                        d dl Z d dlZd dlZd dlZd dlZd dlmZmZmZm	Z	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 d dlmZ d dl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* ejV                  dk\  rd dlm,Z, nd dl-m,Z, erd dl.Z/ ej`                  e1      Z2 G d de jf                        Z4 G d de4      Z5 G d de4      Z6y)    N)OptionalAnyListDictSequenceSetTYPE_CHECKINGIterator)rest_helpers)client)ApiError)dataset_item_writedataset_version_publicevaluator_item_writeexecution_policy_write)sequence_splitter)
id_helpers   )	constants   )dataset_item
convertersrest_operationsexecution_policy)      )overridec                      e Zd ZdZej
                  	 	 	 	 ddee   dee   deee	      dee	   de
ej                     f
d       Zdd	Zde	fd
Z	 	 ddee   dee	   deee	ef      fdZej
                  deej(                     fd       Zy)DatasetExportOperationsz
    Abstract base class providing export operations for dataset items.

    This class defines the common interface for exporting dataset items,
    shared by both Dataset (current state) and DatasetVersion (specific version).
    N
nb_samples
batch_sizedataset_item_idsfilter_stringreturnc                     t         )a  
        Stream dataset items as DatasetItem objects.

        Args:
            nb_samples: Maximum number of items to retrieve.
            batch_size: Maximum number of items to fetch per batch.
            dataset_item_ids: Optional list of specific item IDs to retrieve.
            filter_string: Optional OQL filter string to filter dataset items.

        Yields:
            DatasetItem objects one at a time.
        NotImplementedErrorselfr    r!   r"   r#   s        y/Users/manta/Documents/Projects/TheRoad-I1/backend/.venv/lib/python3.12/site-packages/opik/api_objects/dataset/dataset.py-__internal_api__stream_items_as_dataclasses__zEDatasetExportOperations.__internal_api__stream_items_as_dataclasses__4   s
    ( "!    c                 b    t        | j                               }t        j                  |i       S )z
        Convert the dataset items to a pandas DataFrame.

        Requires the `pandas` library to be installed.

        Returns:
            A pandas DataFrame containing all items.
        keys_mapping)listr+   r   	to_pandasr)   dataset_itemss     r*   r1   z!DatasetExportOperations.to_pandasJ   s*     TOOQR##MCCr,   c                 b    t        | j                               }t        j                  |i       S )z
        Convert the dataset items to a JSON string.

        Returns:
            A JSON string representation of all items.
        r.   )r0   r+   r   to_jsonr2   s     r*   r5   zDatasetExportOperations.to_jsonV   s*     TOOQR!!-bAAr,   c                     | j                  ||      D cg c]   }d|j                  i|j                         " }}|S c c}w )aB  
        Retrieve dataset items as a list of dictionaries.

        Args:
            nb_samples: Maximum number of items to retrieve. If not set, all items are returned.
            filter_string: Optional OQL filter string to filter dataset items.
                Supports filtering by tags, data fields, metadata, etc.

                Supported columns include:
                - `id`, `source`, `trace_id`, `span_id`: String fields
                - `data`: Dictionary field (use dot notation, e.g., "data.category")
                - `tags`: List field (use "contains" operator)
                - `created_at`, `last_updated_at`: DateTime fields (ISO 8601 format)
                - `created_by`, `last_updated_by`: String fields

                Examples:
                - `tags contains "failed"` - Items with 'failed' tag
                - `data.category = "test"` - Items with specific data field value
                - `created_at >= "2024-01-01T00:00:00Z"` - Items created after date

        Returns:
            A list of dictionaries representing the dataset items.
        )r    r#   id)r+   r7   get_content)r)   r    r#   itemdataset_items_as_dictss        r*   	get_itemsz!DatasetExportOperations.get_items`   sb    < JJ%] K "
 4771d..01 	 "
 &%"
s   %?c                     t         )a^  
        Get version information for experiment association.

        Returns:
            DatasetVersionPublic containing version metadata (id, version_name, etc.).
            For Dataset, returns info about the current/latest version, or None if no version exists.
            For DatasetVersion, returns info about this specific version.
        r&   r)   s    r*   get_version_infoz(DatasetExportOperations.get_version_info   s
     "!r,   NNNN)r$   pd.DataFrameNN)__name__
__module____qualname____doc__abcabstractmethodr   intr   strr
   r   DatasetItemr+   r1   r5   r   r   r;   r   DatasetVersionPublicr>    r,   r*   r   r   ,   s     	 %)$(04'+"SM" SM" #49-	"
  }" 
,**	+" "*
DB B %)'+"&SM"&  }"& 
d38n		"&H 	"	(==	>" "r,   r   c                      e Zd ZdZdededej                  dej                  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fd       Ze
dee   fd       Ze
dee   fd       Ze
dee   fd       Ze
dee   fd       Ze
deee      fd       Ze
dee   fd       Ze
dee   fd       Ze
dee   fd       Ze
dee   fd       Ze
dee   fd       Ze
dee   fd       Ze
deej<                     fd       Ze
dee   fd       Z e!	 	 	 	 d"dee   dee   deee      dee   de"e#jH                     f
d       Z%e!deej                     fd       Z&dee'   fd Z(de)jT                  fd!Z+y)#DatasetVersionas  
    A read-only view of a specific dataset version.

    This class provides access to dataset items at a specific version point in time.
    It supports reading version metadata and retrieving items, but does not allow
    mutations to the dataset.

    This object should not be created directly. Use :meth:`Dataset.get_dataset_version`
    to obtain an instance.
    dataset_name
dataset_idrest_clientversion_infor$   Nc                 <    || _         || _        || _        || _        y N)_dataset_name_dataset_id_rest_client_version_info)r)   rO   rP   rQ   rR   s        r*   __init__zDatasetVersion.__init__   s$     *%')r,   c                     | j                   S )z0The name of the dataset this version belongs to.rU   r=   s    r*   rO   zDatasetVersion.dataset_name        !!!r,   c                     | j                   S )zIThe name of the dataset this version belongs to (alias for dataset_name).r[   r=   s    r*   namezDatasetVersion.name   r\   r,   c                     | j                   S )z=The unique identifier of the dataset this version belongs to.rV   r=   s    r*   rP   zDatasetVersion.dataset_id        r,   c                     | j                   S )zTThe unique identifier of the dataset this version belongs to (alias for dataset_id).r`   r=   s    r*   r7   zDatasetVersion.id   ra   r,   c                 .    | j                   j                  S )z/The unique identifier of this specific version.)rX   r7   r=   s    r*   
version_idzDatasetVersion.version_id   s     !!$$$r,   c                 .    | j                   j                  S )z>Total number of items in this version (alias for items_total).rX   items_totalr=   s    r*   dataset_items_countz"DatasetVersion.dataset_items_count        !!---r,   c                 .    | j                   j                  S )z+The unique hash identifier of this version.)rX   version_hashr=   s    r*   rk   zDatasetVersion.version_hash        !!...r,   c                 .    | j                   j                  S )z/The sequential version name (e.g., 'v1', 'v2').)rX   version_namer=   s    r*   rn   zDatasetVersion.version_name   rl   r,   c                 .    | j                   j                  S )z"Tags associated with this version.)rX   tagsr=   s    r*   rp   zDatasetVersion.tags   s     !!&&&r,   c                 .    | j                   j                  S )z2Whether this is the latest version of the dataset.)rX   	is_latestr=   s    r*   rr   zDatasetVersion.is_latest   s     !!+++r,   c                 .    | j                   j                  S )z&Total number of items in this version.rf   r=   s    r*   rg   zDatasetVersion.items_total   ri   r,   c                 .    | j                   j                  S )z1Number of items added since the previous version.)rX   items_addedr=   s    r*   ru   zDatasetVersion.items_added   ri   r,   c                 .    | j                   j                  S )z4Number of items modified since the previous version.)rX   items_modifiedr=   s    r*   rw   zDatasetVersion.items_modified   s     !!000r,   c                 .    | j                   j                  S )z3Number of items deleted since the previous version.)rX   items_deletedr=   s    r*   ry   zDatasetVersion.items_deleted   s     !!///r,   c                 .    | j                   j                  S )z'Description of changes in this version.)rX   change_descriptionr=   s    r*   r{   z!DatasetVersion.change_description   s     !!444r,   c                 .    | j                   j                  S )z(Timestamp when this version was created.)rX   
created_atr=   s    r*   r}   zDatasetVersion.created_at        !!,,,r,   c                 .    | j                   j                  S )zUser who created this version.)rX   
created_byr=   s    r*   r   zDatasetVersion.created_by   r~   r,   r    r!   r"   r#   c           	          t        j                  | j                  | j                  ||||| j                  j
                        S )NrQ   rO   r    r!   r"   r#   dataset_version)r   stream_dataset_itemsrW   rU   rX   rk   r(   s        r*   r+   z<DatasetVersion.__internal_api__stream_items_as_dataclasses__   sD     33))++!!-' ..;;
 	
r,   c                     | j                   S )z
        Get version information for this specific dataset version.

        Returns:
            DatasetVersionPublic containing this version's metadata.
        )rX   r=   s    r*   r>   zDatasetVersion.get_version_info  s     !!!r,   c                     g S )z
        Get suite-level evaluators for this dataset version.

        DatasetVersion does not support suite-level evaluators, so this always
        returns an empty list.

        Returns:
            Empty list.
        rL   r=   s    r*   get_evaluatorszDatasetVersion.get_evaluators  s	     	r,   c                 >    t         j                  j                         S )z
        Get the execution policy for this dataset version.

        DatasetVersion does not support suite-level execution policy, so this
        returns the default execution policy.

        Returns:
            Default execution policy.
        )r   DEFAULT_EXECUTION_POLICYcopyr=   s    r*   get_execution_policyz#DatasetVersion.get_execution_policy*  s      88==??r,   r?   ),rB   rC   rD   rE   rI   rest_api_clientOpikApir   rK   rY   propertyrO   r^   rP   r7   r   rd   rH   rh   rk   rn   r   rp   boolrr   rg   ru   rw   ry   r{   datetimer}   r   r   r
   r   rJ   r+   r>   r   r   r   ExecutionPolicyr   rL   r,   r*   rN   rN      s   	
*
* 
* %,,	
*
 -AA
* 

* "c " " "c " "  C      C     %HSM % % .Xc] . . /hsm / / /hsm / / 'htCy) ' ' ,8D> , , .Xc] . . .Xc] . . 1 1 1 0x} 0 0 5HSM 5 5 -HX%6%67 - - -HSM - -  %)$(04'+
SM
 SM
 #49-	

  }
 
,**	+
 
" 	"	(==	>	" 	"
S	 

@&6&F&F 
@r,   rN   c                      e Zd Z	 d0dedee   dej                  dee   ddf
dZe	j                  defd       Zedefd	       Zedee   fd
       Zedee   fd       Zdee   fdZedeej&                     fd       Z	 d0dee   dee   fdZdej2                  fdZdee   fdZdej:                  dej>                  fdZ deej>                     deddfdZ!deej:                     ddfdZ"de#e$eef      ddfdZ%d1dZ&dee$eef      ddfdZ'dee   deddfdZ(dee   ddfdZ)d1dZ*e	 	 	 	 d2d ee   d!ee   d"eee      d#ee   de+ej:                     f
d$       Z,	 	 d3d%ed&ee$eef      d'eee      ddfd(Z-	 	 d3d)ed&ee$eef      d'eee      ddfd*Z.	 	 d3d+d,d&ee$eef      d'eee      ddfd-Z/d.ede0fd/Z1y)4DatasetNr^   descriptionrQ   rh   r$   c                 h    || _         || _        || _        || _        i | _        t               | _        y)z
        A Dataset object. This object should not be created directly, instead use :meth:`opik.Opik.create_dataset` or :meth:`opik.Opik.get_dataset`.
        N)_name_descriptionrW   _dataset_items_count_id_to_hashset_hashes)r)   r^   r   rQ   rh   s        r*   rY   zDataset.__init__8  s4     
''$7!+-!$r,   c                 v    | j                   j                  j                  | j                        j                  S )zThe id of the datasetrO   )rW   datasetsget_dataset_by_identifierr   r7   r=   s    r*   r7   z
Dataset.idJ  s5       ))CC D 

"	r,   c                     | j                   S )zThe name of the dataset.)r   r=   s    r*   r^   zDataset.nameQ  s     zzr,   c                     | j                   S )zThe description of the dataset.)r   r=   s    r*   r   zDataset.descriptionV  s        r,   c                     | j                   A| j                  j                  j                  | j                        }|j
                  | _         | j                   S )z
        The total number of items in the dataset.

        If the count is not cached locally, it will be fetched from the backend.
        r   )r   rW   r   r   r   rh   )r)   dataset_infos     r*   rh   zDataset.dataset_items_count[  sU     $$,,,55OO!ZZ P L )5(H(HD%(((r,   c                 B    | j                         }|r|j                  S dS )aG  
        Get the current version name of the dataset.

        The version name is fetched from the backend and reflects the latest
        committed version after any mutation operations (insert, update, delete).

        Returns:
            The current version name (e.g., 'v1', 'v2'), or None if no version exists.
        N)r>   rn   )r)   rR   s     r*   get_current_version_namez Dataset.get_current_version_namei  s%     ,,.,8|((BdBr,   c                     d}	 | j                   j                  j                  | j                  dd      }|r|j                  sy|j                  d   S # t        $ r0}|j
                  dk(  rt        j                  d       n Y d}~Rd}~ww xY w)z
        Get version information for the current (latest) dataset version.

        Returns:
            DatasetVersionPublic containing the current version's metadata,
            or None if no version exists yet.
        Nr   )r7   pagesizei  zFVersioning is not enabled for datasets get version info returning Noner   )	rW   r   list_dataset_versionsr7   r   status_codeLOGGERdebugcontent)r)   versions_responsees      r*   r>   zDataset.get_version_infov  s     !	 $ 1 1 : : P P77 !Q ! !(9(A(A ((++  	}}#\ 		s   2A 	B&BBevaluator_modelc                    ddl m} ddlm} | j	                         }||j
                  sg S g }|j
                  D ]  }	 |j                  dk(  rM |j                  di |j                  }|j                  j                  |d|i      }|j                  |       n t        j                  d|j                          |S # t        $ r$ t        j                  d|j                  d	
        w xY w)aV  
        Get suite-level evaluators from the current dataset version.

        Converts EvaluatorItemPublic objects from the BE into LLMJudge instances.

        Args:
            evaluator_model: Optional model name to use for LLMJudge evaluators.

        Returns:
            List of LLMJudge instances extracted from the version.
        r   )	llm_judge)configr   model)init_kwargszIUnsupported evaluator type in version: %s. Only 'llm_judge' is supported.z7Failed to instantiate evaluator from version config: %sT)exc_inforL   ) opik.evaluation.suite_evaluatorsr   *opik.evaluation.suite_evaluators.llm_judger   r>   
evaluatorstypeLLMJudgeConfigLLMJudgefrom_configappendr   warning	Exceptionerror)	r)   r   r   llm_judge_configrR   r   evaluator_itemcfg	evaluators	            r*   r   zDataset.get_evaluators  s     	?	
 ,,.|'>'>I "
*55N!&&+59*99RN<Q<QRC ) 2 2 > >'?)C !? !I %%i0NNc&++ 6*   M"))!  
 s   A<B??-C,c                     | j                         }|O|j                  C|j                  }|j                  |j                  nd|j                  |j                  dS ddS t        j                  j                         S )z
        Get suite-level execution policy from the current dataset version.

        Returns:
            ExecutionPolicy dict with runs_per_item and pass_threshold.
        r   runs_per_itempass_threshold)r>   r   r   r   r   r   )r)   rR   eps      r*   r   zDataset.get_execution_policy  s     ,,.#(E(E(Q..B ##/ "$!1!1$$0 #%"3"3	     88==??r,   c                     | j                   j                  j                  | j                        }|j                  xs g S )zc
        Get the tags for this dataset.

        Returns:
            List of tag strings.
        r   )rW   r   r   r   rp   )r)   dataset_ferns     r*   get_tagszDataset.get_tags  s@     ((11KK L 
   &B&r,   r9   c           
         d}|j                   rM|j                   D cg c]8  }t        j                  |j                  |j                  |j
                        : }}d}|j                  r?t        j                  |j                  j                  |j                  j                        }t        j                  |j                  |j                  |j                  |j                   |j#                         |j$                  ||      S c c}w )zConvert a DatasetItem to REST API format.

        Args:
            item: The DatasetItem to convert.

        Returns:
            DatasetItemWrite object ready for REST API.
        N)r^   r   r   r   )r7   trace_idspan_idsourcedatar   r   r   )r   rest_evaluator_itemEvaluatorItemWriter^   r   r   r   rest_execution_policyExecutionPolicyWriter   r   rest_dataset_itemDatasetItemWriter7   r   r   r   r8   r   )r)   r9   r   r   r   s        r*   _convert_to_rest_itemzDataset._convert_to_rest_item  s     
??  )A $6688
 )      4II"33AA#44CC 
 !11ww]]LL;;!!#((!-	
 		
!s   =Dbatchbatch_group_idc                 |     t        j                   fd       t        j                  dt	                     y)au  Insert a batch of dataset items with automatic retry on rate limit errors.

        Args:
            batch: List of dataset items to insert.
            batch_group_id: UUIDv7 identifier that groups all batches from a single
                user operation together. All batches sent as part of one insert/update
                call share the same batch_group_id.
        c                  h    j                   j                  j                  j                         S )N)rO   itemsr   )rW   r   create_or_update_dataset_itemsr   r   r   r)   s   r*   <lambda>z2Dataset._insert_batch_with_retry.<locals>.<lambda>  s-    D%%..MM!ZZu^ N r,   z0Successfully sent dataset items batch of size %dNr   *ensure_rest_api_call_respecting_rate_limitr   r   lenr)   r   r   s   ```r*   _insert_batch_with_retryz Dataset._insert_batch_with_retry  s-     	??	

 	GUTr,   r   c                 `   g }|D ]|  }|j                         }|| j                  v rt        j                  d|       8|j	                  |       | j                  j                  |       || j                  |j                  <   ~ |D cg c]  }| j                  |       }}t        j                  |t        j                  t        j                        }t        j                          }|D ]4  }t        j                  dt#        |             | j%                  ||       6 d | _        y c c}w )Nz6Duplicate item found with hash: %s - ignored the event)max_payload_size_MB
max_lengthz&Sending dataset items batch of size %dr   )content_hashr   r   r   r   addr   r7   r   r   split_into_batchesr   MAX_BATCH_SIZE_MBr   DATASET_ITEMS_MAX_BATCH_SIZEr   generate_idr   r   r   )	r)   r   deduplicated_itemsr9   	item_hash
rest_itemsbatchesr   r   s	            r*   -__internal_api__insert_items_as_dataclasses__z5Dataset.__internal_api__insert_items_as_dataclasses__"  s    >@D))+IDLL(L %%d+LLY'(1DTWW%  DVVCU4d006CU
V#66 & 8 8 ==
 $//1ELLA3u:N))%)O 
 %)! Ws   D+c                     |D cg c])  }t        |t              rt        j                  di |n|+ }}| j	                  |       yc c}w )z
        Insert new items into the dataset. A new dataset version will be created.

        Args:
            items: List of dicts (which will be converted to dataset items)
                to add to the dataset.
        NrL   )
isinstancedictr   rJ   r   )r)   r   r9   r3   s       r*   insertzDataset.insertF  sU     9
 2<D$1G\%%--TQ 	 9
 	::=I	9
s   .Ac                 6   t         j                  d       i | _        t               | _        | j                         D ]F  }|j                         }|| j                  |j                  <   | j                  j                  |       H t         j                  d       y)z%Updates all the hashes in the datasetzStart hash sync in datasetzFinish hash sync in datasetN)	r   r   r   r   r   r+   r   r7   r   )r)   r9   r   s      r*   __internal_api__sync_hashes__z%Dataset.__internal_api__sync_hashes__T  sw    12uFFHD))+I(1DTWW%LLY' I
 	23r,   c                 h    |D ]  }d|vst        j                  d|       | j                  |       y)a`  
        Update existing items in the dataset.

        Args:
            items: List of DatasetItem objects to update in the dataset. You need to provide the full item object as it will override what has been supplied previously.

        Raises:
            DatasetItemUpdateOperationRequiresItemId: If any item in the list is missing an id.
        r7   z)Missing id for dataset item to update: %sN)
exceptions(DatasetItemUpdateOperationRequiresItemIdr   )r)   r   r9   s      r*   updatezDataset.updateb  s<     D4 II?   	Er,   c                 |     t        j                   fd       t        j                  dt	                     y)ai  Delete a batch of dataset items with automatic retry on rate limit errors.

        Args:
            batch: List of item IDs to delete.
            batch_group_id: UUIDv7 identifier that groups all batches from a single
                user operation together. All batches sent as part of one delete
                call share the same batch_group_id.
        c                  R    j                   j                  j                         S )N)item_idsr   )rW   r   delete_dataset_itemsr   s   r*   r   z2Dataset._delete_batch_with_retry.<locals>.<lambda>  s'    D%%..CC~ D r,   z3Successfully deleted dataset items batch of size %dNr   r   s   ```r*   _delete_batch_with_retryz Dataset._delete_batch_with_retryt  s.     	??	

 	JCPUJWr,   	items_idsc                 ~   t        j                  |t        j                        }t	        j
                         }|D ]x  }t        j                  d|       | j                  ||       |D ]H  }|| j                  v s| j                  |   }| j                  j                  |       | j                  |= J z d| _        y)z
        Delete items from the dataset. A new dataset version will be created.

        Args:
            items_ids: List of item ids to delete.
        )r   z Deleting dataset items batch: %sr   N)r   r   r   r   r   r   r   r   r  r   r   discardr   )r)   r  r   r   r   item_idhashs          r*   deletezDataset.delete  s     $66)"H"H
 $//1ELL;UC))%)O d...++G4DLL((.((1	 !	  %)!r,   c                     | j                         D cg c]  }|j                  |j                   }}| j                  |       yc c}w )za
        Delete all items from the given dataset. A new dataset version will be created.
        N)r+   r7   r
  )r)   r9   r  s      r*   clearzDataset.clear  sN     JJL
Lww" GGL 	 
 	H
s   Ar    r!   r"   r#   c           	      b    t        j                  | j                  | j                  ||||d      S )a  
        Stream dataset items as a generator instead of loading all at once.

        This method yields dataset items one at a time, enabling evaluation to start
        processing items before the entire dataset is downloaded. This is particularly
        useful for large datasets with heavy payloads (images, videos, audio).

        Args:
            nb_samples: Maximum number of items to retrieve. If None, all items are streamed.
            batch_size: Maximum number of items to fetch per batch from the backend.
                        If None, uses the default value from constants.DATASET_STREAM_BATCH_SIZE.
            dataset_item_ids: Optional list of specific item IDs to retrieve. If provided,
                            only items with matching IDs will be yielded.
            filter_string: Optional OQL filter string to filter dataset items.

        Yields:
            DatasetItem objects one at a time
        Nr   )r   r   rW   r   r(   s        r*   r+   z5Dataset.__internal_api__stream_items_as_dataclasses__  s6    4 33))!!-' 
 	
r,   
json_arrayr/   ignore_keysc                 n    |i n|}|g n|}t        j                  |||      }| j                  |       y)a  
        Args:
            json_array: json string of format: "[{...}, {...}, {...}]" where every dictionary
                is to be transformed into dataset item
            keys_mapping: dictionary that maps json keys to item fields names
                Example: {'Expected output': 'expected_output'}
            ignore_keys: if your json dicts contain keys that are not needed for DatasetItem
                construction - pass them as ignore_keys argument
        N)r/   r  )r   	from_jsonr   )r)   r  r/   r  	new_itemss        r*   insert_from_jsonzDataset.insert_from_json  sA     *1r|'/b[((\{
	 	Ir,   	file_pathc                 l    |i n|}|g n|}t        j                  |||      }| j                  |       y)a  
        Read JSONL from a file and insert it into the dataset.

        Args:
            file_path: Path to the JSONL file
            keys_mapping: dictionary that maps json keys to item fields names
                Example: {'Expected output': 'expected_output'}
            ignore_keys: if your json dicts contain keys that are not needed for DatasetItem
                construction - pass them as ignore_keys argument
        N)r   from_jsonl_filer   )r)   r  r/   r  r  s        r*   read_jsonl_from_filezDataset.read_jsonl_from_file  s<      *1r|'/b[..y,T	Ir,   	dataframer@   c                 l    |i n|}|g n|}t        j                  |||      }| j                  |       y)a  
        Requires: `pandas` library to be installed.

        Args:
            dataframe: pandas dataframe
            keys_mapping: Dictionary that maps dataframe column names to dataset item field names.
                Example: {'Expected output': 'expected_output'}
            ignore_keys: if your dataframe contains columns that are not needed for DatasetItem
                construction - pass them as ignore_keys argument
        N)r   from_pandasr   )r)   r  r/   r  r  s        r*   insert_from_pandaszDataset.insert_from_pandas  s<      *1r|'/b[**9lKP	Ir,   rn   c                    t        j                  | j                  | j                  |      }|&t	        j
                  d| d| j                   d      t        | j                  | j                  | j                  |      S )a  
        Get a read-only view of a specific dataset version.

        The returned DatasetVersion object allows reading version metadata and
        retrieving items via :meth:`DatasetVersion.get_items`, but does not support
        mutations.

        Args:
            version_name: The version name (e.g., 'v1', 'v2').

        Returns:
            A read-only DatasetVersion object for accessing the specified version.

        Raises:
            opik.exceptions.DatasetVersionNotFound: If the specified version does not exist.

        Example:
            >>> dataset = client.get_dataset("my_dataset")
            >>> version = dataset.get_version_view("v1")
            >>> items = version.get_items()
        )rQ   rP   rn   zDataset version 'z' not found in dataset '')rO   rP   rQ   rR   )r   find_version_by_namerW   r7   r   DatasetVersionNotFoundr   rN   )r)   rn   rR   s      r*   get_version_viewzDataset.get_version_view  s    , ';;))ww%
 33#L>1I$**UVW  ww))%	
 	
r,   rT   )r$   Nr?   rA   )2rB   rC   rD   rI   r   r   r   rH   rY   	functoolscached_propertyr7   r   r^   r   rh   r   r   r   rK   r>   r   r   r   r   r   r   r   r   rJ   r   r   r   r   r   r   r   r   r   r   r  r
  r  r
   r+   r  r  r  rN   r   rL   r,   r*   r   r   7  s    .2'' c]' %,,	'
 &c]' 
'$ C   c   !Xc] ! ! )Xc] ) )C(3- C ,	(==	>, ,< *..!#. 
c.`@		)	)@.
'$s) 
'&
 ,,&
		+	+&
PU%667U U 
	U("),223")	")HJHT#s(^4 J J4Dc3h0 T $XCyX X 
	X()S	 )d )4
  %)$(04'+!
SM!
 SM!
 #49-	!

  }!
 
,**	+!
 !
L 26+/	 tCH~. d3i(	
 
6 26+/	 tCH~. d3i(	
 
0 26+/	! tCH~. d3i(	
 
.&
S &
^ &
r,   r   )7rF   r   loggingr!  systypingr   r   r   r   r   r   r	   r
   opik.api_objectsr   opik.rest_apir   r   opik.rest_api.core.api_errorr   opik.rest_api.typesr   r   r   r   r   r   r    opik.message_processing.batchingr   opikr   opik.exceptionsr   opik.configr    r   r   r   r   r   rR   r   typing_extensionspandaspd	getLoggerrB   r   ABCr   rN   r   rL   r,   r*   <module>r4     s    
    
	 	 	 * 3 1  ?  $   I Iw*			8	$d"cgg d"Na@, a@HE
% E
r,   