Multi-provider AI dispatcher with response caching and error handling.
Project description
cross-ai-core
Multi-provider AI dispatcher with MD5-keyed response caching and unified error handling.
Supports Anthropic, xAI (Grok), OpenAI, Google Gemini, and Perplexity through a single consistent interface.
Requirements
- Python 3.10 or newer (3.11 recommended for development)
- No upper version limit — tested on 3.10–3.13
Install
Install only the provider(s) you need:
pip install "cross-ai-core[anthropic]" # Claude
pip install "cross-ai-core[gemini]" # Google Gemini
pip install "cross-ai-core[openai]" # OpenAI (ChatGPT)
pip install "cross-ai-core[xai]" # xAI Grok (uses the OpenAI SDK)
pip install cross-ai-core # Perplexity only (uses requests, no extra SDK)
Install all providers at once (used by cross, which runs all 5 simultaneously):
pip install "cross-ai-core[all]"
Dependencies
requests is always installed — it is used for the Perplexity provider and general HTTP.
The three provider SDKs are optional extras; pip installs only what you request.
| Extra | Package | Version | Providers covered |
|---|---|---|---|
| (base) | requests |
≥2.32.4 | Perplexity |
[anthropic] |
anthropic |
≥0.84.0 | Anthropic / Claude |
[gemini] |
google-genai |
≥1.65.0 | Google Gemini |
[openai] |
openai |
≥1.70.0 | OpenAI |
[xai] |
openai |
≥1.70.0 | xAI / Grok (OpenAI-compatible API) |
[all] |
all three above | — | All 5 providers |
Quick start
import os
from dotenv import load_dotenv
load_dotenv(os.path.expanduser("~/.crossenv")) # your app loads keys; the library reads os.environ
from cross_ai_core import process_prompt, get_content, get_default_ai
provider = get_default_ai() # reads DEFAULT_AI from env, falls back to "xai"
result = process_prompt(
provider,
"Explain transformer attention in 3 sentences.",
system="You are a concise technical writer.", # omit to use each provider's default
verbose=False,
use_cache=True,
)
print(get_content(provider, result.response))
Configuration (environment variables)
| Variable | Default | Purpose |
|---|---|---|
DEFAULT_AI |
xai |
Default provider when none is specified |
XAI_API_KEY |
— | xAI / Grok API key |
ANTHROPIC_API_KEY |
— | Anthropic / Claude API key |
OPENAI_API_KEY |
— | OpenAI API key |
GEMINI_API_KEY |
— | Google Gemini API key |
PERPLEXITY_API_KEY |
— | Perplexity API key |
CROSS_API_CACHE_DIR |
~/.cross_api_cache/ |
Response cache directory |
CROSS_NO_CACHE |
— | Set to 1 to disable caching globally |
The library only reads from os.environ — it never calls load_dotenv() itself.
Load your .env or ~/.crossenv before importing.
You only need to set API keys for the providers you actually use.
Caching
Responses are cached by MD5 hash of the request payload in ~/.cross_api_cache/.
The cache is safe to delete at any time.
# Bypass cache for one call
result = process_prompt(provider, prompt, verbose=False, use_cache=False)
# Check if a response was served from cache
if result.was_cached:
print("from cache")
Development
cd ~/github/cross-ai-core
python3.11 -m venv .venv
source .venv/bin/activate
pip install -e ".[dev]" # installs the package + pytest + pytest-mock
Run the test suite:
python -m pytest tests/ -v
Tests use mocks — no real API keys required.
Note: Keep each repo's
.venvseparate; do not share it with dependent projects.
Adding a provider
- Create
cross_ai_core/ai_<name>.pyimplementingBaseAIHandler(get_payload,get_client,get_cached_response,get_model,get_make,get_content,put_content,get_data_content,get_title,get_usage). - Register in
cross_ai_core/ai_handler.py: add toAI_HANDLER_REGISTRYandAI_LIST.
Documentation
- API reference — all public functions,
AIResponse, parallel calls, error handling - Providers — per-provider guide: models, API keys, strengths, free tiers
- Changelog
License
MIT — free for personal, academic, and open-source use.
See COMMERCIAL_LICENSE.md for organizational and commercial use.
Project details
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 cross_ai_core-0.4.1.tar.gz.
File metadata
- Download URL: cross_ai_core-0.4.1.tar.gz
- Upload date:
- Size: 25.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.15
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
dc01733bed9b21731e9622858d632831c1b6b207e236e07f6cb2b92f715a4584
|
|
| MD5 |
a5d1bba4890249c2e8f8c4b00446af33
|
|
| BLAKE2b-256 |
0a94c237ae3afc82aac08f6f3a558bc5eb5fdcc39c2642db17ea884eae686c7e
|
File details
Details for the file cross_ai_core-0.4.1-py3-none-any.whl.
File metadata
- Download URL: cross_ai_core-0.4.1-py3-none-any.whl
- Upload date:
- Size: 23.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.15
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ea6195279b9b6089104672faf503d73385817879c1d81fbe5d3b9573c6dfe629
|
|
| MD5 |
2065d6c8a853cb0649ddf67cec255acf
|
|
| BLAKE2b-256 |
eb19b8ca88552b253032eaa881979ef7eb67b9755e6a95b82db0d9d065195343
|