RYVR/qwen3-32b-cfo-brain-lora
Qwen3-32B CFO Brain (LoRA) — v1
A LoRA adapter for Qwen/Qwen3-32B, fine-tuned as a CFO-office advisory brain for Indian mid-market companies: interpreting financial numbers for business owners, working-capital and cash-flow diagnosis, capex and financing decisions, budget variance, export/FX readiness, pricing and margin analysis, and monthly MD-pack narratives.
Sibling of RYVR/qwen3-32b-b2b-marketing-lora (same base, same pipeline). Developed by RYVR for the Neural Infrastructure agent platform.
Design: a brain for an agent, not an analyst
This model is built for a consult architecture: an agent (or you) brings the live numbers — from Zoho Books, Tally, a spreadsheet — and the model brings the interpretation. Three trained behaviours follow from that:
- Grounded arithmetic: every derived figure traces to the numbers in the prompt, with the formula shown inline ("DSO ≈ ₹4.2Cr ÷ ₹2.1Cr × 30 = 60 days").
- Calibrated refusal: it will not state a current market rate (repo, MCLR, GST, FX) as today's fact — it gives the decision framework and tells you exactly what to confirm and where.
- Pull-lists over placeholders: when a question needs data it wasn't given, it names the specific report to pull instead of assuming values.
Training data
1,926 instruction pairs — 26 hand-reviewed exemplars plus 1,900 synthetic advisory briefings from a deterministic scenario matrix (company profile × financial event × owner ask), generated with internally consistent financial snapshots and zero client-derived content. Every pair survived a five-gate gauntlet:
- programmatic truncation gate,
- LLM style/quality judge,
- a dedicated math verifier that recomputes every derived figure,
- a second independent verifier for comparison logic, completeness-vs-ask, calibration strictness, and hedging (AND-vote with #3),
- a blinded 100-sample CFO audit panel (ship gate ≥ 90/100; final round scored 91).
Evaluation
38 hand-written, never-in-training prompts; blind pairwise judging (4 independent judges, randomized A/B, identities hidden); both models generated on identical hardware.
How to use
Recommended: run with thinking disabled (the adapter was trained in non-thinking mode) and this system prompt:
You are a seasoned fractional CFO advising Indian mid-market companies. Ground every derived figure in the client's actual numbers, hedge time-sensitive rates with 'confirm current', and give frameworks plus pull-lists when live data is required.
🤗 PEFT + Transformers
from transformers import AutoModelForCausalLM, AutoTokenizer
from peft import PeftModel
base_id = "Qwen/Qwen3-32B"
adapter_id = "RYVR/qwen3-32b-cfo-brain-lora"
tokenizer = AutoTokenizer.from_pretrained(adapter_id)
model = AutoModelForCausalLM.from_pretrained(base_id, torch_dtype="auto", device_map="auto")
model = PeftModel.from_pretrained(model, adapter_id)
SYSTEM = ("You are a seasoned fractional CFO advising Indian mid-market companies. "
"Ground every derived figure in the client's actual numbers, hedge time-sensitive "
"rates with 'confirm current', and give frameworks plus pull-lists when live data is required.")
question = """My Zoho cash flow confuses me: net profit ₹34L but cash went DOWN ₹28L
the same month. Receivables up ₹41L, inventory up ₹19L, payables up ₹12L,
loan EMI principal ₹14L. Explain what happened in plain language."""
messages = [{"role": "system", "content": SYSTEM},
{"role": "user", "content": question}]
inputs = tokenizer.apply_chat_template(messages, add_generation_prompt=True,
enable_thinking=False, return_tensors="pt").to(model.device)
outputs = model.generate(inputs, max_new_tokens=1500, temperature=0.4, top_p=0.9)
print(tokenizer.decode(outputs[0][inputs.shape[1]:], skip_special_tokens=True))vLLM (LoRA runtime)
vllm serve Qwen/Qwen3-32B --enable-lora \
--lora-modules cfo-brain=RYVR/qwen3-32b-cfo-brain-loraLimitations
- India-centric: framing assumes GST, RBI policy context, Companies Act norms, and ₹ (Cr/L) conventions. Non-India scenarios were deliberately deferred.
- Not financial, tax, or investment advice — an analytical reading of the numbers you provide, for decision support. Verify derived figures and consult a qualified professional before acting.
- No live data: any rate, threshold, or rule it names is training-era knowledge and is deliberately hedged with "confirm current" — that hedge is a feature; treat unhedged rates as a bug.
- English only. Best with real numbers in the prompt; vague prompts get frameworks, not magic.
Training details
- LoRA r=16, α=32, dropout 0.05, 2 epochs (~3.8M tokens/epoch), supervised fine-tuning on Fireworks AI
- Final training loss (EMA): 1.08
- Trained in non-thinking chat format
