# metorial-openai-compatible
Base package for OpenAI-compatible provider integrations for Metorial. This package provides shared functionality for providers that use OpenAI's function calling format.
## Installation
```bash
pip install metorial-openai-compatible
# or
uv add metorial-openai-compatible
# or
poetry add metorial-openai-compatible
```
## Features
- 🔧 **OpenAI Format**: Standard OpenAI function calling format
- ✅ **Strict Mode**: Configurable strict parameter validation
- 📡 **Session Management**: Automatic tool lifecycle handling
- 🔄 **Format Conversion**: Converts Metorial tools to OpenAI function format
- ⚡ **Async Support**: Full async/await support
- 🏗️ **Base Class**: Foundation for provider-specific implementations
## Usage
### Direct Usage
```python
import asyncio
from metorial import Metorial
from metorial_openai_compatible import MetorialOpenAICompatibleSession
async def main():
# Initialize Metorial
metorial = Metorial(api_key="your-metorial-api-key")
# Create session with your server deployments
async with metorial.session(["your-server-deployment-id"]) as session:
# Create OpenAI-compatible wrapper
openai_session = MetorialOpenAICompatibleSession(
session.tool_manager,
with_strict=True # Enable strict mode
)
# Use with any OpenAI-compatible client
tools = openai_session.tools
# Handle tool calls from response
tool_responses = await openai_session.call_tools(tool_calls)
asyncio.run(main())
```
### As Base Class
This package is primarily used as a base for provider-specific packages:
```python
from metorial_openai_compatible import MetorialOpenAICompatibleSession
class MyProviderSession(MetorialOpenAICompatibleSession):
def __init__(self, tool_mgr):
# Configure strict mode based on provider capabilities
super().__init__(tool_mgr, with_strict=False)
```
### Using Convenience Functions
```python
from metorial_openai_compatible import build_openai_compatible_tools, call_openai_compatible_tools
async def example_with_functions():
# Get tools in OpenAI format
tools = build_openai_compatible_tools(tool_manager, with_strict=True)
# Call tools from OpenAI-compatible response
tool_messages = await call_openai_compatible_tools(tool_manager, tool_calls)
```
## API Reference
### `MetorialOpenAICompatibleSession`
Main session class for OpenAI-compatible integration.
```python
session = MetorialOpenAICompatibleSession(tool_manager, with_strict=False)
```
**Parameters:**
- `tool_manager`: Metorial tool manager instance
- `with_strict`: Enable strict parameter validation (default: False)
**Properties:**
- `tools`: List of tools in OpenAI function calling format
**Methods:**
- `async call_tools(tool_calls)`: Execute tool calls and return tool messages
### `build_openai_compatible_tools(tool_mgr, with_strict=False)`
Build OpenAI-compatible tool definitions.
**Parameters:**
- `tool_mgr`: Tool manager instance
- `with_strict`: Enable strict mode (default: False)
**Returns:** List of tool definitions in OpenAI format
### `call_openai_compatible_tools(tool_mgr, tool_calls)`
Execute tool calls from OpenAI-compatible response.
**Returns:** List of tool messages
## Tool Format
Tools are converted to OpenAI's function calling format:
```python
{
"type": "function",
"function": {
"name": "tool_name",
"description": "Tool description",
"parameters": {
"type": "object",
"properties": {...},
"required": [...]
},
"strict": True # Only if with_strict=True
}
}
```
## Strict Mode
When `with_strict=True`, the `strict` field is added to function definitions for providers that support strict parameter validation (like OpenAI and XAI).
## Provider Implementations
This package serves as the base for:
- **metorial-xai**: XAI (Grok) with strict mode enabled
- **metorial-deepseek**: DeepSeek without strict mode
- **metorial-togetherai**: Together AI without strict mode
## Error Handling
```python
try:
tool_messages = await session.call_tools(tool_calls)
except Exception as e:
print(f"Tool execution failed: {e}")
```
Tool errors are returned as tool messages with error content.
## Dependencies
- `metorial-mcp-session>=1.0.0`
- `typing-extensions>=4.0.0`
## License
MIT License - see [LICENSE](../../LICENSE) file for details.
Raw data
{
"_id": null,
"home_page": null,
"name": "metorial-openai-compatible",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.9",
"maintainer_email": null,
"keywords": "ai, compatible, llm, metorial, openai",
"author": null,
"author_email": "Metorial Team <support@metorial.com>",
"download_url": "https://files.pythonhosted.org/packages/3b/ed/71e2fd8004d0415bd1144720e15a8b8fe840e945872ad49b43312c649c5f/metorial_openai_compatible-1.0.0rc2.tar.gz",
"platform": null,
"description": "# metorial-openai-compatible\n\nBase package for OpenAI-compatible provider integrations for Metorial. This package provides shared functionality for providers that use OpenAI's function calling format.\n\n## Installation\n\n```bash\npip install metorial-openai-compatible\n# or\nuv add metorial-openai-compatible\n# or\npoetry add metorial-openai-compatible\n```\n\n## Features\n\n- \ud83d\udd27 **OpenAI Format**: Standard OpenAI function calling format\n- \u2705 **Strict Mode**: Configurable strict parameter validation\n- \ud83d\udce1 **Session Management**: Automatic tool lifecycle handling\n- \ud83d\udd04 **Format Conversion**: Converts Metorial tools to OpenAI function format\n- \u26a1 **Async Support**: Full async/await support\n- \ud83c\udfd7\ufe0f **Base Class**: Foundation for provider-specific implementations\n\n## Usage\n\n### Direct Usage\n\n```python\nimport asyncio\nfrom metorial import Metorial\nfrom metorial_openai_compatible import MetorialOpenAICompatibleSession\n\nasync def main():\n # Initialize Metorial\n metorial = Metorial(api_key=\"your-metorial-api-key\")\n \n # Create session with your server deployments\n async with metorial.session([\"your-server-deployment-id\"]) as session:\n # Create OpenAI-compatible wrapper\n openai_session = MetorialOpenAICompatibleSession(\n session.tool_manager,\n with_strict=True # Enable strict mode\n )\n \n # Use with any OpenAI-compatible client\n tools = openai_session.tools\n \n # Handle tool calls from response\n tool_responses = await openai_session.call_tools(tool_calls)\n\nasyncio.run(main())\n```\n\n### As Base Class\n\nThis package is primarily used as a base for provider-specific packages:\n\n```python\nfrom metorial_openai_compatible import MetorialOpenAICompatibleSession\n\nclass MyProviderSession(MetorialOpenAICompatibleSession):\n def __init__(self, tool_mgr):\n # Configure strict mode based on provider capabilities\n super().__init__(tool_mgr, with_strict=False)\n```\n\n### Using Convenience Functions\n\n```python\nfrom metorial_openai_compatible import build_openai_compatible_tools, call_openai_compatible_tools\n\nasync def example_with_functions():\n # Get tools in OpenAI format\n tools = build_openai_compatible_tools(tool_manager, with_strict=True)\n \n # Call tools from OpenAI-compatible response\n tool_messages = await call_openai_compatible_tools(tool_manager, tool_calls)\n```\n\n## API Reference\n\n### `MetorialOpenAICompatibleSession`\n\nMain session class for OpenAI-compatible integration.\n\n```python\nsession = MetorialOpenAICompatibleSession(tool_manager, with_strict=False)\n```\n\n**Parameters:**\n- `tool_manager`: Metorial tool manager instance\n- `with_strict`: Enable strict parameter validation (default: False)\n\n**Properties:**\n- `tools`: List of tools in OpenAI function calling format\n\n**Methods:**\n- `async call_tools(tool_calls)`: Execute tool calls and return tool messages\n\n### `build_openai_compatible_tools(tool_mgr, with_strict=False)`\n\nBuild OpenAI-compatible tool definitions.\n\n**Parameters:**\n- `tool_mgr`: Tool manager instance\n- `with_strict`: Enable strict mode (default: False)\n\n**Returns:** List of tool definitions in OpenAI format\n\n### `call_openai_compatible_tools(tool_mgr, tool_calls)`\n\nExecute tool calls from OpenAI-compatible response.\n\n**Returns:** List of tool messages\n\n## Tool Format\n\nTools are converted to OpenAI's function calling format:\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 # Only if with_strict=True\n }\n}\n```\n\n## Strict Mode\n\nWhen `with_strict=True`, the `strict` field is added to function definitions for providers that support strict parameter validation (like OpenAI and XAI).\n\n## Provider Implementations\n\nThis package serves as the base for:\n\n- **metorial-xai**: XAI (Grok) with strict mode enabled\n- **metorial-deepseek**: DeepSeek without strict mode\n- **metorial-togetherai**: Together AI without strict mode\n\n## Error Handling\n\n```python\ntry:\n tool_messages = await session.call_tools(tool_calls)\nexcept Exception as e:\n print(f\"Tool execution failed: {e}\")\n```\n\nTool errors are returned as tool messages with error content.\n\n## Dependencies\n\n- `metorial-mcp-session>=1.0.0`\n- `typing-extensions>=4.0.0`\n\n## License\n\nMIT License - see [LICENSE](../../LICENSE) file for details.\n",
"bugtrack_url": null,
"license": "MIT",
"summary": "OpenAI-compatible provider base for Metorial",
"version": "1.0.0rc2",
"project_urls": {
"Documentation": "https://metorial.com/docs",
"Homepage": "https://metorial.com",
"Repository": "https://github.com/metorial/metorial-enterprise"
},
"split_keywords": [
"ai",
" compatible",
" llm",
" metorial",
" openai"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "e1d2f4a446487c06b259645a0389fc33b1b0ae2fb2fe47d7da39bcd61d4f5aa1",
"md5": "1bf976e751050243f938c22ef91e5d6a",
"sha256": "a24ef7ff89e308894da284387e6c6173102efa6f80a5f37bf133ca1d9a8534f4"
},
"downloads": -1,
"filename": "metorial_openai_compatible-1.0.0rc2-py3-none-any.whl",
"has_sig": false,
"md5_digest": "1bf976e751050243f938c22ef91e5d6a",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.9",
"size": 5209,
"upload_time": "2025-07-26T12:17:44",
"upload_time_iso_8601": "2025-07-26T12:17:44.621337Z",
"url": "https://files.pythonhosted.org/packages/e1/d2/f4a446487c06b259645a0389fc33b1b0ae2fb2fe47d7da39bcd61d4f5aa1/metorial_openai_compatible-1.0.0rc2-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "3bed71e2fd8004d0415bd1144720e15a8b8fe840e945872ad49b43312c649c5f",
"md5": "48afccd4c1ae5714dae0670c4316a34d",
"sha256": "bd3d64ba90a0164f7893b485324694e5b0ef16c1cd73e2fbda2366d6b5ba85ee"
},
"downloads": -1,
"filename": "metorial_openai_compatible-1.0.0rc2.tar.gz",
"has_sig": false,
"md5_digest": "48afccd4c1ae5714dae0670c4316a34d",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.9",
"size": 6013,
"upload_time": "2025-07-26T12:17:48",
"upload_time_iso_8601": "2025-07-26T12:17:48.579821Z",
"url": "https://files.pythonhosted.org/packages/3b/ed/71e2fd8004d0415bd1144720e15a8b8fe840e945872ad49b43312c649c5f/metorial_openai_compatible-1.0.0rc2.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-07-26 12:17:48",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "metorial",
"github_project": "metorial-enterprise",
"github_not_found": true,
"lcname": "metorial-openai-compatible"
}