A simple AI toolkit for text processing using OpenAI and Gemini APIs
Project description
AIWand 🪄
One API to rule them all - Unified OpenAI and Gemini interface with automatic provider switching and structured data extraction from anywhere.
🎯 Two Powerful Features, One Simple API
1. call_ai - Unified AI Interface
Drop-in replacement for OpenAI and Gemini - Same code works with both providers, automatic model detection, and structured output magic.
import aiwand
from pydantic import BaseModel
# Works with any model - provider auto-detected
response = aiwand.call_ai(
model="gpt-4o", # or "gemini-2.0-flash"
messages=[{"role": "user", "content": "Explain quantum computing"}]
)
# Structured output with Pydantic - no JSON parsing needed!
class BlogPost(BaseModel):
title: str
content: str
tags: list[str]
blog = aiwand.call_ai(
model="gemini-2.0-flash",
messages=[{"role": "user", "content": "Write a blog about AI"}],
response_format=BlogPost # Returns BlogPost object directly!
)
print(blog.title) # Direct access, no parsing
2. extract - Smart Data Extraction
Pass any content or links - Extracts structured data from text, URLs, files, or mixed sources. Creates or uses your Pydantic models.
# Extract from text
contact = aiwand.extract(content="John Doe, john@example.com, (555) 123-4567")
# Extract from URLs or files
data = aiwand.extract(links=["https://company.com/about", "resume.pdf"])
# Mix content + links with custom structure
from pydantic import BaseModel
class ContactInfo(BaseModel):
name: str
email: str
phone: str
result = aiwand.extract(
content="Meeting notes: call John tomorrow",
links=["https://company.com/team", "business_card.txt"],
response_format=ContactInfo # Get ContactInfo object back
)
🚀 Quick Start
Installation & Setup
pip install aiwand
# Set your API key (either one works)
export OPENAI_API_KEY="your-key" # or
export GEMINI_API_KEY="your-key" # or both
Core Usage
import aiwand
# 1. Basic AI calls - auto provider selection
response = aiwand.call_ai(
model="gpt-4o", # Uses OpenAI
messages=[{"role": "user", "content": "Hello!"}]
)
response = aiwand.call_ai(
model="gemini-2.0-flash", # Uses Gemini
messages=[{"role": "user", "content": "Hello!"}]
)
# 2. Extract data from anywhere
contact = aiwand.extract(content="Dr. Sarah Johnson, sarah@lab.com")
webpage_data = aiwand.extract(links=["https://example.com"])
mixed_data = aiwand.extract(
content="Meeting notes...",
links=["document.pdf", "https://site.com"]
)
✨ Key Benefits
| Feature | Benefit |
|---|---|
| 🔄 Provider Agnostic | Same code works with OpenAI and Gemini |
| 🏗️ Structured Output | Get Pydantic objects directly, no JSON parsing |
| 🧠 Smart Detection | Automatic provider selection based on model |
| 📄 Universal Extraction | Extract from text, URLs, files - anything |
| ⚡ Zero Configuration | Works with just API keys |
| 🎯 Drop-in Ready | Minimal code changes from existing AI code |
🔧 Advanced Examples
Smart Provider Switching
# Automatic provider detection
responses = []
for model in ["gpt-4o", "gemini-2.0-flash", "o3-mini"]:
response = aiwand.call_ai(
model=model, # Auto-detects OpenAI vs Gemini
messages=[{"role": "user", "content": "Compare yourself to other AI models"}]
)
responses.append(f"{model}: {response}")
# Force specific provider for custom models
response = aiwand.call_ai(
model="my-custom-model",
provider="gemini", # Explicit override
messages=[{"role": "user", "content": "Test custom model"}]
)
Structured Data Extraction
from pydantic import BaseModel
from typing import List
class CompanyInfo(BaseModel):
name: str
founded: int
employees: int
technologies: List[str]
headquarters: str
# Extract from company website
company = aiwand.extract(
links=["https://company.com/about"],
response_format=CompanyInfo
)
# Extract from mixed sources
analysis = aiwand.extract(
content="Research on tech companies in 2024",
links=[
"https://techcrunch.com/company-news",
"market_report.pdf",
"/path/to/notes.txt"
],
response_format=CompanyInfo
)
Built-in Convenience Functions
# High-level functions for common tasks
summary = aiwand.summarize("Long article text...", style="bullet-points")
response = aiwand.chat("What is machine learning?")
story = aiwand.generate_text("Write a poem about coding")
# Classification and grading
grader = aiwand.create_binary_classifier(criteria="correctness")
result = grader(question="What is 2+2?", answer="4", expected="4")
print(f"Score: {result.score}")
🎨 CLI Usage
# Direct chat (quoted for multi-word)
aiwand "Explain quantum computing in simple terms"
# Extract from content
aiwand extract "John Doe, john@example.com" --json
# Extract from URLs/files
aiwand extract --links https://company.com resume.pdf
# Other functions
aiwand summarize "Long text..." --style bullet-points
aiwand chat "Hello there!"
📚 Documentation
- API Reference - Complete function docs
- CLI Guide - Command line usage
- Installation - Setup details
- Development - Contributing guide
🔑 Why AIWand?
Before AIWand - Provider-specific code, manual JSON parsing, complex setup:
# OpenAI specific
import openai
response = openai.chat.completions.create(...)
result = json.loads(response.choices[0].message.content) # Manual parsing
# Gemini specific
import google.generativeai as genai
response = genai.generate_content(...)
result = parse_json_response(response.text) # Different API
After AIWand - One API, automatic everything:
import aiwand
result = aiwand.call_ai(model="any-model", response_format=MyModel, ...)
# result is already a MyModel object! ✨
🤝 Contributing
We welcome contributions! See CONTRIBUTING.md for guidelines.
📝 License
MIT License - see LICENSE file for details.
Star this repo if you find it useful!
Made with ❤️ by Aman Kumar
Project details
Release history Release notifications | RSS feed
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 aiwand-0.4.13.tar.gz.
File metadata
- Download URL: aiwand-0.4.13.tar.gz
- Upload date:
- Size: 61.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.11.4
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ea4bf28bdeec7a0d8ffe8692989aa4ced466e1d5f337d3673f979780f94a9958
|
|
| MD5 |
0194a46fbefa8526add87b1764839d08
|
|
| BLAKE2b-256 |
07202e04e417b9af1ee5a125e495ebdf3875a4a288b7fec5fc6e31490d756e95
|
File details
Details for the file aiwand-0.4.13-py3-none-any.whl.
File metadata
- Download URL: aiwand-0.4.13-py3-none-any.whl
- Upload date:
- Size: 29.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.11.4
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
609ab76d04714e67835ce804177880d72af5d2d6f4cea55de81ac97939dc6e76
|
|
| MD5 |
b3a710ca2310eb157e51d0cd265dbb12
|
|
| BLAKE2b-256 |
d3c110e3d3525a369352dbe25ec1b2daa8552e11b0eaaa5a162cf76303eb8e53
|