
    i                         d 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
mZmZ deeef   deeef   d	ed
ededeeej                     ej                  f   fdZy)z%Public API for Opik payload building.    )datetime)AnyDictOptionalTuple)utils   )
extractorspayload_builderstypeskwargsresponse_obj
start_timeend_timeproject_namereturnc                    | d   }| j                  di       xs i }|j                  di       xs i }|j                  di       xs i }t        j                  ||      }	|	j                  d|      }
|	j                  d      }t        j                  |      \  }}t        j                  |	| j                  d            }|	j                  d      }|j                  di       xs i }|j                  d	i       xs i }t        j
                  |
|||      \  }
}}t        j                  |	||| 
      }|j                  di       }|j                  di       }d}|3t        j                         }t        j                  |
|||||||||
      }t        j                  |d         }t        j                  | j                  d            }| j                  d      }t        j                  |
||||||||||||      }||fS )aN  
    Build Opik trace and span payloads from LiteLLM completion data.

    This is the main public API for creating Opik payloads. It:
    1. Extracts all necessary data from LiteLLM kwargs and response
    2. Decides whether to create a new trace or attach to existing
    3. Builds trace payload (if new trace)
    4. Builds span payload (always)

    Args:
        kwargs: LiteLLM kwargs containing request metadata and logging data
        response_obj: LiteLLM response object containing model response
        start_time: Request start time
        end_time: Request end time
        project_name: Default Opik project name

    Returns:
        Tuple of (optional trace payload, span payload)
        - First element is TracePayload if creating a new trace, None if attaching to existing
        - Second element is always SpanPayload
    standard_logging_objectlitellm_paramsmetadatar   current_span_datacustom_llm_provider	thread_idproxy_server_requestheaders)opik_metadatastandard_logging_metadatar   litellm_kwargsmessagesresponseN)
r   trace_idr   r   r   
input_dataoutput_datar   tagsr   usageresponse_cost)r   r!   parent_span_idr   r   r   r"   r#   r   r$   r%   providercost)getr
   extract_opik_metadataextract_span_identifiersextract_tagsapply_proxy_header_overridesextract_and_build_metadatar   create_uuid7r   build_trace_payloadcreate_usage_objectnormalize_provider_namebuild_span_payload)r   r   r   r   r   r   r   litellm_metadatar   r   current_project_namer   r!   r'   r$   r   proxy_requestproxy_headersr   r"   r#   trace_payloadr%   r(   r)   span_payloads                             /Users/manta/Documents/Projects/TheRoad-I1/.venv/lib/python3.12/site-packages/litellm/integrations/opik/opik_payload_builder/api.pybuild_opik_payloadr<      sA   8 %%>? ZZ 0"5;N%))*b9?R 7 ; ;J K Qr 443M
 ),,^\J &))*=>)BBCTUHn ""=&**=R2STD!!+.I #&&'=rBHbM!%%i4:M,6,S,SdI}-)$	
 44#"; 7	H ),,Z<J)--j"=K 37M%%'(<<-%!!#
 %%l7&;<E 11&**=R2STH::o&D#66)%!L  ,&&    N)__doc__r   typingr   r   r   r   litellm.integrations.opikr    r
   r   r   strTracePayloadSpanPayloadr<    r=   r;   <module>rF      s    +  - - + 1 1n'cNn'sCx.n' n' 	n'
 n' 8E&&'):)::;n'r=   