# AuriX AI latest release notes

This is the canonical review entry for the current public AuriX AI release.
Keep it updated in the same PR as every deployable AI feature, public API,
operator-control, or user-visible page change. Dated deployment records remain
the immutable deployment history; the current image-specific record is
[`AURIX_AI_DEPLOYMENT_2026-09-24-RELEASE-NOTES-CURRENT.md`](AURIX_AI_DEPLOYMENT_2026-09-24-RELEASE-NOTES-CURRENT.md).

## Release notes for review

### Added

- Model discovery now distinguishes image understanding from image generation:
  `GET /v1/models?category=image_input` (alias `vision`) requires an explicit
  provider `imageInput: true` observation, while
  `category=image_generation` (legacy `image`) is the image-creation catalog.
- The deployed model catalog withholds `cx/gpt-5.3-image`,
  `cx/gpt-5.4-image`, and `cx/gpt-5.6-luna-image` from first-party and
  external image-model discovery and rejects direct generation requests for
  those routes. This follows the 2026-09-24 three-attempt stability report;
  HTTP-429-only routes remain listed for operator review.
- An opt-in binary WebSocket chat stream for standard text requests:
  `POST /v1/chat/completions/ws/sessions` issues a short-lived one-use
  session, and `GET /v1/chat/completions/ws` forwards each upstream SSE byte
  chunk as an immediate binary WebSocket frame. The normal HTTP SSE endpoint
  remains the default and is still the recommended surface for images, large
  requests, and SDK compatibility.
- The image-generation response may include a validated `mime_type` beside
  `b64_json`, preserving the provider's PNG, JPEG, WebP, or GIF type.
- The authenticated router-capability report may include a sanitized
  `account_observation` timestamp/source so operators can distinguish an
  unqueried provider route from a cached unavailable result.

### Updated

- The first-party image preview uses the response MIME type instead of
  assuming every base64 image is PNG.
- The public guide and OpenAPI contract describe the field and fallback
  behavior for AI agents.
- Admin capability summaries now show the last persisted provider probe while
  keeping AuriX site policy visibly separate from provider quota control.
- The deployed OpenAI-compatible chat route has been verified with a proper
  account API key for live SSE delivery; this is transport evidence only and
  does not claim a provider latency or quota guarantee.
- Bounded agent runs now distinguish an unavailable server-owned tool from an
  exhausted step budget. After a provider tool failure prevents completion,
  non-streaming runs return HTTP 503 and streaming runs emit a typed
  `agent_tool_unavailable` event.
- The deployed bounded-agent SSE lifecycle has been verified independently of
  provider web-search entitlement.
- The public OpenAPI contract, integration profile, external guide, and Caddy
  edge configuration now document and route the binary chat-stream transport.
- The standalone external guide now includes a complete backend session-issue
  example and browser binary-frame/SSE reassembly helper, with explicit
  short-lived-session, terminal-event, cancellation, and API-key boundary
  rules for consuming sites.
- A secret-safe one-request timing probe now distinguishes response headers,
  first transport bytes, first parsed SSE event, and first non-empty model
  content delta for HTTP or binary WebSocket comparisons; it does not claim
  first-token latency from a metadata-only frame.
- Admin request activity now renders site ID, key label, and key ID as separate
  fields, while usage-by-key keeps the owning site and key ID visible together.
- WebSocket capability reporting now distinguishes the standard 9Router chat
  byte-stream relay from native bidirectional audio; an LLM-stream-only
  deployment can no longer issue a misleading audio fallback session.
- Admin model summaries now show provider-observed image-input/vision routes
  separately from image-generation routes, with the distinction preserved in
  the OpenAPI and external integration guides.

### Fixed

- JPEG, WebP, and GIF image responses are no longer mislabeled as
  `image/png` by the browser.
- A missing 9Router web-search provider no longer appears as a generic
  `agent reached max_steps` failure. The route now reports the operator
  configuration boundary explicitly.
- A consuming site no longer has to wait for the complete upstream chat
  response when it elects the WebSocket transport; the relay forwards bytes as
  soon as the upstream stream exposes them. Provider-side buffering is still
  reported as an upstream limitation rather than hidden by AuriX.

### Removed / deprecated

- None. No endpoint, UI mode, model, database field, authentication path, or
  provider route was removed or deprecated.

### Exact runtime review links

| Surface | Exact link | Review focus |
|---|---|---|
| AI home / image-generation UI | [`https://ai.aurix-mart.tech/`](https://ai.aurix-mart.tech/) | Sign in → `Image generation` → inspect a generated preview |
| Admin console | [`https://ai.aurix-mart.tech/admin`](https://ai.aurix-mart.tech/admin) | Review authenticated model/key policy controls |
| Developer guide | [`https://ai.aurix-mart.tech/docs/ai-api`](https://ai.aurix-mart.tech/docs/ai-api) | Review image-input/vision versus image-generation discovery |
| Binary chat WebSocket session | [`https://ai.aurix-mart.tech/v1/chat/completions/ws/sessions`](https://ai.aurix-mart.tech/v1/chat/completions/ws/sessions) | Review the authenticated short-lived session endpoint (POST) |
| Standalone API guide | [`https://ai.aurix-mart.tech/AURIX_EXTERNAL_API.md`](https://ai.aurix-mart.tech/AURIX_EXTERNAL_API.md) | Review `mime_type` and fallback rules |
| OpenAPI contract | [`https://ai.aurix-mart.tech/AURIX_AI_OPENAPI.yaml`](https://ai.aurix-mart.tech/AURIX_AI_OPENAPI.yaml) | Review `ImageGenerationResponse.data[].mime_type` |
| Latest release notes | [`https://ai.aurix-mart.tech/AURIX_AI_RELEASE_NOTES.md`](https://ai.aurix-mart.tech/AURIX_AI_RELEASE_NOTES.md) | Review the current Added/Updated/Fixed/Removed classification after this PR is deployed |
| Runtime health | [`https://ai.aurix-mart.tech/api/healthz`](https://ai.aurix-mart.tech/api/healthz) | Confirm the deployed service is healthy |

## Verification

- The current `test_ai_*.py` AuriX-focused validation passed **235 tests**;
  the targeted capability/exclusion suite passed **164 tests**; release-note,
  syntax, and parity gates also passed before deployment.
- A fresh authenticated production stream smoke returned HTTP 200,
  `text/event-stream`, terminal `[DONE]`, and `finish_reason=stop`; its
  sanitized evidence is persisted in the repository at
  `reports/aurix-ai-chat-stream-smoke-20260924-partner-key.json`.
- A fresh bounded agent SSE smoke returned HTTP 200, emitted
  `aurix.agent.completed`, and ended with `[DONE]`; its sanitized evidence is
  persisted at `reports/aurix-ai-agent-stream-smoke-20260924.json`.
- The deployed 9Router web capability observation exposed no configured search
  provider, and bounded search-tool testing returned upstream HTTP 400. This
  is recorded as an unavailable-provider boundary, not claimed as a working
  web-search feature. The production classification evidence is persisted at
  `reports/aurix-ai-agent-web-search-smoke-20260924.json`.
- Public health, browser assets, guide/OpenAPI parity, and protected-route
  checks passed.
- The public binary WebSocket smoke issued an authenticated HTTP 201 session,
  emitted `stream.accepted` and `stream.completed`, forwarded 3 binary frames
  (745 bytes), and delivered its first binary frame at 4,716 ms. The temporary
  restricted key was revoked afterward. This is one measured request, not a
  latency SLA or provider quota guarantee; sanitized evidence is persisted at
  `reports/aurix-ai-ws-binary-smoke-20260924-070914.json`.
- Full deployment evidence is in the [dated deployment record](AURIX_AI_DEPLOYMENT_2026-09-24-RELEASE-NOTES-CURRENT.md).

## Rollback

- Active tag: `aurix-ai:image-capabilities-20260924-095911`
- Rollback tag: `aurix-ai:rollback-image-capabilities-20260924-095911`
- State backup: `/var/lib/aurix-ai/deploy-backups/aurix-ai-state-image-capabilities-20260924-095911.tgz`
- Follow the dated record's [rollback procedure](AURIX_AI_DEPLOYMENT_2026-09-24-RELEASE-NOTES-CURRENT.md#rollback); do not restore state unless data damage is confirmed.
