| Name | metorial-xai JSON |
| Version |
1.0.4
JSON |
| download |
| home_page | None |
| Summary | XAI (Grok) provider for Metorial |
| upload_time | 2025-10-30 05:03:20 |
| maintainer | None |
| docs_url | None |
| author | None |
| requires_python | >=3.10 |
| license | MIT |
| keywords |
ai
grok
llm
metorial
xai
|
| VCS |
 |
| bugtrack_url |
|
| requirements |
No requirements were recorded.
|
| Travis-CI |
No Travis.
|
| coveralls test coverage |
No coveralls.
|
# metorial-xai
XAI (Grok) provider integration for Metorial.
## Installation
```bash
pip install metorial-xai
# or
uv add metorial-xai
# or
poetry add metorial-xai
```
## Features
- š¤ **Grok Integration**: Full support for Grok models
- š” **Session Management**: Automatic tool lifecycle handling
- ā
**Strict Mode**: Built-in strict parameter validation
- ā” **Async Support**: Full async/await support
## Supported Models
All XAI Grok models that support function calling:
- `grok-beta`: Latest Grok model with enhanced reasoning
- `grok-2-1212`: Grok 2.0 December 2024 release
- `grok-2-vision-1212`: Grok 2.0 with vision capabilities
## Usage
### Quick Start (Recommended)
```python
import asyncio
from openai import AsyncOpenAI
from metorial import Metorial
async def main():
# Initialize clients
metorial = Metorial(api_key="...your-metorial-api-key...") # async by default
xai_client = AsyncOpenAI(
api_key="...your-xai-api-key...",
base_url="https://api.x.ai/v1"
)
# Run with automatic session management
response = await metorial.run(
"What are the latest commits in the metorial/websocket-explorer repository?",
"...your-mcp-server-deployment-id...", # can also be list
xai_client,
model="grok-beta",
max_iterations=25
)
print("Response:", response)
asyncio.run(main())
```
### Streaming Chat
```python
import asyncio
from openai import AsyncOpenAI
from metorial import Metorial
from metorial.types import StreamEventType
async def main():
# Initialize clients
metorial = Metorial(api_key="...your-metorial-api-key...")
xai_client = AsyncOpenAI(
api_key="...your-xai-api-key...",
base_url="https://api.x.ai/v1"
)
# Streaming chat with real-time responses
async def stream_action(session):
messages = [
{"role": "user", "content": "Explain quantum computing"}
]
async for event in metorial.stream(
xai_client, session, messages,
model="grok-beta",
max_iterations=25
):
if event.type == StreamEventType.CONTENT:
print(f"š¤ {event.content}", end="", flush=True)
elif event.type == StreamEventType.TOOL_CALL:
print(f"\nš§ Executing {len(event.tool_calls)} tool(s)...")
elif event.type == StreamEventType.COMPLETE:
print(f"\nā
Complete!")
await metorial.with_session("...your-server-deployment-id...", stream_action)
asyncio.run(main())
```
### Advanced Usage with Session Management
```python
import asyncio
from openai import OpenAI
from metorial import Metorial
from metorial_xai import MetorialXAISession
async def main():
# Initialize clients
metorial = Metorial(api_key="...your-metorial-api-key...")
# XAI uses OpenAI-compatible client
xai_client = OpenAI(
api_key="...your-xai-api-key...",
base_url="https://api.x.ai/v1"
)
# Create session with your server deployments
async with metorial.session(["...your-server-deployment-id..."]) as session:
# Create XAI-specific wrapper
xai_session = MetorialXAISession(session.tool_manager)
messages = [
{"role": "user", "content": "What are the latest commits?"}
]
response = xai_client.chat.completions.create(
model="grok-beta",
messages=messages,
tools=xai_session.tools
)
# Handle tool calls
tool_calls = response.choices[0].message.tool_calls
if tool_calls:
tool_responses = await xai_session.call_tools(tool_calls)
# Add to conversation
messages.append({
"role": "assistant",
"tool_calls": tool_calls
})
messages.extend(tool_responses)
# Continue conversation...
asyncio.run(main())
```
### Using Convenience Functions
```python
from metorial_xai import build_xai_tools, call_xai_tools
async def example():
# Get tools in XAI format
tools = build_xai_tools(tool_manager)
# Call tools from XAI response
tool_messages = await call_xai_tools(tool_manager, tool_calls)
```
## API Reference
### `MetorialXAISession`
Main session class for XAI integration.
```python
session = MetorialXAISession(tool_manager)
```
**Properties:**
- `tools`: List of tools in OpenAI-compatible format with strict mode
**Methods:**
- `async call_tools(tool_calls)`: Execute tool calls and return tool messages
### `build_xai_tools(tool_mgr)`
Build XAI-compatible tool definitions.
**Returns:** List of tool definitions in OpenAI format with strict mode
### `call_xai_tools(tool_mgr, tool_calls)`
Execute tool calls from XAI response.
**Returns:** List of tool messages
## Tool Format
Tools are converted to OpenAI-compatible format with strict mode enabled:
```python
{
"type": "function",
"function": {
"name": "tool_name",
"description": "Tool description",
"parameters": {
"type": "object",
"properties": {...},
"required": [...]
},
"strict": True
}
}
```
## XAI API Configuration
XAI uses the OpenAI-compatible API format. Configure your client like this:
```python
from openai import OpenAI
client = OpenAI(
api_key="...your-xai-api-key...",
base_url="https://api.x.ai/v1"
)
```
## Error Handling
```python
try:
response = await metorial.run(
"Your query", "...deployment-id...", xai_client,
model="grok-beta", max_iterations=25
)
except Exception as e:
print(f"Request failed: {e}")
```
Tool errors are automatically handled and returned as error messages.
## License
MIT License - see [LICENSE](../../LICENSE) file for details.
Raw data
{
"_id": null,
"home_page": null,
"name": "metorial-xai",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.10",
"maintainer_email": null,
"keywords": "ai, grok, llm, metorial, xai",
"author": null,
"author_email": "Metorial Team <support@metorial.com>",
"download_url": "https://files.pythonhosted.org/packages/eb/4a/424784a9b3393cec9750638b5daaf6b16bea12608f14b96e29b42c23e8f8/metorial_xai-1.0.4.tar.gz",
"platform": null,
"description": "# metorial-xai\n\nXAI (Grok) provider integration for Metorial.\n\n## Installation\n\n```bash\npip install metorial-xai\n# or\nuv add metorial-xai\n# or\npoetry add metorial-xai\n```\n\n## Features\n\n- \ud83e\udd16 **Grok Integration**: Full support for Grok models\n- \ud83d\udce1 **Session Management**: Automatic tool lifecycle handling\n- \u2705 **Strict Mode**: Built-in strict parameter validation\n- \u26a1 **Async Support**: Full async/await support\n\n## Supported Models\n\nAll XAI Grok models that support function calling:\n\n- `grok-beta`: Latest Grok model with enhanced reasoning\n- `grok-2-1212`: Grok 2.0 December 2024 release\n- `grok-2-vision-1212`: Grok 2.0 with vision capabilities\n\n## Usage\n\n### Quick Start (Recommended)\n\n```python\nimport asyncio\nfrom openai import AsyncOpenAI\nfrom metorial import Metorial\n\nasync def main():\n # Initialize clients\n metorial = Metorial(api_key=\"...your-metorial-api-key...\") # async by default\n xai_client = AsyncOpenAI(\n api_key=\"...your-xai-api-key...\", \n base_url=\"https://api.x.ai/v1\"\n )\n \n # Run with automatic session management\n response = await metorial.run(\n \"What are the latest commits in the metorial/websocket-explorer repository?\",\n \"...your-mcp-server-deployment-id...\", # can also be list\n xai_client,\n model=\"grok-beta\",\n max_iterations=25\n )\n \n print(\"Response:\", response)\n\nasyncio.run(main())\n```\n\n### Streaming Chat\n\n```python\nimport asyncio\nfrom openai import AsyncOpenAI\nfrom metorial import Metorial\nfrom metorial.types import StreamEventType\n\nasync def main():\n # Initialize clients\n metorial = Metorial(api_key=\"...your-metorial-api-key...\")\n xai_client = AsyncOpenAI(\n api_key=\"...your-xai-api-key...\",\n base_url=\"https://api.x.ai/v1\"\n )\n \n # Streaming chat with real-time responses\n async def stream_action(session):\n messages = [\n {\"role\": \"user\", \"content\": \"Explain quantum computing\"}\n ]\n \n async for event in metorial.stream(\n xai_client, session, messages, \n model=\"grok-beta\",\n max_iterations=25\n ):\n if event.type == StreamEventType.CONTENT:\n print(f\"\ud83e\udd16 {event.content}\", end=\"\", flush=True)\n elif event.type == StreamEventType.TOOL_CALL:\n print(f\"\\n\ud83d\udd27 Executing {len(event.tool_calls)} tool(s)...\")\n elif event.type == StreamEventType.COMPLETE:\n print(f\"\\n\u2705 Complete!\")\n \n await metorial.with_session(\"...your-server-deployment-id...\", stream_action)\n\nasyncio.run(main())\n```\n\n### Advanced Usage with Session Management\n\n```python\nimport asyncio\nfrom openai import OpenAI\nfrom metorial import Metorial\nfrom metorial_xai import MetorialXAISession\n\nasync def main():\n # Initialize clients\n metorial = Metorial(api_key=\"...your-metorial-api-key...\")\n \n # XAI uses OpenAI-compatible client\n xai_client = OpenAI(\n api_key=\"...your-xai-api-key...\",\n base_url=\"https://api.x.ai/v1\"\n )\n \n # Create session with your server deployments\n async with metorial.session([\"...your-server-deployment-id...\"]) as session:\n # Create XAI-specific wrapper\n xai_session = MetorialXAISession(session.tool_manager)\n \n messages = [\n {\"role\": \"user\", \"content\": \"What are the latest commits?\"}\n ]\n \n response = xai_client.chat.completions.create(\n model=\"grok-beta\",\n messages=messages,\n tools=xai_session.tools\n )\n \n # Handle tool calls\n tool_calls = response.choices[0].message.tool_calls\n if tool_calls:\n tool_responses = await xai_session.call_tools(tool_calls)\n \n # Add to conversation\n messages.append({\n \"role\": \"assistant\",\n \"tool_calls\": tool_calls\n })\n messages.extend(tool_responses)\n \n # Continue conversation...\n\nasyncio.run(main())\n```\n\n### Using Convenience Functions\n\n```python\nfrom metorial_xai import build_xai_tools, call_xai_tools\n\nasync def example():\n # Get tools in XAI format\n tools = build_xai_tools(tool_manager)\n \n # Call tools from XAI response\n tool_messages = await call_xai_tools(tool_manager, tool_calls)\n```\n\n## API Reference\n\n### `MetorialXAISession`\n\nMain session class for XAI integration.\n\n```python\nsession = MetorialXAISession(tool_manager)\n```\n\n**Properties:**\n- `tools`: List of tools in OpenAI-compatible format with strict mode\n\n**Methods:**\n- `async call_tools(tool_calls)`: Execute tool calls and return tool messages\n\n### `build_xai_tools(tool_mgr)`\n\nBuild XAI-compatible tool definitions.\n\n**Returns:** List of tool definitions in OpenAI format with strict mode\n\n### `call_xai_tools(tool_mgr, tool_calls)`\n\nExecute tool calls from XAI response.\n\n**Returns:** List of tool messages\n\n## Tool Format\n\nTools are converted to OpenAI-compatible format with strict mode enabled:\n\n```python\n{\n \"type\": \"function\",\n \"function\": {\n \"name\": \"tool_name\",\n \"description\": \"Tool description\",\n \"parameters\": {\n \"type\": \"object\",\n \"properties\": {...},\n \"required\": [...]\n },\n \"strict\": True\n }\n}\n```\n\n## XAI API Configuration\n\nXAI uses the OpenAI-compatible API format. Configure your client like this:\n\n```python\nfrom openai import OpenAI\n\nclient = OpenAI(\n api_key=\"...your-xai-api-key...\",\n base_url=\"https://api.x.ai/v1\"\n)\n```\n\n## Error Handling\n\n```python\ntry:\n response = await metorial.run(\n \"Your query\", \"...deployment-id...\", xai_client, \n model=\"grok-beta\", max_iterations=25\n )\nexcept Exception as e:\n print(f\"Request failed: {e}\")\n```\n\nTool errors are automatically handled and returned as error messages.\n\n## License\n\nMIT License - see [LICENSE](../../LICENSE) file for details.\n",
"bugtrack_url": null,
"license": "MIT",
"summary": "XAI (Grok) provider for Metorial",
"version": "1.0.4",
"project_urls": {
"Documentation": "https://metorial.com/docs",
"Homepage": "https://metorial.com",
"Repository": "https://github.com/metorial/metorial-python"
},
"split_keywords": [
"ai",
" grok",
" llm",
" metorial",
" xai"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "a52d3cb392e2881b1bd6d8cc936b14096baa488e359c6ea3b9ee6c4311bd0510",
"md5": "cca598f495ac372d50aec583db3855bd",
"sha256": "068cce5c4fe23e7379084f73e2b42a1344e0f771cd76d74e75949c7319dd2ca4"
},
"downloads": -1,
"filename": "metorial_xai-1.0.4-py3-none-any.whl",
"has_sig": false,
"md5_digest": "cca598f495ac372d50aec583db3855bd",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.10",
"size": 4895,
"upload_time": "2025-10-30T05:03:14",
"upload_time_iso_8601": "2025-10-30T05:03:14.139057Z",
"url": "https://files.pythonhosted.org/packages/a5/2d/3cb392e2881b1bd6d8cc936b14096baa488e359c6ea3b9ee6c4311bd0510/metorial_xai-1.0.4-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "eb4a424784a9b3393cec9750638b5daaf6b16bea12608f14b96e29b42c23e8f8",
"md5": "e1478718e641863f67cd4640b1748479",
"sha256": "7ba7bca3c4d6114c78a2977d3c75578e793b51a495c7383d8b9ba0557e836334"
},
"downloads": -1,
"filename": "metorial_xai-1.0.4.tar.gz",
"has_sig": false,
"md5_digest": "e1478718e641863f67cd4640b1748479",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.10",
"size": 6035,
"upload_time": "2025-10-30T05:03:20",
"upload_time_iso_8601": "2025-10-30T05:03:20.462510Z",
"url": "https://files.pythonhosted.org/packages/eb/4a/424784a9b3393cec9750638b5daaf6b16bea12608f14b96e29b42c23e8f8/metorial_xai-1.0.4.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-10-30 05:03:20",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "metorial",
"github_project": "metorial-python",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"lcname": "metorial-xai"
}