Fix xAI API: migrate to Agent Tools API
xAI deprecated search_parameters - now requires Agent Tools API:
- Changed endpoint from /v1/chat/completions to /v1/responses
- Changed from messages array to input array format
- Changed from search_parameters to tools: [{"type": "x_search"}]
- Updated model selection to grok-4-1-fast (required for x_search tool)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -9,11 +9,11 @@ from . import cache, http
|
|||||||
OPENAI_MODELS_URL = "https://api.openai.com/v1/models"
|
OPENAI_MODELS_URL = "https://api.openai.com/v1/models"
|
||||||
OPENAI_FALLBACK_MODELS = ["gpt-5.2", "gpt-5.1", "gpt-5", "gpt-4o"]
|
OPENAI_FALLBACK_MODELS = ["gpt-5.2", "gpt-5.1", "gpt-5", "gpt-4o"]
|
||||||
|
|
||||||
# xAI API
|
# xAI API - Agent Tools API requires grok-4 family
|
||||||
XAI_MODELS_URL = "https://api.x.ai/v1/models"
|
XAI_MODELS_URL = "https://api.x.ai/v1/models"
|
||||||
XAI_ALIASES = {
|
XAI_ALIASES = {
|
||||||
"latest": "grok-3",
|
"latest": "grok-4-1-fast", # Required for x_search tool
|
||||||
"stable": "grok-3",
|
"stable": "grok-4-1-fast",
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
+8
-15
@@ -13,8 +13,8 @@ def _log_error(msg: str):
|
|||||||
sys.stderr.write(f"[X ERROR] {msg}\n")
|
sys.stderr.write(f"[X ERROR] {msg}\n")
|
||||||
sys.stderr.flush()
|
sys.stderr.flush()
|
||||||
|
|
||||||
# xAI uses chat completions endpoint
|
# xAI uses responses endpoint with Agent Tools API
|
||||||
XAI_CHAT_URL = "https://api.x.ai/v1/chat/completions"
|
XAI_RESPONSES_URL = "https://api.x.ai/v1/responses"
|
||||||
|
|
||||||
# Depth configurations: (min, max) posts to request
|
# Depth configurations: (min, max) posts to request
|
||||||
DEPTH_CONFIG = {
|
DEPTH_CONFIG = {
|
||||||
@@ -91,14 +91,13 @@ def search_x(
|
|||||||
# Adjust timeout based on depth
|
# Adjust timeout based on depth
|
||||||
timeout = 60 if depth == "quick" else 90 if depth == "default" else 120
|
timeout = 60 if depth == "quick" else 90 if depth == "default" else 120
|
||||||
|
|
||||||
# Use chat completions format with search enabled
|
# Use Agent Tools API with x_search tool
|
||||||
payload = {
|
payload = {
|
||||||
"model": model,
|
"model": model,
|
||||||
"messages": [
|
"tools": [
|
||||||
{
|
{"type": "x_search"}
|
||||||
"role": "system",
|
],
|
||||||
"content": "You are a research assistant with access to real-time X (Twitter) data. Search X and return structured results."
|
"input": [
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"role": "user",
|
"role": "user",
|
||||||
"content": X_SEARCH_PROMPT.format(
|
"content": X_SEARCH_PROMPT.format(
|
||||||
@@ -110,15 +109,9 @@ def search_x(
|
|||||||
),
|
),
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"search_parameters": {
|
|
||||||
"mode": "auto",
|
|
||||||
"sources": [{"type": "x"}],
|
|
||||||
"from_date": from_date,
|
|
||||||
"to_date": to_date,
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return http.post(XAI_CHAT_URL, payload, headers=headers, timeout=timeout)
|
return http.post(XAI_RESPONSES_URL, payload, headers=headers, timeout=timeout)
|
||||||
|
|
||||||
|
|
||||||
def parse_x_response(response: Dict[str, Any]) -> List[Dict[str, Any]]:
|
def parse_x_response(response: Dict[str, Any]) -> List[Dict[str, Any]]:
|
||||||
|
|||||||
Reference in New Issue
Block a user