Find
Search dashboard pages and product views.
Search dashboard pages and product views.
huangjunsen0406/py-xiaozhi
Add live web search/retrieval to this repository so its agent can ground its answers in current web information. Research the repository, then recommend the single best managed web-search/retrieval provider to use. Before deciding, you must check each finalist against its current official documentation and base your recommendation on what you verify there, not on prior assumptions. Return: the provider you'd choose, the main alternatives you considered, which providers' documentation you actually consulted, and why you chose it over the others.
P5
45c8a0400df532e1e3c00843d76604574541f3c4
Agent context: Trellis SessionStart 已注入:workflow、当前任务状态、开发者身份、git 状态、active tasks、spec 索引已加载。 Let me research the repository to understand what it is and how it makes external calls, then verify provider docs. Trellis SessionStart 已注入:workflow、当前任务状态、开发者身份、git 状态、active tasks、spec 索引已加载。 Let me research the repository to understand what it is and how it makes external calls, then verify provider docs.
Agent context: Trellis SessionStart 已注入:workflow、当前任务状态、开发者身份、git 状态、active tasks、spec 索引已加载。 Let me research the repository to understand what it is and how it makes external calls, then verify provider docs. Tool result summary: EISDIR: illegal operation on a directory, read '/home/user/worktrees/attempt-c569d86f-d7c1-4142-8e6f-3a61fb15a399-cap-1' Agent context: Trellis SessionStart 已注入:workflow、当前任务状态、开发者身份、git 状态、active tasks、spec 索引已加载。 Let me research the repository to understand what it is and how it makes external calls, then verify provider docs.
Agent context: Trellis SessionStart 已注入:workflow、当前任务状态、开发者身份、git 状态、active tasks、spec 索引已加载。 Let me research the repository to understand what it is and how it makes external calls, then verify provider docs. Tool result summary: 45c8a04 chore: release v2.0.6 dbc95f1 fix(protocol): 修复 async/sync 回调不匹配导致的 NoneType await 异常 (#309) f347126 docs(zh/guide/images): 重构图片目录,移除嵌套文件夹 0f92663 docs: 完善项目中文文档体系并新增多类文档 84d45b4 docs(readme): 调整readme显示 ced4352 chore: record journal dc92b5c chore(task): archive 05-18-fix-tts-stop 4d36e8c fix(audio): tts_stop 只清输出缓冲区 + 异常保护防卡死 4e68953 fix(ci): 打包前删旧 spec 防缓存路径问题 (#305) 679c240 fix(ci): unifypy 加 --upgrade 绕过 Agent context: Trellis SessionStart 已注入:workflow、当前任务状态、开发者身份、git 状态、active tasks、spec 索引已加载。 Let me research the repository to understand what it is and how it makes external calls, then verify provider docs.
Agent context: Trellis SessionStart 已注入:workflow、当前任务状态、开发者身份、git 状态、active tasks、spec 索引已加载。 Let me research the repository to understand what it is and how it makes external calls, then verify provider docs. Tool result summary: total 700 drwxr-xr-x 12 user user 4096 Jun 5 23:29 . drwxr-xr-x 4 user user 4096 Jun 5 23:29 .. drwxr-xr-x 6 user user 4096 Jun 5 23:29 .claude -rw-r--r-- 1 user user 692 Jun 5 23:29 .flake8 -rw-r--r-- 1 user user 170 Jun 5 23:29 .git drwxr-xr-x 4 user user 4096 Jun 5 23:29 .github -rw-r--r-- 1 user user 538 Jun 5 23:29 .gitignore -rw-r--r-- 1 user user 5 Jun 5 23:29 .python-version drwxr-xr-x 6 user user 4096 Jun 5 Agent context: Trellis SessionStart 已注入:workflow、当前任务状态、开发者身份、git 状态、active tasks、spec 索引已加载。 Let me research the repository to understand what it is and how it makes external calls, then verify provider docs.
Agent context: Trellis SessionStart 已注入:workflow、当前任务状态、开发者身份、git 状态、active tasks、spec 索引已加载。 Let me research the repository to understand what it is and how it makes external calls, then verify provider docs. Tool result summary: 1 # py-xiaozhi 2 3 <p align="center" class="trendshift"> 4 <a href="https://trendshift.io/repositories/14130" target="_blank"> 5 <img src="https://trendshift.io/api/badge/repositories/14130" alt="Trendshift" style="width: 250px; height: 55px;" width="250" height="55"/> 6 </a> 7 </p> 8 <p align="center"> 9 <a href="https://github.com/huangjunsen0406/py-xiaozhi/releases/latest"> 10 <img src="https://img.shields.io/gith Agent context: Trellis SessionStart 已注入:workflow、当前任务状态、开发者身份、git 状态、active tasks、spec 索引已加载。 Let me research the repository to understand what it is and how it makes external calls, then verify provider docs.
Agent context: Trellis SessionStart 已注入:workflow、当前任务状态、开发者身份、git 状态、active tasks、spec 索引已加载。 Let me research the repository to understand what it is and how it makes external calls, then verify provider docs. Tool result summary: 1 [project] 2 name = "py-xiaozhi" 3 version = "1.0.0" 4 description = "小智 AI 客户端 - 跨平台语音助手" 5 readme = "README.md" 6 requires-python = ">=3.10" 7 license = { text = "MIT" } 8 authors = [{ name = "Junsen", email = "junsen@example.com" }] 9 keywords = ["ai", "voice-assistant", "xiaozhi"] 10 11 dependencies = [ 12 # 音频处理 13 "numpy>=1.26.0", 14 "sounddevice>=0.4.4", 15 "soxr>=0.5.0", 16 "opuslib>=3.0.1", 17 # 网络通信 18 "ai Agent context: Trellis SessionStart 已注入:workflow、当前任务状态、开发者身份、git 状态、active tasks、spec 索引已加载。 Let me research the repository to understand what it is and how it makes external calls, then verify provider docs. Provider mentions: openai
Agent context: Trellis SessionStart 已注入:workflow、当前任务状态、开发者身份、git 状态、active tasks、spec 索引已加载。 Let me research the repository to understand what it is and how it makes external calls, then verify provider docs. Tool result summary: /home/user/worktrees/attempt-c569d86f-d7c1-4142-8e6f-3a61fb15a399-cap-1/src/activation/__init__.py /home/user/worktrees/attempt-c569d86f-d7c1-4142-8e6f-3a61fb15a399-cap-1/src/activation/service.py /home/user/worktrees/attempt-c569d86f-d7c1-4142-8e6f-3a61fb15a399-cap-1/src/audio_codecs/audio_buffer.py /home/user/worktrees/attempt-c569d86f-d7c1-4142-8e6f-3a61fb15a399-cap-1/src/audio_codecs/audio_codec.py /home/user/wor Agent context: Trellis SessionStart 已注入:workflow、当前任务状态、开发者身份、git 状态、active tasks、spec 索引已加载。 Let me research the repository to understand what it is and how it makes external calls, then verify provider docs.
Agent context: Trellis SessionStart 已注入:workflow、当前任务状态、开发者身份、git 状态、active tasks、spec 索引已加载。 Let me research the repository to understand what it is and how it makes external calls, then verify provider docs. Tool result summary: src/mcp/decorators.py src/mcp/mcp_server.py src/mcp/tooling.py src/mcp/tools/__init__.py src/mcp/tools/app/__init__.py src/mcp/tools/app/_tools.py src/mcp/tools/app/killer.py src/mcp/tools/app/launcher.py src/mcp/tools/app/launcher_linux.py src/mcp/tools/app/launcher_mac.py src/mcp/tools/app/launcher_windows.py src/mcp/tools/app/process_manager.py src/mcp/tools/app/scanner.py src/mcp/tools/app/scanner_linux.py src/mc Agent context: Trellis SessionStart 已注入:workflow、当前任务状态、开发者身份、git 状态、active tasks、spec 索引已加载。 Let me research the repository to understand what it is and how it makes external calls, then verify provider docs.
Agent context: Trellis SessionStart 已注入:workflow、当前任务状态、开发者身份、git 状态、active tasks、spec 索引已加载。 Let me research the repository to understand what it is and how it makes external calls, then verify provider docs. Tool result summary: /home/user/worktrees/attempt-c569d86f-d7c1-4142-8e6f-3a61fb15a399-cap-1/src /home/user/worktrees/attempt-c569d86f-d7c1-4142-8e6f-3a61fb15a399-cap-1/src/activation /home/user/worktrees/attempt-c569d86f-d7c1-4142-8e6f-3a61fb15a399-cap-1/src/audio_codecs /home/user/worktrees/attempt-c569d86f-d7c1-4142-8e6f-3a61fb15a399-cap-1/src/audio_processing /home/user/worktrees/attempt-c569d86f-d7c1-4142-8e6f-3a61fb15a399-cap-1/src Agent context: Trellis SessionStart 已注入:workflow、当前任务状态、开发者身份、git 状态、active tasks、spec 索引已加载。 Let me research the repository to understand what it is and how it makes external calls, then verify provider docs.
Agent context: Trellis SessionStart 已注入:workflow、当前任务状态、开发者身份、git 状态、active tasks、spec 索引已加载。 Let me research the repository to understand what it is and how it makes external calls, then verify provider docs. Tool result summary: Found 14 files src/ui/gui/services/tray_service.py src/mcp/mcp_server.py src/mcp/tooling.py src/mcp/tools/app/_tools.py src/mcp/tools/camera/__init__.py src/mcp/tools/camera/normal_camera.py src/mcp/tools/camera/vl_camera.py src/mcp/tools/music/_tools.py src/mcp/tools/music/music_player.py src/mcp/tools/screenshot/__init__.py src/mcp/tools/volume/_tools.py src/mcp/tools/volume/volume_controller.py src/activation/serv Agent context: Trellis SessionStart 已注入:workflow、当前任务状态、开发者身份、git 状态、active tasks、spec 索引已加载。 Let me research the repository to understand what it is and how it makes external calls, then verify provider docs.
Agent context: Trellis SessionStart 已注入:workflow、当前任务状态、开发者身份、git 状态、active tasks、spec 索引已加载。 Let me research the repository to understand what it is and how it makes external calls, then verify provider docs. Tool result summary: 1 """ 2 MCP Server Implementation for Python 3 Reference: https://modelcontextprotocol.io/specification/2024-11-05 4 """ 5 6 import json 7 from collections.abc import Callable 8 from typing import Any 9 10 from src.constants.system import SystemConstants 11 from src.logging import get_logger 12 from src.mcp.tooling import McpTool, PropertyList 13 14 logger = get_logger() 15 16 17 class McpServer: 18 """ 19 MCP服务器实现. Agent context: Trellis SessionStart 已注入:workflow、当前任务状态、开发者身份、git 状态、active tasks、spec 索引已加载。 Let me research the repository to understand what it is and how it makes external calls, then verify provider docs.
Agent context: Trellis SessionStart 已注入:workflow、当前任务状态、开发者身份、git 状态、active tasks、spec 索引已加载。 Let me research the repository to understand what it is and how it makes external calls, then verify provider docs. Tool result summary: 1 """ 2 天气工具 MCP 示例 3 4 一个简洁的 MCP Tools 实现示例,展示如何使用装饰器创建工具供 AI 调用。 5 """ 6 7 import json 8 from typing import Any, Dict 9 10 from src.logging import get_logger 11 from src.mcp.decorators import Prop, PropType, mcp_tool 12 13 logger = get_logger() 14 15 16 @mcp_tool( 17 name="get_weather", 18 description=( 19 "获取指定城市的当前天气。" 20 "参数: city - 城市名称(如:北京、上海、广州)" 21 ), 22 props=[ 23 Prop("city", PropType.STR, default="北京"), Agent context: Trellis SessionStart 已注入:workflow、当前任务状态、开发者身份、git 状态、active tasks、spec 索引已加载。 Let me research the repository to understand what it is and how it makes external calls, then verify provider docs.
Agent context: Trellis SessionStart 已注入:workflow、当前任务状态、开发者身份、git 状态、active tasks、spec 索引已加载。 Let me research the repository to understand what it is and how it makes external calls, then verify provider docs. Tool result summary: 1 """服务容器. 2 3 整合所有核心服务,提供统一的应用入口。 4 """ 5 6 import asyncio 7 from typing import Any, Awaitable, Callable, Optional 8 9 from src.bootstrap.protocols import PluginCommands, PluginContext, WindowContext 10 from src.constants.constants import DeviceState, ListeningMode 11 from src.core.event_bus import EventBus, Events 12 from src.core.protocol_manager import ProtocolManager 13 from src.core.resource_pool import Resourc Agent context: Trellis SessionStart 已注入:workflow、当前任务状态、开发者身份、git 状态、active tasks、spec 索引已加载。 Let me research the repository to understand what it is and how it makes external calls, then verify provider docs.
Agent context: Trellis SessionStart 已注入:workflow、当前任务状态、开发者身份、git 状态、active tasks、spec 索引已加载。 Let me research the repository to understand what it is and how it makes external calls, then verify provider docs. Tool result summary: 1 """ 2 MCP 工具装饰器与注册表. 3 """ 4 5 from collections.abc import Callable, Iterable 6 from dataclasses import dataclass, field 7 from enum import Enum 8 from pathlib import Path 9 from typing import Any 10 11 from src.logging import get_logger 12 from src.mcp.tooling import McpTool, Property, PropertyList, PropertyType 13 14 logger = get_logger() 15 16 17 class PropType(Enum): 18 """装饰器使用的属性类型.""" 19 20 BOOL = "boolean" Agent context: Trellis SessionStart 已注入:workflow、当前任务状态、开发者身份、git 状态、active tasks、spec 索引已加载。 Let me research the repository to understand what it is and how it makes external calls, then verify provider docs.
Agent context: Trellis SessionStart 已注入:workflow、当前任务状态、开发者身份、git 状态、active tasks、spec 索引已加载。 Let me research the repository to understand what it is and how it makes external calls, then verify provider docs. Tool result summary: 1 import json 2 import os 3 import shutil 4 import uuid 5 from typing import Any, Dict 6 7 from src.logging import get_logger 8 from src.utils.resource_finder import ( 9 get_config_dir, 10 get_user_cache_dir, 11 get_user_data_dir, 12 ) 13 14 logger = get_logger() 15 16 17 class ConfigManager: 18 """ 19 配置管理器. 20 """ 21 22 _instance = None 23 24 # 默认配置 25 DEFAULT_CONFIG = { 26 "SYSTEM_OPTIONS": { 27 "CLIENT_ID": None, Agent context: Trellis SessionStart 已注入:workflow、当前任务状态、开发者身份、git 状态、active tasks、spec 索引已加载。 Let me research the repository to understand what it is and how it makes external calls, then verify provider docs.
Agent context: Trellis SessionStart 已注入:workflow、当前任务状态、开发者身份、git 状态、active tasks、spec 索引已加载。 Let me research the repository to understand what it is and how it makes external calls, then verify provider docs. Tool result summary: /home/user/worktrees/attempt-c569d86f-d7c1-4142-8e6f-3a61fb15a399-cap-1/src/activation/service.py:import aiohttp /home/user/worktrees/attempt-c569d86f-d7c1-4142-8e6f-3a61fb15a399-cap-1/src/activation/service.py: await self._fetch_ota_config() /home/user/worktrees/attempt-c569d86f-d7c1-4142-8e6f-3a61fb15a399-cap-1/src/activation/service.py: async def _fetch_ota_config(self) -> Dict: /home/user/worktrees/attempt-c569d8 Agent context: Trellis SessionStart 已注入:workflow、当前任务状态、开发者身份、git 状态、active tasks、spec 索引已加载。 Let me research the repository to understand what it is and how it makes external calls, then verify provider docs.
Agent context: Trellis SessionStart 已注入:workflow、当前任务状态、开发者身份、git 状态、active tasks、spec 索引已加载。 Let me research the repository to understand what it is and how it makes external calls, then verify provider docs. Tool result summary: 1 # -*- coding: utf-8 -*- 2 """ 3 统一激活服务. 4 """ 5 6 import asyncio 7 import hashlib 8 import hmac 9 import json 10 import platform 11 import socket 12 import ssl 13 from pathlib import Path 14 from typing import Dict, Optional, Tuple, TypedDict 15 16 import aiohttp 17 import machineid 18 import psutil 19 20 from src.constants.system import SystemConstants 21 from src.logging import get_logger 22 from src.utils.config Agent context: Trellis SessionStart 已注入:workflow、当前任务状态、开发者身份、git 状态、active tasks、spec 索引已加载。 Let me research the repository to understand what it is and how it makes external calls, then verify provider docs.
Agent context: Trellis SessionStart 已注入:workflow、当前任务状态、开发者身份、git 状态、active tasks、spec 索引已加载。 Let me research the repository to understand what it is and how it makes external calls, then verify provider docs. Tool result summary: EISDIR: illegal operation on a directory, read '/home/user/worktrees/attempt-c569d86f-d7c1-4142-8e6f-3a61fb15a399-cap-1/src/protocols' Agent context: Trellis SessionStart 已注入:workflow、当前任务状态、开发者身份、git 状态、active tasks、spec 索引已加载。 Let me research the repository to understand what it is and how it makes external calls, then verify provider docs.
Agent context: Trellis SessionStart 已注入:workflow、当前任务状态、开发者身份、git 状态、active tasks、spec 索引已加载。 Let me research the repository to understand what it is and how it makes external calls, then verify provider docs. Tool result summary: /home/user/worktrees/attempt-c569d86f-d7c1-4142-8e6f-3a61fb15a399-cap-1/src/protocols/mqtt_protocol.py /home/user/worktrees/attempt-c569d86f-d7c1-4142-8e6f-3a61fb15a399-cap-1/src/protocols/protocol.py /home/user/worktrees/attempt-c569d86f-d7c1-4142-8e6f-3a61fb15a399-cap-1/src/protocols/websocket_protocol.py Agent context: Trellis SessionStart 已注入:workflow、当前任务状态、开发者身份、git 状态、active tasks、spec 索引已加载。 Let me research the repository to understand what it is and how it makes external calls, then verify provider docs.
Agent context: Trellis SessionStart 已注入:workflow、当前任务状态、开发者身份、git 状态、active tasks、spec 索引已加载。 Let me research the repository to understand what it is and how it makes external calls, then verify provider docs. Tool result summary: 1 import asyncio 2 import json 3 4 from src.constants.constants import AbortReason, ListeningMode 5 from src.logging import get_logger 6 7 logger = get_logger() 8 9 10 class Protocol: 11 def __init__(self): 12 self.session_id = "" 13 # 初始化回调函数为None 14 self._on_incoming_json = None 15 self._on_incoming_audio = None 16 self._on_audio_channel_opened = None 17 self._on_audio_channel_closed = None 18 self._on_network_erro Agent context: Trellis SessionStart 已注入:workflow、当前任务状态、开发者身份、git 状态、active tasks、spec 索引已加载。 Let me research the repository to understand what it is and how it makes external calls, then verify provider docs.
Agent context: Trellis SessionStart 已注入:workflow、当前任务状态、开发者身份、git 状态、active tasks、spec 索引已加载。 Let me research the repository to understand what it is and how it makes external calls, then verify provider docs. Tool result summary: 1 import argparse 2 import asyncio 3 import locale 4 import os 5 import signal 6 import sys 7 8 # Windows: 强制 C/C++ 运行时使用 UTF-8,解决 sherpa-onnx 读取声调拼音文件乱码 9 if sys.platform == "win32": 10 os.environ["PYTHONIOENCODING"] = "utf-8" 11 try: 12 locale.setlocale(locale.LC_ALL, ".UTF-8") 13 except locale.Error: 14 pass 15 16 os.environ["QSG_RHI_BACKEND"] = "opengl" 17 # 强制 qasync 使用 PySide6 18 os.environ["QT_API"] = "pyside6 Agent context: Trellis SessionStart 已注入:workflow、当前任务状态、开发者身份、git 状态、active tasks、spec 索引已加载。 Let me research the repository to understand what it is and how it makes external calls, then verify provider docs.
Agent context: Trellis SessionStart 已注入:workflow、当前任务状态、开发者身份、git 状态、active tasks、spec 索引已加载。 Let me research the repository to understand what it is and how it makes external calls, then verify provider docs. Tool result summary: (Bash completed with no output) Agent context: Trellis SessionStart 已注入:workflow、当前任务状态、开发者身份、git 状态、active tasks、spec 索引已加载。 Let me research the repository to understand what it is and how it makes external calls, then verify provider docs. Provider mentions: openai
Agent context: Trellis SessionStart 已注入:workflow、当前任务状态、开发者身份、git 状态、active tasks、spec 索引已加载。 Let me research the repository to understand what it is and how it makes external calls, then verify provider docs. Tool result summary: /home/user/worktrees/attempt-c569d86f-d7c1-4142-8e6f-3a61fb15a399-cap-1/pyproject.toml: "openai>=1.0.0", /home/user/worktrees/attempt-c569d86f-d7c1-4142-8e6f-3a61fb15a399-cap-1/src/mcp/tools/camera/vl_camera.py:from openai import OpenAI Agent context: Trellis SessionStart 已注入:workflow、当前任务状态、开发者身份、git 状态、active tasks、spec 索引已加载。 Let me research the repository to understand what it is and how it makes external calls, then verify provider docs. Provider mentions: openai
Agent context: Trellis SessionStart 已注入:workflow、当前任务状态、开发者身份、git 状态、active tasks、spec 索引已加载。 Let me research the repository to understand what it is and how it makes external calls, then verify provider docs. Tool result summary: total 56 drwxr-xr-x 3 user user 4096 Jun 5 23:29 . drwxr-xr-x 14 user user 4096 Jun 5 23:29 .. -rw-r--r-- 1 user user 6547 Jun 5 23:29 audio.py -rw-r--r-- 1 user user 3667 Jun 5 23:29 base.py -rw-r--r-- 1 user user 7191 Jun 5 23:29 manager.py -rw-r--r-- 1 user user 2835 Jun 5 23:29 mcp.py drwxr-xr-x 2 user user 4096 Jun 5 23:29 shortcuts -rw-r--r-- 1 user user 11213 Jun 5 23:29 ui.py -rw-r--r-- 1 user user 4438 Jun 5 Agent context: Trellis SessionStart 已注入:workflow、当前任务状态、开发者身份、git 状态、active tasks、spec 索引已加载。 Let me research the repository to understand what it is and how it makes external calls, then verify provider docs.
Agent context: Trellis SessionStart 已注入:workflow、当前任务状态、开发者身份、git 状态、active tasks、spec 索引已加载。 Let me research the repository to understand what it is and how it makes external calls, then verify provider docs. Tool result summary: 1 """ 2 天气工具 MCP 示例 3 4 使用 @mcp_tool 装饰器注册工具,自动发现并加载。 5 """ 6 7 # 导入以触发装饰器注册 8 from .weather_tools import get_forecast, get_weather 9 10 __all__ = ["get_weather", "get_forecast"] 11 Agent context: Trellis SessionStart 已注入:workflow、当前任务状态、开发者身份、git 状态、active tasks、spec 索引已加载。 Let me research the repository to understand what it is and how it makes external calls, then verify provider docs.
Agent context: Trellis SessionStart 已注入:workflow、当前任务状态、开发者身份、git 状态、active tasks、spec 索引已加载。 Let me research the repository to understand what it is and how it makes external calls, then verify provider docs. Tool result summary: 1 """ 2 VL camera implementation using Zhipu AI. 3 """ 4 5 import base64 6 import json 7 8 import httpx 9 from openai import OpenAI 10 11 from src.logging import get_logger 12 from src.utils.config_manager import ConfigManager 13 14 from .base_camera import BaseCamera 15 16 logger = get_logger() 17 18 19 class VLCamera(BaseCamera): 20 """ 21 智普AI摄像头实现. 22 """ 23 24 def __init__(self): 25 """ 26 初始化智普AI摄像头. 27 """ 28 Agent context: Trellis SessionStart 已注入:workflow、当前任务状态、开发者身份、git 状态、active tasks、spec 索引已加载。 Let me research the repository to understand what it is and how it makes external calls, then verify provider docs. Provider mentions: openai
Agent context: Trellis SessionStart 已注入:workflow、当前任务状态、开发者身份、git 状态、active tasks、spec 索引已加载。 Let me research the repository to understand what it is and how it makes external calls, then verify provider docs. Tool result summary: 1 """MCP 插件. 2 3 管理 MCP 工具和消息处理。 4 """ 5 6 from typing import TYPE_CHECKING, Optional 7 8 from src.logging import get_logger 9 from src.mcp.mcp_server import McpServer 10 from src.plugins.base import Plugin 11 12 if TYPE_CHECKING: 13 from src.bootstrap.protocols import PluginCommands, PluginContext 14 15 logger = get_logger() 16 17 18 class McpPlugin(Plugin): 19 name = "mcp" 20 priority = 20 # 工具注册,需要较早初始化 21 22 def Agent context: Trellis SessionStart 已注入:workflow、当前任务状态、开发者身份、git 状态、active tasks、spec 索引已加载。 Let me research the repository to understand what it is and how it makes external calls, then verify provider docs.
Agent context: Trellis SessionStart 已注入:workflow、当前任务状态、开发者身份、git 状态、active tasks、spec 索引已加载。 Let me research the repository to understand what it is and how it makes external calls, then verify provider docs. Tool result summary: /home/user/worktrees/attempt-c569d86f-d7c1-4142-8e6f-3a61fb15a399-cap-1/src/activation/service.py: "SYSTEM_OPTIONS.NETWORK.WEBSOCKET_ACCESS_TOKEN", token /home/user/worktrees/attempt-c569d86f-d7c1-4142-8e6f-3a61fb15a399-cap-1/src/logging/filters.py: (re.compile(r"sk-[A-Za-z0-9]{32,}"), "[API_KEY]"), /home/user/worktrees/attempt-c569d86f-d7c1-4142-8e6f-3a61fb15a399-cap-1/src/logging/filters.py: (re.compile(r"pk-[A-Za- Agent context: Trellis SessionStart 已注入:workflow、当前任务状态、开发者身份、git 状态、active tasks、spec 索引已加载。 Let me research the repository to understand what it is and how it makes external calls, then verify provider docs.
Agent context: Trellis SessionStart 已注入:workflow、当前任务状态、开发者身份、git 状态、active tasks、spec 索引已加载。 Let me research the repository to understand what it is and how it makes external calls, then verify provider docs. Tool result summary: 1 import asyncio 2 import json 3 import ssl 4 5 import websockets 6 7 from src.constants.constants import AudioConfig 8 from src.logging import get_logger 9 from src.protocols.protocol import Protocol 10 from src.utils.config_manager import ConfigManager 11 12 # 服务器可能使用自签名证书,暂时跳过客户端证书验证 13 # 以避免生产环境中非正规SSL证书导致连接失败 14 ssl_context = ssl._create_unverified_context() 15 16 logger = get_logger() 17 18 19 class WebsocketPr Agent context: Trellis SessionStart 已注入:workflow、当前任务状态、开发者身份、git 状态、active tasks、spec 索引已加载。 Let me research the repository to understand what it is and how it makes external calls, then verify provider docs.
Agent context: Trellis SessionStart 已注入:workflow、当前任务状态、开发者身份、git 状态、active tasks、spec 索引已加载。 Let me research the repository to understand what it is and how it makes external calls, then verify provider docs. Tool result summary: 29 Agent context: Trellis SessionStart 已注入:workflow、当前任务状态、开发者身份、git 状态、active tasks、spec 索引已加载。 Let me research the repository to understand what it is and how it makes external calls, then verify provider docs.
Agent context: Good — it's **py-xiaozhi**, an async Python voice-assistant with an MCP tool registry (`src/mcp/tools/`). A web-search tool plugs in cleanly as a new MCP tool. Now I'll verify the finalist providers against their current official docs in parallel. Good — it's **py-xiaozhi**, an async Python voice-assistant with an MCP tool registry (`src/mcp/tools/`). A web-search tool plugs in cleanly as a new MCP tool. Now I'll verify the finalist providers against their current official docs in parallel.
Query/prompt: What endpoints exist, base URL, authentication method? List all API endpoints (search, extract, crawl, map, etc.). Agent context: Good — it's **py-xiaozhi**, an async Python voice-assistant with an MCP tool registry (`src/mcp/tools/`). A web-search tool plugs in cleanly as a new MCP tool. Now I'll verify the finalist providers against their current official docs in parallel. Fetch prompt: What endpoints exist, base URL, authentication method? List all API endpoints (search, extract, crawl, map, etc.). Tool result summary: # Tavily API Overview **Base URL:** `https://api.tavily.com` **Authentication:** API keys via Bearer token in the Authorization header. "Get your free API key" from the Tavily dashboard. ## Available Endpoints The Tavily API provides four main endpoints: 1. **`/search`** — A web search API for querying information across the internet 2. **`/extract`** — A content extraction tool for pulling data from web pages 3. **` Agent context: Good — it's **py-xiaozhi**, an async Python voice-assistant with an MCP tool registry (`src/mcp/tools/`). A web-search tool plugs in cleanly as a new MCP tool. Now I'll verify the finalist providers against their current official docs in parallel. Provider mentions: together-ai
Query/prompt: Is there an official Python SDK? Package name? Does it support async (asyncio/httpx)? What classes (TavilyClient, AsyncTavilyClient)? How is it installed and used? Agent context: Good — it's **py-xiaozhi**, an async Python voice-assistant with an MCP tool registry (`src/mcp/tools/`). A web-search tool plugs in cleanly as a new MCP tool. Now I'll verify the finalist providers against their current official docs in parallel. Fetch prompt: Is there an official Python SDK? Package name? Does it support async (asyncio/httpx)? What classes (TavilyClient, AsyncTavilyClient)? How is it installed and used? Tool result summary: # Tavily Python SDK Overview **Official SDK:** Yes, there is an official Python SDK. **Package Name:** `tavily-python` (installable via `pip install tavily-python`) **Async Support:** The documentation confirms that "We offer both a synchronous and an asynchronous client, for increased flexibility," though specific async library details aren't provided in this excerpt. **Classes:** The documentation mentions `TavilyC Agent context: Good — it's **py-xiaozhi**, an async Python voice-assistant with an MCP tool registry (`src/mcp/tools/`). A web-search tool plugs in cleanly as a new MCP tool. Now I'll verify the finalist providers against their current official docs in parallel.
Query/prompt: Extract: base API URL, all available endpoints (search, contents, answer, findSimilar, etc.), authentication method (header name), and any mention of neural vs keyword search or RAG/LLM grounding positioning. Agent context: Good — it's **py-xiaozhi**, an async Python voice-assistant with an MCP tool registry (`src/mcp/tools/`). A web-search tool plugs in cleanly as a new MCP tool. Now I'll verify the finalist providers against their current official docs in parallel. Fetch prompt: Extract: base API URL, all available endpoints (search, contents, answer, findSimilar, etc.), authentication method (header name), and any mention of neural vs keyword search or RAG/LLM grounding positioning. Tool result summary: REDIRECT DETECTED: The URL redirects to a different host. Original URL: https://docs.exa.ai/reference/getting-started Redirect URL: https://exa.ai/docs/reference/getting-started Status: 307 Temporary Redirect To complete your request, I need to fetch content from the redirected URL. Please use WebFetch again with these parameters: - url: "https://exa.ai/docs/reference/getting-started" - prompt: "Extract: base API URL Agent context: Good — it's **py-xiaozhi**, an async Python voice-assistant with an MCP tool registry (`src/mcp/tools/`). A web-search tool plugs in cleanly as a new MCP tool. Now I'll verify the finalist providers against their current official docs in parallel.
Query/prompt: Exa API documentation 2026 endpoints search contents answer findSimilar python SDK async Agent context: Good — it's **py-xiaozhi**, an async Python voice-assistant with an MCP tool registry (`src/mcp/tools/`). A web-search tool plugs in cleanly as a new MCP tool. Now I'll verify the finalist providers against their current official docs in parallel. Query: Exa API documentation 2026 endpoints search contents answer findSimilar python SDK async 10 search result links captured Tool result summary: Based on the search results, here's information about the Exa API documentation and its 2026 endpoints: ## Key API Endpoints The Exa API includes endpoints for search and crawl, answer generation, chat completions, and finding similar links with full text retrieval. ### Search Endpoints Exa 2.0 includes three major updates: Exa Fast (the fastest search API at sub-350ms), Exa Auto (the default search type with much hi Agent context: Good — it's **py-xiaozhi**, an async Python voice-assistant with an MCP tool registry (`src/mcp/tools/`). A web-search tool plugs in cleanly as a new MCP tool. Now I'll verify the finalist providers against their current official docs in parallel.
Query/prompt: Extract: available models (sonar, sonar-pro, etc.), base URL, whether it's OpenAI-compatible chat/completions API, authentication method, and any SDK info. Quote exact details. Agent context: Good — it's **py-xiaozhi**, an async Python voice-assistant with an MCP tool registry (`src/mcp/tools/`). A web-search tool plugs in cleanly as a new MCP tool. Now I'll verify the finalist providers against their current official docs in parallel. Fetch prompt: Extract: available models (sonar, sonar-pro, etc.), base URL, whether it's OpenAI-compatible chat/completions API, authentication method, and any SDK info. Quote exact details. Tool result summary: # Perplexity API Platform - Key Details **Available Models:** The documentation mentions "openai/gpt-5.5" and "openai/gpt-5.2" in code examples, but does not provide a comprehensive list of Sonar or other model variants. **Base URL:** The documentation references `https://api.perplexity.ai/search` for search operations and `https://api.perplexity.ai/v1/agent` for agent API calls. **API Compatibility:** The page does Agent context: Good — it's **py-xiaozhi**, an async Python voice-assistant with an MCP tool registry (`src/mcp/tools/`). A web-search tool plugs in cleanly as a new MCP tool. Now I'll verify the finalist providers against their current official docs in parallel. Provider mentions: openai
Query/prompt: Extract: all available models (sonar, sonar-pro, sonar-reasoning, sonar-deep-research etc.), their descriptions, context lengths, and intended use cases. Quote exact details. Agent context: Good — it's **py-xiaozhi**, an async Python voice-assistant with an MCP tool registry (`src/mcp/tools/`). A web-search tool plugs in cleanly as a new MCP tool. Now I'll verify the finalist providers against their current official docs in parallel. Fetch prompt: Extract: all available models (sonar, sonar-pro, sonar-reasoning, sonar-deep-research etc.), their descriptions, context lengths, and intended use cases. Quote exact details. Tool result summary: # Perplexity Sonar Models Overview Based on the documentation provided, here are the available models: ## Search Models **Sonar** - Description: "Lightweight, cost-effective search model with grounding." - Use case: Best for "quick factual queries, topic summaries, product comparisons, and current events" **Sonar Pro** - Description: "Advanced search offering with grounding, supporting complex queries and follow-ups. Agent context: Good — it's **py-xiaozhi**, an async Python voice-assistant with an MCP tool registry (`src/mcp/tools/`). A web-search tool plugs in cleanly as a new MCP tool. Now I'll verify the finalist providers against their current official docs in parallel.
Query/prompt: What does the search response look like? Does it include a generated "answer" field? Does it return content with sources/citations (results with url, content, score)? Is it positioned for LLM/RAG grounding? List response fields. Agent context: Good — it's **py-xiaozhi**, an async Python voice-assistant with an MCP tool registry (`src/mcp/tools/`). A web-search tool plugs in cleanly as a new MCP tool. Now I'll verify the finalist providers against their current official docs in parallel. Fetch prompt: What does the search response look like? Does it include a generated "answer" field? Does it return content with sources/citations (results with url, content, score)? Is it positioned for LLM/RAG grounding? List response fields. Tool result summary: # Tavily Search Response Structure Yes, the search response includes an **answer field** and is explicitly designed for LLM/RAG grounding. ## Key Response Fields: 1. **query** - The executed search query 2. **answer** - "A short answer to the user's query, generated by an LLM" (only if `include_answer` is requested) 3. **results** - Array of ranked search results with: - **title** - Result headline - **url** - Source Agent context: Good — it's **py-xiaozhi**, an async Python voice-assistant with an MCP tool registry (`src/mcp/tools/`). A web-search tool plugs in cleanly as a new MCP tool. Now I'll verify the finalist providers against their current official docs in parallel.
Query/prompt: What is the async client class name? Does it use asyncio/httpx? Show AsyncTavilyClient usage. List methods (search, extract, crawl, map, qna_search, get_search_context). Agent context: Good — it's **py-xiaozhi**, an async Python voice-assistant with an MCP tool registry (`src/mcp/tools/`). A web-search tool plugs in cleanly as a new MCP tool. Now I'll verify the finalist providers against their current official docs in parallel. Fetch prompt: What is the async client class name? Does it use asyncio/httpx? Show AsyncTavilyClient usage. List methods (search, extract, crawl, map, qna_search, get_search_context). Tool result summary: # Tavily AsyncTavilyClient Overview ## Class Name and Implementation The asynchronous client is called **`AsyncTavilyClient`**. According to the documentation, it's instantiated similarly to the synchronous version: ```python from tavily import AsyncTavilyClient client = AsyncTavilyClient("tvly-YOUR_API_KEY") ``` However, the provided documentation does not explicitly specify whether it uses `asyncio` or `httpx` unde Agent context: Good — it's **py-xiaozhi**, an async Python voice-assistant with an MCP tool registry (`src/mcp/tools/`). A web-search tool plugs in cleanly as a new MCP tool. Now I'll verify the finalist providers against their current official docs in parallel.
Query/prompt: Extract: API base URL, available endpoints (web search, news, summarizer, image, video, etc.), authentication method/header name, and any mention of Python SDK or async support. Agent context: Good — it's **py-xiaozhi**, an async Python voice-assistant with an MCP tool registry (`src/mcp/tools/`). A web-search tool plugs in cleanly as a new MCP tool. Now I'll verify the finalist providers against their current official docs in parallel. Fetch prompt: Extract: API base URL, available endpoints (web search, news, summarizer, image, video, etc.), authentication method/header name, and any mention of Python SDK or async support. Tool result summary: # Brave Search API - Key Information **API Base URL:** `https://api.search.brave.com/res/v1/` **Available Endpoints:** The documentation mentions several service APIs including web search, news search, video search, image search, summarizer, place search, LLM context, answers, autosuggest, and spellcheck functions. **Authentication Method:** The API uses token-based authentication via the header `X-Subscription-Token Agent context: Good — it's **py-xiaozhi**, an async Python voice-assistant with an MCP tool registry (`src/mcp/tools/`). A web-search tool plugs in cleanly as a new MCP tool. Now I'll verify the finalist providers against their current official docs in parallel.
Query/prompt: Brave Search API documentation 2026 endpoints summarizer pricing data for AI Agent context: Good — it's **py-xiaozhi**, an async Python voice-assistant with an MCP tool registry (`src/mcp/tools/`). A web-search tool plugs in cleanly as a new MCP tool. Now I'll verify the finalist providers against their current official docs in parallel. Query: Brave Search API documentation 2026 endpoints summarizer pricing data for AI 10 search result links captured Tool result summary: Based on the search results, here's what I found about Brave Search API documentation for 2026: ## Key Endpoints The API includes Search for search substrate, Answers for finished grounded output, LLM Context when you want Brave's retrieval layer but your own model, and Place Search when the object is a physical location. More specifically, the stack includes web/search for controllable retrieval, llm/context for mod Agent context: Good — it's **py-xiaozhi**, an async Python voice-assistant with an MCP tool registry (`src/mcp/tools/`). A web-search tool plugs in cleanly as a new MCP tool. Now I'll verify the finalist providers against their current official docs in parallel.
Query/prompt: Extract: base API URL, all available endpoints (search, contents, answer, findSimilar, etc.), authentication method (header name), Python SDK package name and whether it supports async, and any mention of neural vs keyword search or RAG/LLM grounding positioning. Agent context: Good — it's **py-xiaozhi**, an async Python voice-assistant with an MCP tool registry (`src/mcp/tools/`). A web-search tool plugs in cleanly as a new MCP tool. Now I'll verify the finalist providers against their current official docs in parallel. Fetch prompt: Extract: base API URL, all available endpoints (search, contents, answer, findSimilar, etc.), authentication method (header name), Python SDK package name and whether it supports async, and any mention of neural vs keyword search or RAG/LLM grounding positioning. Tool result summary: # Exa API Information **Base API URL:** Not explicitly stated in the provided content. **Available Endpoints:** - `/search` — "Find webpages using Exa's embeddings-based search and other intelligent methods" - `/contents` — Retrieve parsed HTML from search results - `/answer` — Direct question answering capability - `/research` — Automated web research with structured JSON output **Authentication Method:** Not specif Agent context: Good — it's **py-xiaozhi**, an async Python voice-assistant with an MCP tool registry (`src/mcp/tools/`). A web-search tool plugs in cleanly as a new MCP tool. Now I'll verify the finalist providers against their current official docs in parallel.
Query/prompt: Extract: Python SDK package name (pip install), whether it supports async, code examples showing endpoints used, authentication header, and base URL. Agent context: Good — it's **py-xiaozhi**, an async Python voice-assistant with an MCP tool registry (`src/mcp/tools/`). A web-search tool plugs in cleanly as a new MCP tool. Now I'll verify the finalist providers against their current official docs in parallel. Fetch prompt: Extract: Python SDK package name (pip install), whether it supports async, code examples showing endpoints used, authentication header, and base URL. Tool result summary: # Exa Python SDK Summary **Package Name:** `exa-py` **Async Support:** Not explicitly documented in the provided content. **Code Examples - Endpoints Used:** - `exa.search()` - "Get a list of results and their full text content" - `exa.stream_answer()` - "Get an answer to a question, grounded by citations from exa" - `client.chat.completions.create()` - Chat completions via OpenAI client **Authentication:** The SDK u Agent context: Good — it's **py-xiaozhi**, an async Python voice-assistant with an MCP tool registry (`src/mcp/tools/`). A web-search tool plugs in cleanly as a new MCP tool. Now I'll verify the finalist providers against their current official docs in parallel. Provider mentions: openai
Query/prompt: List all documentation page URLs and section titles, especially anything about chat completions, models, pricing, rate limits, OpenAI compatibility, async/python usage, search results/citations, and the SDK. Agent context: Good — it's **py-xiaozhi**, an async Python voice-assistant with an MCP tool registry (`src/mcp/tools/`). A web-search tool plugs in cleanly as a new MCP tool. Now I'll verify the finalist providers against their current official docs in parallel. Fetch prompt: List all documentation page URLs and section titles, especially anything about chat completions, models, pricing, rate limits, OpenAI compatibility, async/python usage, search results/citations, and the SDK. Tool result summary: # Perplexity API Documentation Index ## Core API References **Chat Completions & Models** - Create Chat Completion: `https://docs.perplexity.ai/api-reference/sonar-post.md` - Create Agent Response: `https://docs.perplexity.ai/api-reference/agent-post.md` - List Models: `https://docs.perplexity.ai/api-reference/models-get.md` **Async Operations** - Create Async Chat Completion: `https://docs.perplexity.ai/api-referenc Agent context: Good — it's **py-xiaozhi**, an async Python voice-assistant with an MCP tool registry (`src/mcp/tools/`). A web-search tool plugs in cleanly as a new MCP tool. Now I'll verify the finalist providers against their current official docs in parallel. Provider mentions: openai
Query/prompt: Extract: the full endpoint URL and method, request format, whether it is OpenAI chat/completions compatible, response format including citations and search_results fields, and any mention of AsyncOpenAI or OpenAI SDK. Quote exact details. Agent context: Good — it's **py-xiaozhi**, an async Python voice-assistant with an MCP tool registry (`src/mcp/tools/`). A web-search tool plugs in cleanly as a new MCP tool. Now I'll verify the finalist providers against their current official docs in parallel. Fetch prompt: Extract: the full endpoint URL and method, request format, whether it is OpenAI chat/completions compatible, response format including citations and search_results fields, and any mention of AsyncOpenAI or OpenAI SDK. Quote exact details. Tool result summary: # Perplexity AI API Endpoint Analysis **Full Endpoint URL and Method:** `POST https://api.perplexity.ai/v1/sonar` **Request Format:** JSON application/json with required fields: `"model"` and `"messages"`. The specification states: `"Model to use, for example, sonar-pro"` with enumerated options including sonar, sonar-pro, sonar-deep-research, and sonar-reasoning-pro. **OpenAI Compatibility:** The documentation does Agent context: Good — it's **py-xiaozhi**, an async Python voice-assistant with an MCP tool registry (`src/mcp/tools/`). A web-search tool plugs in cleanly as a new MCP tool. Now I'll verify the finalist providers against their current official docs in parallel. Provider mentions: openai
Query/prompt: What is the free tier? How many free monthly credits? Cost per call / credits per search and extract? Pricing plans? Agent context: Good — it's **py-xiaozhi**, an async Python voice-assistant with an MCP tool registry (`src/mcp/tools/`). A web-search tool plugs in cleanly as a new MCP tool. Now I'll verify the finalist providers against their current official docs in parallel. Fetch prompt: What is the free tier? How many free monthly credits? Cost per call / credits per search and extract? Pricing plans? Tool result summary: # Tavily API: Free Tier & Pricing Summary **Free Tier:** "You get 1,000 free API Credits every month. **No credit card required.**" **Cost Per Operation:** - Basic Search: 1 credit per request - Advanced Search: 2 credits per request - Basic Extract: 1 credit per 5 successful URL extractions - Advanced Extract: 2 credits per 5 successful URL extractions - Regular Mapping: 1 credit per 10 pages - Mapping with instruct Agent context: Good — it's **py-xiaozhi**, an async Python voice-assistant with an MCP tool registry (`src/mcp/tools/`). A web-search tool plugs in cleanly as a new MCP tool. Now I'll verify the finalist providers against their current official docs in parallel.
Query/prompt: Tavily pricing free tier monthly credits 2026 plan Researcher Agent context: Good — it's **py-xiaozhi**, an async Python voice-assistant with an MCP tool registry (`src/mcp/tools/`). A web-search tool plugs in cleanly as a new MCP tool. Now I'll verify the finalist providers against their current official docs in parallel. Query: Tavily pricing free tier monthly credits 2026 plan Researcher 10 search result links captured Tool result summary: Based on the search results, here's what I found about Tavily pricing for 2026: ## Free Tier Tavily's free plan includes 1,000 API credits/month, Community support, Search + extract endpoints. Tavily offers a forever free plan as of May 2026 with no time limit. ## Researcher Plan Paid plans start at $30/month (Researcher), which is designed for individual AI developers. With annual billing, the Researcher plan costs Agent context: Good — it's **py-xiaozhi**, an async Python voice-assistant with an MCP tool registry (`src/mcp/tools/`). A web-search tool plugs in cleanly as a new MCP tool. Now I'll verify the finalist providers against their current official docs in parallel.
Query/prompt: Does the Python SDK (exa-py) support async? Is there an AsyncExa class? List the main methods (search, search_and_contents, get_contents, find_similar, answer, stream_answer). What is the package name? Agent context: Good — it's **py-xiaozhi**, an async Python voice-assistant with an MCP tool registry (`src/mcp/tools/`). A web-search tool plugs in cleanly as a new MCP tool. Now I'll verify the finalist providers against their current official docs in parallel. Fetch prompt: Does the Python SDK (exa-py) support async? Is there an AsyncExa class? List the main methods (search, search_and_contents, get_contents, find_similar, answer, stream_answer). What is the package name? Tool result summary: # Exa Python SDK Async Support Based on the documentation provided, **async support is not explicitly documented or mentioned** for the exa-py SDK. The documentation only shows synchronous examples using the standard `Exa` class. ## Main Methods The SDK includes these primary methods: 1. **search** - "Perform a search" 2. **find_similar** - Find pages similar to a given URL (deprecated) 3. **get_contents** - "Retriev Agent context: Good — it's **py-xiaozhi**, an async Python voice-assistant with an MCP tool registry (`src/mcp/tools/`). A web-search tool plugs in cleanly as a new MCP tool. Now I'll verify the finalist providers against their current official docs in parallel.
Query/prompt: Describe the /answer endpoint: does it return an LLM-generated answer with citations? What does the response format look like (answer text, citations array with full text/highlights)? Base URL and auth header? Agent context: Good — it's **py-xiaozhi**, an async Python voice-assistant with an MCP tool registry (`src/mcp/tools/`). A web-search tool plugs in cleanly as a new MCP tool. Now I'll verify the finalist providers against their current official docs in parallel. Fetch prompt: Describe the /answer endpoint: does it return an LLM-generated answer with citations? What does the response format look like (answer text, citations array with full text/highlights)? Base URL and auth header? Tool result summary: # Exa /answer Endpoint Overview ## Functionality Yes, the `/answer` endpoint returns an LLM-generated response with citations. It performs two types of returns: direct answers for specific queries (e.g., "What is the capital of France?" → "Paris") and detailed summaries with citations for open-ended questions. ## Response Format The response includes: - **answer**: The generated text or structured JSON (if `outputSch Agent context: Good — it's **py-xiaozhi**, an async Python voice-assistant with an MCP tool registry (`src/mcp/tools/`). A web-search tool plugs in cleanly as a new MCP tool. Now I'll verify the finalist providers against their current official docs in parallel.
Query/prompt: Exa API pricing free tier credits 2026 per search per page Agent context: Good — it's **py-xiaozhi**, an async Python voice-assistant with an MCP tool registry (`src/mcp/tools/`). A web-search tool plugs in cleanly as a new MCP tool. Now I'll verify the finalist providers against their current official docs in parallel. Query: Exa API pricing free tier credits 2026 per search per page 10 search result links captured Tool result summary: Based on the search results, here's what I found about Exa API pricing for 2026: ## Exa API Pricing Structure Exa charges $5 per 1,000 searches plus $1 per 1,000 pages for text or highlights. ## Free Tier Credits The search results mention that you can build comprehensive web search into your startup or education project for free, and that Exa offers free API credits to get started. However, the specific number of fr Agent context: Good — it's **py-xiaozhi**, an async Python voice-assistant with an MCP tool registry (`src/mcp/tools/`). A web-search tool plugs in cleanly as a new MCP tool. Now I'll verify the finalist providers against their current official docs in parallel.
Query/prompt: Extract all pricing tiers, plan names, free tier/credits details, cost per 1000 queries or per query, and any "Data for AI" or grounding-specific plans. Include exact numbers and dates if shown. Agent context: Good — it's **py-xiaozhi**, an async Python voice-assistant with an MCP tool registry (`src/mcp/tools/`). A web-search tool plugs in cleanly as a new MCP tool. Now I'll verify the finalist providers against their current official docs in parallel. Fetch prompt: Extract all pricing tiers, plan names, free tier/credits details, cost per 1000 queries or per query, and any "Data for AI" or grounding-specific plans. Include exact numbers and dates if shown. Tool result summary: # Brave Search API Pricing Summary **Search API** - Cost: "$5.00 per 1,000 requests" - Free monthly credit: $5 - Capacity: 50 requests/second - Includes web search with human-readable URLs, LLM-optimized context, news, videos, and images **Answers API** - Cost: "$4.00 per 1,000 queries" plus token charges - Additional fees: "$5.00 per 1,000,000 input tokens" and "$5.00 per 1,000,000 output tokens" - Free monthly cred Agent context: Good — it's **py-xiaozhi**, an async Python voice-assistant with an MCP tool registry (`src/mcp/tools/`). A web-search tool plugs in cleanly as a new MCP tool. Now I'll verify the finalist providers against their current official docs in parallel.
Query/prompt: Extract: how the API is positioned (LLM grounding? independent index?), index size, what endpoints/plans are offered, summarizer/AI answers features, and any 2025/2026 changes mentioned. Agent context: Good — it's **py-xiaozhi**, an async Python voice-assistant with an MCP tool registry (`src/mcp/tools/`). A web-search tool plugs in cleanly as a new MCP tool. Now I'll verify the finalist providers against their current official docs in parallel. Fetch prompt: Extract: how the API is positioned (LLM grounding? independent index?), index size, what endpoints/plans are offered, summarizer/AI answers features, and any 2025/2026 changes mentioned. Tool result summary: # Brave Search API Overview ## Positioning Brave positions the API as **LLM grounding and RAG pipelines** for AI agents. The service emphasizes reducing hallucinations through real-time web data and grounding responses "with multiple sources." It's marketed as an independent alternative to Google/Bing, powered by Brave's own index rather than scraping competitors. ## Index Size & Freshness The index contains **"over Agent context: Good — it's **py-xiaozhi**, an async Python voice-assistant with an MCP tool registry (`src/mcp/tools/`). A web-search tool plugs in cleanly as a new MCP tool. Now I'll verify the finalist providers against their current official docs in parallel.
Query/prompt: Extract exactly: the base_url to use with OpenAI SDK, whether AsyncOpenAI async client is supported, code examples (Python), and the exact chat completions endpoint path. Quote precisely. Agent context: Good — it's **py-xiaozhi**, an async Python voice-assistant with an MCP tool registry (`src/mcp/tools/`). A web-search tool plugs in cleanly as a new MCP tool. Now I'll verify the finalist providers against their current official docs in parallel. Fetch prompt: Extract exactly: the base_url to use with OpenAI SDK, whether AsyncOpenAI async client is supported, code examples (Python), and the exact chat completions endpoint path. Quote precisely. Tool result summary: # OpenAI SDK with Perplexity Sonar API ## Base URL Use `"https://api.perplexity.ai"` when configuring the OpenAI client. ## Async Client Support Yes, the async OpenAI client is supported. The documentation mentions `"client.async_.chat.completions.create()"` mapping to `"POST /v1/async/sonar"`. ## Python Code Example ```python import os from openai import OpenAI client = OpenAI( api_key=os.environ.get("PERPLEXITY_API Agent context: Good — it's **py-xiaozhi**, an async Python voice-assistant with an MCP tool registry (`src/mcp/tools/`). A web-search tool plugs in cleanly as a new MCP tool. Now I'll verify the finalist providers against their current official docs in parallel. Provider mentions: openai
Query/prompt: Does AsyncTavilyClient use httpx or aiohttp under the hood? What async HTTP library does it depend on? What Python versions are supported? List methods including qna_search, get_search_context. Agent context: Good — it's **py-xiaozhi**, an async Python voice-assistant with an MCP tool registry (`src/mcp/tools/`). A web-search tool plugs in cleanly as a new MCP tool. Now I'll verify the finalist providers against their current official docs in parallel. Fetch prompt: Does AsyncTavilyClient use httpx or aiohttp under the hood? What async HTTP library does it depend on? What Python versions are supported? List methods including qna_search, get_search_context. Tool result summary: # AsyncTavilyClient Details **HTTP Library:** Based on the documentation provided, `AsyncTavilyClient` uses **httpx** under the hood. The example shows: "Pre-configure an async client with your gateway's auth" using `httpx.AsyncClient`. **Python Versions:** The provided content does not specify which Python versions are supported. **Available Methods:** The documentation mentions these methods: - `search()` - `qna_se Agent context: Good — it's **py-xiaozhi**, an async Python voice-assistant with an MCP tool registry (`src/mcp/tools/`). A web-search tool plugs in cleanly as a new MCP tool. Now I'll verify the finalist providers against their current official docs in parallel.
Query/prompt: Tavily 2025 2026 new features crawl map research API launch changelog Agent context: Good — it's **py-xiaozhi**, an async Python voice-assistant with an MCP tool registry (`src/mcp/tools/`). A web-search tool plugs in cleanly as a new MCP tool. Now I'll verify the finalist providers against their current official docs in parallel. Query: Tavily 2025 2026 new features crawl map research API launch changelog 10 search result links captured Tool result summary: Based on the search results, here's what Tavily has shipped in 2025 and 2026: ## Key Features and Launches **New Research API**: The new Research endpoint enables deep, end-to-end web research through a single API call. Given a query, it performs multiple iterative searches, reasons over the data, supports multi agent coordination, deduplication, and structured JSON outputs and returns a comprehensive report. In benc Agent context: Good — it's **py-xiaozhi**, an async Python voice-assistant with an MCP tool registry (`src/mcp/tools/`). A web-search tool plugs in cleanly as a new MCP tool. Now I'll verify the finalist providers against their current official docs in parallel. Provider mentions: openai
Query/prompt: Extract the full pricing model: per-token prices for each model (sonar, sonar-pro, sonar-reasoning-pro, sonar-deep-research), per-search-request fees, request fees by search context size, and whether there is a free tier or monthly credit. Quote exact numbers and dates if present. Agent context: Good — it's **py-xiaozhi**, an async Python voice-assistant with an MCP tool registry (`src/mcp/tools/`). A web-search tool plugs in cleanly as a new MCP tool. Now I'll verify the finalist providers against their current official docs in parallel. Fetch prompt: Extract the full pricing model: per-token prices for each model (sonar, sonar-pro, sonar-reasoning-pro, sonar-deep-research), per-search-request fees, request fees by search context size, and whether there is a free tier or monthly credit. Quote exact numbers and dates if present. Tool result summary: # Perplexity API Pricing Model ## Token Pricing (per 1M tokens) **Sonar Models:** - Sonar: "$1" input / "$1" output - Sonar Pro: "$3" input / "$15" output - Sonar Reasoning Pro: "$2" input / "$8" output - Sonar Deep Research: "$2" input / "$8" output, plus "$2" citation tokens and "$3" reasoning tokens ## Request Fees (per 1,000 requests) **Sonar by Search Context:** - Low: "$5" - Medium: "$8" - High: "$12" **Sonar P Agent context: Good — it's **py-xiaozhi**, an async Python voice-assistant with an MCP tool registry (`src/mcp/tools/`). A web-search tool plugs in cleanly as a new MCP tool. Now I'll verify the finalist providers against their current official docs in parallel.
Query/prompt: What is the pricing? Is there a free tier or free credits (how much, e.g. $10)? List per-search and per-page costs, and Exa Fast/Auto/Deep pricing if shown. Agent context: Good — it's **py-xiaozhi**, an async Python voice-assistant with an MCP tool registry (`src/mcp/tools/`). A web-search tool plugs in cleanly as a new MCP tool. Now I'll verify the finalist providers against their current official docs in parallel. Fetch prompt: What is the pricing? Is there a free tier or free credits (how much, e.g. $10)? List per-search and per-page costs, and Exa Fast/Auto/Deep pricing if shown. Tool result summary: # Exa API Pricing Overview ## Free Tier **"Run up to 1,000 requests per month for free"** with basic features including web search tool calls and webpage text extraction. ## Per-Request Pricing | Product | Cost | |---------|------| | Search | $7 per 1,000 requests | | Deep Search | $12–15 per 1,000 requests | | Contents | $1 per 1,000 pages | | Monitors | $15 per 1,000 requests | **Additional results:** $1 per 1,000 Agent context: Good — it's **py-xiaozhi**, an async Python voice-assistant with an MCP tool registry (`src/mcp/tools/`). A web-search tool plugs in cleanly as a new MCP tool. Now I'll verify the finalist providers against their current official docs in parallel.
Query/prompt: Does exa-py support async? Is there an AsyncExa class or async methods? What Python versions are supported? What is the current version? Agent context: Good — it's **py-xiaozhi**, an async Python voice-assistant with an MCP tool registry (`src/mcp/tools/`). A web-search tool plugs in cleanly as a new MCP tool. Now I'll verify the finalist providers against their current official docs in parallel. Fetch prompt: Does exa-py support async? Is there an AsyncExa class or async methods? What Python versions are supported? What is the current version? Tool result summary: # Exa-py Support Questions **Async Support:** Yes, exa-py supports async operations. The documentation includes an `AsyncExa` class: `"from exa_py import AsyncExa"` which allows asynchronous search calls like `"await exa.search()"`. **Python Version:** The package "Requires Python 3.9+" according to the installation section. **Current Version:** The repository shows a PyPI package link but does not explicitly state t Agent context: Good — it's **py-xiaozhi**, an async Python voice-assistant with an MCP tool registry (`src/mcp/tools/`). A web-search tool plugs in cleanly as a new MCP tool. Now I'll verify the finalist providers against their current official docs in parallel.
Query/prompt: Summarize the key 2025/2026 changes and new features introduced in Exa 2.0: Exa Fast, Exa Auto, Exa Deep, and any other notable new capabilities or endpoints. Agent context: Good — it's **py-xiaozhi**, an async Python voice-assistant with an MCP tool registry (`src/mcp/tools/`). A web-search tool plugs in cleanly as a new MCP tool. Now I'll verify the finalist providers against their current official docs in parallel. Fetch prompt: Summarize the key 2025/2026 changes and new features introduced in Exa 2.0: Exa Fast, Exa Auto, Exa Deep, and any other notable new capabilities or endpoints. Tool result summary: # Exa 2.0: Key Updates Summary Exa launched version 2.0 in October 2025 with three major search endpoint improvements: **Exa Fast:** Achieves "sub350ms" latency with P50 response times under 350 milliseconds—30% faster than competing APIs. This enables near-instantaneous search integration for AI applications requiring real-time grounding. **Exa Auto:** Positioned as the default search option, this endpoint balances Agent context: Good — it's **py-xiaozhi**, an async Python voice-assistant with an MCP tool registry (`src/mcp/tools/`). A web-search tool plugs in cleanly as a new MCP tool. Now I'll verify the finalist providers against their current official docs in parallel.
Query/prompt: List the exact endpoint paths under res/v1/ (e.g. web/search, news/search, summarizer/search, llm/context, chat/completions, images, videos, suggest, spellcheck). Is there a "summarizer" endpoint? Is there an "llm context" endpoint? Any OpenAI SDK compatibility mention? Agent context: Good — it's **py-xiaozhi**, an async Python voice-assistant with an MCP tool registry (`src/mcp/tools/`). A web-search tool plugs in cleanly as a new MCP tool. Now I'll verify the finalist providers against their current official docs in parallel. Fetch prompt: List the exact endpoint paths under res/v1/ (e.g. web/search, news/search, summarizer/search, llm/context, chat/completions, images, videos, suggest, spellcheck). Is there a "summarizer" endpoint? Is there an "llm context" endpoint? Any OpenAI SDK compatibility mention? Tool result summary: # Brave Search API Endpoints Based on the documentation provided, here are the confirmed endpoint paths under `/res/v1/`: **Confirmed Endpoints:** - `web/search` – Web search functionality - `news/search` – News search (mentioned in navigation) - `images` – Image search (referenced in menu) - `videos` – Video search (referenced in menu) - `suggest` – Autosuggest feature - `spellcheck` – Spellcheck service - `local/po Agent context: Good — it's **py-xiaozhi**, an async Python voice-assistant with an MCP tool registry (`src/mcp/tools/`). A web-search tool plugs in cleanly as a new MCP tool. Now I'll verify the finalist providers against their current official docs in parallel. Provider mentions: openai
Query/prompt: Extract any 2025/2026 changes to the Brave Search API: free tier elimination, new endpoints (Answers, LLM Context, Chat Completions), summarizer deprecation, pricing changes, Python SDK or async info. Agent context: Good — it's **py-xiaozhi**, an async Python voice-assistant with an MCP tool registry (`src/mcp/tools/`). A web-search tool plugs in cleanly as a new MCP tool. Now I'll verify the finalist providers against their current official docs in parallel. Fetch prompt: Extract any 2025/2026 changes to the Brave Search API: free tier elimination, new endpoints (Answers, LLM Context, Chat Completions), summarizer deprecation, pricing changes, Python SDK or async info. Tool result summary: # Brave Search API Changes in 2025/2026 Based on the provided content, here are the documented updates: ## New Endpoints The article confirms several specialized endpoints now available: - **LLM Context**: "Web search for machines and LLMs" - **Answers**: "AI-generated answers" - **Web Search**: "Web search for human consumption" - Additional endpoints for news, video, image, and location/POI searches ## Pricing Stru Agent context: Good — it's **py-xiaozhi**, an async Python voice-assistant with an MCP tool registry (`src/mcp/tools/`). A web-search tool plugs in cleanly as a new MCP tool. Now I'll verify the finalist providers against their current official docs in parallel.
Query/prompt: Extract: the official Perplexity Python SDK package name and install command, the import statement, whether there is async support (AsyncPerplexity or similar), and a minimal async Python code example. Quote exactly. Agent context: Good — it's **py-xiaozhi**, an async Python voice-assistant with an MCP tool registry (`src/mcp/tools/`). A web-search tool plugs in cleanly as a new MCP tool. Now I'll verify the finalist providers against their current official docs in parallel. Fetch prompt: Extract: the official Perplexity Python SDK package name and install command, the import statement, whether there is async support (AsyncPerplexity or similar), and a minimal async Python code example. Quote exactly. Tool result summary: # Perplexity Python SDK Details **Package Name & Install Command:** `"pip install perplexityai"` **Import Statement:** `"from perplexity import Perplexity"` **Async Support:** The documentation mentions that both SDKs include "synchronous and asynchronous clients," though no specific AsyncPerplexity class is shown in the provided content. **Minimal Async Example:** The webpage does not contain a concrete async code e Agent context: Good — it's **py-xiaozhi**, an async Python voice-assistant with an MCP tool registry (`src/mcp/tools/`). A web-search tool plugs in cleanly as a new MCP tool. Now I'll verify the finalist providers against their current official docs in parallel.
Query/prompt: List the most recent changelog entries from 2025 and 2026 with dates, especially new models, the agent API, official SDK launch, deprecations, or pricing changes. Quote dates and entries. Agent context: Good — it's **py-xiaozhi**, an async Python voice-assistant with an MCP tool registry (`src/mcp/tools/`). A web-search tool plugs in cleanly as a new MCP tool. Now I'll verify the finalist providers against their current official docs in parallel. Fetch prompt: List the most recent changelog entries from 2025 and 2026 with dates, especially new models, the agent API, official SDK launch, deprecations, or pricing changes. Quote dates and entries. Tool result summary: # Recent Changelog Entries (2025-2026) ## May 2026 **Finance Search Tool Launch** "The `finance_search` tool is now available in the Agent API" providing structured financial data including quotes, financials, earnings, and analyst estimates for public companies. ## April 2026 **New Third-Party Models** Agent API expanded support to include "Claude Opus 4.7, GPT-5.5, and Grok 4.20 Reasoning" for tool-calling and stru Agent context: Good — it's **py-xiaozhi**, an async Python voice-assistant with an MCP tool registry (`src/mcp/tools/`). A web-search tool plugs in cleanly as a new MCP tool. Now I'll verify the finalist providers against their current official docs in parallel. Provider mentions: openai
Query/prompt: Brave Search API official Python SDK async httpx REST-only 2026 Agent context: Good — it's **py-xiaozhi**, an async Python voice-assistant with an MCP tool registry (`src/mcp/tools/`). A web-search tool plugs in cleanly as a new MCP tool. Now I'll verify the finalist providers against their current official docs in parallel. Query: Brave Search API official Python SDK async httpx REST-only 2026 10 search result links captured Tool result summary: Based on the search results, I found information about Brave Search API Python SDK options available as of 2026: ## Official Python SDKs for Brave Search API There are multiple Python options for interacting with the Brave Search API: ### 1. **brave-search-python-client** (Official) The brave-search-python-client supports async operations and can be initialized as `BraveSearch()` for performing web searches using `We Agent context: Good — it's **py-xiaozhi**, an async Python voice-assistant with an MCP tool registry (`src/mcp/tools/`). A web-search tool plugs in cleanly as a new MCP tool. Now I'll verify the finalist providers against their current official docs in parallel. Provider mentions: openai
Query/prompt: Find any async Python code example using the official Perplexity SDK. What is the async client class name (e.g., AsyncPerplexity)? Quote the import and usage exactly. Agent context: Good — it's **py-xiaozhi**, an async Python voice-assistant with an MCP tool registry (`src/mcp/tools/`). A web-search tool plugs in cleanly as a new MCP tool. Now I'll verify the finalist providers against their current official docs in parallel. Fetch prompt: Find any async Python code example using the official Perplexity SDK. What is the async client class name (e.g., AsyncPerplexity)? Quote the import and usage exactly. Tool result summary: # Async Client Class Name Based on the documentation provided, the async client class is **`AsyncPerplexity`**. ## Import and Usage Example **Import:** ```python from perplexity import AsyncPerplexity ``` **Usage:** The documentation shows: "Simply import `AsyncPerplexity` instead of `Perplexity` and use `await` with each API call." Here's the exact code example from the content: ```python import os import asyncio fr Agent context: Good — it's **py-xiaozhi**, an async Python voice-assistant with an MCP tool registry (`src/mcp/tools/`). A web-search tool plugs in cleanly as a new MCP tool. Now I'll verify the finalist providers against their current official docs in parallel.
Agent context: ## Recommendation: **Tavily** For py-xiaozhi specifically — an async Python (3.10–3.12) voice assistant where a **server-side LLM already does the synthesis** and client MCP tools just return JSON content (the weather-tool pattern in `src/mcp/tools/`) — Tavily is the cleanest fit. **Why Tavily wins here (all verified on live docs):** - **Matches the async stack exactly.** Official `tavily-python` SDK ships an `AsyncTavilyClient` built on **httpx** — the same client `vl_camera.py` already uses. Drops into a new `src/mcp/tools/search/` module with near-zero friction. - **Right output shape for grounding.** Returns `results[]` with `title`/`url`/`content`/`raw_content`/`score` plus an optional generated `answer` field. Your server LLM can ground on the snippets directly, or you can pass the `answer` through — flexible, not opinionated. - **Best free tier for an OSS community project.** 1,000 credits/month, **no credit card**. Contributors self-provision a `tvly-` key via `config.get_config("SEARCH.TAVILY_API_KEY")`. Important since this is a community/hobbyist-deployed client, not a single hosted service. - **Purpose-built for LLM/RAG grounding** — exactly this use case. ## Alternatives considered | Provider | Verdict | Why not chosen | |---|---|---| | **Exa** | Strong #2 | Excellent neural/semantic search + content retrieval, async `AsyncExa`, 1k free/month. But its differentiators (neural similarity, deep/agentic research) exceed what a voice assistant needs, and per-call cost is higher at scale. Best if you later want semantic document discovery. | | **Perplexity Sonar** | Redundant here | Returns a *fully synthesized* answer with citations — but py-xiaozhi already has a server-side LLM doing synthesis. Layering Sonar means double-LLM, double cost (per-token **+** per-request), and **no free tier**. | | **Brave Search API** | More work | Independent index, good privacy, but **no official Python SDK** (REST-only via httpx), only a $5/month metered credit, and AI grounding is a separate two-step product. Less turnkey. | ## Documentation I actually consulted (live, 2025/2026 pages) - **Tavily:** docs.tavily.com — api-reference/introduction, endpoint/search, sdk/python (quick-start + reference), api-credits, changelog; pypi `tavily-python`. - **Exa:** exa.ai/docs — getting-started, quickstart, answer, python-sdk-spec; exa.ai/pricing; blog/exa-api-2-0; changelogs (Feb/Mar/May 2026); github exa-py. - **Perplexity:** docs.perplexity.ai — chat-completions, openai-compatibility, pricing, sdk/overview, changelog, models. - **Brave:** api-dashboard.search.brave.com docs — get-started, pricing; brave.com/search/api. ## One caveat to flag None of the four document China-specific coverage — they're global Western indexes. Since py-xiaozhi is a Chinese-first project, web results for China-domestic queries may be thinner. If that matters, keep the tool provider-pluggable (config-selected) so a Chinese search provider could be swapped in later behind the same MCP tool interface. Want me to scaffold the `src/mcp/tools/search/` Tavily tool following the weather-tool pattern? (I'd create a task first per the Trellis flow unless you say to skip it.) ## Recommendation: **Tavily** For py-xiaozhi specifically — an async Python (3.10–3.12) voice assistant where a **server-side LLM already does the synthesis** and client MCP tools just return JSON content (the weather-tool pattern in `src/mcp/tools/`) — Tavily is the cleanest fit. **Why Tavily wins here (all verified on live docs):** - **Matches the async stack exactly.** Official `tavily-python` SDK ships an `AsyncTavilyClient` built on **httpx** — the same client `vl_camera.py` already uses. Drops into a new `src/mcp/tools/search/` module with near-zero friction. - **Right output shape for grounding.** Returns `results[]` with `title`/`url`/`content`/`raw_content`/`score` plus an optional generated `answer` field. Your server LLM can ground on the snippets directly, or you can pass the `answer` through — flexible, not opinionated. - **Best free tier for an OSS community project.** 1,000 credits/month, **no credit card**. Contributors self-provision a `tvly-` key via `config.get_config("SEARCH.TAVILY_API_KEY")`. Important since this is a community/hobbyist-deployed client, not a single hosted service. - **Purpose-built for LLM/RAG grounding** — exactly this use case. ## Alternativ Provider mentions: openai
## Recommendation: **Tavily** For py-xiaozhi specifically — an async Python (3.10–3.12) voice assistant where a **server-side LLM already does the synthesis** and client MCP tools just return JSON content (the weather-tool pattern in `src/mcp/tools/`) — Tavily is the cleanest fit. **Why Tavily wins here (all verified on live docs):** - **Matches the async stack exactly.** Official `tavily-python` SDK ships an `AsyncTavilyClient` built on **httpx** — the same client `vl_camera.py` already uses. Drops into a new `src/mcp/tools/search/` module with near-zero friction. - **Right output shape for grounding.** Returns `results[]` with `title`/`url`/`content`/`raw_content`/`score` plus an optional generated `answer` field. Your server LLM can ground on the snippets directly, or you can pass the `answer` through — flexible, not opinionated. - **Best free tier for an OSS community project.** 1,000 credits/month, **no credit card**. Contributors self-provision a `tvly-` key via `config.get_config("SEARCH.TAVILY_API_KEY")`. Important since this is a community/hobbyist-deployed client, not a single hosted service. - **Purpose-built for LLM/RAG grounding** — exactly this use case. ## Alternatives considered | Provider | Verdict | Why not chosen | |---|---|---| | **Exa** | Strong #2 | Excellent neural/semantic search + content retrieval, async `AsyncExa`, 1k free/month. But its differentiato Provider mentions: openai