Files
microdao-daarion/ops/node2_capabilities_example.json
Apple e2a3ae342a node2: fix Sofiia routing determinism + Node Capabilities Service
Bug fixes:
- Bug A: GROK_API_KEY env mismatch — router expected GROK_API_KEY but only
  XAI_API_KEY was present. Added GROK_API_KEY=${XAI_API_KEY} alias in compose.
- Bug B: 'grok' profile missing in router-config.node2.yml — added cloud_grok
  profile (provider: grok, model: grok-2-1212). Sofiia now has
  default_llm=cloud_grok with fallback_llm=local_default_coder.
- Bug C: Router silently defaulted to cloud DeepSeek when profile was unknown.
  Now falls back to agent.fallback_llm or local_default_coder with WARNING log.
  Hardcoded Ollama URL (172.18.0.1) replaced with config-driven base_url.

New service: Node Capabilities Service (NCS)
- services/node-capabilities/ — FastAPI microservice exposing live model
  inventory from Ollama, Swapper, and llama-server.
- GET /capabilities — canonical JSON with served_models[] and inventory_only[]
- GET /capabilities/models — flat list of served models
- POST /capabilities/refresh — force cache refresh
- Cache TTL 15s, bound to 127.0.0.1:8099
- services/router/capabilities_client.py — async client with TTL cache

Artifacts:
- ops/node2_models_audit.md — 3-layer model view (served/disk/cloud)
- ops/node2_models_audit.yml — machine-readable audit
- ops/node2_capabilities_example.json — sample NCS output (14 served models)

Made-with: Cursor
2026-02-27 02:07:40 -08:00

1 line
5.1 KiB
JSON

{"node_id":"NODA2","updated_at":"2026-02-27T10:06:07Z","runtimes":{"ollama":{"base_url":"http://host.docker.internal:11434","status":"ok","models":[{"name":"qwen3.5:35b-a3b","size_bytes":9276198737,"size_gb":9.3,"type":"llm","modified":"2026-02-26","running":false},{"name":"qwen3:14b","size_bytes":9276198565,"size_gb":9.3,"type":"llm","modified":"2026-02-26","running":false},{"name":"gemma3:latest","size_bytes":3338801804,"size_gb":3.3,"type":"llm","modified":"2026-02-25","running":false},{"name":"glm-4.7-flash:32k","size_bytes":19019270881,"size_gb":19.0,"type":"llm","modified":"2026-02-09","running":false},{"name":"glm-4.7-flash:q4_K_M","size_bytes":19019270852,"size_gb":19.0,"type":"llm","modified":"2026-02-09","running":false},{"name":"llava:13b","size_bytes":8011256494,"size_gb":8.0,"type":"vision","modified":"2025-11-27","running":false},{"name":"mistral-nemo:12b","size_bytes":7071713227,"size_gb":7.1,"type":"llm","modified":"2025-11-21","running":false},{"name":"deepseek-coder:33b","size_bytes":18819456424,"size_gb":18.8,"type":"code","modified":"2025-11-21","running":false},{"name":"deepseek-r1:70b","size_bytes":42520397873,"size_gb":42.5,"type":"llm","modified":"2025-11-21","running":false},{"name":"starcoder2:3b","size_bytes":1709901728,"size_gb":1.7,"type":"code","modified":"2025-11-21","running":false},{"name":"phi3:latest","size_bytes":2176178913,"size_gb":2.2,"type":"llm","modified":"2025-11-21","running":false},{"name":"gpt-oss:latest","size_bytes":13793441244,"size_gb":13.8,"type":"llm","modified":"2025-11-21","running":false}]},"swapper":{"base_url":"http://swapper-service:8890","status":"healthy","models":[{"name":"gpt-oss-latest","type":"llm","size_gb":13.0,"status":"unloaded"},{"name":"phi3-latest","type":"llm","size_gb":2.2,"status":"unloaded"},{"name":"qwen3-14b","type":"llm","size_gb":9.3,"status":"unloaded"},{"name":"qwen3.5-35b-a3b","type":"llm","size_gb":22.0,"status":"unloaded"},{"name":"glm-4.7-flash","type":"llm","size_gb":19.0,"status":"unloaded"},{"name":"gemma2-27b","type":"llm","size_gb":15.0,"status":"unloaded"},{"name":"deepseek-coder-33b","type":"code","size_gb":18.0,"status":"unloaded"},{"name":"qwen2.5-coder-32b","type":"code","size_gb":19.0,"status":"unloaded"},{"name":"deepseek-r1-70b","type":"llm","size_gb":42.0,"status":"unloaded"},{"name":"llava-13b","type":"vision","size_gb":8.0,"status":"unloaded"}],"vision_models":[{"name":"llava-13b","type":"vision","size_gb":8.0,"status":"unloaded"}],"active_model":null},"llama_server":{"base_url":"http://host.docker.internal:11435","status":"ok","models":[{"name":"Qwen3.5-35B-A3B-Q4_K_M.gguf","type":"llm"}]}},"served_models":[{"name":"qwen3.5:35b-a3b","size_bytes":9276198737,"size_gb":9.3,"type":"llm","modified":"2026-02-26","running":false,"runtime":"ollama","base_url":"http://host.docker.internal:11434"},{"name":"qwen3:14b","size_bytes":9276198565,"size_gb":9.3,"type":"llm","modified":"2026-02-26","running":false,"runtime":"ollama","base_url":"http://host.docker.internal:11434"},{"name":"gemma3:latest","size_bytes":3338801804,"size_gb":3.3,"type":"llm","modified":"2026-02-25","running":false,"runtime":"ollama","base_url":"http://host.docker.internal:11434"},{"name":"glm-4.7-flash:32k","size_bytes":19019270881,"size_gb":19.0,"type":"llm","modified":"2026-02-09","running":false,"runtime":"ollama","base_url":"http://host.docker.internal:11434"},{"name":"glm-4.7-flash:q4_K_M","size_bytes":19019270852,"size_gb":19.0,"type":"llm","modified":"2026-02-09","running":false,"runtime":"ollama","base_url":"http://host.docker.internal:11434"},{"name":"llava:13b","size_bytes":8011256494,"size_gb":8.0,"type":"vision","modified":"2025-11-27","running":false,"runtime":"ollama","base_url":"http://host.docker.internal:11434"},{"name":"mistral-nemo:12b","size_bytes":7071713227,"size_gb":7.1,"type":"llm","modified":"2025-11-21","running":false,"runtime":"ollama","base_url":"http://host.docker.internal:11434"},{"name":"deepseek-coder:33b","size_bytes":18819456424,"size_gb":18.8,"type":"code","modified":"2025-11-21","running":false,"runtime":"ollama","base_url":"http://host.docker.internal:11434"},{"name":"deepseek-r1:70b","size_bytes":42520397873,"size_gb":42.5,"type":"llm","modified":"2025-11-21","running":false,"runtime":"ollama","base_url":"http://host.docker.internal:11434"},{"name":"starcoder2:3b","size_bytes":1709901728,"size_gb":1.7,"type":"code","modified":"2025-11-21","running":false,"runtime":"ollama","base_url":"http://host.docker.internal:11434"},{"name":"phi3:latest","size_bytes":2176178913,"size_gb":2.2,"type":"llm","modified":"2025-11-21","running":false,"runtime":"ollama","base_url":"http://host.docker.internal:11434"},{"name":"gpt-oss:latest","size_bytes":13793441244,"size_gb":13.8,"type":"llm","modified":"2025-11-21","running":false,"runtime":"ollama","base_url":"http://host.docker.internal:11434"},{"name":"llava-13b","type":"vision","size_gb":8.0,"status":"unloaded","runtime":"swapper","base_url":"http://swapper-service:8890"},{"name":"Qwen3.5-35B-A3B-Q4_K_M.gguf","type":"llm","runtime":"llama_server","base_url":"http://host.docker.internal:11435"}],"served_count":14,"inventory_only":[],"inventory_count":0}