llm-api-adapter-xai
Official xAI Responses API support for llm-api-adapter.
Installation
Install through the core package extra:
pip install "llm-api-adapter[xai]"
Direct installation is also supported when the core package is managed separately:
pip install llm-api-adapter-xai
Async methods need HTTPX:
pip install "llm-api-adapter[xai,async]"
Synchronous requests remains the default. To opt into the HTTPX synchronous
transport, install "llm-api-adapter[xai,httpx]" and pass
transport="httpx".
Quick start
import os
from llm_api_adapter.models.messages.chat_message import UserMessage
from llm_api_adapter.universal_adapter import UniversalLLMAPIAdapter
adapter = UniversalLLMAPIAdapter(
organization="xai",
model="grok-4.6",
api_key=os.environ["XAI_API_KEY"],
)
response = adapter.chat(
messages=[UserMessage("Explain retrieval-augmented generation.")]
)
print(response.content)
Supported models and capabilities
The package deliberately exposes fixed model IDs, not moving aliases:
grok-4.5 and grok-4.6.
| Capability | Supported models |
|---|---|
| Text chat, sync/async streaming, application function tools, JSON Schema/Pydantic output, image URLs or bytes, and PDF URLs or bytes | Both models |
reasoning_level |
grok-4.5: low–high; grok-4.6: low–xhigh |
For grok-4.5 and grok-4.6, xAI cannot disable reasoning: a requested
"none" is mapped to the documented minimum and produces a warning.
Structured-output portability
This package requires llm-api-adapter>=0.9.2,<1.0.0 and enforces the same
Core portable JSON Schema profile as OpenAI, Anthropic, Google, and Mistral.
The profile guarantees that every object is strict, every property is required,
optional values are nullable, and only
direct, non-recursive local #/$defs/... references are resolved before the
request.
xAI's documented immediate schema failures are an additive local overlay, not
a replacement for the Core boundary. The adapter rejects boolean property
schemas, empty enum or anyOf, minContains/maxContains, tuple items
arrays, and unsupported regular expressions before the request. See xAI's
structured-output documentation
for xAI-specific details.
Use json_schema for parsed JSON only. Use a Pydantic response_model when
the final result must also be locally validated and returned as
ChatResponse.parsed_model; each nested Pydantic model must use
ConfigDict(extra="forbid"). Refusal and incomplete terminal responses set
ChatResponse.refusal or ChatResponse.incomplete_reason and leave parsed
fields unset. Invalid completed JSON or failed Pydantic validation raises
JSONSchemaError. The complete portable vocabulary and examples are in the
main Structured Output guide.
Conversations, files, and costs
previous_response is accepted for the shared API, but xAI continuation is
intentionally not used: the adapter does not send previous_response_id.
Keep and provide the complete messages history for each turn, including
assistant tool calls and ToolMessage results.
The package does not expose or send xAI's store option. xAI documents that
Responses are stored server-side by default, so configure data retention with
xAI when that matters to your application. In particular, the library does not
turn on Zero Data Retention (ZDR); enabling ZDR in the xAI Console blocks new
Files API uploads and file_id attachments.
PDF URLs are passed to xAI unchanged. For PDF bytes, the adapter uploads a provider-owned file with a 24-hour expiry; it never deletes or changes a URL or file identifier supplied by your application. No OCR or local text extraction is performed.
Attaching a PDF activates xAI's attachment_search tool. That makes the
request agentic and adds tool-invocation charges to normal token charges.
Storage for an uploaded file is also billed by xAI until it expires. Treat
ChatResponse.cost_total as the exact request cost only when xAI returns it;
consult xAI billing for storage and any charges not included in that response.
See the official xAI documentation for Responses storage, files and expiry, and file-search pricing.
See the main llm-api-adapter README for the shared API contract and examples.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file llm_api_adapter_xai-0.1.1.tar.gz.
File metadata
- Download URL: llm_api_adapter_xai-0.1.1.tar.gz
- Upload date:
- Size: 24.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f4cd685994dc3dc2b3f6f5ac2b4f6f49918caba0339e3d91c17a1a1af5f2bbca
|
|
| MD5 |
1a4903bbd87772e9a66a3f2772e678c2
|
|
| BLAKE2b-256 |
bd671f492dcd1762e5f99fd059bb9d80ab639620f91b2f674f0baa779c322a9a
|
File details
Details for the file llm_api_adapter_xai-0.1.1-py3-none-any.whl.
File metadata
- Download URL: llm_api_adapter_xai-0.1.1-py3-none-any.whl
- Upload date:
- Size: 19.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
092ee9470821bad9afdc4c47d1aa789c4cb7b557f6e8c55cc4552ed1e0098862
|
|
| MD5 |
6f25e0cf9fa0d87b40403337be8c2e61
|
|
| BLAKE2b-256 |
052345d4313664808b97297872dd8ddaf649e857a9841a69580810d0a805cd78
|