Check:
curl -fsS http://127.0.0.1:8090/health
sudo ss -ltnp | grep -E '127\.0\.0\.1:8090\b' || trueTypical cause:
- missing or empty API keys
Check:
.env- startup logs
GET /v1/models
Use the dry-run and trace surfaces first.
curl -fsS http://127.0.0.1:8090/api/route \
-H 'Content-Type: application/json' \
-d '{"model":"auto","messages":[{"role":"user","content":"debug this route"}]}'
curl -fsS 'http://127.0.0.1:8090/api/traces?limit=10'Check:
- selected provider
- layer
- rule
- resolved profile
- hook errors
- attempt order
- candidate ranking details in the
decision.detailsblock
If you enabled request hooks, also decide whether the runtime should continue or fail closed:
request_hooks:
enabled: true
on_error: failfusionAIze Gate now enforces explicit request-size limits before provider calls.
Check:
security.max_json_body_bytesfor JSON endpoints such as/api/routeand/v1/chat/completionssecurity.max_upload_bytesfor multipart uploads such as/v1/images/edits
Typical symptoms:
- HTTP
413 - response type
payload_too_large
Example:
security:
max_json_body_bytes: 1048576
max_upload_bytes: 10485760For contract: local-worker, fusionAIze Gate probes GET /models.
Common causes:
- the worker is not listening
- the worker is not actually OpenAI-compatible
- the configured
base_urlis wrong - the worker is reachable but returns HTTP errors
Validate directly:
curl -fsS http://127.0.0.1:11434/v1/modelsThen re-check:
curl -fsS http://127.0.0.1:8090/healthIf the worker is healthy but still loses route selection, inspect POST /api/route and compare:
decision.details.candidate_rankingcontext_scoreinput_scoreoutput_scorelocality_scorelatency_score
Check whether any loaded provider actually exposes the required image capability:
curl -fsS http://127.0.0.1:8090/v1/models
curl -fsS http://127.0.0.1:8090/healthFor contract: image-provider, validate the upstream directly:
curl -fsS https://api.example.com/v1/images/generations \
-H 'Authorization: Bearer YOUR_KEY' \
-H 'Content-Type: application/json' \
-d '{"model":"gpt-image-1","prompt":"test"}'For image editing, validate the upstream edit surface too:
curl -fsS https://api.example.com/v1/images/edits \
-H 'Authorization: Bearer YOUR_KEY' \
-F 'model=gpt-image-1' \
-F 'prompt=test' \
-F 'image=@input.png'If model: "auto" still fails, verify that at least one loaded provider reports capabilities.image_generation: true for generation or capabilities.image_editing: true for editing.
Check whether x-openclaw-source is present.
That header is the current signal used for OpenClaw sub-agent differentiation in the stock config and built-in presets.
This usually means the OpenClaw-side provider ids do not match fusionAIze Gate's loaded provider ids.
Check:
curl -fsS http://127.0.0.1:8090/v1/modelsThen update the ids under models.providers.faigate.models in ~/.openclaw/openclaw.json so they match exactly.
Remember:
autois always valid- the other ids come from fusionAIze Gate provider names
- they are not automatically the raw upstream model ids
Use an absolute path outside the repo checkout:
mkdir -p "$HOME/.local/state/faigate"
printf 'FAIGATE_DB_PATH=%s\n' "$HOME/.local/state/faigate/faigate.db"Current update path is manual or helper-script driven.
Use:
faigate-status
faigate-logs --lines 80
faigate-healthIf you use faigate-update, remember that it is meant for deployment checkouts and removes local untracked changes.
Separate the two failure modes first:
- a Homebrew linkage warning during install is a packaging problem
- an empty or unexpected
faigate --versioncan simply mean an active virtualenv is shadowing the Brew binary
Check which executable is first on PATH:
which -a faigate
/opt/homebrew/bin/faigate --versionIf the Brew binary works but plain faigate does not, leave the service running and fix your shell path or deactivate the virtualenv before testing the Homebrew install again.
If Homebrew still warns about pydantic_core, update the tap and reinstall:
brew update
brew reinstall fusionAIze/homebrew-tap/faigateCheck the cached runtime view first:
curl -fsS http://127.0.0.1:8090/api/update
curl -fsS http://127.0.0.1:8090/api/operator-events
./scripts/faigate-update-check
./scripts/faigate-auto-updateCommon causes:
- outbound GitHub API access is blocked
update_check.repositoryis wrongupdate_check.api_basepoints to the wrong host- the runtime hit a temporary network or TLS error
If needed, reduce the problem to config:
update_check:
enabled: true
repository: "fusionAIze/faigate"
api_base: "https://api.github.com"
timeout_seconds: 5
check_interval_seconds: 21600Use force=true when you need an immediate refresh instead of the cached result:
curl -fsS 'http://127.0.0.1:8090/api/update?force=true'If faigate-auto-update --apply refuses to run, inspect the auto_update block in the JSON response. Common blockers are:
auto_update.enabled: false- the latest release is a major upgrade while
allow_major: false provider_scope.allow_providers/deny_providersresolves to no matching providers- one or more providers are unhealthy while
require_healthy_providers: true - the number of unhealthy providers exceeds
max_unhealthy_providers - the configured
verification.commandfailed after the update command ran - the current time is outside the configured
maintenance_window.daysormaintenance_window.start_hour/end_hour maintenance_window.timezoneis invalid for the host runtime- the release lookup itself is unavailable