feat: add conversational RollCalc assistant

This commit is contained in:
2026-08-29 22:37:56 +02:00
parent 3b44048250
commit fa3000b325
25 changed files with 6820 additions and 48 deletions
+28
View File
@@ -0,0 +1,28 @@
# Changelog
## Unreleased
- Added deterministic, token-bounded product-family normalization in the article resolver for `Stex`/`Secutex`, `Bfix`/`Bentofix`, and `Sgrid`/`Secugrid`.
- Added a minimal OpenWebUI Pipe that maps each OpenWebUI user/chat to the
existing RollCalc conversation API, renders only deterministic messages, and
exposes validated reports through a configurable browser-public URL.
- Added friendly adapter errors, per-chat asynchronous request serialization,
server-side Basic Auth without credential-bearing links, deployment/demo
documentation, and mocked OpenWebUI Pipe tests without a RollCalc dependency.
- Added a direct, dependency-free Ollama `/api/chat` client, defaulting to the configurable `qwen3.5:35B-A3B` model, with temperature `0`, thinking disabled, timeout handling, and JSON-schema-constrained output.
- Added strict `new_calculation`, multi-field `modify_calculation`, and `unsupported` NLU validation; calculated and unknown fields are rejected.
- Added process-local conversation state, deterministic German clarification/result templates, and temporary input-only PDF references.
- Added authenticated conversation creation/message/report routes and a `python -m rollcalc_chat` terminal demo with optional diagnostics.
- Added mocked Ollama, schema, conversational workflow, API, and authoritative conversational PDF tests; normal tests do not require Ollama.
- Added `roll_calculation.py` as the authoritative headless service for direct diameter ranges, optional roll weight, article/core resolution, and warnings.
- Added JSON-serializable calculation request/state/result models, structured clarification/failure statuses, and controlled mutation/recalculation.
- Reject caller-supplied result fields in both requests and calculation state, and require clarification for duplicate exact article identifiers.
- Added authenticated calculation and modification API boundaries for future tool use; no LLM integration was added.
- Routed the active direct-diameter UI and PDF generation through the deterministic service and rejected caller-supplied engineering result fields.
- Added archive-safe PDF filenames with date and `HHMMSS` time.
- Added an authenticated **Download PDF** action for valid direct roll-diameter results.
- Added compact, one-page A4 reports with article data, material inputs, minimum/average/maximum diameter, optional roll weight, active forklift warnings/notes, generation time, and build metadata.
- Embedded repeated diagonal `INTERNAL USE ONLY` marks directly in the PDF page content stream. This is an internal-use marking and deterrent, not DRM or a tamper-proof control.
- Added strict report-model validation and filesystem-safe archive filenames.
- Added PDF model and endpoint tests without adding a new runtime dependency.
- Renamed the PDF result section to **Calculation Results** and added the effective roll length as a fourth primary result card.