Commit Graph

9 Commits

Author SHA1 Message Date
cdb8d2ef34 fix: correct LiteLLM environment variable syntax
Changed API key reference from ${ANTHROPIC_API_KEY} to
os.environ/ANTHROPIC_API_KEY to match LiteLLM's documented syntax.

The os.environ/ prefix tells LiteLLM to use os.getenv() to retrieve
the environment variable at runtime, which is the correct way to
reference environment variables in LiteLLM config files.

Reference: https://docs.litellm.ai/docs/proxy/deploy

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-09 00:30:07 +01:00
f0e99d2776 revert: remove SFTP integration from AI stack
Removed custom Dockerfile and SFTP function integration in favor of
the simpler REST API approach (webui-export.py).

Changes:
- Restored webui service to use official Open WebUI image
- Removed custom Dockerfile.webui (paramiko build)
- Removed ai/functions/save_to_disk.py SFTP function
- Removed SSH key and functions volume mounts

The REST API export script (webui-export.py) is a simpler and more
flexible solution that doesn't require Docker modifications.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-08 23:15:27 +01:00
a0d5006cf5 feat: add Open WebUI code export script via REST API
Added Python script to extract and save code blocks from Open WebUI
chat conversations to local disk using the REST API.

Features:
- Export code blocks from specific chats or all chats
- Automatic language detection and proper file extensions
- Organizes files by chat title with metadata
- No Docker modifications needed
- Remote access support via SSH tunnel or public URL

Usage:
  python3 ai/webui-export.py --all --output-dir ./exports
  python3 ai/webui-export.py --chat-id <id> --output-dir ./code

This replaces the complex SFTP integration with a simple API-based
approach that's easier to maintain and use.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-08 23:12:37 +01:00
5818644c1a feat: add SFTP integration for saving code to local disk
Added custom Open WebUI function for SSH/SFTP file operations:

**New Function: save_to_disk.py**
- save_file(): Write generated code to local filesystem via SFTP
- read_file(): Read files from local disk
- list_files(): List directory contents
- Configurable via Valves (host, port, username, paths)

**Custom Dockerfile (Dockerfile.webui)**
- Based on ghcr.io/open-webui/open-webui:main
- Installs paramiko library for SSH/SFTP support
- Creates .ssh directory for key storage

**Configuration Updates**
- Mount SSH private key from host (/root/.ssh/id_rsa)
- Mount functions directory for custom tools
- Build custom image with SFTP capabilities

**Usage in Open WebUI**
Claude can now use these tools to:
- Generate code and save it directly to your local disk
- Read existing files for context
- List project directories
- Create new files in any project

Default base path: /home/valknar/Projects
Authentication: SSH key-based (passwordless)

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-08 23:07:11 +01:00
424e6d044d fix: configure LiteLLM without database requirement 2025-11-08 23:02:07 +01:00
8ee86b2a0d fix: correct LiteLLM config volume mount path 2025-11-08 22:59:50 +01:00
8eae3c650f feat: add LiteLLM proxy for Anthropic Claude models
Added LiteLLM as an OpenAI-compatible proxy for Anthropic's API to
enable Claude models in Open WebUI.

**New Service: litellm**
- Image: ghcr.io/berriai/litellm:main-latest
- Internal proxy on port 4000
- Converts Anthropic API to OpenAI-compatible format
- Health check with 30s intervals
- Not exposed via Traefik (internal only)

**LiteLLM Configuration (litellm-config.yaml)**
- Claude Sonnet 4 (claude-sonnet-4-20250514)
- Claude Sonnet 4.5 (claude-sonnet-4-5-20250929)
- Claude 3.5 Sonnet (claude-3-5-sonnet-20241022)
- Claude 3 Opus (claude-3-opus-20240229)
- Claude 3 Haiku (claude-3-haiku-20240307)

**Open WebUI Configuration Updates**
- Changed OPENAI_API_BASE_URLS to point to LiteLLM proxy
- URL: http://litellm:4000/v1
- Added litellm as dependency for webui service
- Dummy API key for proxy authentication

**Why LiteLLM?**
Anthropic's API uses different endpoint structure and authentication
headers compared to OpenAI. LiteLLM acts as a translation layer,
allowing Open WebUI to use Claude models through its OpenAI-compatible
interface.

**Available Models in Open WebUI**
- claude-sonnet-4 (latest Claude Sonnet 4)
- claude-sonnet-4.5 (Claude Sonnet 4.5)
- claude-3-5-sonnet
- claude-3-opus
- claude-3-haiku

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-08 22:58:09 +01:00
cdee0f0c42 fix: rename AI postgres service to avoid conflict with core
Changed service name from 'postgres' to 'ai_postgres' to avoid naming
conflict with the core PostgreSQL service in Docker Compose include.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-08 22:35:41 +01:00
0679b7d738 feat: add AI stack with Open WebUI, Crawl4AI, and pgvector
Created complete AI infrastructure stack at ai.pivoine.art:

**New Services:**
- **Open WebUI** (ai.pivoine.art)
  - ChatGPT-like interface for AI models
  - Multi-user chat with authentication
  - RAG (Retrieval-Augmented Generation) support
  - Document upload and processing
  - Claude API integration via Anthropic

- **PostgreSQL with pgvector** (dedicated AI database)
  - Vector similarity search for RAG
  - Separate from production databases
  - Stores embeddings and documents

- **Crawl4AI** (internal API service)
  - Web scraping optimized for LLMs
  - Converts websites to clean Markdown
  - Called by n8n workflows
  - No public exposure (internal only)

**Configuration:**
- Added 18 AI environment variables to arty.yml
- Configured email notifications via IONOS SMTP
- OpenAI API compatibility for Claude integration
- Traefik SSL termination and compression

**Backup:**
- Added 3 AI volumes to Restic backup
- Daily backup at 3 AM
- Retention: 7 daily, 4 weekly, 6 monthly, 2 yearly

**Integration:**
- Shares falcon_network with existing services
- Ready for n8n workflow automation
- Mattermost notifications support
- Watchtower auto-updates enabled

Ready for Phase 2: GPU server integration with Ollama, Whisper, and
Stable Diffusion when IONOS A10 server is provisioned.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-08 22:34:46 +01:00