# ChatBedrockNovaSonic

> **Class** in `langchain_aws`

📖 [View in docs](https://reference.langchain.com/python/langchain-aws/chat_models/bedrock_nova_sonic/ChatBedrockNovaSonic)

Chat model for Amazon Nova Sonic bidirectional streaming.

This provides a LangChain integration for Amazon Nova Sonic's
bidirectional streaming API (``InvokeModelWithBidirectionalStream``).
Nova Sonic enables real-time speech-to-speech conversations over a
persistent, full-duplex streaming connection. Unlike the Converse API
used by :class:`ChatBedrockConverse`, this maintains a persistent
full-duplex connection for continuous audio streaming.

!!! warning "Experimental"
    This integration requires the ``aws-sdk-bedrock-runtime`` package
    which is under active development. Install with:
    ``pip install "langchain-aws[nova-sonic]"``

For simple text interactions, use :meth:`ainvoke` or :meth:`astream`.
For full audio streaming, use :meth:`create_session` to get a
:class:`NovaSonicSession`.

Quick start::

    import asyncio
    from langchain_aws.chat_models.bedrock_nova_sonic import ChatBedrockNovaSonic

    model = ChatBedrockNovaSonic(
        model_id="amazon.nova-sonic-v1:0",
        region_name="us-east-1",
    )

    # Text-only conversation
    response = asyncio.run(
        model.ainvoke("Hello, how are you?")
    )
    print(response.content)

Audio streaming::

    import asyncio
    from langchain_aws.chat_models.bedrock_nova_sonic import (
        ChatBedrockNovaSonic,
        NovaSonicSession,
    )

    async def stream_audio():
        model = ChatBedrockNovaSonic(
            model_id="amazon.nova-sonic-v1:0",
            region_name="us-east-1",
            voice_id="matthew",
        )

        async with model.create_session() as session:
            # Send audio chunks
            await session.send_audio_chunk(audio_bytes)

            # Receive responses
            async for event in session.receive_events():
                if event["type"] == "audio":
                    play(event["audio"])
                elif event["type"] == "text":
                    print(event["text"])

    asyncio.run(stream_audio())

## Signature

```python
ChatBedrockNovaSonic()
```

## Parameters

| Name | Type | Required | Description |
|------|------|----------|-------------|
| `model_id` | `unknown` | Yes | The Nova Sonic model identifier. |
| `region_name` | `unknown` | Yes | AWS region for the Bedrock endpoint. |
| `voice_id` | `unknown` | Yes | Voice identifier for audio output. |
| `system_prompt` | `unknown` | Yes | Default system prompt for sessions. |
| `max_tokens` | `unknown` | Yes | Maximum tokens for inference. |
| `temperature` | `unknown` | Yes | Sampling temperature. |
| `top_p` | `unknown` | Yes | Top-p sampling parameter. |
| `input_sample_rate` | `unknown` | Yes | Sample rate for input audio in Hz. |
| `output_sample_rate` | `unknown` | Yes | Sample rate for output audio in Hz. |

## Extends

- `BaseChatModel`

## Properties

- `model_config`
- `model_id`
- `region_name`
- `credentials_profile_name`
- `aws_access_key_id`
- `aws_secret_access_key`
- `aws_session_token`
- `endpoint_url`
- `bedrock_api_key`
- `voice_id`
- `system_prompt`
- `max_tokens`
- `temperature`
- `top_p`
- `input_sample_rate`
- `output_sample_rate`
- `endpointing_sensitivity`
- `lc_secrets`

## Methods

- [`validate_environment()`](https://reference.langchain.com/python/langchain-aws/chat_models/bedrock_nova_sonic/ChatBedrockNovaSonic/validate_environment)
- [`create_session()`](https://reference.langchain.com/python/langchain-aws/chat_models/bedrock_nova_sonic/ChatBedrockNovaSonic/create_session)
- [`is_lc_serializable()`](https://reference.langchain.com/python/langchain-aws/chat_models/bedrock_nova_sonic/ChatBedrockNovaSonic/is_lc_serializable)
- [`get_lc_namespace()`](https://reference.langchain.com/python/langchain-aws/chat_models/bedrock_nova_sonic/ChatBedrockNovaSonic/get_lc_namespace)

---

[View source on GitHub](https://github.com/langchain-ai/langchain-aws/blob/285069d4f44907e10aaf7743888689ea39c98fe3/libs/aws/langchain_aws/chat_models/bedrock_nova_sonic.py#L566)