Commit Graph
9 Commits
Author SHA1 Message Date
jpmschweitzerandClaude 62edb111bd Clean up documentation to reflect current implementation
Remove confusing references to unimplemented features and clarify
what's currently working vs prepared for future integration.

README.md Changes:
- Update title to reflect mock API (not "with Ollama Backend")
- Remove architecture diagram showing Ollama/PydanticAI integration
- Clarify current status section (mock API, integration prepared)
- Fix uvicorn command: main:app → src.main:app
- Update model examples: llama2 → mistral-nemo:latest
- Mark Ollama requirements as future (not currently needed)
- Update environment variables (Ollama config commented out)
- Clarify API endpoints return mock responses
- Update CVE check date: 2025-12-05 → 2025-12-06
- Fix testing section to use requirements-dev.txt
- Remove Ollama troubleshooting (not connected yet)
- Mark production Ollama considerations as future
- Remove redundant changelog section (use CHANGELOG.md)

AGENTS.md Changes:
- Clarify project overview (mock API, not integrated)
- Add status indicators to components section
- Mark PydanticAI section as "for future implementation"
- Mark Ollama section as "ready for future integration"
- Add target model: mistral-nemo:latest
- Update OpenAI compatibility section with implemented status
- Fix Pydantic version: 2.10+ → 2.11+ (matches requirements)
- Add implementation status to development guidelines
- Mark common patterns as implemented vs future reference
- Update CVE check date: 2025-12-05 → 2025-12-06

CHANGELOG.md Changes:
- Clarify PydanticAI line: "for LLM integration" →
  "dependency (ready for future integration)"

Key Improvements:
- Clear distinction between implemented vs prepared features
- No misleading references to Ollama/PydanticAI integration
- Accurate model names (mistral-nemo:latest)
- Correct command examples (src.main:app)
- Proper date stamps (2025-12-06)
- Removed confusing troubleshooting for unconnected services

Status: Documentation now accurately reflects v0.1.0 mock API

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-06 11:07:19 +01:00
jpmschweitzerandClaude 0e810244bb Add comprehensive project documentation
Complete documentation for setup, usage, and development.
Includes LLM agent instructions and changelog.

README.md:
- Project overview and features
- Requirements (Python 3.12.11, Ollama)
- Installation instructions
- Configuration guide (.env setup)
- Running instructions (dev and production)
- Testing guide (pytest, coverage)
- API endpoint documentation
- Project structure explanation
- Development workflow
- Security features
- License information

AGENTS.md:
- LLM agent instructions
- Project context and architecture
- Domain-based structure details
- Best practices documentation
- FastAPI patterns and conventions
- Testing strategies
- Code style guidelines
- Common tasks and operations
- Ollama integration notes
- Security considerations

CHANGELOG.md:
- Keep a Changelog format
- Semantic versioning (v0.1.0)
- Unreleased changes section
- Detailed feature tracking
- Security notes (CVE checks)
- Version history with dates
- GitHub release links

Documentation Highlights:
- Clear setup instructions
- Environment configuration
- Testing commands
- Project structure
- Security-focused
- LLM-friendly instructions

Following Standards:
- Keep a Changelog format
- Semantic versioning
- Clear project structure
- Comprehensive coverage

Status: Production-ready documentation

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-06 10:54:40 +01:00
jpmschweitzerandClaude c50f7eefcb Add comprehensive testing infrastructure
Implement test suite with 62% coverage and 12 passing tests.
Async testing support, fixtures, and SSE streaming tests.

Test Configuration (pytest.ini):
- Async mode configured
- Coverage reporting enabled
- Test markers (unit, integration)
- Warning filters
- Async fixtures with session scope

Test Fixtures (tests/conftest.py):
- TestClient for sync requests
- AsyncClient for streaming tests
- Mock request fixtures
- Shared test application instance

Core Tests (tests/core/):
- Health endpoint testing
- Root endpoint testing
- Exception handler testing
- 100% coverage of core routes

Chat Tests (tests/chat/test_router.py):
- Non-streaming completion tests
- Streaming with SSE and 20s timeout
- Temperature validation
- Message role validation
- Invalid request handling
- Comprehensive edge case coverage

Models Tests (tests/models/):
- Model listing endpoint tests
- Response format validation
- OpenAI compatibility verification

Streaming Tests:
- Proper SSE format parsing
- [DONE] marker handling
- Chunk structure verification
- 20-second timeout protection
- asyncio.wait_for() timeout handling

Test Coverage:
- Overall: 62.14%
- src/chat/: High coverage
- src/models/: High coverage
- src/core/: 100% coverage
- 12 tests passing

Following Best Practices:
- Async test support
- Fixture-based setup
- Isolated test cases
- Comprehensive assertions
- Timeout protection

Status: Production-ready test suite

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-06 10:52:18 +01:00
jpmschweitzerandClaude 1d15672ed8 Add core router and main application
Implement application factory pattern with clean main.py.
Separate routers for each domain, centralized exception handling.

Core Router (src/core/router.py):
- Root endpoint (/)
- Health check endpoint (/health)
- Simple status responses
- No prefix (mounted at root)

Main Application (src/main.py):
- create_application() factory function
- Clean configuration-focused main.py
- CORS middleware setup
- Exception handler registration
- Router registration with proper prefixes
- Global config integration

Application Architecture:
- Application factory pattern for testability
- Routers imported from separate controllers
- Exception handlers in dedicated function
- All routes cleanly separated by domain

Exception Handling:
- OpenAI-compatible error format
- Custom AppException handler
- Validation error handler (422)
- Generic exception handler (500)

Following Best Practices:
- Separation of concerns
- Factory pattern for DI
- Clean main.py (config only)
- Type hints throughout

Status: Production-ready structure

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-06 10:46:38 +01:00
jpmschweitzerandClaude cffb498886 Implement models listing domain
Add OpenAI-compatible models listing endpoint.
Currently returns mock model (mistral-nemo:latest).

Models Router (src/models/router.py):
- GET /v1/models endpoint
- OpenAI-compatible response format
- Lists available models

Models Schemas (src/models/schemas.py):
- Model object with id, created, owned_by
- ModelsListResponse with data array
- Full OpenAI API compatibility

Models Service (src/models/service.py):
- list_models() function
- Mock model listing (ready for Ollama integration)
- Returns mistral-nemo:latest as default

Following Best Practices:
- Business logic in service layer
- Router only handles HTTP concerns
- Type hints throughout
- Async/await pattern

Model: mistral-nemo:latest
Status: Mock implementation (ready for Ollama integration)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-06 10:38:21 +01:00
jpmschweitzerandClaude cf6aa9a5e7 Implement chat completions domain with mock responses
Add OpenAI-compatible chat completions endpoint with streaming support.
Currently returns mock lorem ipsum responses (Ollama integration pending).

Chat Router (src/chat/router.py):
- POST /v1/chat/completions endpoint
- Streaming and non-streaming support
- SSE format with EventSourceResponse
- 20-second timeout protection
- OpenAI-compatible response format

Chat Schemas (src/chat/schemas.py):
- ChatMessage, ChatCompletionRequest
- ChatCompletionResponse, ChatCompletionChoice
- ChatCompletionChunk for streaming
- Full OpenAI API compatibility

Chat Service (src/chat/service.py):
- create_chat_completion() - non-streaming
- create_chat_completion_stream() - streaming word-by-word
- Mock lorem ipsum responses
- Token usage calculation

Chat Constants (src/chat/constants.py):
- OpenAI API constants for consistency
- Object types, roles, finish reasons

Following Best Practices:
- Business logic in service layer
- Router only handles HTTP concerns
- Async generators for streaming
- Type hints throughout

Model: mistral-nemo:latest
Status: Mock implementation (ready for Ollama integration)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-06 10:36:57 +01:00
jpmschweitzerandClaude 8474d8b21c Implement async Ollama client
Add production-ready async HTTP client for Ollama API communication
with proper error handling and dependency injection.

Ollama Client (src/ollama/client.py):
- Async context manager for connection lifecycle
- Non-streaming chat endpoint
- Streaming chat endpoint with async generator
- Model listing endpoint
- Health check endpoint
- Timeout configuration per request
- Comprehensive error handling with custom exceptions
- FastAPI dependency injection support

Ollama Schemas (src/ollama/schemas.py):
- OllamaMessage: Chat message format
- OllamaChatRequest: Request with model, messages, options
- OllamaChatResponse: Complete chat response
- OllamaModelInfo: Model metadata
- OllamaModelsResponse: Model list response

Features:
- Async/await throughout for non-blocking I/O
- Connection pooling via httpx.AsyncClient
- Configurable timeouts (default: 120s)
- Proper exception mapping (connection errors, timeouts)
- Ready for integration (currently not connected to routes)

Following Best Practices:
- Async context manager pattern
- Dependency injection for FastAPI routes
- Separation of concerns (client vs schemas)
- Type hints throughout
- Comprehensive logging

Status: Ready for integration (mock responses used in routes currently)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-06 10:32:10 +01:00
jpmschweitzerandClaude 0ed6c5086c Add core configuration and base models
Implement global application configuration and custom Pydantic models
following FastAPI best practices.

Core Configuration (src/core/config.py):
- BaseSettings with environment variable support
- Split configuration by domain (following best practices)
- Ollama connection settings (host, model, timeouts)
- API configuration (host, port, prefix)
- CORS settings
- 20-second streaming timeout per turn
- Cached configuration with @lru_cache

Custom Base Models (src/core/models.py):
- CustomBaseModel for consistent serialization
- ISO datetime formatting
- Alias population support
- Enum value serialization
- Validation on assignment
- serializable_dict() for logging/debugging

Exception Handling (src/core/exceptions.py):
- Base AppException with status codes
- OllamaConnectionError (503)
- OllamaTimeoutError (504)
- ModelNotFoundError (404)
- ValidationError (422)
- OpenAI-compatible error structure

Benefits:
- Consistent configuration across domains
- Type-safe settings with validation
- Easy environment override via .env
- Predictable error responses
- Better debugging with serializable models

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-06 10:31:36 +01:00
jpmschweitzerandClaude 769c12b33b Initial project setup and dependencies
Set up Python 3.12.11 FastAPI project with security-focused dependency management.

Dependencies:
- FastAPI 0.123.9: Modern web framework
- Uvicorn 0.38.0: ASGI server with standard extras
- Pydantic 2.12.5: Data validation (updated for pydantic-ai)
- PydanticAI 1.27.0: LLM agent framework with Ollama support
- HTTPX 0.28.1: Async HTTP client
- SSE-Starlette 3.0.2: Server-Sent Events for streaming
- python-dotenv 1.2.1: Environment configuration

Security:
- All packages checked for CVEs (as of 2025-12-06)
- Minor version locking (>=X.Y,<X.(Y+1)) for supply chain protection
- CVE status documented in requirements.txt

Development tools:
- pytest 8.3.5 + pytest-asyncio for async testing
- pytest-cov 6.0.0 for coverage reporting
- ruff 0.8.6 for linting and formatting
- mypy 1.14.1 for type checking

Configuration:
- pyproject.toml: Build system, coverage, ruff, and mypy config
- .env.example: Environment variable template
- .gitignore: Comprehensive Python/FastAPI patterns

Target model: mistral-nemo:latest on external Ollama instance

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-06 10:30:52 +01:00