feat: add provider-neutral LLM layer with secrets, budgets, recording and prompts
Phase 7 (ADR-0004). Cognitive code asks the router for a role; the router maps roles to configured models with ordered fallbacks, applies global and per-mind daily token budgets and a concurrency limit, records every call (request, response, usage, latency, cost, seed, request hash) and can serve recordings back for exact replay. Providers are raw HTTP clients for OpenAI-compatible, Anthropic and Ollama endpoints, with embedding support for the embed role wired into memory retrieval. Secrets are references only: env:, file:, or enc: values encrypted with AES-256-GCM under NOEMA_MASTER_KEY; keys are resolved at call time and never rendered, logged or exported. Outbound HTTP refuses private and loopback addresses at dial time unless a provider explicitly allows it, bounds redirects and caps bodies. Provider errors are scrubbed. Prompts are named, versioned rows with system and user templates and an optional JSON schema; untrusted text enters only through delimited data blocks. Six defaults are seeded and never overwritten. The UI adds the LLM page (providers, models, role matrix, usage, errors, budgets), a provider page with connectivity test, and a prompt manager with editor, test runner, history, restore, clone and diff. CLI: provider, prompt.
This commit is contained in:
@@ -0,0 +1,15 @@
|
||||
---
|
||||
role: hypothesise
|
||||
description: Propose candidate explanations for a set of observations.
|
||||
schema: {"type":"object","properties":{"hypotheses":{"type":"array","items":{"type":"object","properties":{"proposition":{"type":"string"},"mechanism":{"type":"string"},"evidence_needed":{"type":"array","items":{"type":"string"}},"prior_plausibility":{"type":"string","enum":["low","medium","high"]}}}}},"required":["hypotheses"]}
|
||||
system: |
|
||||
You generate candidate explanations. You do not decide what is true; another component weighs evidence.
|
||||
Prefer mundane explanations. Always include at least one alternative that the observations are unrelated. Output JSON only.
|
||||
---
|
||||
Observations (most recent last):
|
||||
{{range .Observations}}{{data "observation" .}}
|
||||
{{end}}
|
||||
Existing beliefs that may be relevant:
|
||||
{{range .Beliefs}}- {{.Proposition}} ({{printf "%.2f" .Confidence}})
|
||||
{{end}}
|
||||
Propose up to {{.Max}} hypotheses. For each give the proposition, a mechanism, what evidence would raise or lower it, and a rough prior plausibility.
|
||||
Reference in New Issue
Block a user