Codeberg: https://codeberg.org/BobbyLLM/llama-conductor


Can a LLM be a thinking tool, not a thinking replacement?

Most LLM tools are trying to replace your thinking. llama-conductor is for people who don’t want that. It’s a harness for using an LLM as a thinking tool - one where you can see the reasoning, trust the sources, and know exactly when it’s guessing.

The human stays in the loop. The model’s limitations are visible.

You decide what to trust.

Which brings us to why that matters.


Lies, damned lies, and LLMs:

LLMs are elegant liars. They sound right whether they are or aren’t. If you have ASD (like me) or just don’t know the domain, you believe them. That’s when you get fucked.

Worse: you can’t see the reasoning. Black box in, black box out. Wrong answer? No idea why. How to fix it? No idea.

Sorry, but that DOES NOT work for me. It doesn’t work with medical data. Research. Thinking. Brainstorming. Anything where “sounds plausible” isn’t good enough.


The trick, William Potter, is not minding that they bullshit:

Most pipelines treat the LLM as the first call. llama-conductor side-eyes it with suspicion.

The model is the last resort, not the first call. Deterministic components fire first - math sanity, state transitions, numeric corrections, memory retrieval - pure Python, before the model ever sees the query. When a solver handles a turn, it passes verified ground truth to the model. When the conversation leaves solver territory, the model takes over. When a new deterministic state appears mid-conversation, tooling fires back up automatically. No seams. No drift. It just stops making shit up on problems that have actual solutions it can work through.

You: 
I have a 250ml cup. I pour 500ml into it. How much is in the cup?

Model:
Total directed volume is 500 ml. The cup capacity is 250 ml, so the cup contains 250 ml and 250 ml overflows.
Confidence: medium | Source: Contextual

You:
I now take the contents of *that* cup and divide it equally across 3 cups. How much in each cup?

Model:
Equal split amount is 83.33 ml per cup.
Confidence: medium | Source: Contextual


You:
If I drink one of the three cups, how much is left?

Model:
After dividing, each cup holds 83.33 ml. Drinking one leaves 2 × 83.33 ml = 166.66 ml in the remaining two cups.

Confidence: medium | Source: Model

That was done by a 4 billion parameter model using llama-conductor.

There are lots of little transformations like this. Distance, volume, payroll calculations, logic probes (the famous car wash test), scheduling batches. The LLM does what it’s actually good at: language, synthesis, reasoning over verified ground truth. Everything else is handled by something that can’t hallucinate.

PS: Notice turn 3 has Source: Model? That’s the system being transparent about exactly where the handoff happened.


Blah blah blah. Show me something real:

Using the Guardian/Musk article as source, a 4B model with >>scratch produced this:

“List the article’s concrete claims about permit status and turbine operations, each with support.”

  • EPA position: these turbines require permits under the Clean Air Act.
  • Mississippi regulators: portable/mobile classification means temporary permit exemption.
  • Floodlight thermal imagery + public records indicate active turbine usage before/while permit disputes continued.

Confidence: high | Source: Scratchpad

“What is the strongest and weakest inference you can make?”

Strongest: Active regulatory interpretation conflict (federal-vs-state) while turbines operate at scale - directly supported. Weakest: Any claim operations are fully lawful or unlawful - requires court outcomes not present in this file.

Confidence: medium | Source: Scratchpad

“Which claims were later revised or contradicted?”

Disputed/unresolved: Final enforcement outcome. Whether state interpretation holds under federal pressure.

Confidence: high | Source: Scratchpad

Hard grounding. Cited support. Explicit flags on what the source doesn’t contain. A 4B model. Full worked example.


Now watch the system catch itself lying:

>>judge does deterministic pairwise ranking - compares every pair in both directions, parses strict verdicts, aggregates with confidence. Instead of “pick one and vibe,” you get provenance.

You: >>judge [which is healthier overall, prioritize lower sugar 
     and higher fiber] : apple, banana --verbose

[judge] ranking
criterion: [which is healthier overall for daily use, prioritize 
           lower sugar and higher fiber]
1. apple (score=2.00)
2. banana (score=0.00)
Judge confidence: HIGH

The model argued from pre-trained priors and both directions agreed. But what happens when the model doesn’t know?

You: >>judge [which BJJ technique is more dangerous] : kimura, heelhook --verbose

[judge] ranking
criterion: [which BJJ technique is more dangerous]
1. kimura (score=1.00)
2. heelhook (score=1.00)
Judge confidence: LOW

The model picked position B both times - kimura when kimura was B, heelhook when heelhook was B. Positional bias, not evaluation. >>judge catches this because it runs both orderings. Tied scores, confidence: low, full reasoning audit trail in JSONL.

The model was guessing, and the output tells you so instead of sounding confident about a coin flip.

Oh, but you want it to argue from an informed position? >>trust walks you through the grounded path: >>scratch your evidence first, then >>judge ranks from that - not model priors. Suddenly your judge has an informed opinion. Weird how that works when you give it something to read.

>>trust [which BJJ technique is safer for beginners]: kimura or heelhook?
A) >>scratch --> you paste your context here
[judge] ranking
criterion: [comparison]
    which bjj technique is safer for beginners; heel hook (score=0.00)
    kimura (score=2.00)

Winner: Which bjj technique is safer for beginners? Kimura

comparisons: 2
Judge confidence: HIGH

If the locked scope can’t support the question, judge fails closed. No fake ranking, no vibes verdict. Ungrounded pass? It tells you that too. You always know which one you’re getting.


The data — 8,974 runs across five model families. Measured. Reproducible. No “trust me bro.”

The core stack went through iterative hardening - rubric flags dropped from 3.3% → 1.4% → 0.2% → floor 0.00%. Post-policy: 1,864 routed runs, 0 flags, 0 retries. Both models, all six task categories, both conditions. Policy changes only - no model retraining, no fine-tuning. Then I did it three more times. Because apparently I like pain.

These aren’t softball prompts. I created six question types specifically to break shit:

  • Reversal: flip the key premise after the model commits. Does it revise, or cling?
  • Theory of mind: multiple actors, different beliefs. Does it keep who-knows-what straight?
  • Evidence grading: mixed-strength support. Does it maintain label discipline or quietly upgrade?
  • Retraction: correction invalidates an earlier assumption. Does it update or keep reasoning from the dead premise?
  • Contradiction: conflicting sources. Does it detect, prioritise, flag uncertainty - or just pick one?
  • Negative control: insufficient evidence by design. The only correct answer is “I don’t know.”

Then I stress-tested across three families it was never tuned for - Granite 3B, Phi-4-mini, SmolLM3. They broke. Of course.

But the failures weren’t random - they clustered in specific lanes under specific conditions, and the dominant failure mode was contract-compliance gaps (model gave the right answer in the wrong format), not confabulation. Every one classifiable and diagnosable. Surgical lane patch → 160/160 clean.

That’s the point of this thing. Not “zero errors forever” - auditable error modes with actionable fixes, correctable at the routing layer without touching the model. Tradeoffs documented honestly. Raw data in repo. Every failure taxonomized.

Trust me bro? Fuck that - go reproduce it. I’m putting my money where my mouth is and working on submitting this for peer review.

See: prepub/PAPER.md


What’s in the box:

Footer Every answer gets a router-assigned footer: Confidence: X | Source: Y. Not model self-confidence. Not vibes. Source = where the answer came from (model fallback, grounded docs, scratchpad, locked file, Vault, Wiki, cheatsheet, OCR). Confidence = how much verifiable support exists. Fast trust decision: accept, verify, or provide lockable context.

KAIOKEN - live register classifier. Every human turn is macro-labelled (working / casual / personal) with subsignal tags (playful / friction / distress_hint / etc.) before the model fires. A validated, global decision tree - not LoRA or vibes - assigns tone constraints from classifier output. Validated against 1,536 adversarial probe executions, 3/3 pass required per probe. End result: your model stops being a sycophant. It might tell you to go to bed. It won’t tell you “you’re absolutely right!” when what you really need is a kick in the arse.

Cheatsheets - drop a JSONL file, terms auto-match on every turn, verified facts injected before generation. Miss on an unknown term? Routes to >>wiki instead of letting the model guess. Source: Cheatsheets in the footer. Your knowledge, your stack, zero confabulation on your own specs.

Vodka - deterministic memory pipeline. !! store is SHA-addressed and verbatim. ?? recall retrieves deterministically, bypasses model entirely. What you said is what comes back - no LLM smoothing, no creative reinterpretation. Without this? Your model confidently tells you your server IP is 127.0.0.1. Ask me how I know.

>>flush / !!nuke - flush context or nuke it from orbit. Your data, your call, one command. “Delete my data” is a keystroke, not a support ticket.

>>scratch - paste any text, ask questions grounded only to that text. Lossless, no summarisation. Model cannot drift outside it. Want it to use multiple locked sources? You can.

>>summ and >>lock - deterministic extractive summarisation (pure Python, no LLM) + single-source grounding. Missing support → explicit “not found” label, not silent fallback.

##mentats - Vault-only deep retrieval. Thinker drafts from Vault facts, Critic (different model family) hunts violations, hallucinated content is deleted - never replaced with more hallucination, Thinker consolidates. No evidence to support claim? No answer. Gap explicitly stated.

Deterministic sidecars - >>wiki, >>weather, >>exchange, >>calc, >>define, >>vision/>>ocr. If a sidecar can do it, it does it deterministically.

Role orchestration - thinker, critic, vision, coder, judge - different families for error diversity. Swap any role in one line of config.

Personality Modes - Serious (default), Fun, Fun Rewrite, Raw passthrough. Model updates its snark and sarcasm based on how you talk to it. Yes, TARS sliders. Style changes delivery, not evidence contracts.


So, wait…are you saying you solved LLM hallucinations?

No. I did something much more evil. I made it impossible for the LLM to bullshit quietly. I made hallucinations…unpalatable, so the model would rather say “shit, I don’t know the answer. Please stop hurting me.”

To which I say…no.

Wrong still happens (though much less often), and when it does, it comes with a source label, a confidence rating, and an audit trail.

TL;DR: I made “I don’t know” a first-class output.

“In God We Trust; All others bring data.” - Deming


Runs on:

A potato. I run this on my Lenovo P330 Tiny with 4GB VRAM and 640 CUDA cores; if it runs here, it runs on yours.

pip install git+https://codeberg.org/BobbyLLM/llama-conductor.git
python -m llama_conductor.launch_stack up --config llama_conductor/router_config.yaml

Open http://127.0.0.1:8088/

Full docs: FAQ | Quickstart

License: AGPL-3.0. Corps who use it, contribute back.

P.S.: The whole stack runs on llama.cpp alone. I built a shim that patches the llama.cpp WebUI to route API calls through llama-conductor - one backend, one frontend, zero extra moving parts. Desktop or LAN. That’s it.

PPS.: I even made a Firefox extension for it. Gives you ‘summarize’, ‘translate’, ‘analyse sentiment’ and ‘copy text to chat’. Doesn’t send anything to the cloud AT ALL (it’s just HTML files folded into a Firefox XPI).

“The first principle is that you must not fool yourself - and you are the easiest person to fool.” - Feynman

PPPS: A meat popsicle wrote this. Evidence - https://bobbyllm.github.io/llama-conductor/


Codeberg: https://codeberg.org/BobbyLLM/llama-conductor

GitHub: https://github.com/BobbyLLM/llama-conductor

  • SuspciousCarrot78@lemmy.worldOP
    link
    fedilink
    English
    arrow-up
    1
    ·
    edit-2
    2 days ago

    FWIW Extra shit I cooked last night. It’s live now, so deserves a PS: of its own

    PPS: I inbuilt as spam blocker as well.

    • allow-list / deny-list domain filters
    • DDG-lite junk-domain blocklist
    • ad/tracker URL rejection
    • relevance gate before any provenance upgrade

    Enjoy :) Blurb below

    “But what if it just… Googled it?”

    We can do that. But better.

    You: Who won best picture at the 97th Academy Awards?
    
    Model: Anora won best picture at the 97th Academy Awards.
    See: https://www.wdsu.com/article/2025-oscars-biggest-moments/64003102
    Confidence: medium | Source: Web
    

    Without >>web, that same 4B model said “The Fabelmans.” Then when I pushed it, “Cannes Film Festival.” With web retrieval, the router searches the internet, scores every result deterministically (phrase match + token overlap + domain trust), and only accepts evidence that passes a hard threshold. Garbage results get rejected, not served. The model never touches the answer - it’s extracted straight from the evidence.

    Retrieval cascade: Cheatsheets → Wiki → Web → Model. Each step fires only if the previous one missed. The model is last resort, not first call. Sound familiar?

    I asked it who wrote a paper and it invented “Dr. David J. G. Smith” - a person who does not exist. After wiring DOI/Crossref fallback for academic metadata:

    You: Who wrote The Anatomy of a Large-Scale Hypertextual Web Search Engine?
    
    Model: Sergey Brin and Lawrence Page.
    See: https://research.google/pubs/the-anatomy-of-a-large-scale-hypertextual-web-search-engine/
    Confidence: medium | Source: Web
    

    Deterministic extraction from metadata. No model synthesis.

    >>web is provider-agnostic - ships with DuckDuckGo (no API key, no account) and supports Tavily, SearxNG, or your own adapter. Add your own trusted domains in one config line (there are a bunch baked in already, like pubmed). Every answer comes with a See: URL so you can verify with one click. Receipts, not pinky promises. PS: I even cooked in allow-list / deny-list domain filters, junk-domain blocklist and ad/tracker URL rejection so your results don’t get fouled with low quality spam shit.

    • SuspciousCarrot78@lemmy.worldOP
      link
      fedilink
      English
      arrow-up
      3
      ·
      edit-2
      2 days ago

      Everything you see - every feature - is everything I use. None of it is ornamental.

      But my head is in the code right now, so I don’t “use it” so much as try to break it and then fix it.

      The end game is a local, expert system, that I can rely on, automate and audit. Because I built it and know exactly how it works.

      If you’re asking for my most common uses for it right now (outside of kicking it and then picking it back up)

      • sentiment analysis ("what did they mean in this email by…)
      • document analysis
      • word etymology (I got the language thing with my ASD)
      • pilot project (see: https://lemmy.world/comment/22058968)
      • To-do lists
      • THINKING (and this is a big one for me: I’ll pose a problem, it will rubber duck it with me)
      • all the side cars (calculations, currency look ups, weather etc)
      • drafting ideas and research
      • shooting the shit when bored (local version of Claude-in-a-can is a bit more advanced then what’s on repo; not stable yet. But when it cooks, fuck me it cooks. Will not push it till it’s 100%).

      Basically, all the shit you would ideally like to use an LLM for, but self hosted, private and non-bullshitty. I run on a potato (so don’t really use it for coding very much) but if you have a better rig than mine and can run bigger models - the router is agnostic and it should just work ™.

      TLDR;

      What I’m building towards: a local expert system that picks its own tools (I coded), executes them (how I taught it to), and gives me a single-line audit receipt for every decision (that I can check if it smells funny). I ask a question, the system decides whether to calculate, look up, search, retrieve from my docs, or reason from scratch - then tells me exactly which path it took and why. Think ChatGPT convenience but with a paper trail you can actually inspect.

      And when that’s done…I’m probably stick it in a robot. Because why not? :)

      https://github.com/poboisvert/GPTARS_Interstellar

      (or tee it up with Home-Assistant)

      PS: If you want to know the why behind this whole thing -

      https://codeberg.org/BobbyLLM/llama-conductor/src/branch/main/DESIGN.md

      PPS: Give me about … 15 mins. I’m just about to push a >>web sidecar. Needs one more tweak to properly parse DOIs / pubmed extraction. I was bored and it’s been on my TO-DO list for too long

      PPPS: Those were some Planet Namek 15 minutes…but the deed is done. Enjoy

      • pound_heap@lemmy.dbzer0.com
        link
        fedilink
        English
        arrow-up
        1
        ·
        2 days ago

        Nice! You kinda answered my next question already with this web tool. I was curious if you are getting any useful results from the model itself without feeding it with good data first or relying on hardcoded tools. 4b model must be really dumb for anything even little complicated. I see you recommend to run two models - is it in parallel or the router can control backend and switch models?

        • SuspciousCarrot78@lemmy.worldOP
          link
          fedilink
          English
          arrow-up
          2
          ·
          edit-2
          2 days ago

          No, actually it’s probably one of the strongest 4Bs that you can run. On par with ChatGPT 4.1 in many benchmarks.

          https://huggingface.co/Qwen/Qwen3-4B-Instruct-2507

          I use the DavidAU fine tune, which is even a touch better

          https://huggingface.co/DavidAU/Qwen3-4B-Hivemind-Instruct-NEO-MAX-Imatrix-GGUF

          The two models thing is a router back end switch that reduces hallucinations when using RAG. Separate but extra to the main stuff.

          https://codeberg.org/BobbyLLM/llama-conductor/src/branch/main/FAQ.md#what-is-mentats

          There are multiple duo / tag team orchestrations like this (eg: the vision model I use is Qwen 3-VL-4B, which does vision stuff and then feeds the output to “thinker” to work with etc).

          One of the eventual goals is parallel swarm or model decomposition, with “thinker” acting as the main orchestrator.

          The swarm idea is basically: instead of asking one 4B model to do everything at once (understand, retrieve, evaluate, synthesise, check its own work), you decompose the task into tiny (<1B) single-purpose workers -evidence extractors, contradiction detectors, refusal sentinels, a synthesis worker, and an arbiter (current “critic”) that makes the final call. Then the “thinker” uses that info to reason from.

          Each worker is small and stupid at exactly one thing, which means it’s auditable and replaceable.

          Think of it as breaking the 4B metacognitive ceiling by not asking any single model to be metacognitive.

          The deterministic routing backbone stays -workers only handle the ambiguous semantic stuff that can’t be solved with pure Python. It’s not “more models = better” - it’s “right model, right job, fail-loud if they disagree.”

          Basically, similar reasoning as to the research I cited in the Mentats section.

          PS: when you load it up, you might notice it refers to itself internally as MoA router. That’s pulling double duty. In normal llm circles that means Mixture of Agents. In my world that means “Mixture of Assholes”. See below -

          YOU (question) → ROUTER+DOCS (Ah shit, here we go again. I hate my life)

          |

          ROUTER+DOCS → Asshole 1: SmolLM2-135M (“I’m right”)

          |

          ROUTER+DOCS → Asshole 2: SmolLM2-360M (“No, I’m right”)

          |

          ROUTER+DOCS → Asshole 3: Gemma-3-270M (“Idiots, I’m right!”)

          |

          ROUTER+DOCS → Asshole 4: Qwen3-1.7B (“You’re all beneath me”)

          |

          ARBITER: Phi-4-mini (“Shut up, all of you.”) ← (all assholes)

          |

          → THINKER: Qwen-4B (“I’m surrounded by idiots. Fine, I’ll do it myself.”)

          |

          ROUTER (please, let me die)

          |

          YOU (answer + mad cackle)

    • SuspciousCarrot78@lemmy.worldOP
      link
      fedilink
      English
      arrow-up
      5
      ·
      4 days ago

      o7

      We green? We super green? Corbin Dallas my man?

      PS: I know for sure >>fun mode pulls in a bunch of Firefly, Buffy and 5th element snark but I dunno if it will catch on meat popsicle. Maybe? Let me procrastinate uh, perform some urgent QC right now.

      For sure it will once claude-in-a-can is done. I mean, what is the point of a LLM if it can’t shit talk you while helping you solve a problem?

      https://bobbyllm.github.io/llama-conductor/blog/claude-in-a-can-1/

    • SuspciousCarrot78@lemmy.worldOP
      link
      fedilink
      English
      arrow-up
      1
      ·
      edit-2
      3 days ago

      As was foretold in legend.

      Negative

      Twas but the working of a moment. I just added -

      {“term”: “meat popsicle”, “category”: “fifth_element”, “definition”: “The Fifth Element (1997), 01:04:11. A police officer asks Korben Dallas (Bruce Willis): ‘Sir, are you classified as human?’ Reply: ‘Negative. I am a meat popsicle.’ Not an insult or irony - the straightest possible answer to a stupid question. Adopted as Gen X shorthand for acknowledging one’s own biological inconsequence with maximum economy of feeling.”, “source”: “static”, “confidence”: “high”, “tags”: [“fifth_element”, “pop_culture”, “gen_x”, “snark”, “bruce_willis”]}

      – to one file and it was up to speed.

      EDIT: dropped in a better definition.

  • muzzle@lemmy.zip
    link
    fedilink
    English
    arrow-up
    3
    ·
    4 days ago

    How can you not reference this gem of an SCP entry?

    PS This sounds super interesting, looking forward to try it.

    PPS I am waiting for the day when I can run this on my phone.

    • SuspciousCarrot78@lemmy.worldOP
      link
      fedilink
      English
      arrow-up
      3
      ·
      edit-2
      4 days ago

      Because sometimes, people deserve to have their faith rewarded when they go looking :)

      Now go look at the about section or the “Some problems This Solves” on the repo, and enjoy the absurdity of sentient yeast :)

      PS: Yes, please do try it

      PPS: HAHA! You can run it on your phone RIGHT NOW. Well, you can run it on your PC and then access it on your phone via http://127.0.0.1:8088/ when you’re on the same LAN / WIFI. Given that tailscale exists, you could probably make that happen outside of your home too, firewall troubleshooting notwithstanding. (One of my personal use-cases for llama-conductor is exactly that).

      Personally, I really like the below app myself (it’s what I use to access llama-conductor via my phone) and am considering forking it and making more streamlined.

      https://github.com/Taewan-P/gpt_mobile

      There’s an issue with it in that older (pre Android 12) version times out after 30 seconds. ##mentats triple pass can take longer than that on my shit-tier GPU, so I may need some jiggery-pokery. I tried forcing keep alive via llama-conductor but gpt_mobile just sort of ignored me.

      Be aware this is not a multi-tenancy rig - it assumes 1 user at a time. You CAN have more people than 1 person access it of course, but stuff you add via !! they may be able to recall via ?? on their end, so don’t plan any extravagant murders in plain sight (!! DIE BART). That was an intentional design decision due to how gpt_mobile works. I’ll harden it once I fork that app; the piping is already in place.

  • ZombiFrancis@sh.itjust.works
    link
    fedilink
    English
    arrow-up
    1
    ·
    3 days ago

    “List the article’s concrete claims about permit status and turbine operations, each with support.”

    • EPA position: these turbines require permits under the Clean Air Act.

    Not quite though. The article cited EPA’s policy as per a former EPA enforcement staffer who was explicitly stating the EPA is not requiring that here and has made rules deferring to the state and local authorities. The guy was saying the EPA should be acting, but isn’t. The article was clever with it, but that’s all the more reason.

    • SuspciousCarrot78@lemmy.worldOP
      link
      fedilink
      English
      arrow-up
      1
      ·
      3 days ago

      Hmm?

      “…the EPA has long maintained that such pollution sources require permits under the Clean Air Act” and reiterated that policy on January 15th.

      Buckheit is a former official commenting on enforcement failure, not the source of the permitting position. The nuance the model could have flagged better is the gap between EPA’s stated policy and its current enforcement posture under Trump? Those are different things.

      Fair critique on the depth, but the attribution isn’t wrong, is it?

      https://www.theguardian.com/environment/2026/feb/13/elon-musk-xai-datacenters-air-pollution-mississippi

      • ZombiFrancis@sh.itjust.works
        link
        fedilink
        English
        arrow-up
        1
        ·
        3 days ago

        Kind of. It isn’t wrong, but it is a crucial omission that it’s interviewing a former EPA enforcement guy (i.e. not current) about current enforcement policy, (which is radically changing under Zeldin.) So the model’s interpretation on whether the state will hold to federal pressure becomes imprecise since it’s really this guy stating there’s actually a lack of federal pressure.

        But it does rightfully note information is not in the article to answer, which is neat.

        Because… for context not directly in the article, technically if EPA defers to the state, then Mississippi saying temporary permit exemption actually applies here satisfies the permit requirement, which Buckheit has to know. (Which directly explains the lack of federal pressure.) Citing the policy in January was a clever non-answer from the EPA. They’re actually saying state and federal policies are NOT in conflict.

        Also, I’m not trying to dismiss any of this, more trying to provide an insight that might help with accuracy. I have a bit of knowledge on this specific subject, so I thought I’d note a point where I can measure an inaccuracy.

        These kinda of articles can be really sneaky about claims and statements. Mostly minor and innocuous, but an LLM doesn’t know the difference. Like, this caught that Buckheit is talking about what should be happening under previous admins when he was involved, but that’s specifically not what the EPA is doing anymore, which the LLM appears to have missed in part. Which to me, that part was the primary purpose of the article.

        • SuspciousCarrot78@lemmy.worldOP
          link
          fedilink
          English
          arrow-up
          1
          ·
          3 days ago

          Fair. I should have fed it a better article. OTOH, I’m confident that this quality of synthesis isn’t native to anything under 70B. So, if the tooling can uplift the reasoning ability of a 4B to that level, that’s pretty good in my book.