7 Commits
Author SHA1 Message Date
jpmschweitzerandClaude 9612c7af05 docs(architecture): correct agent model to gemma4:e2b
Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-07 14:59:12 +02:00
jpmschweitzerandClaude 9d58df85f3 fix(config): default agent model to gemma4:e2b
mistral-nemo-large holds ~9.2 GB of the 11 GB card it shares with Speaches,
which starves Whisper and breaks voice transcription. gemma4:e2b holds
1.9 GB and is faster. The deployed stack already overrides this via
OLLAMA_AGENT_MODEL; this aligns the default so a deployment without that
override does not reintroduce the contention.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-07 14:58:57 +02:00
jpmschweitzerandClaude 3de96fe070 docs: correct Ollama model references to gemma4:e2b
The deployed agent model is gemma4:e2b; these references still named
mistral-nemo, so the setup and troubleshooting steps checked for a model
that is no longer expected to be present.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-07 14:51:58 +02:00
jpmschweitzerandClaude Fable 5 e2acb7de39 docs(architecture): registry is git.schweitz.net not git.schweitz.internal
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-19 17:11:08 +02:00
jpmschweitzerandClaude Fable 5 5998571890 chore: release api v1.0.1
Build and Push API / release (push) Successful in 2s
Build and Push API / build (push) Successful in 1m39s
Patch release for the network migration: docker-hostname config
defaults for Tatlock/SearXNG and CI image push via the
git.schweitz.net registry route.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-19 12:32:02 +02:00
jpmschweitzerandClaude Fable 5 6ac1d15591 fix(config): use docker hostnames for tatlock and searxng defaults
The homelab is retiring *.schweitz.internal and will rebind host ports
to 127.0.0.1, so container-to-container traffic must use container
names on the docker-dataplane network. Switch defaults from host
IP:port to http://tatlock:8000 and http://searxng:8080 (SearXNG's
internal port is 8080; 8087 is only the host-published port).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-19 12:21:43 +02:00
jpmschweitzerandClaude Fable 5 22af23827d chore(ci): push images via git.schweitz.net registry
The .internal registry domain is being retired; git.schweitz.net now
serves the registry without SSO on /v2/.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-19 11:10:35 +02:00
9 changed files with 29 additions and 15 deletions
+2 -2
View File
@@ -6,7 +6,7 @@ on:
- 'api/v*'
env:
IMAGE_NAME: git.schweitz.internal/jpmschweitzer/webber-api
IMAGE_NAME: git.schweitz.net/jpmschweitzer/webber-api
jobs:
release:
@@ -44,7 +44,7 @@ jobs:
- name: Login to Gitea Registry
uses: docker/login-action@v3
with:
registry: git.schweitz.internal
registry: git.schweitz.net
username: ${{ secrets.REGISTRY_USER }}
password: ${{ secrets.REGISTRY_PASSWORD }}
+1 -1
View File
@@ -270,7 +270,7 @@ echo $WEBBER_API_URL # Should be http://localhost:8095
curl http://192.168.86.149:11434/api/tags
# Check model is available
curl http://192.168.86.149:11434/api/tags | grep mistral-nemo
curl http://192.168.86.149:11434/api/tags | grep gemma4
```
### Tests failing
+1 -1
View File
@@ -107,7 +107,7 @@ This project uses prefixed tags for independent release cycles:
## Requirements
- Python 3.12+
- Ollama running with `mistral-nemo:latest` model
- Ollama running with `gemma4:e2b` model
- Docker (for production deployment)
- SearXNG (optional, for web search)
+5 -2
View File
@@ -14,13 +14,16 @@ CORS_ORIGINS=["http://localhost:3000","http://localhost:8080"]
# LLM - Ollama (tower-of-joy)
OLLAMA_URL=http://192.168.86.149:11434
OLLAMA_AGENT_MODEL=mistral-nemo-large:latest
OLLAMA_AGENT_MODEL=gemma4:e2b
OLLAMA_EMBED_MODEL=nomic-embed-text:latest
# Auth - Tatlock integration (optional)
# TATLOCK_API_URL=http://192.168.86.149:8000
# TATLOCK_API_URL=http://tatlock:8000
# INTERNAL_API_KEY=your-internal-key
# Web search - SearXNG (container name on docker-dataplane; internal port 8080)
# SEARXNG_URL=http://searxng:8080
# Tool execution
TOOL_TIMEOUT_SECONDS=120
SANDBOX_ENABLED=true
+9
View File
@@ -7,6 +7,15 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
## [Unreleased]
### Changed
- Default `OLLAMA_AGENT_MODEL` is now `gemma4:e2b` instead of `mistral-nemo-large:latest`, so a deployment without an explicit override no longer exhausts shared GPU memory
## [1.0.1] - 2026-07-19
### Changed
- Default `TATLOCK_API_URL` and `SEARXNG_URL` now use docker container names (`http://tatlock:8000`, `http://searxng:8080`) instead of host IP:port, for container-to-container traffic on the docker-dataplane network
- CI workflow now pushes Docker images via the `git.schweitz.net` registry route
## [1.0.0] - 2026-01-15
### Added
+6 -4
View File
@@ -13,7 +13,7 @@ Webber is a FastAPI-based agent orchestration service that provides:
**Port:** 8086
**Runtime:** Python 3.12, FastAPI, Uvicorn
**Agent Framework:** PydanticAI
**Default LLM:** Ollama with mistral-nemo-large:latest
**Default LLM:** Ollama with gemma4:e2b
---
@@ -205,9 +205,11 @@ All settings via environment variables or `.env`:
| HOST | 0.0.0.0 | Server host |
| PORT | 8086 | Server port |
| OLLAMA_URL | http://192.168.86.149:11434 | Ollama API URL |
| OLLAMA_AGENT_MODEL | mistral-nemo-large:latest | Agent reasoning model |
| OLLAMA_AGENT_MODEL | gemma4:e2b | Agent reasoning model |
| OLLAMA_EMBED_MODEL | nomic-embed-text:latest | Embedding model |
| TATLOCK_API_URL | http://192.168.86.149:8000 | Tatlock auth service |
| TATLOCK_API_URL | http://tatlock:8000 | Tatlock auth service |
| SEARXNG_URL | http://searxng:8080 | SearXNG web search instance |
| SEARXNG_TIMEOUT | 10 | SearXNG request timeout (seconds) |
| TOOL_TIMEOUT_SECONDS | 120 | Tool execution timeout |
| SANDBOX_ENABLED | true | Enable sandboxed execution |
| ALLOWED_PATHS | [] | Paths accessible to tools |
@@ -357,7 +359,7 @@ Gitea Actions workflow:
Deployed in Portainer `agents` stack alongside Tatlock:
- Network: `docker-dataplane`
- Registry: `git.schweitz.internal/jpmschweitzer/webber`
- Registry: `git.schweitz.net/jpmschweitzer/webber`
- Auto-update: Watchtower with label `com.centurylinklabs.watchtower.enable=true`
---
+1 -1
View File
@@ -1,6 +1,6 @@
[project]
name = "webber-api"
version = "1.0.0"
version = "1.0.1"
description = "Webber API - Multi-Agent AI Development Server"
authors = [
{name = "jpmschweitzer"}
+3 -3
View File
@@ -64,15 +64,15 @@ class Settings(BaseSettings):
# LLM - Ollama (always hot in VRAM on tower-of-joy)
ollama_url: str = "http://192.168.86.149:11434"
ollama_agent_model: str = "mistral-nemo-large:latest"
ollama_agent_model: str = "gemma4:e2b"
ollama_embed_model: str = "nomic-embed-text:latest"
# Auth - Tatlock integration
tatlock_api_url: str | None = "http://192.168.86.149:8000"
tatlock_api_url: str | None = "http://tatlock:8000"
internal_api_key: str | None = None
# Web search - SearXNG (use SEARXNG_URL env var to override)
searxng_url: str = "http://192.168.86.149:8087"
searxng_url: str = "http://searxng:8080"
searxng_timeout: int = 10
# Tool execution
+1 -1
View File
@@ -12,7 +12,7 @@ class TestWebSearchTool:
@pytest.fixture
def tool(self):
return WebSearchTool(searxng_url="http://localhost:8087", timeout=5)
return WebSearchTool(searxng_url="http://searxng:8080", timeout=5)
@pytest.fixture
def mock_search_response(self):