2024-03-30 12:42:44 +01:00
# @push.rocks/smartai
2026-01-18 16:26:16 +00:00
2025-08-01 18:25:46 +00:00
**One API to rule them all** 🚀
2024-04-14 17:19:32 +02:00
2025-08-01 18:25:46 +00:00
[](https://www.npmjs.com/package/@push .rocks/smartai)
[](https://www.typescriptlang.org/)
[](https://opensource.org/licenses/MIT)
2025-02-25 19:04:40 +00:00
2026-01-20 01:27:52 +00:00
SmartAI unifies the world's leading AI providers — OpenAI, Anthropic, Mistral, Perplexity, Ollama, Groq, XAI, Exo, and ElevenLabs — under a single, elegant TypeScript interface. Build AI applications at lightning speed without vendor lock-in.
2026-01-18 16:26:16 +00:00
## Issue Reporting and Security
For reporting bugs, issues, or security vulnerabilities, please visit [community.foss.global/ ](https://community.foss.global/ ). This is the central community hub for all issue reporting. Developers who sign and comply with our contribution agreement and go through identification can also get a [code.foss.global/ ](https://code.foss.global/ ) account to submit Pull Requests directly.
2025-02-25 19:04:40 +00:00
2025-08-01 18:25:46 +00:00
## 🎯 Why SmartAI?
2024-04-14 17:19:32 +02:00
2026-01-20 01:27:52 +00:00
- **🔌 Universal Interface**: Write once, run with any AI provider. Switch between GPT-5, Claude, Llama, or Grok with a single line change.
- **🛡️ Type-Safe**: Full TypeScript support with comprehensive type definitions for all operations.
- **🌊 Streaming First**: Built for real-time applications with native streaming support.
- **🎨 Multi-Modal**: Seamlessly work with text, images, audio, and documents.
- **🏠 Local & Cloud**: Support for both cloud providers and local models via Ollama/Exo.
- **⚡ Zero Lock-In**: Your code remains portable across all AI providers.
2025-02-08 12:08:14 +01:00
2026-01-20 01:27:52 +00:00
## 📦 Installation
2024-03-30 12:42:44 +01:00
2025-08-01 18:25:46 +00:00
```bash
npm install @push .rocks/smartai
2026-01-20 01:27:52 +00:00
# or
pnpm install @push .rocks/smartai
2025-08-01 18:25:46 +00:00
```
2024-04-04 02:47:44 +02:00
2026-01-20 01:27:52 +00:00
## 🚀 Quick Start
2024-04-04 02:47:44 +02:00
```typescript
2024-04-29 12:37:43 +02:00
import { SmartAi } from '@push .rocks/smartai';
2025-08-01 18:25:46 +00:00
// Initialize with your favorite providers
const ai = new SmartAi({
openaiToken: 'sk-...',
2025-10-08 22:49:08 +00:00
anthropicToken: 'sk-ant-...',
elevenlabsToken: 'sk-...',
elevenlabs: {
2026-01-18 16:26:16 +00:00
defaultVoiceId: '19STyYD15bswVz51nqLf', // Optional: Samara voice
},
2024-04-04 02:47:44 +02:00
});
2025-08-01 18:25:46 +00:00
await ai.start();
2025-07-25 18:00:23 +00:00
2025-08-01 18:25:46 +00:00
// Same API, multiple providers
const response = await ai.openaiProvider.chat({
systemMessage: 'You are a helpful assistant.',
userMessage: 'Explain quantum computing in simple terms',
2026-01-18 16:26:16 +00:00
messageHistory: [],
2025-08-01 18:25:46 +00:00
});
2026-01-20 01:27:52 +00:00
console.log(response.message);
2025-08-01 18:25:46 +00:00
```
2025-07-25 18:00:23 +00:00
2025-08-01 18:25:46 +00:00
## 📊 Provider Capabilities Matrix
2025-07-25 18:00:23 +00:00
2025-08-01 18:25:46 +00:00
Choose the right provider for your use case:
2025-07-25 18:00:23 +00:00
2026-01-18 16:26:16 +00:00
| Provider | Chat | Streaming | TTS | Vision | Documents | Research | Images | Highlights |
| -------------- | :--: | :-------: | :-: | :----: | :-------: | :------: | :----: | --------------------------------------------------------------- |
2026-01-20 01:27:52 +00:00
| **OpenAI ** | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | gpt-image-1 • DALL-E 3 • Deep Research API |
| **Anthropic ** | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | Claude Sonnet 4.5 • Extended Thinking • Web Search API |
| **Mistral ** | ✅ | ✅ | ❌ | ✅ | ✅ | ❌ | ❌ | Native PDF OCR • mistral-large • Fast inference |
| **ElevenLabs ** | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | Premium TTS • 70+ languages • v3 model |
| **Ollama ** | ✅ | ✅ | ❌ | ✅ | ✅ | ❌ | ❌ | 100% local • Privacy-first • No API costs |
| **XAI ** | ✅ | ✅ | ❌ | ❌ | ✅ | ❌ | ❌ | Grok 2 • Real-time data |
| **Perplexity ** | ✅ | ✅ | ❌ | ❌ | ❌ | ✅ | ❌ | Web-aware • Research-focused • Sonar Pro |
| **Groq ** | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | 10x faster • LPU inference • Llama 3.3 |
| **Exo ** | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | Distributed • P2P compute • Decentralized |
2025-02-03 15:16:58 +01:00
2025-08-01 18:25:46 +00:00
## 🎮 Core Features
2025-02-25 19:04:40 +00:00
2025-08-01 18:25:46 +00:00
### 💬 Universal Chat Interface
2025-02-25 19:04:40 +00:00
2025-08-01 18:25:46 +00:00
Works identically across all providers:
2024-04-04 02:47:44 +02:00
```typescript
2026-01-20 01:27:52 +00:00
// Use GPT-5 for complex reasoning
2025-08-01 18:25:46 +00:00
const gptResponse = await ai.openaiProvider.chat({
2026-01-20 01:27:52 +00:00
systemMessage: 'You are an expert physicist.',
2025-08-01 18:25:46 +00:00
userMessage: 'Explain the implications of quantum entanglement',
2026-01-18 16:26:16 +00:00
messageHistory: [],
2025-02-03 15:16:58 +01:00
});
2025-08-01 18:25:46 +00:00
// Use Claude for safety-critical applications
const claudeResponse = await ai.anthropicProvider.chat({
systemMessage: 'You are a medical advisor.',
userMessage: 'Review this patient data for concerns',
2026-01-18 16:26:16 +00:00
messageHistory: [],
2025-07-25 18:00:23 +00:00
});
2025-08-01 18:25:46 +00:00
// Use Groq for lightning-fast responses
const groqResponse = await ai.groqProvider.chat({
systemMessage: 'You are a code reviewer.',
userMessage: 'Quick! Find the bug in this code: ...',
2026-01-18 16:26:16 +00:00
messageHistory: [],
2025-07-25 18:00:23 +00:00
});
2024-04-04 02:47:44 +02:00
```
2025-08-01 18:25:46 +00:00
### 🌊 Real-Time Streaming
2024-04-29 12:37:43 +02:00
2025-08-01 18:25:46 +00:00
Build responsive chat interfaces with token-by-token streaming:
2025-02-03 15:16:58 +01:00
```typescript
2025-08-01 18:25:46 +00:00
// Create a chat stream
const stream = await ai.openaiProvider.chatStream(inputStream);
const reader = stream.getReader();
// Display responses as they arrive
2025-02-03 15:16:58 +01:00
while (true) {
const { done, value } = await reader.read();
if (done) break;
2026-01-18 16:26:16 +00:00
2025-08-01 18:25:46 +00:00
// Update UI in real-time
process.stdout.write(value);
2025-02-03 15:16:58 +01:00
}
```
2024-04-29 12:37:43 +02:00
2025-08-01 18:25:46 +00:00
### 🎙️ Text-to-Speech
2024-04-29 12:37:43 +02:00
2025-10-08 22:49:08 +00:00
Generate natural voices with OpenAI or ElevenLabs:
2024-04-04 02:47:44 +02:00
```typescript
2025-10-08 22:49:08 +00:00
// OpenAI TTS
2025-08-01 18:25:46 +00:00
const audioStream = await ai.openaiProvider.audio({
2026-01-18 16:26:16 +00:00
message: 'Welcome to the future of AI development!',
2024-04-29 12:37:43 +02:00
});
2025-10-08 22:56:53 +00:00
// ElevenLabs TTS - Premium quality, natural voices (uses v3 by default)
2025-10-08 22:49:08 +00:00
const elevenLabsAudio = await ai.elevenlabsProvider.audio({
message: 'Experience the most lifelike text to speech technology.',
voiceId: '19STyYD15bswVz51nqLf', // Optional: Samara voice
2026-01-20 01:27:52 +00:00
modelId: 'eleven_v3', // Optional: defaults to eleven_v3 (70+ languages)
2026-01-18 16:26:16 +00:00
voiceSettings: {
// Optional: fine-tune voice characteristics
stability: 0.5, // 0-1: Speech consistency
2025-10-08 22:49:08 +00:00
similarity_boost: 0.8, // 0-1: Voice similarity to original
2026-01-20 01:27:52 +00:00
style: 0.0, // 0-1: Expressiveness
2026-01-18 16:26:16 +00:00
use_speaker_boost: true, // Enhanced clarity
},
2025-10-08 22:49:08 +00:00
});
2026-01-20 01:27:52 +00:00
// Stream directly to speakers or save to file
2025-08-01 18:25:46 +00:00
audioStream.pipe(fs.createWriteStream('welcome.mp3'));
2024-04-04 02:47:44 +02:00
```
2025-08-01 18:25:46 +00:00
### 👁️ Vision Analysis
2024-04-04 02:47:44 +02:00
2025-08-01 18:25:46 +00:00
Understand images with multiple providers:
2024-04-04 02:47:44 +02:00
```typescript
2025-08-01 18:25:46 +00:00
const image = fs.readFileSync('product-photo.jpg');
2025-07-25 18:00:23 +00:00
2025-08-01 18:25:46 +00:00
// OpenAI: General purpose vision
const gptVision = await ai.openaiProvider.vision({
image,
2026-01-18 16:26:16 +00:00
prompt: 'Describe this product and suggest marketing angles',
2024-04-04 02:47:44 +02:00
});
2025-02-25 19:04:40 +00:00
2026-01-20 01:27:52 +00:00
// Anthropic: Detailed analysis with extended thinking
2025-08-01 18:25:46 +00:00
const claudeVision = await ai.anthropicProvider.vision({
image,
2026-01-18 16:26:16 +00:00
prompt: 'Identify any safety concerns or defects',
2025-07-25 18:00:23 +00:00
});
2025-08-01 18:25:46 +00:00
// Ollama: Private, local analysis
const ollamaVision = await ai.ollamaProvider.vision({
image,
2026-01-18 16:26:16 +00:00
prompt: 'Extract all text and categorize the content',
2025-07-25 18:00:23 +00:00
});
2025-02-05 14:21:26 +01:00
```
2025-08-01 18:25:46 +00:00
### 📄 Document Intelligence
2025-07-25 18:00:23 +00:00
2025-08-01 18:25:46 +00:00
Extract insights from PDFs with AI:
2025-02-03 15:26:00 +01:00
2025-02-05 14:21:26 +01:00
```typescript
2025-08-01 18:25:46 +00:00
const contract = fs.readFileSync('contract.pdf');
const invoice = fs.readFileSync('invoice.pdf');
2025-07-25 18:00:23 +00:00
2026-01-20 01:27:52 +00:00
// Analyze documents with OpenAI
2025-08-01 18:25:46 +00:00
const analysis = await ai.openaiProvider.document({
2025-07-25 18:00:23 +00:00
systemMessage: 'You are a legal expert.',
2025-08-01 18:25:46 +00:00
userMessage: 'Compare these documents and highlight key differences',
2025-02-03 15:26:00 +01:00
messageHistory: [],
2026-01-18 16:26:16 +00:00
pdfDocuments: [contract, invoice],
2025-02-03 15:26:00 +01:00
});
2025-07-25 18:00:23 +00:00
2026-01-20 01:27:52 +00:00
// Multi-document analysis with Anthropic
2025-08-01 18:25:46 +00:00
const taxDocs = [form1099, w2, receipts];
const taxAnalysis = await ai.anthropicProvider.document({
systemMessage: 'You are a tax advisor.',
userMessage: 'Prepare a tax summary from these documents',
2025-07-25 18:00:23 +00:00
messageHistory: [],
2026-01-18 16:26:16 +00:00
pdfDocuments: taxDocs,
2025-07-25 18:00:23 +00:00
});
2025-02-03 15:26:00 +01:00
```
2025-10-03 13:43:29 +00:00
### 🔬 Research & Web Search
Perform deep research with web search capabilities across multiple providers:
```typescript
// OpenAI Deep Research - Comprehensive analysis
const deepResearch = await ai.openaiProvider.research({
query: 'What are the latest developments in quantum computing?',
searchDepth: 'deep',
2026-01-18 16:26:16 +00:00
includeWebSearch: true,
2025-10-03 13:43:29 +00:00
});
console.log(deepResearch.answer);
console.log('Sources:', deepResearch.sources);
// Anthropic Web Search - Domain-filtered research
2026-01-20 01:27:52 +00:00
import { AnthropicProvider } from '@push .rocks/smartai';
2025-10-03 13:43:29 +00:00
const anthropic = new AnthropicProvider({
anthropicToken: 'sk-ant-...',
enableWebSearch: true,
2026-01-18 16:26:16 +00:00
searchDomainAllowList: ['nature.com', 'science.org'],
2025-10-03 13:43:29 +00:00
});
const scientificResearch = await anthropic.research({
query: 'Latest breakthroughs in CRISPR gene editing',
2026-01-18 16:26:16 +00:00
searchDepth: 'advanced',
2025-10-03 13:43:29 +00:00
});
// Perplexity - Research-focused with citations
const perplexityResearch = await ai.perplexityProvider.research({
query: 'Current state of autonomous vehicle technology',
2026-01-18 16:26:16 +00:00
searchDepth: 'deep', // Uses Sonar Pro model
2025-10-03 13:43:29 +00:00
});
```
**Research Options:**
2026-01-18 16:26:16 +00:00
2026-01-20 01:27:52 +00:00
- `searchDepth` : `'basic'` | `'advanced'` | `'deep'`
2025-10-03 13:43:29 +00:00
- `maxSources` : Number of sources to include
- `includeWebSearch` : Enable web search (OpenAI)
- `background` : Run as background task (OpenAI)
**Supported Providers:**
2026-01-18 16:26:16 +00:00
2026-01-20 01:27:52 +00:00
- **OpenAI**: Deep Research API with specialized models (`o3-deep-research-*` , `o4-mini-deep-research-*` )
2025-10-03 13:43:29 +00:00
- **Anthropic**: Web Search API with domain filtering
- **Perplexity**: Sonar and Sonar Pro models with built-in citations
2026-01-18 16:26:16 +00:00
### 🧠 Extended Thinking (Anthropic)
Enable Claude to spend more time reasoning about complex problems before generating responses:
```typescript
import { AnthropicProvider } from '@push .rocks/smartai';
// Configure extended thinking mode at provider level
const anthropic = new AnthropicProvider({
anthropicToken: 'sk-ant-...',
extendedThinking: 'normal', // Options: 'quick' | 'normal' | 'deep' | 'off'
});
await anthropic.start();
// Extended thinking is automatically applied to all methods
const response = await anthropic.chat({
systemMessage: 'You are an expert mathematician.',
userMessage: 'Prove the Pythagorean theorem from first principles',
messageHistory: [],
});
```
**Thinking Modes:**
2026-01-20 01:27:52 +00:00
| Mode | Budget Tokens | Use Case |
| ---------- | ------------- | ------------------------------------------------ |
| `'quick'` | 2,048 | Lightweight reasoning for simple queries |
| `'normal'` | 8,000 | **Default ** — Balanced reasoning for most tasks |
| `'deep'` | 16,000 | Complex reasoning for difficult problems |
| `'off'` | 0 | Disable extended thinking |
2026-01-18 16:26:16 +00:00
**Best Practices:**
- Start with `'normal'` (default) for general usage
- Use `'deep'` for complex analytical tasks, philosophy, mathematics, or research
- Use `'quick'` for simple factual queries where deep reasoning isn't needed
- Thinking budget counts against total token usage
2026-01-20 00:02:45 +00:00
### 📑 Native PDF OCR (Mistral)
2026-01-20 01:27:52 +00:00
Mistral provides native PDF document processing via their OCR API — no image conversion required:
2026-01-20 00:02:45 +00:00
```typescript
import { MistralProvider } from '@push .rocks/smartai';
const mistral = new MistralProvider({
mistralToken: 'your-api-key',
2026-01-20 01:27:52 +00:00
chatModel: 'mistral-large-latest', // Default
ocrModel: 'mistral-ocr-latest', // Default
tableFormat: 'markdown', // 'markdown' | 'html'
2026-01-20 00:02:45 +00:00
});
await mistral.start();
// Direct PDF processing - no image conversion overhead
const result = await mistral.document({
systemMessage: 'You are a document analyst.',
userMessage: 'Extract all invoice details and calculate the total.',
pdfDocuments: [invoicePdfBuffer],
messageHistory: [],
});
```
**Key Advantage**: Unlike other providers that convert PDFs to images first, Mistral's OCR API processes PDFs natively, potentially offering faster and more accurate text extraction for document-heavy workloads.
**Supported Formats:**
2026-01-20 01:27:52 +00:00
2026-01-20 00:02:45 +00:00
- Native PDF processing via Files API
- Image OCR (JPEG, PNG, GIF, WebP) for vision tasks
- Table extraction with markdown or HTML output
2025-10-03 13:49:46 +00:00
### 🎨 Image Generation & Editing
Generate and edit images with OpenAI's cutting-edge models:
```typescript
// Basic image generation with gpt-image-1
const image = await ai.openaiProvider.imageGenerate({
prompt: 'A futuristic robot assistant in a modern office, digital art',
model: 'gpt-image-1',
quality: 'high',
2026-01-18 16:26:16 +00:00
size: '1024x1024',
2025-10-03 13:49:46 +00:00
});
// Save the generated image
const imageBuffer = Buffer.from(image.images[0].b64_json!, 'base64');
fs.writeFileSync('robot.png', imageBuffer);
// Advanced: Transparent background with custom format
const logo = await ai.openaiProvider.imageGenerate({
prompt: 'Minimalist mountain peak logo, geometric design',
model: 'gpt-image-1',
quality: 'high',
size: '1024x1024',
background: 'transparent',
2026-01-18 16:26:16 +00:00
outputFormat: 'png',
2025-10-03 13:49:46 +00:00
});
// WebP with compression for web use
const webImage = await ai.openaiProvider.imageGenerate({
prompt: 'Product showcase: sleek smartphone on marble surface',
model: 'gpt-image-1',
quality: 'high',
size: '1536x1024',
outputFormat: 'webp',
2026-01-18 16:26:16 +00:00
outputCompression: 85,
2025-10-03 13:49:46 +00:00
});
// Superior text rendering (gpt-image-1's strength)
const signage = await ai.openaiProvider.imageGenerate({
2026-01-18 16:26:16 +00:00
prompt:
'Vintage cafe sign saying "COFFEE & CODE" in hand-lettered typography',
2025-10-03 13:49:46 +00:00
model: 'gpt-image-1',
quality: 'high',
2026-01-18 16:26:16 +00:00
size: '1024x1024',
2025-10-03 13:49:46 +00:00
});
// Generate multiple variations at once
const variations = await ai.openaiProvider.imageGenerate({
prompt: 'Abstract geometric pattern, colorful minimalist art',
model: 'gpt-image-1',
n: 3,
quality: 'medium',
2026-01-18 16:26:16 +00:00
size: '1024x1024',
2025-10-03 13:49:46 +00:00
});
// Edit an existing image
const editedImage = await ai.openaiProvider.imageEdit({
image: originalImageBuffer,
prompt: 'Add sunglasses and change the background to a beach sunset',
model: 'gpt-image-1',
2026-01-18 16:26:16 +00:00
quality: 'high',
2025-10-03 13:49:46 +00:00
});
```
**Image Generation Options:**
2026-01-18 16:26:16 +00:00
2026-01-20 01:27:52 +00:00
- `model` : `'gpt-image-1'` | `'dall-e-3'` | `'dall-e-2'`
- `quality` : `'low'` | `'medium'` | `'high'` | `'auto'`
2025-10-03 13:49:46 +00:00
- `size` : Multiple aspect ratios up to 4096× 4096
2026-01-20 01:27:52 +00:00
- `background` : `'transparent'` | `'opaque'` | `'auto'`
- `outputFormat` : `'png'` | `'jpeg'` | `'webp'`
- `outputCompression` : 0– 100 for webp/jpeg
- `moderation` : `'low'` | `'auto'`
- `n` : Number of images (1– 10)
2025-10-03 13:49:46 +00:00
**gpt-image-1 Advantages:**
2026-01-18 16:26:16 +00:00
2025-10-03 13:49:46 +00:00
- Superior text rendering in images
- Up to 4096× 4096 resolution
- Transparent background support
- Advanced output formats (WebP with compression)
- Better prompt understanding
- Streaming support for progressive rendering
2025-08-01 18:25:46 +00:00
### 🔄 Persistent Conversations
2025-02-03 15:26:00 +01:00
2025-08-01 18:25:46 +00:00
Maintain context across interactions:
2025-02-03 15:26:00 +01:00
```typescript
2025-08-01 18:25:46 +00:00
// Create a coding assistant conversation
const assistant = ai.createConversation('openai');
await assistant.setSystemMessage('You are an expert TypeScript developer.');
2025-02-03 15:26:00 +01:00
2025-08-01 18:25:46 +00:00
// First question
const inputWriter = assistant.getInputStreamWriter();
await inputWriter.write('How do I implement a singleton pattern?');
2025-02-03 17:48:36 +01:00
2025-08-01 18:25:46 +00:00
// Continue the conversation
await inputWriter.write('Now show me how to make it thread-safe');
2025-02-25 19:04:40 +00:00
2025-08-01 18:25:46 +00:00
// The assistant remembers the entire context
```
2025-02-25 19:04:40 +00:00
2025-08-01 18:25:46 +00:00
## 🚀 Real-World Examples
2025-02-25 19:04:40 +00:00
2025-08-01 18:25:46 +00:00
### Build a Customer Support Bot
2025-07-25 18:00:23 +00:00
2025-08-01 18:25:46 +00:00
```typescript
const supportBot = new SmartAi({
2026-01-20 01:27:52 +00:00
anthropicToken: process.env.ANTHROPIC_KEY, // Claude for empathetic responses
2025-08-01 18:25:46 +00:00
});
2025-07-25 18:00:23 +00:00
2025-08-01 18:25:46 +00:00
async function handleCustomerQuery(query: string, history: ChatMessage[]) {
try {
const response = await supportBot.anthropicProvider.chat({
2026-01-18 16:26:16 +00:00
systemMessage: `You are a helpful customer support agent.
2025-08-01 18:25:46 +00:00
Be empathetic, professional, and solution-oriented.`,
userMessage: query,
2026-01-20 01:27:52 +00:00
messageHistory: history,
2025-08-01 18:25:46 +00:00
});
2026-01-18 16:26:16 +00:00
2025-08-01 18:25:46 +00:00
return response.message;
} catch (error) {
// Fallback to another provider if needed
2026-01-20 01:27:52 +00:00
return await supportBot.openaiProvider.chat({ /* ... */ });
2025-08-01 18:25:46 +00:00
}
}
2024-04-04 02:47:44 +02:00
```
2025-08-01 18:25:46 +00:00
### Create a Code Review Assistant
2025-07-25 18:00:23 +00:00
2025-08-01 18:25:46 +00:00
```typescript
const codeReviewer = new SmartAi({
2026-01-18 16:26:16 +00:00
groqToken: process.env.GROQ_KEY, // Groq for speed
2025-08-01 18:25:46 +00:00
});
2024-04-04 02:47:44 +02:00
2025-08-01 18:25:46 +00:00
async function reviewCode(code: string, language: string) {
const review = await codeReviewer.groqProvider.chat({
systemMessage: `You are a ${language} expert. Review code for:
- Security vulnerabilities
2026-01-20 01:27:52 +00:00
- Performance issues
2025-08-01 18:25:46 +00:00
- Best practices
- Potential bugs`,
userMessage: `Review this code:\n\n${code}` ,
2026-01-18 16:26:16 +00:00
messageHistory: [],
2025-08-01 18:25:46 +00:00
});
2026-01-18 16:26:16 +00:00
2025-08-01 18:25:46 +00:00
return review.message;
}
```
### Build a Research Assistant
2024-04-04 02:47:44 +02:00
2025-02-03 15:16:58 +01:00
```typescript
2025-08-01 18:25:46 +00:00
const researcher = new SmartAi({
2026-01-18 16:26:16 +00:00
perplexityToken: process.env.PERPLEXITY_KEY,
2025-08-01 18:25:46 +00:00
});
async function research(topic: string) {
// Perplexity excels at web-aware research
2026-01-20 01:27:52 +00:00
const findings = await researcher.perplexityProvider.research({
query: `Research the latest developments in ${topic}` ,
searchDepth: 'deep',
2025-02-03 15:16:58 +01:00
});
2026-01-18 16:26:16 +00:00
2026-01-20 01:27:52 +00:00
return {
answer: findings.answer,
sources: findings.sources,
};
2025-08-01 18:25:46 +00:00
}
```
### Local AI for Sensitive Data
```typescript
const localAI = new SmartAi({
ollama: {
baseUrl: 'http://localhost:11434',
model: 'llama2',
2026-01-18 16:26:16 +00:00
visionModel: 'llava',
},
2025-08-01 18:25:46 +00:00
});
// Process sensitive documents without leaving your infrastructure
async function analyzeSensitiveDoc(pdfBuffer: Buffer) {
const analysis = await localAI.ollamaProvider.document({
systemMessage: 'Extract and summarize key information.',
userMessage: 'Analyze this confidential document',
messageHistory: [],
2026-01-18 16:26:16 +00:00
pdfDocuments: [pdfBuffer],
2025-08-01 18:25:46 +00:00
});
2026-01-18 16:26:16 +00:00
2025-08-01 18:25:46 +00:00
// Data never leaves your servers
return analysis.message;
2025-02-03 15:16:58 +01:00
}
```
2024-04-04 02:47:44 +02:00
2025-08-01 18:25:46 +00:00
## ⚡ Performance Tips
2025-02-05 14:21:26 +01:00
2025-08-01 18:25:46 +00:00
### 1. Provider Selection Strategy
2025-02-05 14:21:26 +01:00
2025-02-25 19:04:40 +00:00
```typescript
2025-08-01 18:25:46 +00:00
class SmartAIRouter {
constructor(private ai: SmartAi) {}
2026-01-18 16:26:16 +00:00
2026-01-20 01:27:52 +00:00
async query(
message: string,
requirements: {
speed?: boolean;
accuracy?: boolean;
cost?: boolean;
privacy?: boolean;
}
) {
2025-08-01 18:25:46 +00:00
if (requirements.privacy) {
2026-01-20 01:27:52 +00:00
return this.ai.ollamaProvider.chat({ /* ... */ }); // Local only
2025-08-01 18:25:46 +00:00
}
if (requirements.speed) {
2026-01-20 01:27:52 +00:00
return this.ai.groqProvider.chat({ /* ... */ }); // 10x faster
2025-08-01 18:25:46 +00:00
}
if (requirements.accuracy) {
2026-01-20 01:27:52 +00:00
return this.ai.anthropicProvider.chat({ /* ... */ }); // Best reasoning
2025-08-01 18:25:46 +00:00
}
// Default fallback
2026-01-20 01:27:52 +00:00
return this.ai.openaiProvider.chat({ /* ... */ });
2025-02-25 19:04:40 +00:00
}
2025-08-01 18:25:46 +00:00
}
```
### 2. Streaming for Large Responses
2025-02-05 14:21:26 +01:00
2025-08-01 18:25:46 +00:00
```typescript
// Don't wait for the entire response
async function streamResponse(userQuery: string) {
2026-01-18 16:26:16 +00:00
const stream = await ai.openaiProvider.chatStream(
2026-01-20 01:27:52 +00:00
createInputStream(userQuery)
2026-01-18 16:26:16 +00:00
);
2025-08-01 18:25:46 +00:00
// Process tokens as they arrive
for await (const chunk of stream) {
updateUI(chunk); // Immediate feedback
await processChunk(chunk); // Parallel processing
2025-07-25 18:00:23 +00:00
}
2025-08-01 18:25:46 +00:00
}
```
2025-07-25 18:00:23 +00:00
2025-08-01 18:25:46 +00:00
### 3. Parallel Multi-Provider Queries
2025-07-25 18:00:23 +00:00
2025-08-01 18:25:46 +00:00
```typescript
// Get the best answer from multiple AIs
async function consensusQuery(question: string) {
const providers = [
2026-01-20 01:27:52 +00:00
ai.openaiProvider.chat({ /* ... */ }),
ai.anthropicProvider.chat({ /* ... */ }),
ai.perplexityProvider.chat({ /* ... */ }),
2025-08-01 18:25:46 +00:00
];
2026-01-18 16:26:16 +00:00
2025-08-01 18:25:46 +00:00
const responses = await Promise.all(providers);
return synthesizeResponses(responses);
2025-07-25 18:00:23 +00:00
}
2025-02-05 14:21:26 +01:00
```
2026-01-20 01:27:52 +00:00
## 🛠️ Advanced Configuration
2025-02-05 14:21:26 +01:00
2026-01-20 01:27:52 +00:00
### Provider-Specific Options
2025-02-05 14:21:26 +01:00
2025-02-25 19:04:40 +00:00
```typescript
2026-01-20 01:27:52 +00:00
const ai = new SmartAi({
// OpenAI
openaiToken: 'sk-...',
// Anthropic with extended thinking
anthropicToken: 'sk-ant-...',
// Perplexity for research
perplexityToken: 'pplx-...',
// Groq for speed
groqToken: 'gsk_...',
// Mistral with OCR settings
mistralToken: 'your-key',
mistral: {
chatModel: 'mistral-large-latest',
ocrModel: 'mistral-ocr-latest',
tableFormat: 'markdown',
2026-01-18 16:26:16 +00:00
},
2025-02-05 14:21:26 +01:00
2026-01-20 01:27:52 +00:00
// XAI (Grok)
xaiToken: 'xai-...',
// ElevenLabs TTS
elevenlabsToken: 'sk-...',
elevenlabs: {
defaultVoiceId: '19STyYD15bswVz51nqLf',
defaultModelId: 'eleven_v3',
},
// Ollama (local)
ollama: {
baseUrl: 'http://localhost:11434',
model: 'llama2',
visionModel: 'llava',
defaultOptions: {
num_ctx: 4096,
temperature: 0.7,
top_p: 0.9,
},
defaultTimeout: 120000,
},
// Exo (distributed)
exo: {
baseUrl: 'http://localhost:8080/v1',
apiKey: 'optional-key',
},
});
2025-08-01 18:25:46 +00:00
```
2025-02-25 19:04:40 +00:00
2025-08-01 18:25:46 +00:00
### Error Handling & Fallbacks
2025-07-25 18:00:23 +00:00
2025-08-01 18:25:46 +00:00
```typescript
class ResilientAI {
private providers = ['openai', 'anthropic', 'groq'];
2026-01-18 16:26:16 +00:00
2025-08-01 18:25:46 +00:00
async query(opts: ChatOptions): Promise<ChatResponse> {
for (const provider of this.providers) {
try {
return await this.ai[`${provider}Provider` ].chat(opts);
} catch (error) {
console.warn(`${provider} failed, trying next...` );
continue;
}
}
throw new Error('All providers failed');
}
}
2025-02-05 14:21:26 +01:00
```
2025-08-01 18:25:46 +00:00
## 🎯 Choosing the Right Provider
2026-01-18 16:26:16 +00:00
| Use Case | Recommended Provider | Why |
| --------------------- | -------------------- | --------------------------------------------------------- |
| **General Purpose ** | OpenAI | Most features, stable, well-documented |
2026-01-20 01:27:52 +00:00
| **Complex Reasoning ** | Anthropic | Superior logical thinking, extended thinking, safer |
2026-01-20 00:02:45 +00:00
| **Document OCR ** | Mistral | Native PDF processing, no image conversion overhead |
2026-01-18 16:26:16 +00:00
| **Research & Facts ** | Perplexity | Web-aware, provides citations |
| **Deep Research ** | OpenAI | Deep Research API with comprehensive analysis |
2026-01-20 01:27:52 +00:00
| **Premium TTS ** | ElevenLabs | Most natural voices, 70+ languages, v3 model |
2026-01-18 16:26:16 +00:00
| **Speed Critical ** | Groq | 10x faster inference, sub-second responses |
| **Privacy Critical ** | Ollama | 100% local, no data leaves your servers |
2026-01-20 01:27:52 +00:00
| **Real-time Data ** | XAI | Grok with access to current information |
2026-01-18 16:26:16 +00:00
| **Cost Sensitive ** | Ollama/Exo | Free (local) or distributed compute |
2025-08-01 18:25:46 +00:00
## 📈 Roadmap
2025-10-03 13:43:29 +00:00
- [x] Research & Web Search API
2025-10-03 13:49:46 +00:00
- [x] Image generation support (gpt-image-1, DALL-E 3, DALL-E 2)
2026-01-20 01:27:52 +00:00
- [x] Extended thinking (Anthropic)
- [x] Native PDF OCR (Mistral)
2025-08-01 18:25:46 +00:00
- [ ] Streaming function calls
- [ ] Voice input processing
- [ ] Fine-tuning integration
- [ ] Embedding support
- [ ] Agent framework
- [ ] More providers (Cohere, AI21, etc.)
2025-02-05 14:24:34 +01:00
## License and Legal Information
2025-02-05 14:21:26 +01:00
2026-01-18 16:26:16 +00:00
This repository contains open-source code licensed under the MIT License. A copy of the license can be found in the [LICENSE ](./LICENSE ) file.
2025-02-05 14:21:26 +01:00
2025-02-05 14:24:34 +01:00
**Please note:** The MIT License does not grant permission to use the trade names, trademarks, service marks, or product names of the project, except as required for reasonable and customary use in describing the origin of the work and reproducing the content of the NOTICE file.
2024-04-04 02:47:44 +02:00
### Trademarks
2026-01-18 16:26:16 +00:00
This project is owned and maintained by Task Venture Capital GmbH. The names and logos associated with Task Venture Capital GmbH and any related products or services are trademarks of Task Venture Capital GmbH or third parties, and are not included within the scope of the MIT license granted herein.
Use of these trademarks must comply with Task Venture Capital GmbH's Trademark Guidelines or the guidelines of the respective third-party owners, and any usage must be approved in writing. Third-party trademarks used herein are the property of their respective owners and used only in a descriptive manner, e.g. for an implementation of an API or similar.
2024-04-04 02:47:44 +02:00
### Company Information
2026-01-18 16:26:16 +00:00
Task Venture Capital GmbH
Registered at District Court Bremen HRB 35230 HB, Germany
2025-02-05 14:21:26 +01:00
2026-01-18 16:26:16 +00:00
For any legal inquiries or further information, please contact us via email at hello@task .vc.
2024-04-04 02:47:44 +02:00
2026-01-18 16:26:16 +00:00
By using this repository, you acknowledge that you have read this section, agree to comply with its terms, and understand that the licensing of the code does not imply endorsement by Task Venture Capital GmbH of any derivative works.