o
    i1"                     @   s   d Z ddlZddlZddlmZ ddlmZ ddl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 G dd deZeG dd dZG dd deZG dd dee ZdS )z'AWS Nova Sonic LLM adapter for Pipecat.    N)	dataclass)Enum)AnyDictListOptional	TypedDict)logger)BaseLLMAdapter)FunctionSchema)AdapterTypeToolsSchema)
LLMContextLLMContextMessagec                   @   s    e Zd ZdZdZdZdZdZdS )Rolea5  Roles supported in AWS Nova Sonic conversations.

    Parameters:
        SYSTEM: System-level messages (not used in conversation history).
        USER: Messages sent by the user.
        ASSISTANT: Messages sent by the assistant.
        TOOL: Messages sent by tools (not used in conversation history).
    SYSTEMUSER	ASSISTANTTOOLN)__name__
__module____qualname____doc__r   r   r   r    r   r   d/home/ubuntu/.local/lib/python3.10/site-packages/pipecat/adapters/services/aws_nova_sonic_adapter.pyr      s    	r   c                   @   s"   e Zd ZU dZeed< eed< dS )&AWSNovaSonicConversationHistoryMessagezA single message in AWS Nova Sonic conversation history.

    Parameters:
        role: The role of the message sender (USER or ASSISTANT only).
        text: The text content of the message.
    roletextN)r   r   r   r   r   __annotations__strr   r   r   r   r   '   s   
 r   c                   @   s>   e Zd ZU dZee ed< ee ed< ee	ee
f  ed< dS )AWSNovaSonicLLMInvocationParamszContext-based parameters for invoking AWS Nova Sonic LLM API.

    This is a placeholder until support for universal LLMContext machinery is added for AWS Nova Sonic.
    system_instructionmessagestoolsN)r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    4   s
   
 r    c                   @   s   e Zd ZdZedefddZdedefddZ	de
eeef  fdd	ZeG d
d dZde
e defddZdefddZededeeef fddZdede
eeef  fddZdS )AWSNovaSonicLLMAdapterzAdapter for AWS Nova Sonic language models.

    Converts Pipecat's standard function schemas into AWS Nova Sonic's
    specific function-calling format, enabling tool use with Nova Sonic models.
    returnc                 C   s   dS )zKGet the identifier used in LLMSpecificMessage instances for AWS Nova Sonic.zaws-nova-sonicr   selfr   r   r   id_for_llm_specific_messagesF   s   z3AWSNovaSonicLLMAdapter.id_for_llm_specific_messagescontextc                 C   s,   |  | |}|j|j| |jpg dS )a|  Get AWS Nova Sonic-specific LLM invocation parameters from a universal LLM context.

        This is a placeholder until support for universal LLMContext machinery is added for AWS Nova Sonic.

        Args:
            context: The LLM context containing messages, tools, etc.

        Returns:
            Dictionary of parameters for invoking AWS Nova Sonic's LLM API.
        )r!   r"   r#   ) _from_universal_context_messagesget_messagesr!   r"   from_standard_toolsr#   )r'   r)   r"   r   r   r   get_llm_invocation_paramsK   s
   z0AWSNovaSonicLLMAdapter.get_llm_invocation_paramsc                 C   s   |  | |jS )a  Get messages from a universal LLM context in a format ready for logging about AWS Nova Sonic.

        Removes or truncates sensitive data like image content for safe logging.

        This is a placeholder until support for universal LLMContext machinery is added for AWS Nova Sonic.

        Args:
            context: The LLM context containing messages.

        Returns:
            List of messages in a format ready for logging about AWS Nova Sonic.
        )r*   r+   r"   )r'   r)   r   r   r   get_messages_for_logging^   s   z/AWSNovaSonicLLMAdapter.get_messages_for_loggingc                   @   s.   e Zd ZU dZee ed< dZee	 ed< dS )z(AWSNovaSonicLLMAdapter.ConvertedMessageszIContainer for Google-formatted messages converted from universal context.r"   Nr!   )
r   r   r   r   r   r   r   r!   r   r   r   r   r   r   ConvertedMessagesm   s   
 r/   universal_context_messagesc                 C   s   d }g }|s
|   S t|}|d ddkr;|d}|d}t|tr*|}nt|tr6|d d}|r;|| _|D ]}| 	|}|rK|
| q=| j ||dS )Nr   r   systemcontentr   )r"   r!   )r/   copydeepcopygetpop
isinstancer   list_system_instruction_from_universal_context_messageappend)r'   r0   r!   r"   r1   r2   universal_context_messagemessager   r   r   r*   t   s(   






z7AWSNovaSonicLLMAdapter._from_universal_context_messagesc                 C   s   | d}| ddks| ddkrU| d}t| dtrId}| dD ]!}| ddkr:|d| d 7 }q'td	| d d
|  q'|rWtt|  |dS dS dS )zConvert standard message format to Nova Sonic format.

        Args:
            message: Standard message dictionary to convert.

        Returns:
            Nova Sonic conversation history message, or None if not convertible.
        r   user	assistantr2    typer    z+Unhandled content type in context message: z - )r   r   N)r5   r7   r8   r	   errorr   r   upper)r'   r=   r   r2   cr   r   r   r:      s   
	
z6AWSNovaSonicLLMAdapter._from_universal_context_messagefunctionc              
   C   s*   d| j | jdtd| j| jdidiS )zConvert a function schema to AWS Nova Sonic format.

        Args:
            function: The function schema to convert.

        Returns:
            Dictionary in AWS Nova Sonic function format with toolSpec structure.
        toolSpecjsonobject)rA   
propertiesrequired)namedescriptioninputSchema)rL   rM   rH   dumpsrJ   rK   )rF   r   r   r   "_to_aws_nova_sonic_function_format   s   z9AWSNovaSonicLLMAdapter._to_aws_nova_sonic_function_formattools_schemac                    s:   |j } fdd|D }g }|jr|jtjg }|| S )a  Convert tools schema to AWS Nova Sonic function-calling format.

        Args:
            tools_schema: The tools schema containing function definitions to convert.

        Returns:
            List of dictionaries in AWS Nova Sonic function format.
        c                    s   g | ]}  |qS r   )rP   ).0funcr&   r   r   
<listcomp>   s    
zCAWSNovaSonicLLMAdapter.to_provider_tools_format.<locals>.<listcomp>)standard_toolscustom_toolsr5   r   SHIM)r'   rQ   functions_schemarU   shimmed_toolsr   r&   r   to_provider_tools_format   s   	

z/AWSNovaSonicLLMAdapter.to_provider_tools_formatN)r   r   r   r   propertyr   r(   r   r    r-   r   r   r   r.   r   r/   r   r*   r   r:   staticmethodr   rP   r   rZ   r   r   r   r   r$   ?   s"    
 "r$   )r   r3   rH   dataclassesr   enumr   typingr   r   r   r   r   logurur	   !pipecat.adapters.base_llm_adapterr
   (pipecat.adapters.schemas.function_schemar   %pipecat.adapters.schemas.tools_schemar   r   *pipecat.processors.aggregators.llm_contextr   r   r   r   r    r$   r   r   r   r   <module>   s    