
    /j                        S SK Jr  S SKrS SKJrJr  S SKJrJr  \(       a  SSK	J
r
  \ " S S5      5       r " S	 S
5      rg)    )annotationsN)	dataclassfield)TYPE_CHECKINGAny   )EvaluationResultc                  N    \ rS rSr% SrS\S'   \" \R                  S9rS\S'   Sr	g)		_TagEntry   Ndict[str, Any] | Nonemetadata)default_factoryfloat	timestamp )
__name__
__module____qualname____firstlineno__r   __annotations__r   timer   __static_attributes__r       M/app/agent/.venv/lib/python3.13/site-packages/livekit/agents/observability.pyr   r      s     &*H#*TYY7Iu7r   r   c                      \ rS rSrSrSS jrSSS jjrSSS jjrSS.SS jjrSS	 jr	\
SS
 j5       r\
SS j5       r\
SS j5       r\
SS j5       rSS jrSrg)Tagger   a  Tag sessions with metadata for observability.

The Tagger allows adding string tags (key:value format) with optional
structured metadata to sessions. Tags and metadata are uploaded to
LiveKit Cloud at session end.

Example:
    ```python
    # Mark session as successful
    ctx.tagger.success(reason="Task completed successfully")

    # Mark session as failed
    ctx.tagger.fail(reason="User hung up before completing booking")

    # Add custom tags
    ctx.tagger.add("voicemail:true")
    ctx.tagger.add("language:es")

    # Add tags with structured metadata
    ctx.tagger.add(
        "appointment:booked",
        metadata={"slot_id": "abc123", "calendar": "cal.com"},
    )

    # Remove a tag
    ctx.tagger.remove("voicemail:true")
    ```
c                .    0 U l         / U l        S U l        g N)_tags_evaluation_results_outcome_reasonselfs    r   __init__Tagger.__init__/   s    +-
9; +/r   Nc                v    U R                   R                  SS5        [        5       U R                   S'   Xl        g)zuMark the session as successful.

Args:
    reason: Optional reason for the success (stored separately from the tag).
lk.failN
lk.successr!   popr   r#   r%   reasons     r   successTagger.success4   s,     	

y$'#,;

< %r   c                v    U R                   R                  SS5        [        5       U R                   S'   Xl        g)zqMark the session as failed.

Args:
    reason: Optional reason for the failure (stored separately from the tag).
r*   Nr)   r+   r-   s     r   failTagger.fail?   s,     	

|T* )

9%r   r   c               0    [        US9U R                  U'   g)zAdd a tag to the session with optional structured metadata.

Args:
    tag: The tag string in "key:value" format (e.g., "voicemail:true", "language:es").
    metadata: Optional dict of structured metadata associated with this tag.
r4   N)r   r!   )r%   tagr   s      r   add
Tagger.addJ   s     $X6

3r   c                <    U R                   R                  US5        g)zIRemove a tag from the session.

Args:
    tag: The tag string to remove.
N)r!   r,   )r%   r6   s     r   removeTagger.removeS   s     	

sD!r   c                H    [        U R                  R                  5       5      $ )zAll current tag strings.)setr!   keysr$   s    r   tagsTagger.tags[   s     4::??$%%r   c                6    U R                   R                  5       $ )zAll evaluation results.)r"   copyr$   s    r   evaluationsTagger.evaluations`   s     '',,..r   c                H    SU R                   ;   a  gSU R                   ;   a  gg)z;The session outcome: 'success', 'fail', or None if not set.r*   r/   r)   r2   N)r!   r$   s    r   outcomeTagger.outcomee   s%     4::%$**$r   c                    U R                   $ )z#Reason for success/failure outcome.)r#   r$   s    r   outcome_reasonTagger.outcome_reasonn   s     ###r   c           	        UR                   R                  5        Hm  u  p#SU SUR                   3n[        5       U R                  U'   U R
                  R                  UUUR                  UR                  UR                  S.5        Mo     g)zmTag the session with evaluation results (internal use only).

Called automatically by JudgeGroup.evaluate().
z	lk.judge.:)namer6   verdict	reasoninginstructionsN)		judgmentsitemsrN   r   r!   r"   appendrO   rP   )r%   resultrM   judgmentr6   s        r   _evaluationTagger._evaluations   s    
 %..446NDdV1X%5%5$67C'kDJJsO$$++ '//!)!3!3$,$9$9 7r   )r"   r#   r!   )returnNoner    )r.   
str | NonerX   rY   )r6   strr   r   rX   rY   )r6   r[   rX   rY   )rX   zset[str])rX   zlist[dict[str, Any]])rX   rZ   )rT   r	   rX   rY   )r   r   r   r   __doc__r&   r/   r2   r7   r:   propertyr?   rC   rF   rI   rV   r   r   r   r   r   r      s|    :0
	&	& BF 7" & & / /   $ $r   r   )
__future__r   r   dataclassesr   r   typingr   r   evalsr	   r   r   r   r   r   <module>rb      s<    "  ( %' 8 8 8
r rr   