WeaverWEAVERACCOUNT
// DEVELOPERS

Build on Weaver.

El gateway habla OpenAI-compatible: chat completions + models. Cualquier cliente OpenAI anda. El billing es crédito prepago por cuenta: creás una cuenta en /account, fondeás con USDC (Monad testnet), emitís una key wvr_… y cada request debita tokens medidos post-stream.

01 // ENDPOINTS
POST /v1/chat/completions
stream SSE OpenAI
GET /v1/models
lista para discovery
GET /v1/forges
fleet HOT/COLD + ETR
02 // CONECTÁ TU AGENTE
opencode · jsonc
// opencode.jsonc — Weaver como provider custom (docs: opencode.ai, v2)
{
  "$schema": "https://opencode.ai/config.json",
  "providers": {
    "weaver": {
      "name": "Weaver",
      "package": "@opencode-ai/ai/providers/openai-compatible",
      "settings": { "baseURL": "http://localhost:3001/v1", "apiKey": "wvr_TU_API_KEY" },
      "models": {
        "qwen3:4b": { "name": "Qwen3 4B (Weaver)" }
      }
    }
  }
}
// El id del modelo debe coincidir con GET /v1/models.
// En opencode v1: "provider" + "npm" + "options" en vez de
// "providers" + "package" + "settings".
pi agent · json
// ~/.pi/agent/models.json — Weaver en pi (docs: pi.dev)
{
  "providers": {
    "weaver": {
      "baseUrl": "http://localhost:3001/v1",
      "api": "openai-completions",
      "apiKey": "wvr_TU_API_KEY",
      "models": [{ "id": "qwen3:4b", "name": "Qwen3 4B (Weaver)" }]
    }
  }
}
// apiKey real de /account — el consumo debita créditos de tu cuenta.
hermes agent · terminal
# camino rápido (wizard recomendado por sus docs)
hermes model
# → "Custom endpoint" → base URL: http://localhost:3001/v1
# → API key: wvr_TU_KEY → model: qwen3:4b

# o manual en ~/.hermes/config.yaml:
#   model: qwen3:4b
#   provider: custom
#   base_url: http://localhost:3001/v1
#   api_key: wvr_TU_KEY

# auto-detect: /model custom lee GET /v1/models y,
# como Weaver expone un solo ID, elige qwen3:4b solo.
hermes plugin · python
# camino first-class: provider plugin (docs: hermes-agent.nousresearch.com)
# $HERMES_HOME/plugins/model-providers/weaver/__init__.py
from providers import register_provider
from providers.base import ProviderProfile

register_provider(ProviderProfile(
    name="weaver",
    aliases=("weaver-local",),
    display_name="Weaver",
    description="Weaver — OpenAI-compatible routed compute",
    signup_url="https://github.com/Shugar03/Weaver",
    env_vars=("WEAVER_API_KEY", "WEAVER_BASE_URL"),
    base_url="http://localhost:3001/v1",
    auth_type="api_key",
    fallback_models=("qwen3:4b",),
))

# $HERMES_HOME/plugins/model-providers/weaver/plugin.yaml
# name: weaver
# kind: model-provider
# version: 1.0.0
# description: Weaver — OpenAI-compatible routed compute
# → aparece en el picker, --provider, y hermes doctor lo chequea
# contra {base_url}/models (nuestro endpoint lo sirve).
Cursor · pasos
1. Cursor Settings (Cmd+Shift+J) → Models
2. OpenAI API Key: tu wvr_… de /account
3. Override OpenAI Base URL: http://localhost:3001/v1   (con /v1, SIN /chat/completions)
4. + Add Model: qwen3:4b
5. Verify

Límites honestos: Tab y Background Agents usan modelos de Cursor,
no tu endpoint. Si hay errores de conexión, probá HTTP/1.1
en Settings → Network → HTTP Compatibility Mode.
curl · bash
curl http://localhost:3001/v1/models
# {"object":"list","data":[{"id":"qwen3:4b","object":"model","owned_by":"weaver"}]}

curl http://localhost:3001/v1/chat/completions \
  -H "content-type: application/json" \
  -d '{"model":"qwen3:4b","messages":[{"role":"user","content":"hola"}],"stream":true}'
python (openai lib) · python
from openai import OpenAI

# La key se crea en /account (wvr_…, se muestra una sola vez).
client = OpenAI(base_url="http://localhost:3001/v1", api_key="wvr_TU_API_KEY")
stream = client.chat.completions.create(
    model="qwen3:4b",
    messages=[{"role": "user", "content": "hola"}],
    stream=True,
)
for chunk in stream:
    print(chunk.choices[0].delta.content or "", end="")
03 // API KEYS

La key identifica quién llama y a qué cuenta debita. Formato wvr_…, guardada hasheada, visible una sola vez al emitir. Se crea y revoca self-serve en /account.

keys · bash
# self-serve: creá tu cuenta y tu key en /account — sin pedirle nada a nadie.
# (el panel usa estas rutas debajo del capó)

# crear cuenta (una vez — el mgmt token se muestra UNA vez):
curl -X POST http://localhost:3001/v1/accounts
# → {"accountId":"acct_...","mgmtToken":"wvr_acct_...","depositMemo":"..."}

# emitir key (con tu mgmt token):
curl -X POST http://localhost:3001/v1/me/keys \
  -H "Authorization: Bearer wvr_acct_..."
# → {"id":"key_...","secret":"wvr_..."}  (el secreto se muestra UNA vez)

# usar (billing por cuenta, debit medido post-stream):
curl http://localhost:3001/v1/chat/completions \
  -H "content-type: application/json" \
  -H "Authorization: Bearer wvr_..." \
  -d '{"model":"qwen3:4b","messages":[{"role":"user","content":"hola"}],"stream":true}'
BILLING — CRÉDITOS PREPAGOS

Tu cuenta tiene un balance en USDC (stroops). Fondeás mandando USDC a la deposit address con tu memo (todo visible en /account → BILLING). Al servir, el gateway debita prompt+completion tokens medidos del stream real — nunca estimado si hay medición. Sin fondos: 402 antes de tocar un forge. Request fallido: sin cargo. Precios públicos en GET /v1/pricing.