AI Models Troubleshooting
This guide covers common failures when importing, serving, fine-tuning, or exporting local models.
Gateway returns 503 for a self/<model-id> request#
What it looks like: The Gateway responds with a model-unavailable error even though the model shows as installed.
Common causes:
services/python-inferenceis not running orPROVON_PYTHON_INFERENCE_URLpoints to the wrong host/port.- The model service was started but has not reached the
runningstate yet. - The requested endpoint (for example,
chat/completions) is not listed in the profile'sendpoints.
What to do:
- Check the Python inference service health directly:
curl "$PROVON_PYTHON_INFERENCE_URL/health" - Check the runtime status to see the service state and the selected profile:
curl "$PROVON_API_URL/projects/$PROJECT_ID/models/runtime" \ -H "Authorization: Bearer $PROVON_API_KEY" - Call the Python service directly with the profile's
routeModelto rule out Gateway routing:curl "$PROVON_PYTHON_INFERENCE_URL/v1/chat/completions" \ -H "Authorization: Bearer $PROVON_PYTHON_INFERENCE_API_KEY" \ -H "Content-Type: application/json" \ -d '{"model": "<route-model>", "messages": [{"role":"user","content":"hi"}]}'
Runtime reports an engine as unsupported#
What it looks like: provon model install fails with "Engine X is not supported on this machine",
or the API status shows supportedOnThisMachine: false.
Common causes:
PROVON_PYTHON_INFERENCE_URLis not configured.- The Python inference service is reachable but the engine extra is not installed (for example, you are
trying to serve a Safetensors model but only installed the
llama.cppextra).
What to do:
- Confirm the URL:
echo "$PROVON_PYTHON_INFERENCE_URL" curl "$PROVON_PYTHON_INFERENCE_URL/health" - Reinstall the Python inference service with the required engine extra:
pip install -e ".[llama.cpp]" # for GGUF pip install -e ".[vllm]" # for Safetensors via vLLM pip install -e ".[sglang]" # for Safetensors via SGLang pip install -e ".[all]" # install every engine
Remember that Node and the CLI never install engine binaries themselves; they only report whether the remote Python inference service can serve a given engine family.
Model download is interrupted or stuck#
What it looks like: provon model install or the download API returns a job that stays in
running forever, or the CLI exits before completion.
What to do:
- Check
activityto see the download job state:curl "$PROVON_API_URL/projects/$PROJECT_ID/models/activity" \ -H "Authorization: Bearer $PROVON_API_KEY" - Partial downloads are stored as
.partfiles inPROVON_MODELS_DIR. If a job is stuck, cancel it and start a new download; the runtime resumes from the existing.partfile when possible. - If you are using the CLI, the process must stay alive while the download runs. For long downloads, prefer using the Node server API instead, where downloads continue as long as the server process runs.
Catalog is empty after restarting the Node server or CLI#
What it looks like: provon model list --all returns no models, or the catalog query returns an
empty page after a restart.
Why: The catalog cache and runtime state are kept in memory only. When the process restarts, the
cache is gone. Imported models that have been downloaded are rediscovered from local manifest.json
files, but the upstream catalog browseable list must be refreshed.
What to do:
curl -X POST "$PROVON_API_URL/projects/$PROJECT_ID/models/catalog-refreshes" \
-H "Authorization: Bearer $PROVON_API_KEY"Or with the CLI:
provon model search --query llama --limit 20A checkpoint cannot be deployed#
What it looks like: POST /fine-tuning/checkpoints/:checkpointId/deploy returns
checkpoint "..." is not registered for inference or a deployment timeout.
Common causes:
- The checkpoint does not have a
profileId, which means the training job did not produce a runtime profile. Check the job output format and whether the Python fine-tuning service reported success. services/python-inferenceis not reachable.- The checkpoint path is not readable from the Python inference service host.
What to do:
- Read the checkpoint to confirm it has a
profileId:curl "$PROVON_API_URL/projects/$PROJECT_ID/fine-tuning/checkpoints/$CHECKPOINT_ID" \ -H "Authorization: Bearer $PROVON_API_KEY" - Confirm the Python inference service is healthy and can access
PROVON_MODELS_DIR. - Try starting the model manually with the profile id to get a clearer error:
curl -X PUT "$PROVON_API_URL/projects/$PROJECT_ID/models/$PROFILE_ID/profiles/$PROFILE_ID/service" \ -H "Authorization: Bearer $PROVON_API_KEY"
Fine-tuning job fails immediately#
What it looks like: The job status becomes failed seconds after creation.
Common causes:
- The Dataset does not use the
chat/v1schema or has zero examples. - The base model is not known to the runtime.
- Node cannot reach
services/python-fine-tuning. PROVON_MODEL_FINE_TUNING_WORK_DIRis set differently for Node and the Python service, so the manifest path is invalid from one side.
What to do:
- Verify the Dataset schema and example count.
- Confirm the base model is imported and, if needed, downloaded.
- Check the job error message and the Python fine-tuning service logs.
- Ensure Node and the Python service share the same absolute work directory.
GGUF export fails#
What it looks like: An export job with format: "gguf" fails during conversion or quantization.
Common causes:
PROVON_LLAMA_CPP_PATHpoints to a directory that is missingconvert_hf_to_gguf.pyorllama-quantize.- The requested
quantMethodis not supported for the source model architecture.
What to do:
- Confirm the llama.cpp checkout has the required scripts:
ls "$PROVON_LLAMA_CPP_PATH"/convert_hf_to_gguf.py ls "$PROVON_LLAMA_CPP_PATH"/build/bin/llama-quantize - Use a common quantization such as
q4_k_mfor your first export. - Read the export job record for the exact error message.
Multiple Node processes share the same data directory#
What it looks like: Downloads restart unexpectedly, service ports conflict, or models flip between running and stopped states.
Why: Only one Node process should own a given PROVON_MODELS_DIR at a time. Runtime state
(downloads, service bookkeeping, catalog cache) is in memory, so two processes cannot coordinate.
What to do: Run a single Node server for each PROVON_MODELS_DIR. If you need isolation, use
separate PROVON_MODELS_DIR values for different environments.
Getting more help#
If these steps do not resolve the issue:
- Collect the runtime status, activity, and the relevant job or service records.
- Collect logs from
services/python-inferenceorservices/python-fine-tuning. - Open an issue with the request id, model id, profile id, and the exact error response.
For deployment topology questions, see Self-hosting Node.