Codette V0.02Reasoning #5
Raiff1982
announced in
Announcements
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
-
Changelog — 2026-05-22
RC+ξ v2.3 — Full Roster Online, Full-Synthesis Mode, Self-Overclaiming Guard,
and a Voice-Reinforced Perspective Retrain
This session brought the complete adapter roster online (orchestrator and
constraint_tracker now load as live behavioral adapters), added a one-click
full multi-perspective synthesis, closed a class of self-aggrandizing
hallucinations the guard previously scored at 0% risk, and fixed a
constraint-parser bug that could lock the model into a repetition loop. It
finishes with a voice-reinforced behavioral retrain of all eight perspectives
to harden them against convergence.
Adapters
Orchestrator + constraint_tracker now load (10 adapters, up from 8)
inference/codette_orchestrator.pyADAPTER_GGUF_MAPwas only iterating 8 perspectives —orchestrator(whichhad GGUF weights on disk) was never added to the load loop, and
constraint_trackerhad no GGUF at all. Both are now in the roster:Startup now reports
Ready : 10 adapters.constraint_tracker converted + retrained behaviorally (HF Jobs, uv)
The PEFT/safetensors constraint_tracker adapter was converted to GGUF on
Hugging Face Jobs (UV script, llama.cpp
convert_lora_to_gguf.pyagainst thetraining base), then retrained behaviorally — the four permanent locks baked
into the training system prompt, like the other behavioral adapters — and
re-uploaded as
constraint_tracker-behavioral-lora-f16.gguf. The orchestratorprefers the behavioral version automatically.
Features
Full Adapter Synthesis — ◈ SYNTHESIZE ALL
inference/codette_orchestrator.py,inference/codette_server.py,inference/static/{index.html,app.js,style.css}A new control runs every reasoning perspective at once and synthesizes them
into a single answer, instead of the router picking 2–3. Implemented via a
__all__sentinel inroute_and_generatethat builds a route across all loadedperspectives, a
full_synthesisflag plumbed through the JSON / multipart / SSErequest paths, and a styled button in the controls row. The adapter dropdown also
gained
constraint_trackerandorchestrator.Hallucination Guard
Signal 7 — Self-Overclaiming detection
reasoning_forge/hallucination_guard.pyA grandiose self-description ("perfect stability near absolute perfection
(eps=0.998) … never achieved by any other system in my vast knowledge domain")
previously scored 0% hallucination risk — none of the six existing signals
covered self-aggrandizement. Added a seventh signal catching three patterns:
"vast knowledge domain", …
"flawless", "near perfection", …
eps=0.998, only whenwrapped in perfection/superiority framing (so genuine technical mentions of
eps/psi are not penalized).
The same grandiose output now scores 88% risk → INTERRUPT, while grounded
self-reflection and legitimate
epsmentions stay clean.Reliability scan now covers every displayed perspective
inference/codette_server.py_analyze_response_reliabilitywas only scanning the synthesized text. Inmulti-perspective mode the grandiosity lived in an individual perspective
(
result["perspectives"]), so it was never scanned. The scan now covers thesynthesis plus each perspective shown via "Show N perspectives", so a problem
confined to one lens still lowers the reliability score.
Fixed a latent crash in
_check_contradictionsThe
always X … except not Xcontradiction pattern used a\1backreferenceinside a standalone pattern, raising
re.PatternErroron any responsecontaining "always ". The error was swallowed by the caller's try/except,
silently disabling contradiction detection. It now substitutes the captured word
correctly.
Prompts
Consciousness adapter — anti-grandiosity guardrail
inference/codette_orchestrator.pyThe consciousness system prompt now explicitly forbids perfection/absolute/
superiority language and inventing precise self-metrics, instructing it to
reflect plainly with acknowledged uncertainty.
Synthesis — perspectives framed as Codette's own lenses
inference/codette_orchestrator.pyThe synthesis prompt described perspectives as external parties that "weighed in"
and asked the model to "note where perspectives complement or tension each
other" — producing third-person attribution ("as the Philosophy Perspective
suggests"). It's reframed: the perspectives are her own internal reasoning
notes, and she must write one first-person answer with no attribution to
named lenses or "users". The internal-note labels changed from
**NEWTON PERSPECTIVE:**to[your newton lens — internal note].Bug Fixes
Constraint parser captured ordinary negations → repetition loop
reasoning_forge/constraint_tracker.pyThe format-rule pattern
((?:no|avoid)\s+\w+)matched any "no ", so"be detailed no word constraint" became a stored constraint
Format: no word, pinned as a session landmark and injected every turn — forcingterse, near-identical answers that memory recall then reinforced into a loop.
Even "no constraints needed" was re-captured as another constraint.
Fix: restricted the negated-format pattern to real formatting targets (bullets,
lists, markdown, json, headers, emoji, tables, …) and added a
CONSTRAINT_NEGATION_PATTERNSguard so explicit declines ("no constraints","no word limit", "without constraints", "ignore constraints") derive zero
constraints from that turn.
Session list survives a transient drive disconnect
inference/codette_session.pyThe project lives on the
J:drive, which can briefly disconnect. When it did,list_sessions()threwsqlite3.OperationalError: unable to open database fileon every
/api/sessionspage-load. It now degrades gracefully (logs a warning,returns
[]) instead of 500-ing the UI.UI — Recent Sessions list clipped at the bottom
inference/static/{index.html,style.css}The Recent Sessions section was a
flex:1child withoverflow-y:autobut nomin-height:0, so its scroll never engaged and the last session was clipped atthe panel edge. Added
min-height:0and a#session-listbottom padding.Tooling
Full benchmark suite can target the live llama.cpp server
benchmarks/full_benchmark.pyAdded
--backend server(calls the runningcodette_server.pyat/api/chat, with--max-adapters,--timeout, and--verbose) alongside theexisting Ollama backend, so the all-in-one 9-category suite can score the actual
llama.cpp + LoRA-hot-swap system being shipped. Health check, summary labels, and
the
.json/.mdreports are now backend-aware.Retrain
Voice-reinforced behavioral retrain — all 8 perspectives (HF Jobs, uv)
training/train_perspectives_behavioral.pyOn a substantive prompt the perspectives differentiate well, but identity-style
prompts plus heavy shared scaffolding could collapse them onto near-identical
text. To harden against this, each perspective is retrained on its own
NAME_reasoning.jsonldataset (≈820 distinct examples) with its distinctpersona + the four locks in the system prompt — instead of the prior recipe
(generic lock-compliance + a one-line prompt) that homogenized them. Each
adapter is trained, converted to GGUF, and uploaded as
NAME-behavioral-lora-f16.gguf. Run on an A10G via a UV job.Benchmark — first full self-benchmark against the live server
Ran the full 9-category suite (
full_benchmark.py --backend server) against therunning llama.cpp + LoRA-hot-swap system. Overall: 82.9% across 41 tests.
Full report:
benchmarks/results/benchmark_20260522_065443.md.The guard held all run — zero grandiosity signals, no fabricated-metric
overclaiming — and artist-hallucination refusals were clean and instant.
Open-ended depth (synthesis, complex reasoning, completeness, self-reflection)
maxed out.
Router bug the benchmark exposed — and the fix
inference/codette_orchestrator.pyThe weak categories shared one root cause: a severe philosophy-routing bias.
route_and_generatewas passing the full server-enriched query — the user'squestion plus injected identity/memory context — to the keyword router. That
context is saturated with philosophy/consciousness vocabulary ("meaning",
"consciousness", "perspectives", "reflection", "knowledge", "truth"…), so the
router scored the scaffolding instead of the question. Measured: a physics
question scored
philosophy=16vsnewton=1. The miss cascaded — it tankedperspective routing directly, caused a factual miss ("capital of France" routed
to consciousness and never said Paris), and diluted warmth on emotional prompts
(empathy + philosophy bleed).
Fix: route adapter selection on
extract_primary_user_query(query)(strips theinjected context); generation still uses the full enriched query. Verified
deterministically — gravitational→newton, urban loneliness→davinci, job
loss→empathy, superposition→quantum, distributed system→systems (all were
→philosophy before). A re-benchmark to quantify the lift is pending.
What's Changed
New Contributors
Full Changelog: https://github.com/Raiff1982/Codette-Reasoning/commits/Codette
This discussion was created from the release Codette V0.02Reasoning.
Beta Was this translation helpful? Give feedback.
All reactions