
    qi1"                         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e      Ze G d d             Z G d de      Z G d dee         Zy)z'AWS Nova Sonic LLM adapter for Pipecat.    N)	dataclass)Enum)AnyDictListOptional	TypedDict)logger)BaseLLMAdapter)FunctionSchema)AdapterTypeToolsSchema)
LLMContextLLMContextMessagec                        e Zd ZdZdZdZdZdZy)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        b/opt/pipecat/venv/lib/python3.12/site-packages/pipecat/adapters/services/aws_nova_sonic_adapter.pyr   r      s     FDIDr   r   c                   &    e Zd ZU dZeed<   eed<   y)&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     J
Ir   r   c                   L    e Zd ZU dZee   ed<   ee   ed<   ee	ee
f      ed<   y)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   s2    
 !%9::S#Xr   r%   c                       e Zd ZdZedefd       ZdedefdZ	de
eeef      fdZe G d d             Zd	e
e   defd
ZdefdZededeeef   fd       Zdede
eeef      fdZy)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                      y)zKGet the identifier used in LLMSpecificMessage instances for AWS Nova Sonic.zaws-nova-sonicr   )selfs    r   id_for_llm_specific_messagesz3AWSNovaSonicLLMAdapter.id_for_llm_specific_messagesF   s      r   contextc                     | j                  | j                  |            }|j                  |j                  | j	                  |j
                        xs 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'   s      r   get_llm_invocation_paramsz0AWSNovaSonicLLMAdapter.get_llm_invocation_paramsK   sR     889J9J79ST"*"="= ))--gmm<B	
 	
r   c                 V    | j                  | j                  |            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.
        )r1   r2   r'   )r-   r/   s     r   get_messages_for_loggingz/AWSNovaSonicLLMAdapter.get_messages_for_logging^   s&     44T5F5Fw5OPYYYr   c                   6    e Zd ZU dZee   ed<   dZee	   ed<   y)(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   ConvertedMessagesr8   m   s     W=>>,0HSM0r   r9   universal_context_messagesc                    d }g }|s| j                         S t        j                  |      }|d   j                  d      dk(  rb|j	                  d      }|j                  d      }t        |t              r|}n$t        |t              r|d   j                  d      }|r|| _        |D ]'  }| j                  |      }|s|j                  |       ) | j                  ||      S )Nr   r    systemcontentr!   )r'   r&   )r9   copydeepcopygetpop
isinstancer#   list_system_instruction_from_universal_context_messageappend)r-   r:   r&   r'   r<   r=   universal_context_messagemessages           r   r1   z7AWSNovaSonicLLMAdapter._from_universal_context_messagest   s     " *))++%)]]3M%N" &a(,,V4@/33A6Fjj+G'3'%,"GT*%,QZ^^F%;"!+=( *D 	)%::;TUG(	)
 %%xL^%__r   c                    |j                  d      }|j                  d      dk(  s|j                  d      dk(  r|j                  d      }t        |j                  d      t              rnd}|j                  d      D ]X  }|j                  d      dk(  r|d|j                  d      z   z  }/t        j                  d	|j                  d       d
|        Z |r"t        t        |j                            |      S yy)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	assistantr=    typer!    z+Unhandled content type in context message: z - )r    r!   N)r@   rB   rC   r
   errorr   r   upper)r-   rH   r    r=   cs        r   rE   z6AWSNovaSonicLLMAdapter._from_universal_context_message   s     {{6";;v&(GKK,?;,Nkk),G'++i0$7 Y/ AuuV}.3v#66I!%%PV-X[\c[de	 =4

CU\cdd  -Or   functionc           
          d| j                   | j                  dt        j                  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)rM   
propertiesrequired)namedescriptioninputSchema)rY   rZ   rU   dumpsrW   rX   )rR   s    r   "_to_aws_nova_sonic_function_formatz9AWSNovaSonicLLMAdapter._to_aws_nova_sonic_function_format   sS      '33DJJ$,*2*=*=(0(9(9 
 	
r   tools_schemac                     |j                   }|D cg c]  }| j                  |       }}g }|j                  r*|j                  j                  t        j
                  g       }||z   S c c}w )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.
        )standard_toolsr]   custom_toolsr@   r   SHIM)r-   r^   functions_schemafuncr`   shimmed_toolss         r   to_provider_tools_formatz/AWSNovaSonicLLMAdapter.to_provider_tools_format   ss     (66FV
>BD33D9
 
 $$(5599+:J:JBOM--
s   A(N)r   r   r   r   propertyr#   r.   r   r%   r4   r   r   r   r6   r   r9   r   r1   r   rE   staticmethodr   r]   r   rf   r   r   r   r*   r*   ?   s      c    
 
@_ 
&Z4S#X3G Z 1 1 1`*./@*A`	`@e:` e: 
^ 
SRUX 
 
2.[ .T$sTWx.EY .r   r*   )r   r>   rU   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   <module>rq      sp    .   !  7 7  < C J T4   	 	 	 i  d.^,KL d.r   