
    j4                       d dl mZ d dlZd dl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mZ ddl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mZmZ  edd      Zd9dZej>                   G d d             Z ej>                   G d de              Z!ej>                   G d de              Z"ej>                   G d de              Z#ej>                   G d de              Z$ej>                   G d de              Z%ej>                   G d de              Z&ej>                   G d de&             Z'ej>                   G d d e&             Z(ej>                   G d! d"e%             Z)ej>                   G d# d$e              Z*ej>                   G d% d&e              Z+ej>                   G d' d(e              Z,ej>                   G d) d*e              Z-ej>                   G d+ d,e              Z.ej>                   G d- d.e              Z/ej>                   G d/ d0e              Z0ej>                   G d1 d2e              Z1ej>                   G d3 d4e              Z2	 	 	 	 	 	 d:d5Z3	 	 	 	 	 	 d;d6Z4	 	 	 	 	 	 d<d7Z5	 	 	 	 	 	 d=d8Z6y)>    )annotationsN)field)	OptionalAnyDictListUnionLiteralSetTypeTypeVar   )arguments_utils)	constants   )pydantic_utilities)
span_writetrace_write)SpanTypeErrorInfoDictLLMProviderAttachmentEntityTypeTBaseMessage)boundc                   t        j                  |       D ci c]  }|j                  | }}|j                         D ch c]  \  }}|j                  s| }}}|j                         D ci c]  \  }}||v s|| }}}|j                         D ci c]  \  }}||v s||vs|| }	}} | di |}
|	j                         D ]  \  }}t        |
||        |
S c c}w c c}}w c c}}w c c}}w )zDeserialize a message from a dict.

    Handles fields with init=False by filtering them from constructor args
    and restoring them after object creation.
     )dataclassesfieldsnameitemsinitsetattr)message_classdataffields_infor    init_fieldskv	init_datanon_init_dataobjkeyvalues                y/Users/manta/Documents/Projects/TheRoad-I1/backend/.venv/lib/python3.12/site-packages/opik/message_processing/messages.pyfrom_db_message_dictr1      s    '2&8&8&GH&G16619&GKH'2'8'8':E':GD!aff4':KE #'**,C,$!Q!{2BA,IC%Ak)9a{>R1  
 
$)
$C $))+
US%  , J! IE Ds/   C!C&C&0C,=C,C2%C2*C2c                      e Zd ZU  edd      Zded<    edd      Zded<    edd	      Zd
ed<    edd       Zded<   ddZ	ddZ
y	)r   Fg        )r"   defaultfloatdelivery_timer   intdelivery_attemptsNzOptional[int]
message_idstrmessage_typec                ~    i | j                   }ddt        j                  ddg}|D ]  }|j                  |d         |S )Nr5   r7   r8   r:   )__dict__r   MARKER_ATTRIBUTE_NAMEpop)selfr%   attributes_to_remove	attributes       r0   as_payload_dictzBaseMessage.as_payload_dict3   sN     !$-- ++ 
 .IHHY% .    c                    i | j                   S N)r<   r?   s    r0   as_db_message_dictzBaseMessage.as_db_message_dictB   s     $--  rC   returnDict[str, Any])__name__
__module____qualname__r   r5   __annotations__r7   r8   r:   rB   rG   r   rC   r0   r   r   +   sQ     eS9M59"q9s9 %5$ ?J?5-@L#@!rC   c                       e Zd ZU 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 ZddZd fdZedd       Z xZ	S )CreateTraceMessager9   trace_idproject_nameOptional[str]r    datetime.datetime
start_timeOptional[datetime.datetime]end_timeOptional[Dict[str, Any]]inputoutputmetadataOptional[List[str]]tagsOptional[ErrorInfoDict]
error_info	thread_idlast_updated_atc                    | j                   $t        j                  | j                         | _         | j                  %t        j                  | j                        | _        y y rE   rY   r   recursive_shallow_copyrZ   rF   s    r0   __post_init__z CreateTraceMessage.__post_init__W   G    ::!(??

KDJ;;")@@MDK #rC   c                L    t         |          }|j                  d      |d<   |S NrQ   idsuperrB   r>   r?   r%   	__class__s     r0   rB   z"CreateTraceMessage.as_payload_dict]   '    w&(XXj)T
rC   c                 
    h dS N>   rY   rZ   r[   r   r   rC   r0   fields_to_anonymizez&CreateTraceMessage.fields_to_anonymizeb       ..rC   rI   NonerH   rI   zSet[str]
rK   rL   rM   rN   r:   re   rB   staticmethodrq   __classcell__rm   s   @r0   rP   rP   F   sn    M
!!))##$$&&
''00'LN
 / /rC   rP   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 ZddZd fdZedd       Z	 xZ
S )UpdateTraceMessagez[
    "Not recommended to use. Kept only for low level update operations in public API"
    r9   rQ   rR   rV   rW   rX   rY   rZ   r[   r\   r]   r^   r_   rS   r`   c                    | j                   $t        j                  | j                         | _         | j                  %t        j                  | j                        | _        y y rE   rc   rF   s    r0   re   z UpdateTraceMessage.__post_init__y   rf   rC   c                L    t         |          }|j                  d      |d<   |S rh   rj   rl   s     r0   rB   z"UpdateTraceMessage.as_payload_dict   rn   rC   c                 
    h dS rp   r   r   rC   r0   rq   z&UpdateTraceMessage.fields_to_anonymize   rr   rC   rs   rH   ru   rK   rL   rM   __doc__rN   r:   re   rB   rw   rq   rx   ry   s   @r0   r{   r{   g   sc     M))##$$&&
'''LN
 / /rC   r{   c                       e Zd ZU 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 Zd!dZd" fdZed#d        Z xZ	S )$CreateSpanMessager9   span_idrQ   rR   rS   parent_span_idr    rT   rU   rV   rW   rX   rY   rZ   r[   r\   r]   r   typeOptional[Dict[str, int]]usagemodel!Optional[Union[LLMProvider, str]]providerr^   r_   Optional[float]
total_costra   c                    | j                   $t        j                  | j                         | _         | j                  %t        j                  | j                        | _        y y rE   rc   rF   s    r0   re   zCreateSpanMessage.__post_init__   rf   rC   c                t    t         |          }|j                  d      |d<   |j                  d      |d<   |S Nr   ri   r   total_estimated_costrj   rl   s     r0   rB   z!CreateSpanMessage.as_payload_dict   ;    w&(XXi(T
'+xx'=#$rC   c                 
    h dS rp   r   r   rC   r0   rq   z%CreateSpanMessage.fields_to_anonymize   rr   rC   rs   rH   ru   rv   ry   s   @r0   r   r      s    LM!!
!!))##$$&&

N##//''00&LN / /rC   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 ZddZd fdZedd       Z	 xZ
S )UpdateSpanMessagezONot recommended to use. Kept only for low-level update operations in public APIr9   r   rS   r   rQ   rR   rV   rW   rX   rY   rZ   r[   r\   r]   r   r   r   r   r   r^   r_   r   r   c                    | j                   $t        j                  | j                         | _         | j                  %t        j                  | j                        | _        y y rE   rc   rF   s    r0   re   zUpdateSpanMessage.__post_init__   rf   rC   c                t    t         |          }|j                  d      |d<   |j                  d      |d<   |S r   rj   rl   s     r0   rB   z!UpdateSpanMessage.as_payload_dict   r   rC   c                 
    h dS rp   r   r   rC   r0   rq   z%UpdateSpanMessage.fields_to_anonymize   rr   rC   rs   rH   ru   r   ry   s   @r0   r   r      s|    YL!!M))##$$&&
##//''&LN / /rC   r   c                  d    e Zd ZU 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y	)FeedbackScoreMessagen
    There is no handler for that in the message processor, it exists
    only as an item of BatchMessage
    r9   ri   rR   r    r4   r/   sourceNrS   reasoncategory_name)rK   rL   rM   r   rN   r   r   r:   r   rC   r0   r   r      s<    
 	G
ILK FM #'M=')LrC   r   c                  :    e Zd ZU ded<   dZded<   d Zd	dZd
dZy)AddFeedbackScoresBatchMessagezList[FeedbackScoreMessage]batchTboolsupports_batchingc                B    t        | j                  t              | _        y rE   )_deserialize_base_message_batchr   r   rF   s    r0   re   z+AddFeedbackScoresBatchMessage.__post_init__   s    4TZZAUV
rC   c                B    t        | j                  | j                        S rE   %_serialize_base_message_batch_to_dictr<   r   rF   s    r0   rG   z0AddFeedbackScoresBatchMessage.as_db_message_dict       4T]]DJJOOrC   Nrs   rH   rK   rL   rM   rN   r   r:   re   rG   r   rC   r0   r   r      s$    %%"t"2LWPrC   r   c                      e Zd Zd Zy)"AddTraceFeedbackScoresBatchMessageNrK   rL   rM   r:   r   rC   r0   r   r      s    7LrC   r   c                      e Zd Zd Zy)!AddSpanFeedbackScoresBatchMessageNr   r   rC   r0   r   r      s    6LrC   r   c                  $     e Zd ZdZd fdZ xZS )ThreadsFeedbackScoreMessagez
    There is no handler for that in the message processor, it exists
    only as an item of AddThreadsFeedbackScoresBatchMessage
    c                L    t         |          }|j                  d      |d<   |S )Nri   r`   rj   rl   s     r0   rB   z+ThreadsFeedbackScoreMessage.as_payload_dict  s'    w&( HHTN[rC   rH   )rK   rL   rM   r   rB   rx   ry   s   @r0   r   r     s    
 rC   r   c                  :    e Zd ZU ded<   dZded<   d Zd	dZd
dZy)$AddThreadsFeedbackScoresBatchMessagez!List[ThreadsFeedbackScoreMessage]r   Tr   r   c                B    t        | j                  t              | _        y rE   )r   r   r   rF   s    r0   re   z2AddThreadsFeedbackScoresBatchMessage.__post_init__  s    4JJ3

rC   c                B    t        | j                  | j                        S rE   r   rF   s    r0   rG   z7AddThreadsFeedbackScoresBatchMessage.as_db_message_dict  r   rC   Nrs   rH   r   r   rC   r0   r   r     s#    ,,"t"9L

PrC   r   c                  >    e Zd ZU ded<   d ZddZddZed	d       Zy)
CreateSpansBatchMessagezList[span_write.SpanWrite]r   c                V    t        | j                  t        j                        | _        y rE   )_deserialize_pydantic_batchr   r   	SpanWriterF   s    r0   re   z%CreateSpansBatchMessage.__post_init__$  s    0Z=Q=QR
rC   c                B    t        | j                  | j                        S rE   !_serialize_pydantic_batch_to_dictr<   r   rF   s    r0   rG   z*CreateSpansBatchMessage.as_db_message_dict'      0

KKrC   c                 
    h dS rp   r   r   rC   r0   rq   z+CreateSpansBatchMessage.fields_to_anonymize*  rr   rC   Nrs   rH   ru   	rK   rL   rM   rN   r:   re   rG   rw   rq   r   rC   r0   r   r     s-    %%,LSL / /rC   r   c                  >    e Zd ZU ded<   d ZddZddZed	d       Zy)
CreateTraceBatchMessagezList[trace_write.TraceWrite]r   c                V    t        | j                  t        j                        | _        y rE   )r   r   r   
TraceWriterF   s    r0   re   z%CreateTraceBatchMessage.__post_init__5  s    0[=S=ST
rC   c                B    t        | j                  | j                        S rE   r   rF   s    r0   rG   z*CreateTraceBatchMessage.as_db_message_dict8  r   rC   c                 
    h dS rp   r   r   rC   r0   rq   z+CreateTraceBatchMessage.fields_to_anonymize;  rr   rC   Nrs   rH   ru   r   r   rC   r0   r   r   /  s-    '',LUL / /rC   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 Zy)GuardrailBatchItemMessager   rS   rR   r9   	entity_idsecondary_idr    z'Union[Literal['passed', 'failed'], Any]resultrJ   configdetailsN)rK   rL   rM   r   rN   r:   r   rC   r0   r   r   @  s6    
  N
I33.LrC   r   c                  N     e Zd ZU ded<   dZded<   d Zd	dZd
dZd
 fdZ xZ	S )GuardrailBatchMessagezList[GuardrailBatchItemMessage]r   Tr   r   c                B    t        | j                  t              | _        y rE   )r   r   r   rF   s    r0   re   z#GuardrailBatchMessage.__post_init__Y  s    4JJ1

rC   c                B    t        | j                  | j                        S rE   r   rF   s    r0   rG   z(GuardrailBatchMessage.as_db_message_dict^  r   rC   c                F    t         |          }|j                  d       |S )Nr   rj   rl   s     r0   rB   z%GuardrailBatchMessage.as_payload_dicta  s"    w&($%rC   rs   rH   )
rK   rL   rM   rN   r   r:   re   rG   rB   rx   ry   s   @r0   r   r   R  s.    **"t"*L

P rC   r   c                  Z    e Zd ZU 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y)ExperimentItemMessagez
    There is no handler for that in the message processor, it exists
    only as an item of CreateExperimentItemsBatchMessage
    r9   ri   experiment_idrQ   dataset_item_idNrS   rR   rX   execution_policy)rK   rL   rM   r   rN   rR   r   r:   r   rC   r0   r   r   g  s:    
 	GM"&L-&15.5*LrC   r   c                  :    e Zd ZU ded<   dZded<   d Zd	dZd
dZy)!CreateExperimentItemsBatchMessagezList[ExperimentItemMessage]r   Tr   r   c                B    t        | j                  t              | _        y rE   )r   r   r   rF   s    r0   re   z/CreateExperimentItemsBatchMessage.__post_init__  s    4TZZAVW
rC   c                B    t        | j                  | j                        S rE   r   rF   s    r0   rG   z4CreateExperimentItemsBatchMessage.as_db_message_dict  r   rC   Nrs   rH   r   r   rC   r0   r   r   x  s$    &&"t"6LXPrC   r   c                  f    e Zd ZU 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y)CreateAttachmentMessager9   	file_path	file_namerS   	mime_typer   entity_typer   rR   encoded_url_overrideFr   delete_after_uploadN)rK   rL   rM   rN   r   r:   r   rC   r0   r   r     s9    NN%%N %%,LrC   r   c                      e Zd ZU ded<   d Zy)AttachmentSupportingMessager   original_messageN)rK   rL   rM   rN   r:   r   rC   r0   r   r     s    !!0LrC   r   c                d    | D cg c]   }t        |t              rt        ||      n|" c}S c c}w )z=Convert dict items in a batch to BaseMessage-derived objects.)
isinstancedictr1   r   
item_classitems      r0   r   r     s?     D 3=T42HZ.dR  s   %-c                x    | D cg c]*  }t        |t              rt        j                  ||      n|, c}S c c}w )z8Convert dict items in a batch to Pydantic model objects.)r   r   r   parse_obj_asr   s      r0   r   r     sN     	 D dD! 	''
D9	 	  s   /7c                V    |D cg c]  }|j                          }}i | d|iS c c}w )z&Serialize a BaseMessage batch to dict.r   )rG   instance_dictr   r   batch_itemss       r0   r   r     s9    
 :??4**,K?2m2Wk22 @   &c                V    |D cg c]  }|j                          }}i | d|iS c c}w )z)Serialize a Pydantic model batch to dict.r   )r   r   s       r0   r   r     s5    
 ,1154499;5K12m2Wk22 2r   )r$   Type[T]r%   rJ   rI   r   )r   	List[Any]r   r   rI   List[T])r   r   r   zType[pydantic_utilities.T]rI   r   )r   rJ   r   r   rI   rJ   )r   rJ   r   r   rI   rJ   )7
__future__r   r   datetimer   typingr   r   r   r   r	   r
   r   r   r    r   preprocessingr   rest_api.corer   rest_api.typesr   r   typesr   r   r   r   r   r1   	dataclassr   rP   r{   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rC   r0   <module>r     s<   "    P P P  $ . 4 N N C}%4 ! ! !4 / / /@ / / /B $/ $/ $/N "/ "/ "/J *; * *" 
PK 
P 
P 8)F 8 8 7(E 7 7 	"6 	 	 P; P P /k / /  /k / /  / / /" K  ( +K + +  
P 
P 
P 
-k 
- 
- 1+ 1 1 

*
 
3!33 33!33 3rC   