# 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:
```bash
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

```python
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

```python
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.
