metorial-xai


Namemetorial-xai JSON
Version 1.0.4 PyPI version JSON
download
home_pageNone
SummaryXAI (Grok) provider for Metorial
upload_time2025-10-30 05:03:20
maintainerNone
docs_urlNone
authorNone
requires_python>=3.10
licenseMIT
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"
}
        
Elapsed time: 2.48490s