fix: Enhance tool binding in LangChainXAIService to support web search and update API handler for new parameters
This commit is contained in:
@@ -84,6 +84,72 @@ class LangChainXAIService:
|
||||
|
||||
return ChatXAI(**kwargs)
|
||||
|
||||
def bind_tools(
|
||||
self,
|
||||
model,
|
||||
collection_id: Optional[str] = None,
|
||||
enable_web_search: bool = False,
|
||||
web_search_config: Optional[Dict[str, Any]] = None,
|
||||
max_num_results: int = 10
|
||||
):
|
||||
"""
|
||||
Bindet xAI Tools (file_search und/oder web_search) an Model.
|
||||
|
||||
Args:
|
||||
model: ChatXAI model instance
|
||||
collection_id: Optional xAI Collection ID für file_search
|
||||
enable_web_search: Enable web search tool (default: False)
|
||||
web_search_config: Optional web search configuration:
|
||||
{
|
||||
'allowed_domains': ['example.com'], # Max 5 domains
|
||||
'excluded_domains': ['spam.com'], # Max 5 domains
|
||||
'enable_image_understanding': True
|
||||
}
|
||||
max_num_results: Max results from file search (default: 10)
|
||||
|
||||
Returns:
|
||||
Model with requested tools bound (file_search and/or web_search)
|
||||
"""
|
||||
tools = []
|
||||
|
||||
# Add file_search tool if collection_id provided
|
||||
if collection_id:
|
||||
self._log(f"🔍 Binding file_search: collection={collection_id}")
|
||||
tools.append({
|
||||
"type": "file_search",
|
||||
"vector_store_ids": [collection_id],
|
||||
"max_num_results": max_num_results
|
||||
})
|
||||
|
||||
# Add web_search tool if enabled
|
||||
if enable_web_search:
|
||||
self._log("🌐 Binding web_search")
|
||||
web_search_tool = {"type": "web_search"}
|
||||
|
||||
# Add optional web search filters
|
||||
if web_search_config:
|
||||
if 'allowed_domains' in web_search_config:
|
||||
domains = web_search_config['allowed_domains'][:5] # Max 5
|
||||
web_search_tool['filters'] = {'allowed_domains': domains}
|
||||
self._log(f" Allowed domains: {domains}")
|
||||
elif 'excluded_domains' in web_search_config:
|
||||
domains = web_search_config['excluded_domains'][:5] # Max 5
|
||||
web_search_tool['filters'] = {'excluded_domains': domains}
|
||||
self._log(f" Excluded domains: {domains}")
|
||||
|
||||
if web_search_config.get('enable_image_understanding'):
|
||||
web_search_tool['enable_image_understanding'] = True
|
||||
self._log(" Image understanding: enabled")
|
||||
|
||||
tools.append(web_search_tool)
|
||||
|
||||
if not tools:
|
||||
self._log("⚠️ No tools to bind (no collection_id and web_search disabled)", level='warn')
|
||||
return model
|
||||
|
||||
self._log(f"🔧 Binding {len(tools)} tool(s) to model")
|
||||
return model.bind_tools(tools)
|
||||
|
||||
def bind_file_search(
|
||||
self,
|
||||
model,
|
||||
@@ -91,25 +157,15 @@ class LangChainXAIService:
|
||||
max_num_results: int = 10
|
||||
):
|
||||
"""
|
||||
Bindet xAI file_search Tool an Model.
|
||||
Legacy method: Bindet nur file_search Tool an Model.
|
||||
|
||||
Args:
|
||||
model: ChatXAI model instance
|
||||
collection_id: xAI Collection ID (vector store)
|
||||
max_num_results: Max results from file search (default: 10)
|
||||
|
||||
Returns:
|
||||
Model with bound file_search tool
|
||||
Use bind_tools() for more flexibility.
|
||||
"""
|
||||
self._log(f"🔍 Binding file_search: collection={collection_id}, max_results={max_num_results}")
|
||||
|
||||
tools = [{
|
||||
"type": "file_search",
|
||||
"vector_store_ids": [collection_id],
|
||||
"max_num_results": max_num_results
|
||||
}]
|
||||
|
||||
return model.bind_tools(tools)
|
||||
return self.bind_tools(
|
||||
model=model,
|
||||
collection_id=collection_id,
|
||||
max_num_results=max_num_results
|
||||
)
|
||||
|
||||
async def invoke_chat(
|
||||
self,
|
||||
|
||||
Reference in New Issue
Block a user