mirror of
https://github.com/getcompanion-ai/co-mono.git
synced 2026-04-21 18:05:11 +00:00
- Define clean API with complete() method and callbacks for streaming - Add comprehensive type system for messages, tools, and usage - Implement AnthropicAI provider with full feature support: - Thinking/reasoning with signatures - Tool calling with parallel execution - Streaming via callbacks (onText, onThinking) - Proper error handling and stop reasons - Cache tracking for input/output tokens - Add working test/example demonstrating tool execution flow - Support for system prompts, temperature, max tokens - Proper message role types: user, assistant, toolResult
4.6 KiB
4.6 KiB
AI Package Implementation Analysis
Overview
Based on the comprehensive plan in packages/ai/plan.md and detailed API documentation for OpenAI, Anthropic, and Gemini SDKs, the AI package needs to provide a unified API that abstracts over these three providers while maintaining their unique capabilities.
Existing Codebase Context
Current Structure
- Monorepo using npm workspaces with packages in
packages/directory - Existing packages:
tui,agent,pods - TypeScript/ESM modules with Node.js ≥20.0.0
- Biome for linting and formatting
- Lockstep versioning at 0.5.8
Package Location
The AI package should be created at packages/ai/ following the existing pattern.
Key Implementation Requirements
Core Features
- Unified Client API - Single interface for all providers
- Streaming First - All providers support streaming, non-streaming is collected events
- Provider Adapters - OpenAI, Anthropic, Gemini adapters
- Event Normalization - Consistent event types across providers
- Tool/Function Calling - Unified interface for tools across providers
- Thinking/Reasoning - Support for reasoning models (o1/o3, Claude thinking, Gemini thinking)
- Token Tracking - Usage and cost calculation
- Abort Support - Request cancellation via AbortController
- Error Mapping - Normalized error handling
- Caching - Automatic caching strategies per provider
Provider-Specific Handling
OpenAI
- Dual APIs: Chat Completions vs Responses API
- Responses API for o1/o3 reasoning content
- Developer role for o1/o3 system prompts
- Stream options for token usage
Anthropic
- Content blocks always arrays
- Separate system parameter
- Tool results as user messages
- Explicit thinking budget allocation
- Cache control per block
Gemini
- Parts-based content system
- Separate systemInstruction parameter
- Model role instead of assistant
- Thinking via part.thought flag
- Function calls in parts array
Implementation Structure
packages/ai/
├── src/
│ ├── index.ts # Main exports
│ ├── types.ts # Unified type definitions
│ ├── client.ts # Main AI client class
│ ├── adapters/
│ │ ├── base.ts # Base adapter interface
│ │ ├── openai.ts # OpenAI adapter
│ │ ├── anthropic.ts # Anthropic adapter
│ │ └── gemini.ts # Gemini adapter
│ ├── models/
│ │ ├── models.ts # Model info lookup
│ │ └── models-data.ts # Generated models database
│ ├── errors.ts # Error mapping
│ ├── events.ts # Event stream handling
│ ├── costs.ts # Cost tracking
│ └── utils.ts # Utility functions
├── test/
│ ├── openai.test.ts
│ ├── anthropic.test.ts
│ └── gemini.test.ts
├── scripts/
│ └── update-models.ts # Update models database
├── package.json
├── tsconfig.build.json
└── README.md
Dependencies
openai: ^5.12.2 (for OpenAI SDK)@anthropic-ai/sdk: Latest@google/genai: Latest
Files to Create/Modify
New Files in packages/ai/
package.json- Package configurationtsconfig.build.json- TypeScript build configsrc/index.ts- Main exportssrc/types.ts- Type definitionssrc/client.ts- Main AI classsrc/adapters/base.ts- Base adaptersrc/adapters/openai.ts- OpenAI implementationsrc/adapters/anthropic.ts- Anthropic implementationsrc/adapters/gemini.ts- Gemini implementationsrc/models/models.ts- Model infosrc/errors.ts- Error handlingsrc/events.ts- Event streamingsrc/costs.ts- Cost trackingREADME.md- Package documentation
Files to Modify
- Root
tsconfig.json- Add path mapping for @mariozechner/pi-ai - Root
package.json- Add to build script order
Implementation Strategy
Phase 1: Core Structure
- Create package structure and configuration
- Define unified types and interfaces
- Implement base adapter interface
Phase 2: Provider Adapters
- Implement OpenAI adapter (both APIs)
- Implement Anthropic adapter
- Implement Gemini adapter
Phase 3: Features
- Add streaming support
- Implement tool calling
- Add thinking/reasoning support
- Implement token tracking
Phase 4: Polish
- Error mapping and handling
- Cost calculation
- Model information database
- Documentation and examples
Testing Approach
- Unit tests for each adapter
- Integration tests with mock responses
- Example scripts for manual testing
- Verify streaming, tools, thinking for each provider