* fix text
* remove lint from docker publish workflow
* gemini base url docs
* feat: add multimodal support for openai-compatible providers
- Add helper function to check OpenAI-compatible provider availability per mode
- Update provider detection to support language, embedding, STT, and TTS modalities
- Implement mode-specific environment variable detection (LLM, EMBEDDING, STT, TTS)
- Maintain backward compatibility with generic OPENAI_COMPATIBLE_BASE_URL
- Add comprehensive unit tests for all configuration scenarios
- Update .env.example with mode-specific environment variables
- Update provider support matrix in ai-models.md
- Create comprehensive openai-compatible.md setup guide
This enables users to configure different OpenAI-compatible endpoints for
different AI capabilities (e.g., LM Studio for language models, dedicated
server for embeddings) while maintaining full backward compatibility.
* upgrade
* chore: change docker release strategy
Multi-platform Docker builds (amd64 + arm64) consume significant disk
space on GitHub Actions runners, often causing 'No space left on device'
errors.
This adds cleanup steps that remove unnecessary toolchains before
building:
- .NET SDK (~1-2 GB)
- Android SDK (~10+ GB)
- GHC (Haskell) (~1 GB)
- CodeQL tools (~5 GB)
- Unused Docker images
This typically frees up 20-30 GB of space, which should be sufficient
for multi-platform builds.
The registry parameter was referencing env.GHCR_REGISTRY which no longer
exists after switching to hardcoded image names. This caused the login
to default to Docker Hub instead of GHCR, resulting in authentication
failures with GITHUB_TOKEN.
Now explicitly uses 'ghcr.io' as the registry parameter.
Replaces dynamic image name determination with hardcoded values:
- GHCR: ghcr.io/lfnovo/open-notebook
- Docker Hub: lfnovo/open_notebook
This fixes the issue where dynamic name parsing was creating empty
image names, resulting in invalid Docker tags like ":1.0.0-single".
Changes:
- Remove complex repository name parsing logic
- Hardcode image names in workflow env section
- Add tag preparation steps that build comma-separated tag lists
- Properly handle empty push_latest input for release events
Related to PR #163
* Add GHCR support with conditional Docker Hub publishing
This commit enhances the CI/CD pipeline to support both GitHub Container
Registry (GHCR) and Docker Hub, with Docker Hub being optional based on
the presence of credentials.
Changes:
- Add GHCR as the primary container registry
- Make Docker Hub publishing conditional on DOCKER_USERNAME and DOCKER_PASSWORD secrets
- Dynamically determine image names from repository owner/name (e.g., aperim/open-notebook)
- Images are pushed to:
* GHCR: ghcr.io/{owner}/{repo}:{version|latest}
* Docker Hub (if credentials available): {owner}/{repo}:{version|latest}
- Update build summary to show which registries were used
Benefits:
- Forks can build and publish to GHCR without Docker Hub credentials
- Original repo can continue publishing to both registries
- Image names automatically match the repository structure
- More flexible deployment options for contributors
Technical Details:
- Added extract-version job outputs: ghcr_image, dockerhub_image, has_dockerhub_secrets
- Added GHCR login step using GITHUB_TOKEN (always runs)
- Made Docker Hub login conditional on has_dockerhub_secrets flag
- Updated image tags to use dynamic repository-based names
- Enhanced build summary to show registry usage
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
* Add GITHUB_TOKEN permissions for GHCR publishing
The workflow needs 'packages: write' permission to push images to GitHub
Container Registry (GHCR).
Permissions added:
- contents: read (required for checkout)
- packages: write (required for GHCR push)
Without these permissions, the docker login and push to ghcr.io would fail
with a 403 Forbidden error.
---------
Co-authored-by: Troy Kelly <troy@aperim.com>
Co-authored-by: Claude <noreply@anthropic.com>
New front-end
Launch Chat API
Manage Sources
Enable re-embedding of all contents
Sources can be added without a notebook now
Improved settings
Enable model selector on all chats
Background processing for better experience
Dark mode
Improved Notes
Improved Docs:
- Remove all Streamlit references from documentation
- Update deployment guides with React frontend setup
- Fix Docker environment variables format (SURREAL_URL, SURREAL_PASSWORD)
- Update docker image tag from :latest to :v1-latest
- Change navigation references (Settings → Models to just Models)
- Update development setup to include frontend npm commands
- Add MIGRATION.md guide for users upgrading from Streamlit
- Update quick-start guide with correct environment variables
- Add port 5055 documentation for API access
- Update project structure to reflect frontend/ directory
- Remove outdated source-chat documentation files