o
    i                     @  s>   d dl mZ d dlmZmZ erddlmZ G dd dZdS )    )annotations)TYPE_CHECKINGAny   )EvaluationResultc                   @  sz   e Zd ZdZdddZd d!d	d
Zd d!ddZd"ddZd"ddZe	d#ddZ
e	d$ddZe	d%ddZd&ddZdS )'Taggera^  Tag sessions with metadata for observability.

    The Tagger allows adding string tags (key:value format) to sessions.
    Tags 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")

        # Remove a tag
        ctx.tagger.remove("voicemail:true")
        ```
    returnNonec                 C  s   t  | _g | _d | _d S N)set_tags_evaluation_results_outcome_reasonself r   ^/var/www/html/livekit_bhavya/venv/lib/python3.10/site-packages/livekit/agents/observability.py__init__    s   
zTagger.__init__Nreason
str | Nonec                 C  "   | j d | j d || _dS )zMark the session as successful.

        Args:
            reason: Optional reason for the success (stored separately from the tag).
        lk.fail
lk.successNr   discardaddr   r   r   r   r   r   success%      
zTagger.successc                 C  r   )zMark the session as failed.

        Args:
            reason: Optional reason for the failure (stored separately from the tag).
        r   r   Nr   r   r   r   r   fail0   r   zTagger.failtagstrc                 C     | j | dS )zAdd a tag to the session.

        Args:
            tag: The tag string in "key:value" format (e.g., "voicemail:true", "language:es").
        N)r   r   r   r    r   r   r   r   ;      z
Tagger.addc                 C  r"   )zaRemove a tag from the session.

        Args:
            tag: The tag string to remove.
        N)r   r   r#   r   r   r   removeC   r$   zTagger.removeset[str]c                 C  
   | j  S )zAll current tags.)r   copyr   r   r   r   tagsK      
zTagger.tagslist[dict[str, Any]]c                 C  r'   )zAll evaluation results.)r   r(   r   r   r   r   evaluationsP   r*   zTagger.evaluationsc                 C  s   | j S )z#Reason for success/failure outcome.)r   r   r   r   r   outcome_reasonU   s   zTagger.outcome_reasonresultr   c                 C  sJ   |j  D ]\}}| jd| d|j  | j||j|jd qdS )z}Tag the session with evaluation results (internal use only).

        Called automatically by JudgeGroup.evaluate().
        z	lk.judge.:)nameverdict	reasoningN)	judgmentsitemsr   r   r1   r   appendr2   )r   r.   r0   judgmentr   r   r   _evaluationZ   s   zTagger._evaluation)r   r	   r
   )r   r   r   r	   )r    r!   r   r	   )r   r&   )r   r+   )r   r   )r.   r   r   r	   )__name__
__module____qualname____doc__r   r   r   r   r%   propertyr)   r,   r-   r7   r   r   r   r   r   	   s    


r   N)
__future__r   typingr   r   evalsr   r   r   r   r   r   <module>   s
    