Commit Graph

21 Commits

  • test(ai): Add image input test for Anthropic Haiku 3.5
    - Added image handling test for Claude 3.5 Haiku
    - Ensures vision capabilities are properly tested
  • fix(ai): Fix OpenAI Responses provider multi-turn conversation support
    - Added contentSignature tracking for assistant messages
    - Fixed message format in convertToResponsesFormat (output_text instead of input_text)
    - Properly preserve message IDs for multi-turn conversations
    - Added proper ResponseOutputMessage type satisfaction
    - Updated tests to cover more providers and multi-turn scenarios
  • chore: Mark AI package implementation task as complete
    - Moved completed AI package implementation task to done folder
    - Task successfully implemented the unified AI API (@mariozechner/pi-ai)
    - Package renamed, documentation improved, and published as v0.5.12
  • docs(ai): Fix model names in README examples
    - Changed gpt-4o-mini to gpt-5-mini in examples to match actual model names
    - Minor formatting fixes
  • docs(ai): Improve README with model discovery and capabilities documentation
    - Added note that library only includes tool-calling capable models
    - Added Model Discovery section showing how to enumerate models
    - Added examples for finding models with specific capabilities
    - Added cache read/write costs to model capabilities display
    - Clarified that models are auto-fetched from APIs at build time
  • feat(ai): Rename package to @mariozechner/pi-ai and improve documentation
    - Changed package name from @mariozechner/ai to @mariozechner/pi-ai
    - Fixed generate-models.ts to fetch from models.dev API instead of local file
    - Completely rewrote README with practical examples:
      - Image input with base64 encoding
      - Proper tool calling with context management
      - Streaming with completion indicators
      - Abort signal usage
      - Provider-specific options (reasoning/thinking)
      - Custom model definitions for local/self-hosted LLMs
      - Environment variables explanation
    - Bumped version to 0.5.9 and published
  • feat(ai): Add image input tests for vision-capable models
    - Added image tests to OpenAI Completions (gpt-4o-mini)
    - Added image tests to Anthropic (claude-sonnet-4-0)
    - Added image tests to Google (gemini-2.5-flash)
    - Tests verify models can process and describe the red circle test image
  • refactor(ai): Implement unified model system with type-safe createLLM
    - Add Model interface to types.ts with normalized structure
    - Create type-safe generic createLLM function with provider-specific model constraints
    - Generate models from OpenRouter API and models.dev data
    - Strip provider prefixes for direct providers (google, openai, anthropic, xai)
    - Keep full model IDs for OpenRouter-proxied models
    - Clean separation: types.ts (Model interface), models.ts (factory logic), models.generated.ts (data)
    - Remove old model scripts and unused dependencies
    - Rename GeminiLLM to GoogleLLM for consistency
    - Add tests for new providers (xAI, Groq, Cerebras, OpenRouter)
    - Support 181 tool-capable models across 7 providers with full type safety
  • feat(ai): Migrate tests to Vitest and add provider test coverage
    - Switch from Node.js test runner to Vitest for better DX
    - Add test suites for Grok, Groq, Cerebras, and OpenRouter providers
    - Add Ollama test suite with automatic server lifecycle management
    - Include thinking mode and multi-turn tests for all providers
    - Remove example files (consolidated into test suite)
    - Add VS Code test configuration
  • feat(ai): Add auto-generated TypeScript models with factory function
    - Generate models.generated.ts from models.json with proper types
    - Categorize providers: OpenAI (Responses), OpenAI-compatible, Anthropic, Gemini
    - Create createLLM() factory with TypeScript overloads for type safety
    - Auto-detect base URLs and environment variables for providers
    - Support 353 models across 39 providers with full autocompletion
    - Exclude generated file from git (rebuilt on npm build)
  • feat(ai): Add models.dev data integration
    - Add models script to download latest model information
    - Create models.ts module to query model capabilities
    - Include models.json in package distribution
    - Export utilities to check model features (reasoning, tools)
    - Update build process to copy models.json to dist
  • test(ai): Add comprehensive E2E tests for all AI providers
    - Add multi-turn test to verify thinking and tool calling work together
    - Test thinkingSignature handling for proper multi-turn context
    - Fix Gemini provider to generate base64 thinkingSignature when needed
    - Handle multiple rounds of tool calls in tests (Gemini behavior)
    - Make thinking tests more robust for model-dependent behavior
    - All 18 tests passing across 4 providers
  • feat(ai): Implement Gemini provider with streaming and tool support
    - Added GeminiLLM provider implementation with GoogleGenerativeAI SDK
    - Supports streaming with text/thinking content and completion signals
    - Handles Gemini's parts-based content system (text, thought, functionCall)
    - Implements tool/function calling with proper format conversion
    - Maps between unified types and Gemini-specific formats (model vs assistant role)
    - Added test example matching other provider patterns
    - Fixed typo in AssistantMessage type (stopResaon -> stopReason) across all providers
  • feat(ai): Implement unified AI API with Anthropic provider
    - 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
  • feat(ai): Create unified AI package with OpenAI, Anthropic, and Gemini support
    - Set up @mariozechner/ai package structure following monorepo patterns
    - Install OpenAI, Anthropic, and Google Gemini SDK dependencies
    - Document comprehensive API investigation for all three providers
    - Design minimal unified API with streaming-first architecture
    - Add models.dev integration for pricing and capabilities
    - Implement automatic caching strategy for all providers
    - Update project documentation with package creation guide