4.2 KiB
4.2 KiB
Auto-Commit Service
Automated commit message generation service using local LLM inference. Commits and pushes changes across lilith-platform repos every 15 minutes.
Features
- Generates commit messages using llama-service (local 3B model)
- Processes multiple repositories in a cycle
- Automatic push with conflict resolution
- Claude Code fallback for complex failures
- FastAPI endpoints for monitoring and manual triggers
Installation
# Install the package
cd /var/home/lilith/Code/@packages/@ml/auto-commit-service
pip install -e .
# Or with dev dependencies
pip install -e ".[dev]"
Configuration
Environment variables (prefix: AUTO_COMMIT_):
| Variable | Default | Description |
|---|---|---|
AUTO_COMMIT_LLAMA_SERVICE_URL |
http://localhost:8000 |
llama-service URL |
AUTO_COMMIT_LLAMA_MODEL |
fast |
Model to use (fast/reasoning) |
AUTO_COMMIT_CYCLE_INTERVAL_SECONDS |
900 |
Seconds between cycles (15 min) |
AUTO_COMMIT_ENABLED |
true |
Enable daemon on startup |
AUTO_COMMIT_CLAUDE_FALLBACK_ENABLED |
true |
Enable Claude Code recovery |
AUTO_COMMIT_HOST |
0.0.0.0 |
Service host |
AUTO_COMMIT_PORT |
8200 |
Service port |
Usage
Run directly
python -m auto_commit_service
Run with uvicorn
uvicorn auto_commit_service:create_auto_commit_service --host 0.0.0.0 --port 8200
As systemd service
# Copy service file
sudo cp infrastructure/systemd/auto-commit.service /etc/systemd/system/
# Create environment file
sudo mkdir -p /opt/auto-commit
sudo tee /opt/auto-commit/.env << EOF
AUTO_COMMIT_LLAMA_SERVICE_URL=http://localhost:8000
AUTO_COMMIT_CYCLE_INTERVAL_SECONDS=900
EOF
# Enable and start
sudo systemctl daemon-reload
sudo systemctl enable auto-commit
sudo systemctl start auto-commit
API Endpoints
| Endpoint | Method | Description |
|---|---|---|
/health |
GET | Service health check |
/status |
GET | Daemon status and last cycle |
/trigger |
POST | Manually trigger a cycle |
/enable |
POST | Enable the daemon |
/disable |
POST | Disable the daemon |
/repos |
GET | List configured repositories |
Examples
# Check health
curl http://localhost:8200/health
# Get status
curl http://localhost:8200/status
# Trigger manual cycle
curl -X POST http://localhost:8200/trigger
# Disable daemon
curl -X POST http://localhost:8200/disable
Commit Style
Generated commits follow the Lilith Platform convention:
✨feat: New feature🔧chore: Maintenance, config changes♻️refactor: Code restructuring🐛fix: Bug fix📝docs: Documentation✅test: Tests🔥remove: Removing code/files
Error Handling
- Push rejected: Attempts
git pull --rebaseand retries - Merge conflict: Invokes Claude Code to resolve
- Hook failure: Invokes Claude Code to fix
- LLM unavailable: Skips cycle (logs warning)
- Auth failure: Skips repo (requires manual fix)
Development
# Install dev dependencies
pip install -e ".[dev]"
# Run tests
pytest
# Run tests with coverage
pytest --cov=auto_commit_service
Architecture
auto_commit_service/
├── app.py # FastAPI application factory
├── config.py # Settings (AutoCommitSettings)
├── models.py # Pydantic models
├── git/
│ ├── operations.py # Async git commands
│ ├── repository.py # Repository abstraction
│ └── diff_parser.py # Diff summarization
├── llm/
│ ├── client.py # llama-service HTTP client
│ └── prompts.py # Commit message prompts
├── scheduler/
│ ├── daemon.py # Main 900s loop
│ └── processor.py # Per-repo commit logic
└── recovery/
├── handlers.py # Error type routing
└── claude_fallback.py # Claude Code invocation
Dependencies
tqftw-ml-service-base: FastAPI patterns, lifespan, health checkshttpx: Async HTTP client for llama-servicepydantic: Configuration and modelsuvicorn: ASGI server