{"slug": "redb-route-llm-3-1-1-per-message-audit-fields-for-llm-compliance-replay", "title": "redb.Route.Llm 3.1.1 — per-message audit fields for LLM compliance / replay", "summary": "Redb.Route.Llm 3.1.1 adds seven nullable audit fields to every persisted message, capturing effective sampling parameters, a SHA-256 hash of the tool set, and the provider's system fingerprint for compliance and replay purposes. The update records temperature, max tokens, top-p values, tool set hash, and provider fingerprint on assistant rows, plus prompt template name and version on every run. Bit-exact replay remains limited to self-hosted models, while closed providers receive best-effort logging of model ID, parameters, tool set hash, and prompt template.", "body_md": "When an auditor asks \"reproduce this exact answer\" six months later, you need more than (messages, model). You need the sampling parameters that were actually applied, the prompt template version, the tool set the model saw, and ideally the provider's backend fingerprint — because closed-source providers silently re-release weights.\n\nJust shipped this in redb.Route.Llm 3.1.1: 7 nullable audit fields on every persisted message.\n\nSet on assistant rows:\n\nTemperature, MaxTokens, TopP — effective values (request override → factory default)\n\nToolSetHash — SHA-256 of canonical {name, description, InputSchema} set, sorted by name. Tool added/renamed/schema-changed → hash changes\n\nProviderSystemFingerprint — system_fingerprint from the response (OpenAI / xAI / Together echo it; Anthropic / Gemini-compat / Ollama leave it null)\n\nSet on every row of the run:\n\nPromptTemplateName, PromptTemplateVersion — when the caller used a managed template\n\nHonest limitation: bit-exact replay is only possible with self-hosted (Ollama / vLLM / llama.cpp). Anthropic doesn't expose a fingerprint, OpenAI rotates them silently. For closed providers we record (model_id, params, tool_set_hash, prompt_template) and label it best-effort.\n\nZero migration. REDB stores props schemalessly — added 7 fields to the C# class, redeployed, done. No ALTER TABLE, no version bump on the storage layer.\n\nCode & details: CHANGELOG.md → 3.1.1 — section per-message audit fields on MessageProps.\n\nTriggered by feedback from a compliance auditor on Habr — turns out \"we log conversations\" doesn't cut it when the courtroom asks which exact prompt drove this.", "url": "https://wpnews.pro/news/redb-route-llm-3-1-1-per-message-audit-fields-for-llm-compliance-replay", "canonical_source": "https://dev.to/rinat_kozin_d0a2ef43e7824/redbroutellm-311-per-message-audit-fields-for-llm-compliance-replay-4mi1", "published_at": "2026-06-11 22:48:57+00:00", "updated_at": "2026-06-11 23:43:04.505008+00:00", "lang": "en", "topics": ["large-language-models", "ai-tools", "ai-infrastructure", "mlops", "ai-products"], "entities": ["redb.Route.Llm", "OpenAI", "Anthropic", "Gemini", "Ollama", "vLLM", "llama.cpp", "xAI"], "alternates": {"html": "https://wpnews.pro/news/redb-route-llm-3-1-1-per-message-audit-fields-for-llm-compliance-replay", "markdown": "https://wpnews.pro/news/redb-route-llm-3-1-1-per-message-audit-fields-for-llm-compliance-replay.md", "text": "https://wpnews.pro/news/redb-route-llm-3-1-1-per-message-audit-fields-for-llm-compliance-replay.txt", "jsonld": "https://wpnews.pro/news/redb-route-llm-3-1-1-per-message-audit-fields-for-llm-compliance-replay.jsonld"}}