Files
2026-07-13 13:39:38 +08:00

61 lines
1.6 KiB
Python

from abc import abstractmethod
from dataclasses import dataclass, field
from typing import Any
from livekit.agents import ProviderTool
class XAITool(ProviderTool):
"""Base class for xAI server-side provider tools."""
@abstractmethod
def to_dict(self) -> dict[str, Any]: ...
@dataclass
class WebSearch(XAITool):
"""Enable web search tool for real-time internet searches."""
def __post_init__(self) -> None:
super().__init__(id="xai_web_search")
def to_dict(self) -> dict[str, Any]:
return {"type": "web_search"}
@dataclass
class XSearch(XAITool):
"""Enable X (Twitter) search tool for searching posts."""
allowed_x_handles: list[str] | None = None
def __post_init__(self) -> None:
super().__init__(id="xai_x_search")
def to_dict(self) -> dict[str, Any]:
result: dict[str, Any] = {"type": "x_search"}
if self.allowed_x_handles:
result["allowed_x_handles"] = self.allowed_x_handles
return result
@dataclass
class FileSearch(XAITool):
"""Enable file search tool for searching uploaded document collections."""
vector_store_ids: list[str] = field(default_factory=list)
max_num_results: int | None = None
def __post_init__(self) -> None:
super().__init__(id="xai_file_search")
def to_dict(self) -> dict[str, Any]:
result: dict[str, Any] = {
"type": "file_search",
"vector_store_ids": self.vector_store_ids,
}
if self.max_num_results is not None:
result["max_num_results"] = self.max_num_results
return result