Files

4.1 KiB

Noris Provider: Available Models

As of 2026-06-27, the noris provider at https://ai.noris.de/v1 exposes these models for the Schön Consulting virtual key:

Anthropic Models (vision-capable)

  • anthropic/claude-fable-5
  • anthropic/claude-haiku-4-5-20251001 fast, vision-capable, good for auxiliary.vision
  • anthropic/claude-opus-4-1-20250805
  • anthropic/claude-opus-4-5-20251101
  • anthropic/claude-opus-4-6
  • anthropic/claude-opus-4-7
  • anthropic/claude-opus-4-8
  • anthropic/claude-sonnet-4-5-20250929
  • anthropic/claude-sonnet-4-6

Self-hosted vLLM Models

  • vllm/gemma-4-31b-it — usable (nutrition-coach uses this)
  • vllm/gemma-4-31b-it-dynamo
  • vllm/glm-5-2-nvfp4 verified working (2026-06-27). Current CEO/default model.
  • vllm/gpt-oss-120b — usable
  • vllm/harrier-oss-v1-0.6b
  • vllm/moonshotai/kimi-k2.6 — usable (infra-sre uses this)
  • vllm/qwen3.5-122b-a10b
  • vllm/qwen3.6-27b-nvfp4 verified working (2026-06-18). Returns reasoning-only format: content: null, reasoning: "..."
  • vllm/qwen3.6-35b-a3b

Vision / Multimodal Capability (tested 2026-06-27)

Tested by sending image+text to /v1/chat/completions:

Model Vision? Notes
vllm/gemma-4-31b-it Yes Good descriptions, recommended for auxiliary.vision
vllm/qwen3.5-122b-a10b Yes Works but terse output
vllm/glm-5-2-nvfp4 No Returns "glm-5-2-nvfp4 is not a multimodal model"
vllm/qwen3.6-27b-nvfp4 No HTTP 400
All anthropic/* models Yes claude-haiku-4-5 fastest option

User preference: prefer vllm/ models over anthropic/ for auxiliary tasks.

Current auxiliary.vision config:

hermes config set auxiliary.vision.provider noris
hermes config set auxiliary.vision.model vllm/gemma-4-31b-it
hermes config set auxiliary.vision.base_url ''
hermes config set auxiliary.vision.api_key ''

Testing vision capability programmatically

import yaml, urllib.request, json, base64

with open("/home/debian/.hermes/config.yaml") as f:
    cfg = yaml.safe_load(f)
key = cfg["providers"]["noris"]["api_key"]

with open("test_image.jpg", "rb") as f:
    img_b64 = base64.b64encode(f.read()).decode()

payload = {
    "model": "<MODEL_NAME>",
    "messages": [{"role": "user", "content": [
        {"type": "text", "text": "Describe this image briefly."},
        {"type": "image_url", "image_url": {"url": f"data:image/jpeg;base64,{img_b64}"}}
    ]}],
    "max_tokens": 50
}
req = urllib.request.Request(
    "https://ai.noris.de/v1/chat/completions",
    data=json.dumps(payload).encode(),
    headers={"Authorization": f"Bearer {key}", "Content-Type": "application/json"}
)
try:
    with urllib.request.urlopen(req, timeout=30) as resp:
        print(json.loads(resp.read())["choices"][0]["message"]["content"])
except Exception as e:
    print(f"Not multimodal: {e}")

Embedding / Reranker Models (non-chat)

  • vllm/bge-reranker-v2-m3
  • vllm/jina-reranker-v2-base-multilingual

Blocked Models

  • vllm/gemma-4-27b-it — returns 403: {"type":"model_blocked","error":{"message":"Model 'gemma-4-27b-it' is not allowed for this virtual key"}}

Verification

import yaml, urllib.request, json

with open("/home/debian/.hermes/config.yaml") as f:
    cfg = yaml.safe_load(f)
key = cfg["providers"]["noris"]["api_key"]

req = urllib.request.Request(
    "https://ai.noris.de/v1/models",
    headers={"Authorization": f"Bearer {key}"}
)
with urllib.request.urlopen(req) as resp:
    models = json.loads(resp.read())
for m in sorted(models["data"], key=lambda x: x["id"]):
    print(m["id"])

Always verify model availability via the /v1/models endpoint before assigning to an agent profile. A blocked model will cause silent 403 errors on first user interaction.

Vision pitfall: Not all chat models support image input. vllm/glm-5-2-nvfp4 (the default CEO model) is NOT multimodal — vision_analyze will fail with "is not a multimodal model". Set auxiliary.vision.model to a vision-capable model like vllm/gemma-4-31b-it. See the "Vision / Multimodal Capability" section above for the full tested matrix.