
    jh                        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mZmZ ddlmZmZmZmZ ddlmZ ddlmZmZmZ dd	lmZ ej:                  Z ej<                  e      Z  ed
e	ejB                  ejD                  ejF                  f         Z$eee$      Z% ede	ejL                  ejN                  f         Z(eee(      Z)dee j                      dee*   fdZ+	 d#dee*   dee*   de,dee*   fdZ-	 d$deee*ef      deee*ef      de,deee*ef      fdZ.dee*   dee$   de
d   de%fdZ/deeee*ef         dee$   de%fdZ0dee   d e*dee(   d!ejb                  de)f
d"Z2y)%    N)OptionalDictAnyListTypeVarTypeUnionLiteral   )opik_query_languagevalidation_helpers	constants   )configdatetime_helperslogging_messages
id_helpers)messages)span_filter_publictrace_filter_publictrace_thread_filter)BatchFeedbackScoreDictFilterParsedItemT)boundScoreMessageTvaluereturnc                 2    | y t        j                  |       S N)r   datetime_to_iso8601)r   s    q/Users/manta/Documents/Projects/TheRoad-I1/backend/.venv/lib/python3.12/site-packages/opik/api_objects/helpers.pydatetime_to_iso8601_if_not_Noner"   '   s     }//66    parent_project_namechild_project_nameshow_warningc                     | |k7  rc|r]|[| | nt         j                  }||nt         j                  }t        j                  t        j
                  j                  ||             | }|S |}|S r   )r   OPIK_PROJECT_DEFAULT_NAMELOGGERwarningr   1NESTED_SPAN_PROJECT_NAME_MISMATCH_WARNING_MESSAGEformat)r$   r%   r&   parent_project_name_msgchild_project_name_msgproject_names         r!   resolve_child_span_project_namer0   0   s    
 00.: '2 $55 $ &1 #55 # NN RRYY*,C
 +  *r#   usagemetadatacreate_metadatac                     | |S ||sy |i ni |}d|v r|S t        | t        j                        r!| j                  j	                  d      |d<   |S | |d<   |S )Nr1   T)exclude_none)
isinstance	llm_usage	OpikUsageprovider_usage
model_dump)r1   r2   r3   s      r!   add_usage_to_metadatar;   P   sz    
 }%r<h<H (%,,-!00;;;NHWOr#   filter_stringparsed_item_classentity_type)tracesthreadsspansc                    | y|dk(  r t         j                  j                  |       }nD|dk(  r t         j                  j                  |       }nt         j                  j	                  |       }|j                         }t        ||      S )a  
    Parses filter expressions from a filter string using a specified class for parsed items.

    Args:
        filter_string: A string representing the filter expressions to be parsed.
        parsed_item_class: The class type to which the parsed filter expressions are mapped.
        entity_type: The entity type to determine which OQL config to use.
            Use "traces" for trace filtering, "spans" for span filtering,
            "threads" for trace thread filtering.

    Returns:
        Optional[List[T]]: A list of objects of type T created from the parsed filter
        expressions, or None if no valid expressions are found.
    NrA   r@   )r=   )r   OpikQueryLanguage	for_spansfor_threads
for_tracesget_filter_expressionsparse_search_expressions)r<   r=   r>   oqlfilter_expressionss        r!   parse_filter_expressionsrK   j   s    & g!33==mL			!!33??N!33>>}M335#.? r#   rJ   c                 >    | y | D cg c]
  } |di | c}S c c}w )N rM   )rJ   r=   
expressions      r!   rH   rH      s0     !>PQ>P
+
+>PQQQs   scoresr/   loggerc                 J   | D cg c]  }t        j                  ||      | }}t        |      dk(  ry |D cg c]Y  } ||d   |d   |d   t        j                  |j                  d      xs ||j                  d      |j                  d            [ }}|S c c}w c c}w )	Nr   idnamer   r/   reasoncategory_name)rR   rS   r   sourcer/   rT   rU   )r   validate_feedback_scorelenr   FEEDBACK_SCORE_SOURCE_SDKget)rO   r/   r=   rP   scorevalid_scores
score_dictscore_messagess           r!   parse_feedback_score_messagesr_      s     E55eVDP 	   <A ' 'J 	$F#W%66#7G<>>(+$..9	
 '   -s   BAB )T)F)3datetimeloggingtypingr   r   r   r   r   r   r	   r
   opik.llm_usager7    r   r   r   r   r   r   r   message_processingr   rest_api.typesr   r   r   typesr   generate_id	getLogger__name__r)   SpanFilterPublicTraceFilterPublicTraceThreadFilterr   OptionalFilterParsedItemListFeedbackScoreMessageThreadsFeedbackScoreMessager   OptionalScoreMessageListstrr"   boolr0   r;   rK   rH   Loggerr_   rM   r#   r!   <module>ru      sB     K K K " @ @ E E ) 
 + $$			8	$ 
++----	/   (->(?@ 
--x/S/SS
T $D$78 7H%%&7c]7 !#   c]	F "DcN#tCH~&  d38n	4!C=!-.! 56! "	!HR d38n!56R-.R "R'( M* NN	
 r#   