> ## Documentation Index
> Fetch the complete documentation index at: https://docs.navtalk.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Research Assistant

> Use Lily as a research assistant for information gathering and research analysis

![Lily - Research Assistant](https://navtalk.s3.us-east-2.amazonaws.com/uploadFiles/navtalk.Lily.png)

## Overview

The **Research Assistant** use case uses **Lily** to help with information gathering, research analysis, and knowledge discovery. This digital assistant can search for information, analyze data, synthesize findings, and present research in a clear and organized manner.

## Use Case Benefits

* **Efficient Research**: Quickly gather and analyze information from multiple sources
* **24/7 Research Support**: Get research assistance anytime
* **Comprehensive Analysis**: Synthesize complex information into actionable insights
* **Knowledge Organization**: Structure research findings for easy reference

## Implementation

<CodeGroup>
  ```javascript JavaScript theme={null}
  const NavTalkMessageType = Object.freeze({
      CONNECTED_SUCCESS: "conversation.connected.success",
      REALTIME_SESSION_CREATED: "realtime.session.created",
      REALTIME_SESSION_UPDATED: "realtime.session.updated",
      // ... other event types
  });

  const websocketUrl = 'wss://transfer.navtalk.ai/wss/v2/realtime-chat';
  const license = 'your-license-key';
  const characterName = 'navtalk.Lily';

  const websocketUrlWithParams = `${websocketUrl}?license=${encodeURIComponent(license)}&name=${encodeURIComponent(characterName)}`;
  const socket = new WebSocket(websocketUrlWithParams);

  // Configure Lily as a research assistant
  socket.onmessage = (event) => {
    if (typeof event.data === 'string') {
      const data = JSON.parse(event.data);
      const nav_data = data.data;
      
      if (data.type === NavTalkMessageType.REALTIME_SESSION_CREATED) {
        // Send conversation history if needed
        // Session configuration (instructions, voice, model) is sent via realtime.input_config
      }
      
      if (data.type === NavTalkMessageType.REALTIME_SESSION_UPDATED) {
        // Session ready, start sending audio input
      }
    }
  };
  ```

  ```python Python theme={null}
  import asyncio
  import websockets
  import json
  from urllib.parse import quote

  NAV_TALK_MESSAGE_TYPE = {
      'CONNECTED_SUCCESS': 'conversation.connected.success',
      'REALTIME_SESSION_CREATED': 'realtime.session.created',
      'REALTIME_SESSION_UPDATED': 'realtime.session.updated',
      # ... other event types
  }

  async def connect_research_assistant():
      websocket_url = 'wss://transfer.navtalk.ai/wss/v2/realtime-chat'
      license = 'your-license-key'
      character_name = 'navtalk.Lily'
      
      websocket_url_with_params = f'{websocket_url}?license={quote(license)}&name={quote(character_name)}'
      
      async with websockets.connect(websocket_url_with_params) as websocket:
          async for message in websocket:
              if isinstance(message, str):
                  data = json.loads(message)
                  nav_data = data.get('data')
                  
                  if data.get('type') == NAV_TALK_MESSAGE_TYPE['REALTIME_SESSION_CREATED']:
                      # Send conversation history if needed
                      # Session configuration (instructions, voice, model) is sent via realtime.input_config
                      pass
                  
                  if data.get('type') == NAV_TALK_MESSAGE_TYPE['REALTIME_SESSION_UPDATED']:
                      # Session ready, start sending audio input
                      pass

  asyncio.run(connect_research_assistant())
  ```
</CodeGroup>

<Note>
  Use function calling to integrate with search APIs, databases, and knowledge bases for more comprehensive research capabilities.
</Note>
