modelId into models-config.json / MODELS_CONFIG_CONTENT before Step 1.
Step 1 — Local health
Your proxy-router is up and listening:models array — the periodic model health self-report covering your whole ecosystem of configured models and active bids. For every model in models-config.json that has an active bid from your wallet, the proxy-router sends a small test prompt on a schedule (default hourly, see MODEL_HEALTH_CHECK_INTERVAL in env-proxy-router) and caches the result. Probes are paced a few seconds apart (MODEL_HEALTH_CHECK_PROBE_DELAY, default 2s) so a provider with many models doesn’t burst its own backend into a rate limit. Active bids whose model is missing from models-config.json are also listed, so a bid you’re selling but cannot serve doesn’t go unnoticed:
modelName is the model’s public name as registered on-chain (not the private backend model string from models-config.json, which is never exposed).
status is one of:
The self-report has its own operational reference — schedule, tuning, backend impact, and diagnosis recipes — at Model health self-report.
For
unhealthy models, errorKind narrows the failure and, when the backend answered with an HTTP error, httpStatus carries the exact upstream status code:
Logs should show:
Step 2 — Public TCP reachable
Consumers connect to your:3333 over the public internet. From a machine outside your network:
Connection succeeded. If it times out, your firewall / security group / NAT is blocking; consumers will see your bid but never get inference.
Step 3 — On-chain provider record
Confirm the marketplace recognises your registration:Address, Endpoint (the host:port you registered, no protocol), Stake, and IsDeleted: false.
Same trick for your model:
Step 4 — Network discovery
Two cron-driven dashboards aggregate the marketplace into JSON snapshots. Your provider only shows up here if the cron has reached you successfully after your registration:active_bids.json, it means the verifier could reach the chain but could not reach your :3333. Re-check Step 2.
The dashboards refresh on a schedule (a few minutes); give it time before concluding it failed.
Step 5 — End-to-end prompt via the Inference API
The hosted Morpheus Inference API serves as the easiest end-to-end consumer. If a real prompt against your model name returns text, you’ve proven the full chain (consumer → API Gateway → discovery → your P-Node → your backend → response).- Sign in at app.mor.org, grab an API key.
- In the dashboard’s API Test page (or any OpenAI-compatible client) pick your model name from the dropdown.
- Send any short prompt.
When in doubt
The Discord#tech-support channel is the fastest path. Include:
- Your provider wallet address (lowercase
0x…). - Your model ID and bid ID.
- The output of Steps 1, 3, and 4.