105 lines
3.7 KiB
Markdown
105 lines
3.7 KiB
Markdown
# SmartAI Project Hints
|
|
|
|
## Dependencies
|
|
|
|
- Uses `@git.zone/tstest` v3.x for testing (import from `@git.zone/tstest/tapbundle`)
|
|
- `@push.rocks/smartfs` v1.x for file system operations
|
|
- `@anthropic-ai/sdk` v0.71.x with extended thinking support
|
|
- `@mistralai/mistralai` v1.x for Mistral OCR and chat capabilities
|
|
- `openai` v6.x for OpenAI API integration
|
|
- `@push.rocks/smartrequest` v5.x - uses `response.stream()` + `Readable.fromWeb()` for streaming
|
|
|
|
## Important Notes
|
|
|
|
- When extended thinking is enabled, temperature parameter must NOT be set (or set to 1)
|
|
- The `streamNode()` method was removed in smartrequest v5, use `response.stream()` with `Readable.fromWeb()` instead
|
|
|
|
## Provider Capabilities Summary
|
|
|
|
| Provider | Chat | Stream | TTS | Vision | Documents | Research | Images |
|
|
|--------------|------|--------|-----|--------|-----------|----------|--------|
|
|
| OpenAI | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
|
|
| Anthropic | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ |
|
|
| Mistral | ✅ | ✅ | ❌ | ✅ | ✅ | ❌ | ❌ |
|
|
| ElevenLabs | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ |
|
|
| Ollama | ✅ | ✅ | ❌ | ✅ | ✅ | ❌ | ❌ |
|
|
| XAI | ✅ | ✅ | ❌ | ❌ | ✅ | ❌ | ❌ |
|
|
| Perplexity | ✅ | ✅ | ❌ | ❌ | ❌ | ✅ | ❌ |
|
|
| Groq | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |
|
|
| Exo | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |
|
|
|
|
## Mistral Provider Integration
|
|
|
|
### Overview
|
|
|
|
The Mistral provider supports:
|
|
- **Document AI** via Mistral OCR (December 2025) - native PDF processing without image conversion
|
|
- **Chat capabilities** using Mistral's chat models (`mistral-large-latest`, etc.)
|
|
|
|
### Key Advantage: Native PDF Support
|
|
|
|
Unlike other providers that require converting PDFs to images (using SmartPdf), Mistral OCR natively accepts PDF documents as base64-encoded data. This makes document processing potentially faster and more accurate for text extraction.
|
|
|
|
### Configuration
|
|
|
|
```typescript
|
|
import * as smartai from '@push.rocks/smartai';
|
|
|
|
const provider = new smartai.MistralProvider({
|
|
mistralToken: 'your-token-here',
|
|
chatModel: 'mistral-large-latest', // default
|
|
ocrModel: 'mistral-ocr-latest', // default
|
|
tableFormat: 'markdown', // 'markdown' or 'html'
|
|
});
|
|
|
|
await provider.start();
|
|
```
|
|
|
|
### API Key
|
|
|
|
Tests require `MISTRAL_API_KEY` in `.nogit/env.json`.
|
|
|
|
## Anthropic Extended Thinking Feature
|
|
|
|
### Configuration
|
|
|
|
Extended thinking is configured at the provider level during instantiation:
|
|
|
|
```typescript
|
|
import * as smartai from '@push.rocks/smartai';
|
|
|
|
const provider = new smartai.AnthropicProvider({
|
|
anthropicToken: 'your-token-here',
|
|
extendedThinking: 'normal', // Options: 'quick' | 'normal' | 'deep' | 'off'
|
|
});
|
|
```
|
|
|
|
### Thinking Modes
|
|
|
|
| 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 |
|
|
|
|
### Implementation Details
|
|
|
|
- Extended thinking is implemented via `getThinkingConfig()` private method
|
|
- When thinking is enabled, temperature must NOT be set
|
|
- Uses `claude-sonnet-4-5-20250929` model
|
|
|
|
## Testing
|
|
|
|
Run tests with:
|
|
|
|
```bash
|
|
pnpm test
|
|
```
|
|
|
|
Run specific tests:
|
|
|
|
```bash
|
|
npx tstest test/test.something.ts --verbose
|
|
```
|