
    Zǻi                       d Z ddlmZ ddlmZ ddl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 dd	lmZ dd
lmZmZmZmZmZmZmZ ddl m!Z!m"Z"m#Z# eeeedf   Z$ee%e&eeedf   Z' G d de      Z(e%e&ee)e&e*f   e(e)e&ef   f   f   Z+	 e G d de             Z, G d de      Z- G d de#      Z.ee(e.e)e&e*f   e)e&ef   f   Z/ G d de      Z0e0Z1 G d de0      Z2 G d de#      Z3 G d de-      Z4 G d de-      Z5 G d d e      Z6 G d! d"e      Z7e7Z8 G d# d$e&e      Z9 G d% d&e      Z:e!d'   Z; G d( d)e#d*+      Z< G d, d-e:      Z= G d. d/e      Z>d0 Z? G d1 d2e      Z@ G d3 d4e@      ZA G d5 d6e&e      ZB G d7 d8e#d*+      ZC G d9 d:e@      ZD G d; d<e      ZE G d= d>eE      ZF G d? d@eE      ZG G dA dBe      ZH G dC dDe      ZI G dE dFe#d*+      ZJ G dG dHe#d*+      ZK G dI dJeI      ZL G dK dLeI      ZM G dM dNe      ZN G dO dPeN      ZOe G dQ dRe             ZP G dS dTe#d*+      ZQ G dU dVe#d*+      ZR G dW dXe      ZS G dY dZeS      ZT G d[ d\e#d*+      ZU G d] d^e      ZVe4j                           G d_ d`e      ZX G da dbe      ZY G dc dde#d*+      ZZ G de dfe#d*+      Z[ G dg dhe      Z\ G di dje      Z] G dk dle      Z^ G dm dne      Z_ G do dpe      Z` G dq dre      Za G ds dte&e      Zb G du dve#d*+      Zc G dw dxe#d*+      Zd G dy dze#d*+      Ze G d{ d|e#d*+      Zf G d} d~e#      Zg G d de#d*+      Zh G d de#      Zi G d de4      Zj G d de#      Zk G d de#      Zl G d de      Zm G d de      Zn G d de      Zo G d de      Zpdd	 	 	 	 	 	 	 	 	 ddZq G d d      Zr G d d      Zs G d de      Zt G d de      Zu G d de      Zv G d de      Zw G d dev      Zx G d de      Zyy)zSchemas for the LangSmith API.    )annotations)Iterator)datetime	timedeltatimezone)Decimal)Enum)Path)	AnnotatedAny
NamedTupleOptionalProtocolUnionruntime_checkable)UUID)	BaseModel
ConfigDictFieldPrivateAttr
StrictBoolStrictFloat	StrictInt)LiteralNotRequired	TypedDictNc                  &    e Zd ZU dZded<   ded<   y)
Attachmenta  Annotated type that will be stored as an attachment if used.

    Examples:
        ```python
        from langsmith import traceable
        from langsmith.schemas import Attachment


        @traceable
        def my_function(bar: int, my_val: Attachment):
            # my_val will be stored as an attachment
            # bar will be stored as inputs
            return bar
        ```
    str	mime_typeUnion[bytes, Path]dataN__name__
__module____qualname____doc____annotations__     O/opt/lhia/marcimex/agent/venv/lib/python3.12/site-packages/langsmith/schemas.pyr   r   $   s      N
r*   r   c                  ,    e Zd ZdZdddZdd	dZd
dZy)BinaryIOLikez$Protocol for binary IO-like objects.c                     y)zRead function.Nr)   )selfsizes     r+   readzBinaryIOLike.readD       r*   c                     y)zSeek function.Nr)   )r/   offsetwhences      r+   seekzBinaryIOLike.seekH   r2   r*   c                     y)zGet value function.Nr)   r/   s    r+   getvaluezBinaryIOLike.getvalueL   r2   r*   N))r0   intreturnbytes)r   )r4   r;   r5   r;   r<   r;   )r<   r=   )r$   r%   r&   r'   r1   r6   r9   r)   r*   r+   r-   r-   @   s    .r*   r-   c                      e Zd ZU dZded<    ed      Zded<    ed      Zded<    ed      Zded	<    e	d
d
      Z
y)ExampleBasezExample base model.r   
dataset_idNdefaultOptional[dict[str, Any]]inputsoutputsmetadataT)frozenarbitrary_types_allowed)r$   r%   r&   r'   r(   r   rD   rE   rF   r   model_configr)   r*   r+   r?   r?   Q   sG    ',T':F$:(-d(;G%;).t)<H&<T4HLr*   r?   c                  "    e Zd ZU ded<   ded<   y)_AttachmentDictr   r    r!   r"   N)r$   r%   r&   r(   r)   r*   r+   rK   rK   \   s    N
r*   rK   c                       e Zd ZU dZdZded<    ed       Zded<    ed	      Zd
ed<    ed	      Z	d
ed<    ed	      Z
d
ed<   dZded<   dZded<   dZded<   dZded<   dZded<    fdZ xZS )ExampleCreatez Example upload with attachments.NOptional[UUID]idc                 H    t        j                  t        j                        S Nr   nowr   utcr)   r*   r+   <lambda>zExampleCreate.<lambda>j       hll9S r*   default_factoryr   
created_atrA   rC   rD   rE   rF   Optional[Union[str, list[str]]]splitz$Optional[dict[str, _AttachmentLike]]attachmentsFbooluse_source_run_ioOptional[list[str]]use_source_run_attachmentssource_run_idc                $    t        |   di | yzInitialize from dict.Nr)   super__init__r/   r"   	__class__s     r+   rf   zExampleCreate.__init__t        4 r*   )r$   r%   r&   r'   rO   r(   r   rY   rD   rE   rF   r[   r\   r^   r`   ra   rf   __classcell__rh   s   @r+   rM   rM   f   s    *B 1STJT',T':F$:(-d(;G%;).t)<H&<-1E*18<K5<#t#6: 3:$(M>(! !r*   rM   c                      e Zd ZU dZded<   y)ExampleUpsertWithAttachmentsz Example create with attachments.r   r@   Nr#   r)   r*   r+   rm   rm   |   s    *r*   rm   c                  0    e Zd ZU dZded<   ded<   ded<   y)	AttachmentInfozInfo for an attachment.r   presigned_urlr-   readerOptional[str]r    Nr#   r)   r*   r+   ro   ro      s    !r*   ro   c                  "    e Zd ZU dZded<    ed       Zded<    e ed      	      Zded
<    ed	      Z	ded<   dZ
ded<    ed	      Zded<   	  ed	      Zded<    ed	      Zded<   	 	 d	 	 	 	 	 	 	 d fdZedd       Zd Z xZS )ExamplezExample model.r   rO   c                 L    t        j                  dt        j                        S )Nr   )tz)r   fromtimestampr   rT   r)   r*   r+   rU   zExample.<lambda>   s     6 6qX\\ J r*   rW   r   rY   z$00000000-0000-0000-0000-000000000000rA   r@   NOptional[datetime]modified_atrN   ra   z#Optional[dict[str, AttachmentInfo]]r\   rr   	_host_url
_tenant_idc                @    t        |   di | || _        || _        y)Initialize a Dataset object.Nr)   )re   rf   rz   r{   )r/   rz   r{   kwargsrh   s       r+   rf   zExample.__init__   s#     	"6""$r*   c                    | j                   r^d| j                   d| j                   }| j                  r&| j                    dt	        | j                         | S | j                    | S y)URL of this run within the app.
/datasets/z/e//o/N)rz   r@   rO   r{   r   )r/   paths     r+   urlzExample.url   sh     >>0DGG9=D..)S-A,B4&IInn%dV,,r*   c                n    | j                    d| j                   d| j                   d| j                   dS )5Return a string representation of the RunBase object.(id=z, dataset_id=z, link=''))rh   rO   r@   r   r8   s    r+   __repr__zExample.__repr__   s8    ..!dggYmDOO;LHUYU]U]T^^`aar*   )NN)rz   rr   r{   rN   r~   r   r<   Noner<   rr   )r$   r%   r&   r'   r(   r   rY   r   r@   ry   ra   r\   r   rz   r{   rf   propertyr   r   rj   rk   s   @r+   rt   rt      s    H JJ  T*P%QRJR&+D&9K#9$(M>(7<T7JK4J.*48I}8!,T!:J: $(%)	% 	% #	% 		%
 
	%  br*   rt   c                      e Zd ZU dZded<   y)ExampleSearchzExample returned via search.r   rO   Nr#   r)   r*   r+   r   r      s
    &Hr*   r   c                  N    e Zd ZU dZ eed      Zded<    eed      Z	ded<   y	)
AttachmentsOperationsz%Operations to perform on attachments.z,Mapping of old attachment names to new names)rX   descriptionzdict[str, str]renamez List of attachment names to keep	list[str]retainN)
r$   r%   r&   r'   r   dictr   r(   listr   r)   r*   r+   r   r      s5    /"*XFN  *LFI r*   r   c                       e Zd ZU dZded<   dZded<    ed      Zded	<    ed      Zded
<    ed      Z	ded<   dZ
ded<   dZded<   dZded<    ed      Z fdZ xZS )ExampleUpdatez Example update with attachments.r   rO   NrN   r@   rA   rC   rD   rE   rF   rZ   r[   zOptional[Attachments]r\   zOptional[AttachmentsOperations]attachments_operationsTrG   c                $    t        |   di | yrc   rd   rg   s     r+   rf   zExampleUpdate.__init__   ri   r*   )r$   r%   r&   r'   r(   r@   r   rD   rE   rF   r[   r\   r   r   rI   rf   rj   rk   s   @r+   r   r      s{    *H!%J%',T':F$:(-d(;G%;).t)<H&<-1E*1)-K&->B;BT*L! !r*   r   c                      e Zd ZdZdZdZdZy)DataTypezEnum for dataset data types.kvllmchatN)r$   r%   r&   r'   r   r   r   r)   r*   r+   r   r      s    &	B
CDr*   r   c                  J    e Zd ZU dZded<   dZded<   dZded<    ed	
      Zy)DatasetBasezDataset base model.r   nameNrr   r   zOptional[DataType]	data_typeTr   )	r$   r%   r&   r'   r(   r   r   r   rI   r)   r*   r+   r   r      s)    
I!%K%$(I!(T*Lr*   r   )remove_system_messagesconvert_to_openai_messageconvert_to_openai_toolremove_extra_fieldsextract_tools_from_runc                  &    e Zd ZU dZded<   ded<   y)DatasetTransformationz#Schema for dataset transformations.r   r   z%Union[DatasetTransformationType, str]transformation_typeNr#   r)   r*   r+   r   r      s    -
O>>r*   r   F)totalc                  8    e Zd ZU dZded<   ded<    ed      Zded	<   dZd
ed<   dZd
ed<   dZ	ded<   dZ
ded<   dZded<   dZded<   dZded<    ed      Zded<    ed      Zded<    ed      Zded<   	 	 	 d	 	 	 	 	 	 	 	 	 d fdZedd       Z xZS )DatasetzDataset ORM model.r   rO   r   rY   NrA   rx   ry   Optional[int]example_countsession_countlast_session_start_timerC   inputs_schemaoutputs_schemaz%Optional[list[DatasetTransformation]]transformationsrF   rr   rz   rN   r{   _public_pathc                    d|v r|j                  d      |d<   d|v r|j                  d      |d<   t        |   di | || _        || _        || _        y)r}   inputs_schema_definitionr   outputs_schema_definitionr   Nr)   )popre   rf   rz   r{   r   )r/   rz   r{   r   r~   rh   s        r+   rf   zDataset.__init__  sd     &/&,jj1K&LF?#&&0'-zz2M'NF#$"6""$(r*   c                   | j                   r~| j                  r| j                    | j                   S | j                  r1| j                    dt        | j                         d| j                   S | j                    d| j                   S y)r   r   r   N)rz   r   r{   r   rO   r8   s    r+   r   zDataset.url!  s}     >>  ..)$*;*;)<==..)S-A,B*TWWIVVnn%Zy99r*   )NNN)
rz   rr   r{   rN   r   rr   r~   r   r<   r   r   )r$   r%   r&   r'   r(   r   ry   r   r   r   r   r   r   rF   r   rz   r{   r   rf   r   r   rj   rk   s   @r+   r   r      s    H&+D&9K#9#'M='#'M='26/6.2M+2/3N,3=AO:A)-H&-*48I}8!,T!:J:"-d";L-; $(%)&*	) ) #) $	)
 ) 
)&  r*   r   c                  *    e Zd ZU dZdZded<   ded<   y)DatasetVersionz%Class representing a dataset version.Nr_   tagsr   as_of)r$   r%   r&   r'   r   r(   r)   r*   r+   r   r   -  s    / $D
$Or*   r   c                 
    di iS )NrF   r)   r)   r*   r+   _default_extrar   4  s    r*   c                  j   e Zd ZU dZded<   	 ded<   	 ded<   	 ded<   	 d	Zd
ed<   	  ee      Zded<   	 d	Z	ded<   	 d	Z
ded<   	 d	Zded<   	  ee      Zded<   	 d	Zded<   	 d	Zded<   	 d	Zded<   	 d	Zded<   	  ee      Zded<   	 ed$d       Zed%d       Zed&d        Zd! Z ed"#      Zy	)'RunBasea3  Base Run schema.

    A Run is a span representing a single unit of work or operation within your LLM app.
    This could be a single call to an LLM or chain, to a prompt formatting call,
    to a runnable lambda invocation. If you are familiar with OpenTelemetry,
    you can think of a run as a span.
    r   rO   r   r   r   
start_timerun_typeNrx   end_timerW   Optional[dict]extrarr   error
serializedOptional[list[dict]]eventsr   rD   rE   rN   reference_example_idparent_run_idr_   r   z-Union[Attachments, dict[str, AttachmentInfo]]r\   c                `    | j                   i | _         | j                   j                  di       S zRetrieve the metadata (if any).rF   )r   
setdefaultr8   s    r+   rF   zRunBase.metadatau  s,     ::DJzz$$Z44r*   c                8    | j                   j                  d      S )z"Retrieve the revision ID (if any).revision_id)rF   getr8   s    r+   r   zRunBase.revision_id|  s     }}  //r*   c                j    | j                   y| j                   | j                  z
  j                         S )zLatency in seconds.N)r   r   total_secondsr8   s    r+   latencyzRunBase.latency  s-     == />>@@r*   c                n    | j                    d| j                   d| j                   d| j                   dS )r   r   z, name='z', run_type='r   )rh   rO   r   r   r8   s    r+   r   zRunBase.__repr__  s3    ..!dggYhtyykt}}o]_``r*   T)rH   r<   dict[str, Any])r<   rN   )r<   Optional[float])r$   r%   r&   r'   r(   r   r   r   r   r   r   r   r   rD   rE   r   r   r   r\   r   rF   r   r   r   r   rI   r)   r*   r+   r   r   8  s-    	H(
I* M" $(H '-!.AE>A=E=;!%J%F#'F ' .FD.""G^"/+/./@$(M>(@ $D
$6AFBK> 
 5 5 0 0 A Aa d;Lr*   r   c                  P    e Zd ZU dZdZded<   	 dZded<   	 dZded<   	 dZd	ed
<   	 dZ	ded<   	 dZ
ded<   	 dZded<   	 dZded<   	 dZded<   	 dZded<   	 dZded<   	 dZded<   	 dZded<   	 dZded<   	 dZded<   	 dZded<   	 dZded<   	 dZded<   	 dZded<   	 d ed!<   	  ed"#      Zd$ed%<   	 dZd&ed'<   	  ed#      Zded(<   d3d4 fd)Zed5d*       Zed6d+       Z ed6d,       Z!ed7d-       Z"ed7d.       Z#ed8d/       Z$ed8d0       Z%ed9d1       Z&ed9d2       Z' xZ(S ):Runz$Run schema when loading from the DB.NrN   
session_idOptional[list[UUID]]child_run_idszOptional[list[Run]]
child_runsrC   feedback_statsrr   app_pathmanifest_idstatusr   prompt_tokenscompletion_tokenstotal_tokenszOptional[dict[str, int]]prompt_token_detailscompletion_token_detailsrx   first_token_timeOptional[Decimal]
total_costprompt_costcompletion_costzOptional[dict[str, Decimal]]prompt_cost_detailscompletion_cost_detailsparent_run_idsr   trace_id rA   r   dotted_orderOptional[bool]
in_datasetrz   c                   |j                  d      sd|j                  d      i|}|j                  dd      xs i }t        |   di |d|i || _        | j
                  j                  /| j
                  j                  t        j                        | _        | j                  E| j                  j                  /| j                  j                  t        j                        | _
        | j                  j                         s;| j                  s.| j
                  j                          | j                   | _        yyy)Initialize a Run object.r   rO   rD   Ntzinfor)   )r   r   re   rf   rz   r   r   replacer   rT   r   r   stripr   	isoformatrO   )r/   rz   r~   rD   rh   s       r+   rf   zRun.__init__  s   zz*% &**T"2=f=FHd+1r161&1"??!!)"oo55X\\5JDO==$)=)=)E MM111FDM  &&(1C1C#'??#<#<#>"?y ID 2D(r*   c                h    | j                   r&| j                  r| j                    | j                   S y)r   N)rz   r   r8   s    r+   r   zRun.url  s,     >>dmmnn%dmm_55r*   c                    | j                   S )zAlias for prompt_tokens.)r   r8   s    r+   input_tokenszRun.input_tokens  s     !!!r*   c                    | j                   S )zAlias for completion_tokens.)r   r8   s    r+   output_tokenszRun.output_tokens  s     %%%r*   c                    | j                   S )zAlias for prompt_cost.)r   r8   s    r+   
input_costzRun.input_cost  s     r*   c                    | j                   S )zAlias for completion_cost.)r   r8   s    r+   output_costzRun.output_cost  s     ###r*   c                    | j                   S )zAlias for prompt_token_details.)r   r8   s    r+   input_token_detailszRun.input_token_details   s     (((r*   c                    | j                   S )zAlias for output_token_details.)r   r8   s    r+   output_token_detailszRun.output_token_details  s     ,,,r*   c                    | j                   S )zAlias for prompt_cost_details.)r   r8   s    r+   input_cost_detailszRun.input_cost_details
  s     '''r*   c                    | j                   S )z"Alias for completion_cost_details.)r   r8   s    r+   output_cost_detailszRun.output_cost_details  s     +++r*   rQ   rz   rr   r~   r   r<   r   r   )r<   z
int | None)r<   zDecimal | None)r<   dict[str, int] | None)r<   zdict[str, Decimal] | None))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   rz   rf   r   r   r  r  r  r  r
  r  r  r  rj   rk   s   @r+   r   r     s   .!%J%-*.M'.4&*J#*M/3N,3&"Hm"7"&K&: FM .#'M='/'+}+/"&L-&15929 :>6= ,0(/-$(J!(M%)K")G)-O&-C8<5< =A9@ ,0N(/!NCb)L#)
 "&J%+*48I}8J   " " & &     $ $ ) ) - - ( ( , ,r*   r   c                  ,    e Zd ZdZdZdZdZdZdZdZ	dZ
y	)
RunTypeEnumz5(Deprecated) Enum for run types. Use string directly.toolchainr   	retriever	embeddingpromptparserN)r$   r%   r&   r'   r  r  r   r  r  r  r  r)   r*   r+   r  r    s(    ?DE
CIIFFr*   r  c                     e Zd ZU dZded<   ded<   ded<   ded	<   ded
<   ded<   ded<   ded<   ded<   ded<   ded<   ded<   ded<   ded<   ded<   ded<   ded<   ded<   ded<   ded<   ded<   d ed!<   ded"<   d#ed$<   y%)&RunLikeDictz&Run-like dictionary, for type-hinting.r   r   r  r   r   r   r   rD   rE   rx   r   r   rr   r   r   rN   r   r   r   r   r_   r   inputs_s3_urlsoutputs_s3_urlsrO   r   session_namer   input_attachmentsoutput_attachmentsr   r   r   Attachmentsr\   Nr#   r)   r*   r+   r  r  !  s    0
I  !!  
""##((%%&&Nr*   r  c                  0    e Zd ZU dZdZded<   	 dZded<   y)RunWithAnnotationQueueInfoz&Run schema with annotation queue info.Nrx   last_reviewed_timeadded_at)r$   r%   r&   r'   r%  r(   r&  r)   r*   r+   r$  r$  >  s"    0-1*1.#'H '3r*   r$  c                  Z    e Zd ZU dZded<   	  ee      Zded<   	 dZded	<   	 dZ	d
ed<   y)FeedbackSourceBasezBase class for feedback sources.

    This represents whether feedback is submitted from the API, model, human labeler,
        etc.
    r   typerW   rC   rF   NzOptional[Union[UUID, str]]user_idrr   	user_name)
r$   r%   r&   r'   r(   r   r   rF   r*  r+  r)   r*   r+   r(  r(  G  s?     I*).t)DH&D6*.G'.:#I}#<r*   r(  c                       e Zd ZU dZdZded<   y)APIFeedbackSourcezAPI feedback source.apizLiteral['api']r)  Nr$   r%   r&   r'   r)  r(   r)   r*   r+   r-  r-  X  s     D. r*   r-  c                       e Zd ZU dZdZded<   y)ModelFeedbackSourcezModel feedback source.modelzLiteral['model']r)  Nr/  r)   r*   r+   r1  r1  ^  s     $D
$r*   r1  c                      e Zd ZdZdZ	 dZy)FeedbackSourceTypezFeedback source type.r.  r2  N)r$   r%   r&   r'   APIMODELr)   r*   r+   r4  r4  d  s    
C2E"r*   r4  c                     e Zd ZU dZded<   	 dZded<   	 dZded<   	 ded	<   	 ded
<   	 ded<   	 dZded<   	 dZded<   	 dZ	ded<   	 dZ
ded<   	 dZded<   	 dZded<   	 dZded<   	 dZded<   	 dZded<   	 dZded<   	  ed      Zy)FeedbackBasezFeedback schema.r   rO   Nrx   rY   ry   rN   run_idr   r   key
SCORE_TYPEscore
VALUE_TYPEvaluerr   commentzUnion[str, dict, None]
correctionOptional[FeedbackSourceBase]feedback_sourcer   r   comparative_experiment_idfeedback_group_idr   r   Tr   )r$   r%   r&   r'   r(   rY   ry   r<  r>  r?  r@  rB  r   r   rC  rD  r   r   rI   r)   r*   r+   r8  r8  m  s    H(%)J"),&*K#*2<>	HAE:+E:Q!G]!2)-J&-!48O18%!%J%T%)J")E04~4X(,~,1 !E> 'T*Lr*   r8  c                  (    e Zd ZU dZded<   	 ded<   y)FeedbackCategoryz+Specific value and label pair for feedback.floatr>  rr   labelNr#   r)   r*   r+   rF  rF    s    5LCNr*   rF  c                  @    e Zd ZU dZded<   	 ded<   	 ded<   	 ded<   y	)
FeedbackConfigz:Represents _how_ a feedback value ought to be interpreted.z0Literal['continuous', 'categorical', 'freeform']r)  r   minmaxz Optional[list[FeedbackCategory]]
categoriesNr#   r)   r*   r+   rJ  rJ    s,    D
::	4	400@r*   rJ  c                  <    e Zd ZU dZded<   	 dZded<   	 dZded<   y)	FeedbackCreatez"Schema used for creating feedback.r(  rB  NzOptional[FeedbackConfig]feedback_configr   r   )r$   r%   r&   r'   r(   rP  r   r)   r*   r+   rO  rO    s&    ,''%04O-4% E> r*   rO  c                  B    e Zd ZU dZded<   ded<   	 ded<   	 dZded	<   y)
FeedbackzSchema for getting feedback.r   rO   r   rY   ry   NrA  rB  )r$   r%   r&   r'   r(   rB  r)   r*   r+   rR  rR    s*    &H,248O182r*   rR  c                       e Zd ZU dZded<   	  ed       Zded<   	 dZd	ed
<   	 dZded<   	 dZ	ded<   	 dZ
ded<   	 ded<   	 ded<   	  ed      Zded<   dd fdZedd       Zedd       Zedd       Z xZS )TracerSessionzbTracerSession schema for the API.

    Sessions are also referred to as "Projects" in the UI.
    r   rO   c                 H    t        j                  t        j                        S rQ   rR   r)   r*   r+   rU   zTracerSession.<lambda>  rV   r*   rW   r   r   Nrx   r   rr   r   r   rC   r   	tenant_idrN   reference_dataset_idrA   rz   c                    t        |   di | || _        | j                  j                  0| j                  j                  t        j                        | _        yy)r   Nr   r)   )re   rf   rz   r   r   r   r   rT   )r/   rz   r~   rh   s      r+   rf   zTracerSession.__init__  sL    "6""??!!)"oo55X\\5JDO *r*   c                l    | j                   r(| j                    d| j                   d| j                   S y)r   r   /projects/p/N)rz   rV  rO   r8   s    r+   r   zTracerSession.url  s3     >>nn%S(8TWWINNr*   c                X    | j                   d| j                   vri S | j                   d   S r   r   r8   s    r+   rF   zTracerSession.metadata  -     ::4::!=Izz*%%r*   c                X    | j                   d| j                   vrg S | j                   d   S )zRetrieve the tags (if any).r   r\  r8   s    r+   r   zTracerSession.tags  s-     ::tzz!9Izz&!!r*   rQ   r  r   r   r<   r   )r$   r%   r&   r'   r(   r   r   r   r   r   r   r   rz   rf   r   r   rF   r   rj   rk   s   @r+   rT  rT    s    
 	H  1STJT+#'H ')!%K%)D-"&*E#*)O0((J*48I}8K   & & " "r*   rT  c                     e Zd ZU dZdZded<   	 dZded<   	 dZded<   	 dZded<   	 dZ	ded	<   	 dZ
ded
<   	 dZded<   	 dZded<   	 dZded<   	 dZded<   	 dZded<   	 dZded<   	 dZded<   	 dZded<   	 dZded<   	 dZded<   y)TracerSessionResultzqA project, hydrated with additional information.

    Sessions are also referred to as "Projects" in the UI.
    Nr   	run_countOptional[timedelta]latency_p50latency_p99r   r   r   rx   last_run_start_timerC   r   session_feedback_statsOptional[list[dict[str, Any]]]
run_facetsr   r   r   r   first_token_p50first_token_p99r   
error_rate)r$   r%   r&   r'   rb  r(   rd  re  r   r   r   rf  r   rg  ri  r   r   r   rj  rk  rl  r)   r*   r+   ra  ra    s    
  $I}#,'+K$+?'+K$+6"&L-&=#'M='D'+}+H.2+28/3N,3)7;4;115J.5-$(J!(M%)K")G)-O&-C+/O(/G+/O(/>"&J&)r*   ra  c                  <    e Zd ZU dZded<   	 ded<   	 edd       Zy)	BaseMessageLikez7A protocol representing objects similar to BaseMessage.r   contentzdict[Any, Any]additional_kwargsc                     y)z,Type of the Message, used for serialization.Nr)   r8   s    r+   r)  zBaseMessageLike.type*  s    r*   Nr<   r   )r$   r%   r&   r'   r(   r   r)  r)   r*   r+   rn  rn  !  s(    AL%%%C; ;r*   rn  c                  4    e Zd ZU dZded<   	 ded<   	 ded<   y)DatasetShareSchemaz*Represents the schema for a dataset share.r   r@   share_tokenr   r   Nr#   r)   r*   r+   rt  rt  /  s    4 ,	H(r*   rt  c                  L    e Zd ZU dZded<   	 ded<   	 ded<   	 ded<   	 d	ed
<   y)AnnotationQueueRubricItemzRepresents a rubric item assigned to an annotation queue.

    Links a feedback config to a queue with optional per-queue customization.
    r   feedback_keyrr   r   zOptional[dict[str, str]]value_descriptionsscore_descriptionsr   is_requiredNr#   r)   r*   r+   rw  rw  :  s6    
 =C00700(Nr*   rw  c                      e Zd ZU dZded<   	 ded<   	 dZded<   	  ed	 
      Zded<   	  ed 
      Zded<   	 ded<   y)AnnotationQueuezRepresents an annotation queue.r   rO   r   r   Nrr   r   c                 H    t        j                  t        j                        S rQ   rR   r)   r*   r+   rU   zAnnotationQueue.<lambda>U  rV   r*   rW   r   rY   c                 H    t        j                  t        j                        S rQ   rR   r)   r*   r+   rU   zAnnotationQueue.<lambda>W  rV   r*   
updated_atrV  )	r$   r%   r&   r'   r(   r   r   rY   r  r)   r*   r+   r}  r}  L  sP    )H8
I+!%K%: 1STJT> 1STJTCODr*   r}  c                       e Zd ZU dZdZded<   y)AnnotationQueueWithDetailsz,Represents an annotation queue with details.Nrr   rubric_instructions)r$   r%   r&   r'   r  r(   r)   r*   r+   r  r  ]  s    6)--;r*   r  c                  X    e Zd ZU dZded<   	 ded<   	 ded<   	 ded<   	 ded<   	 d	ed
<   y)BatchIngestConfigz"Configuration for batch ingestion.r]   use_multipart_endpointr;   scale_up_qsize_triggerscale_up_nthreads_limitscale_down_nempty_trigger
size_limitr   size_limit_bytesNr#   r)   r*   r+   r  r  d  s:    ,  D<  7""AO/##8r*   r  c                  P    e Zd ZU dZdZded<   	 dZded<   	 dZded	<   	 dZd
ed<   y)LangSmithInfoz'Information about the LangSmith server.r   r   versionNrx   license_expiration_timezOptional[BatchIngestConfig]batch_ingest_configrC   instance_flags)	r$   r%   r&   r'   r  r(   r  r  r  r)   r*   r+   r  r  u  s;    1GS.26/6+7;4;/3N,3r*   r  c                  D    e Zd ZU dZded<   	 ded<   	 ded<   	 dZded	<   y)
LangSmithSettingsz"Settings for the LangSmith tenant.r   rO   display_namer   rY   Nrr   tenant_handle)r$   r%   r&   r'   r(   r  r)   r*   r+   r  r    s)    ,G)*#'M='r*   r  c                  4    e Zd ZU dZded<   	 ded<   	 ded<   y)	FeedbackIngestTokenz2Represents the schema for a feedback ingest token.r   rO   r   r   r   
expires_atNr#   r)   r*   r+   r  r    s    <H.	H3+r*   r  c                  4    e Zd ZU dZded<   	 ded<   	 ded<   y)	RunEventzRun event schema.r   r   zUnion[datetime, str]timerC   r~   Nr#   r)   r*   r+   r  r    s    
I
$$,r*   r  c                  4    e Zd ZU dZded<   	 ded<   	 ded<   y)TimeDeltaInputzTimedelta input schema.r;   dayshoursminutesNr#   r)   r*   r+   r  r    s    !
IJLr*   r  c                  4    e Zd ZU dZded<   	 ded<   	 ded<   y)DatasetDiffInfoz;Represents the difference information between two datasets.z
list[UUID]examples_modifiedexamples_addedexamples_removedNr#   r)   r*   r+   r  r    s     E!!=:  <r*   r  c                      e Zd ZU dZded<   	 dZded<   	 dZded<   	 ded<   	 d	ed
<   	 d	ed<   	 ded<   	 dZded<   	 dZded<   	 dZ	ded<   	 e
dd       Zy)ComparativeExperimentzRepresents a comparative experiment.

    This information summarizes evaluation results comparing
    two or more models on a given dataset.
    r   rO   Nrr   r   r   rV  r   rY   ry   rW  rC   r   r   experiments_infor   c                X    | j                   d| j                   vri S | j                   d   S r   r\  r8   s    r+   rF   zComparativeExperiment.metadata  r]  r*   r   )r$   r%   r&   r'   r(   r   r   r   r  r   r   rF   r)   r*   r+   r  r    s     	H?D-:!%K%@OGDJJ&*E#*?-1*1\/3N,3P& &r*   r  c                  L    e Zd ZU dZded<   	 ded<   	 ded<   	 ded<   	 ded	<   y
)PromptCommitz$Represents a Prompt with a manifest.r   ownerrepocommit_hashr   manifestz
list[dict]examplesNr#   r)   r*   r+   r  r    s0    .J0
I!(%r*   r  c                      e Zd ZU dZded<   	 ded<   	 ded<   	 dZded	<   	 dZded
<   	 dZded<   	 dZded<   	 dZ	ded<   	 dZ
ded<   	  ee      Zded<   	 dZded<   	 dZded<   	 dZded<   y)ListedPromptCommitz;Represents a listed prompt commit with associated metadata.r   rO   r   r  r  NrN   r   repo_id	parent_idrr   r  rx   rY   r  rW   r   example_run_idsr   r   num_downloads	num_viewsparent_commit_hash)r$   r%   r&   r'   r(   r   r  r  r  rY   r  r   r   r  r  r  r  r)   r*   r+   r  r    s    EH6J)
I3"&K&O"G^"5 $I~$8!%K%*%)J")=%)J")B,1$,GO)GH#$M=$> I} :(,,1r*   r  c                  8   e Zd ZU dZded<   	 dZded<   	 dZded<   	 ded<   	 ded	<   	 d
ed<   	 d
ed<   	 ded<   	 ded<   	 ded<   	 dZded<   	 dZded<   	 ded<   	 ded<   	 ded<   	 ded<   	 ded<   	 dZ	ded<   	 dZ
ded<   	 ded<   	 dZded<   	 dZded<   y) Promptz"Represents a Prompt with metadata.r   repo_handleNrr   r   readmerO   rV  r   rY   r  r]   	is_publicis_archivedr   r   original_repo_idupstream_repo_idr  	full_namer;   	num_likesr  r  r   liked_by_auth_userlast_commit_hashnum_commitsoriginal_repo_full_nameupstream_repo_full_name)r$   r%   r&   r'   r(   r   r  r  r  r  r  r  r  r)   r*   r+   r  r    s    ,!!%K%( FM #GN,*-O')
O.&*m*3&*m*30N<N"N)--@&*m*& -1]1:-1]1:r*   r  c                  (    e Zd ZU dZded<   	 ded<   y)ListPromptsResponsez A list of prompts with metadata.zlist[Prompt]reposr;   r   Nr#   r)   r*   r+   r  r  K  s    *J&r*   r  c                  &    e Zd ZdZdZ	 dZ	 dZ	 dZy)PromptSortFieldz$Enum for sorting fields for prompts.r  r  r  r  N)r$   r%   r&   r'   r  r  r  r  r)   r*   r+   r  r  T  s%    .#MIJIr*   r  c                  X    e Zd ZU dZded<   	 ded<   	 ded<   	 ded<   	 ded<   	 ded<   y	)
InputTokenDetailsz~Breakdown of input token counts.

    Does *not* need to sum to full input token count. Does *not* need to have all keys.
    r;   audiocache_creation
cache_readcache_read_over_200kephemeral_5m_input_tokensephemeral_1h_input_tokensNr#   r)   r*   r+   r  r  a  sG    
 J O ""S""Qr*   r  c                  (    e Zd ZU dZded<   	 ded<   y)OutputTokenDetailszBreakdown of output token counts.

    Does *not* need to sum to full output token count. Does *not* need to have all keys.
    r;   r  	reasoningNr#   r)   r*   r+   r  r  |  s    
 JNr*   r  c                  4    e Zd ZU dZded<   	 ded<   	 ded<   y)InputCostDetailszvBreakdown of input token costs.

    Does *not* need to sum to full input cost. Does *not* need to have all keys.
    rG  r  r  r  Nr#   r)   r*   r+   r  r    s)    
 L% r*   r  c                  (    e Zd ZU dZded<   	 ded<   y)OutputCostDetailszxBreakdown of output token costs.

    Does *not* need to sum to full output cost. Does *not* need to have all keys.
    rG  r  r  Nr#   r)   r*   r+   r  r    s    
 L&r*   r  c                      e Zd ZU dZded<   	 ded<   	 ded<   	 ded<   	 ded	<   	 d
ed<   	 d
ed<   	 d
ed<   	 ded<   	 ded<   y)UsageMetadatazUsage metadata for a message, such as token counts.

    This is a standard representation of token usage that is consistent across models.
    r;   r  r  r   zNotRequired[InputTokenDetails]r
  zNotRequired[OutputTokenDetails]r  zNotRequired[float]r  r  r   zNotRequired[InputCostDetails]r  zNotRequired[OutputCostDetails]r  Nr#   r)   r*   r+   r  r    sk    
 JPA77 :9 #"'##(""'55/770r*   r  c                      e Zd ZU dZded<   	 ded<   	 ded<   	 ded<   	 ded	<   	 d
ed<   	 d
ed<   	 d
ed<   	 ded<   	 ded<   y)ExtractedUsageMetadatazUsage metadata dictionary extracted from a run.

    Should be the same as UsageMetadata, but does not require all
    keys to be present.
    r;   r  r  r   r  r
  r  r  rG  r  r  r   r  r  r  r  Nr#   r)   r*   r+   r  r    sc     33****,,+'('((/**0r*   r  c                  4    e Zd ZU dZded<   	 ded<   	 ded<   y)	UpsertExamplesResponsezCResponse object returned from the upsert_examples_multipart method.r;   countr   example_idszNotRequired[str | None]r   Nr#   r)   r*   r+   r  r    s    MJ45""cr*   r  c                  .    e Zd ZU dZ ee      Zded<   y)ExampleWithRunszExample with runs.rW   z	list[Run]runsN)r$   r%   r&   r'   r   r   r  r(   r)   r*   r+   r  r    s    D1D)1"r*   r  c                      e Zd ZU dZded<   	 ded<   	 ded<   	 ded<   	 ded<   	 ded	<   	 d
ed<   	 ded<   	 ded<   	 ded<   	 ded<   	 ded<   	 ded<   	 ded<   y)ExperimentRunStatsz!Run statistics for an experiment.r   rb  rc  rd  re  r   r   r   rx   rf  rh  ri  r   r   r   r   rj  rk  r   rl  Nr#   r)   r*   r+   r  r    s    +,$$?$$6=  D$$H++8..-!!M""G&&C((G((>)r*   r  c                  4    e Zd ZU dZded<   	 ded<   	 ded<   y)	ExperimentResultszResults container for experiment data with stats and examples.

    Breaking change in v0.4.32:
        The 'stats' field has been split into 'feedback_stats' and 'run_stats'.
    r   r   r  	run_statszIterator[ExampleWithRuns]examples_with_runsNr#   r)   r*   r+   r  r  $  s!     1!!611r*   r  c                  v    e Zd ZU dZded<   ded<   ded<   dZded	<   ded
<   ded<   ded<   edd       ZddZy)InsightsReportzHAn Insights Report created by the Insights Agent over a tracing project.
UUID | strrO   r   r   r   N
str | Noner   
project_idhost_urlrV  c           	         | j                    dt        | j                         dt        | j                         dt        | j                         S )z1URL to view this Insights Report in LangSmith UI.r   rZ  z?tab=4&clusterJobId=)r  r   rV  r  rO   r8   s    r+   linkzInsightsReport.link=  sH     --C$7#8SEYDZZnorswszszo{n|}}r*   c                <    d| j                    d| j                   dS )Nz	<a href="z2", target="_blank" rel="noopener">InsightsReport('z')</a>)r  r   r8   s    r+   _repr_html_zInsightsReport._repr_html_B  s%    499+%XY]YbYbXccjkkr*   rr  )	r$   r%   r&   r'   r(   r   r   r  r  r)   r*   r+   r  r  2  sI    RN
IKE:M~ ~lr*   r  c                  Z    e Zd ZU dZded<   dZded<   dZded<   d	ed
<   ded<   dZded<   y)InsightsHighlightedTracez2A trace highlighted in an insights report summary.r  r9  NUUID | str | None
cluster_idr  cluster_namer;   rankr   highlight_reasonsummary)r$   r%   r&   r'   r(   r  r  r  r)   r*   r+   r  r  F  s5    <$(J!(#L*#
IGZr*   r  c                  f    e Zd ZU dZ ee      Zded<   dZded<    ee      Z	ded	<   dZ
d
ed<   y)InsightsSummaryReportzIHigh-level summary of an insights job: key points and highlighted traces.rW   r   
key_pointsNr  titlezlist[InsightsHighlightedTrace]highlighted_traceszdatetime | NonerY   )r$   r%   r&   r'   r   r   r  r(   r  r  rY   r)   r*   r+   r   r   Q  s9    S!$7J	7E:9>t9T6T"&J&r*   r   c                  n    e Zd ZU dZded<   dZded<   ded<   d	ed
<   d	ed<   dZded<   ded<   dZded<   y)InsightsClusterz/A single cluster of runs in an insights report.r  rO   Nr  r  r;   levelr   r   r   r  parent_namenum_runsdict[str, Any] | Nonestats)r$   r%   r&   r'   r(   r  r  r
  r)   r*   r+   r  r  Z  s?    9N#'I 'J
I"K"M#'E 'r*   r  )r  c               b   ddl m} g }d}d}|||d}|t        |      |d<   | j                  dd| d	| d
|      }	|j	                  |	       |	j                         }
|
j                  dg       xs g }|j                  |       |
j                  d      }|d}nt        |      }|sd}||S )zHFetch runs for an Insights job, optionally filtered to a single cluster.r   )utilsd   N)limitr4   r  GETz
/sessions/z
/insights/z/runs)paramsr  r4   )		langsmithr  r   request_with_retriesraise_for_status_with_textjsonr   extendr;   )clientr   job_idr  ls_utilsall_runsr  next_offsetr  respbodybatchreturned_offsets                r+   _fetch_insights_runsr  g  s     ,%'HEK

!+0K!H!#&z?F< **Jvhe< + 

 	++D1yy{$*((8,"Ko.K") 
!* Or*   c                  <    e Zd ZdZdZd	dZd
dZddZddZddZ	y)_ClusterWithTraceszYCluster wrapper that can load its traces from the API. Returned by report.clusters[name]._cluster_reportc                     || _         || _        y rQ   r"  )r/   clusterreports      r+   rf   z_ClusterWithTraces.__init__  s    r*   c                .    t        | j                  |      S rQ   )getattrr#  )r/   r   s     r+   __getattr__z_ClusterWithTraces.__getattr__  s    t}}d++r*   c                    t        t        t        | j                              t        t        | j                              z        S rQ   )r   setdirrh   r#  r8   s    r+   __dir__z_ClusterWithTraces.__dir__  s.    CDNN+,s3t}}3E/FFGGr*   c                6    d| j                   j                  dS )Nz_ClusterWithTraces(name=))r#  r   r8   s    r+   r   z_ClusterWithTraces.__repr__  s    )$--*<*<)?qAAr*   c                
   t        | j                  dd      }|t        d      t        | j                  dd      }t        | j                  dd      }||t        d      t        |||| j                  j
                        S )z.Fetch run dicts for this cluster from the API._clientNzMReport not attached to a client; get reports via Client.get_insights_report()_session_id_job_idzReport missing session/job ids)r  r   r  r  )r)  r$  
ValueErrorr  r#  rO   r/   r  r   r  s       r+   load_tracesz_ClusterWithTraces.load_traces  s    y$7>_  T\\=$?
y$7=>>#!}}''	
 	
r*   N)r&  r  r'  InsightsReportResultr<   r   )r   r   r<   r   r_  rr  )r<   list[dict[str, Any]])
r$   r%   r&   r'   	__slots__rf   r*  r.  r   r7  r)   r*   r+   r!  r!    s%    c'I,HB
r*   r!  c                  F    e Zd ZdZdZ	 	 	 	 	 	 d	dZd
dZd ZddZddZ	y)_ClustersMapzWList-like map of clusters by name. Supports report.clusters['name'] and .load_traces().)	_clustersr$  c                2    t        |      | _        || _        y rQ   )r   r=  r$  )r/   clustersr'  s      r+   rf   z_ClustersMap.__init__  s    
 hr*   c           	     "   t        |t              r| j                  |   }nU| j                  D ci c]  }|j                  | }}||vr(t	        d|dt        |j                                      ||   }t        || j                        S c c}w )NzCluster z not found; available: )	
isinstancer;   r=  r   KeyErrorr   keysr!  r$  )r/   r:  r&  cby_names        r+   __getitem__z_ClustersMap.__getitem__  s    c3nnS)G*...9Qqvvqy9G9'!sg%<T',,.=Q<RS  clG!'4<<88 :s   Bc                .      fd j                   D        S )Nc              3  J   K   | ]  }t        |j                          y wrQ   )r!  r$  ).0rD  r/   s     r+   	<genexpr>z(_ClustersMap.__iter__.<locals>.<genexpr>  s     L"1dll3Ls    #)r=  r8   s   `r+   __iter__z_ClustersMap.__iter__  s    LT^^LLr*   c                ,    t        | j                        S rQ   lenr=  r8   s    r+   __len__z_ClustersMap.__len__  s    4>>""r*   c                4    dt        | j                         dS )Nz_ClustersMap(n_clusters=r0  rM  r8   s    r+   r   z_ClustersMap.__repr__  s    )#dnn*=)>a@@r*   N)r?  list[InsightsCluster]r'  r8  r<   r   )r:  z	str | intr<   r!  )r<   r;   rr  )
r$   r%   r&   r'   r:  rf   rF  rK  rO  r   r)   r*   r+   r<  r<    sA    a(I' % 
	
9M#Ar*   r<  c                  h   e Zd ZU dZded<   ded<   ded<   dZded	<   dZded
<   dZded<   dZded<   dZ	ded<   dZ
ded<   dZded<    ee      Zded<   dZded<    ee      Zded<   	  ed      Zded<    ed      Zded<    ed      Zded<    ed !      Z	 	 	 	 	 	 	 	 d%d"Zd&d#Zd&d$Zy)'r8  zVFull result of fetching an Insights report (job + clusters + summary + optional runs).r  rO   r   r   r   Nzdatetime | str | Noner   r   rY   r	  rF   r  shaper  r   r  	config_idrW   rQ  r?  zInsightsSummaryReport | Noner'  r9  r  rA   r   r2  r3  r4  allowr\  c                   t         j                  | d|       t         j                  | dt        |             t         j                  | dt        |             t         j                  | dt        | j                  |              y)zXAttach client and ids so clusters can load traces. Called by Client.get_insights_report.r2  r3  r4  r?  N)object__setattr__r   r<  r?  r6  s       r+   _attach_clientz#InsightsReportResult._attach_client  sd     	4F34J@4CK8-	
r*   c                4   | j                   }t        |d      r!t        j                  | d|j                         	 | j                  d      t        |d      rt        j                  | d|       S S # t        |d      rt        j                  | d|       w w xY w)z?Return the report as a JSON-serializable dict (raw JSON shape).r=  r?  r  mode)r?  hasattrrW  rX  r=  
model_dump)r/   clusters_vals     r+   to_jsonzInsightsReportResult.to_json  s    }}<-tZ1G1GH	C???/|[1""4\B 2w|[1""4\B 2s   A1 1&Bc                &    | j                  d      S )zHReturn the report as a JSON-serializable dict (e.g. for saving to file).r  r[  )r^  r8   s    r+   model_dump_json_dictz)InsightsReportResult.model_dump_json_dict  s    F++r*   )r  r   r   
str | UUIDr  rc  r<   r   r   )r$   r%   r&   r'   r(   r   r   rY   rF   rS  r   rT  r   r   r?  r'  r  r   r2  r3  r4  r   rI   rY  r`  rb  r)   r*   r+   r8  r8    s    `N
IK(,J%,&*H#*(,J%,&*H#*#'E 'E:#'I '&+D&AH#A+/F(/!&t!<D
<8t,GS,"40K0t,GS,G,L

 
 	

 

 	C,r*   r8  c                  0    e Zd ZU dZded<   ded<   ded<   y)	FeedbackFormulaWeightedVariablezBA feedback key and weight used when calculating feedback formulas.zLiteral['weighted_key']	part_typerG  weightz#Annotated[str, Field(min_length=1)]r:  Nr#   r)   r*   r+   re  re    s    L&&M	,,r*   re  c                  b    e Zd ZU dZdZded<   dZded<   ded<   ded	<    ed
dd      Zded<   y)FeedbackFormulaCreatez,Schema used for creating a feedback formula.NrN   r@   r   r   rx  Literal['sum', 'avg']aggregation_type.   2   
min_length
max_length%list[FeedbackFormulaWeightedVariable]formula_parts)	r$   r%   r&   r'   r@   r(   r   r   rr  r)   r*   r+   ri  ri    s>    6!%J%!%J%++;@b<M8 r*   ri  c                  F    e Zd ZU dZded<   ded<    eddd	      Zd
ed<   y)FeedbackFormulaUpdatez,Schema used for updating a feedback formula.r   rx  rj  rk  .rl  rm  rn  rq  rr  N)r$   r%   r&   r'   r(   r   rr  r)   r*   r+   rt  rt  !  s*    6++;@b<M8 r*   rt  c                  0    e Zd ZU dZded<   ded<   ded<   y)FeedbackFormulaz%Schema for getting feedback formulas.r   rO   r   rY   ry   Nr#   r)   r*   r+   rv  rv  +  s    /Hr*   rv  c                  P    e Zd ZU dZded<   	 ded<   	 ded<   	 ded	<   	 d
Zded<   y
)FeedbackConfigSchemaa  Represents a feedback configuration for a tenant's feedback key.

    Feedback configurations define how feedback with a given key should be
    interpreted, including its type (continuous, categorical, or freeform),
    scoring bounds, and valid categories.
    r   rx  rJ  rP  r   rV  r   ry   Nr   is_lower_score_better)r$   r%   r&   r'   r(   ry  r)   r*   r+   rx  rx  3  s:     A##HOE=,0>0Kr*   rx  )
r  r   r   rc  r  rc  r  zstr | UUID | Noner<   r9  )zr'   
__future__r   collections.abcr   r   r   r   decimalr   enumr	   pathlibr
   typingr   r   r   r   r   r   r   uuidr   pydanticr   r   r   r   r   r   r   typing_extensionsr   r   r   r;  r   r   r=  r   tupler=   r"  r-   r?   rK   _AttachmentLikerM   ExampleUploadWithAttachmentsrm   ro   rt   r   r   r   ExampleUpdateWithAttachmentsr   r   DatasetTransformationTyper   r   r   r   r   r   r  r  r$  r(  r-  r1  r4  r8  rF  rJ  rO  rR  rT  ra  rn  rt  rw  r}  r  r  r  model_rebuildr  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<  r8  re  ri  rt  rv  rx  r)   r*   r+   <module>r     s   $ " $ 2 2         > =:y+t;<
4j)[$FG
 * 3eCJ/U39=MMNNO 8   I) Ii 
 sEz!2E#t)4DD
!I !&  - = Y 'bk 'bTK I !I !&  - sD +) + $ ?IU ?-k -`Y T<i T<nC,' C,L	#t 	)5 :4 4= ="!* !%, %# #&+9 &+ROy O@Ye @!\ !	3| 	33"I 3"l%*- %*P 
;h 
; 
;)% )O	 O$Ei E"< <9	 9"	4I 	4    	(	 	(,) ,-y -Ye =i =!&I !&H 9  (2 (2V.;Y .;b') '
c4 
R	 R6%  y *	  1I 1D1Ye 1:dY d#g #* *B2	 2lY l(y 'I '
(i 
($ %)""" "
 "" "J#
 #
L A  AF5,9 5,p-i -	I 	I + L9 Lr*   