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-5anthropic/claude-haiku-4-5-20251001— ✅ fast, vision-capable, good for auxiliary.visionanthropic/claude-opus-4-1-20250805anthropic/claude-opus-4-5-20251101anthropic/claude-opus-4-6anthropic/claude-opus-4-7anthropic/claude-opus-4-8anthropic/claude-sonnet-4-5-20250929anthropic/claude-sonnet-4-6
Self-hosted vLLM Models
vllm/gemma-4-31b-it— usable (nutrition-coach uses this)vllm/gemma-4-31b-it-dynamovllm/glm-5-2-nvfp4— ✅ verified working (2026-06-27). Current CEO/default model.vllm/gpt-oss-120b— usablevllm/harrier-oss-v1-0.6bvllm/moonshotai/kimi-k2.6— usable (infra-sre uses this)vllm/qwen3.5-122b-a10bvllm/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-m3vllm/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.