--- license: gemma base_model: mlx-community/gemma-4-12B-it-bf16 base_model_relation: finetune library_name: mlx pipeline_tag: text-generation inference: false language: - en metrics: - accuracy tags: - mlx - gemma - gemma4 - finance - financial-reasoning - crypto - grpo - fin-r1 - reasoning model-index: - name: gemma-4-12b-fin-grpo-v4 results: - task: type: text-generation name: Financial Reasoning (FinQA) dataset: type: ChanceFocus/flare-finqa name: FinQA — FLARE test (N=100) metrics: - type: accuracy value: 64.0 name: accuracy - task: type: text-generation name: Conversational Financial Reasoning (ConvFinQA) dataset: type: ChanceFocus/flare-convfinqa name: ConvFinQA — FLARE test (N=100) metrics: - type: accuracy value: 60.0 name: accuracy --- # gemma-4-12b-fin-grpo-v4 A **financial-reasoning + crypto** model that reproduces the **Fin-R1** recipe (*[Fin-R1](https://arxiv.org/abs/2503.16252)*: SFT → GRPO on financial chain-of-thought data) on a **larger base** — **Gemma 4 12B-it** — trained **locally on Apple Silicon** with [`mlx-lm-lora`](https://github.com/Goekdeniz-Guelmez/mlx-lm-lora). It reasons step-by-step inside ` ` tags, then gives a clear final answer. Coverage spans the whole investment sector — fiat markets, equities, derivatives, macro, accounting, and **crypto / DeFi / trading (SMC, ICT, FVG, etc.)**. - **Base model:** [`mlx-community/gemma-4-12B-it-bf16`](https://huggingface.co/mlx-community/gemma-4-12B-it-bf16) (← `google/gemma-4-12b-it`) - **Method:** LoRA SFT (rank 16) → GRPO (Fin-R1 stage 2), then fused to full bf16 weights - **Params / dtype:** ~12B, bf16 (~22 GB) - **Framework:** MLX (`mlx-lm`). `model_type: gemma4`. ## Training recipe | Stage | Data | Notes | |-------|------|-------| | **SFT (v4)** | ~30k examples: financial CoT (Fino1 FinQA+CoT, fin-alpaca-r1, Finance-Instruct, TAT-QA CoT), crypto trading, an industry/security corpus, and FalseReject de-refusal | broad + balanced | | **GRPO** | 12k verifiable items (FinQA-style numerics + crypto BUY/HOLD/SELL labels) | rewards: `think_format` + `numeric_or_label_accuracy`, 200 iters | ## Evaluation FinQA / ConvFinQA accuracy (N=100, FLARE test split): | Model | FinQA | ConvFinQA | |-------|:-----:|:---------:| | base `gemma-4-12B-it` | 27.5% | — (often refuses) | | SFT v4 | 61% | 59% | | **this model (SFT→GRPO v4)** | **64%** | **60%** | | *Fin-R1 (paper reference)* | *76%* | *85%* | GRPO added **+3 / +1** over SFT, matching the paper's reported lift. De-refusal eval: 100% of legitimate finance/investment questions answered, illegitimate ones still refused. > The model is intentionally **broad** rather than benchmark-maximized: it trades a few > FinQA points versus a narrow FinQA-tuned model (Fin-R1) for crypto/trading coverage that > Fin-R1 does not have (e.g. Fin-R1 does not know SMC/ICT terms like *Fair Value Gap*). ## Usage (MLX) ```python from mlx_lm import load, generate model, tokenizer = load("z0n3x/gemma-4-12b-fin-grpo-v4") system = ("You are a financial reasoning assistant covering the whole investment " "sector — fiat markets, equities, derivatives, macro, accounting, and " "crypto/DeFi. Reason step by step inside tags, then give " "a clear, correct final answer.") messages = [ {"role": "system", "content": system}, {"role": "user", "content": "What is a Fair Value Gap (FVG) and how do traders use it?"}, ] prompt = tokenizer.apply_chat_template(messages, add_generation_prompt=True) print(generate(model, tokenizer, prompt=prompt, max_tokens=800)) ``` ### Thinking / reasoning The chat template **defaults to a reasoning system prompt**, so the model produces `` then the answer **out of the box** — you don't need to pass a system message (pass your own to override it). The reasoning markers are `` / `` (this model was trained on those tags, not Gemma's native `<|channel>thought` format). - **LM Studio:** set the reasoning / "thinking" section tags to `` (start) and `` (end) to fold the chain-of-thought into a collapsible block. - **Text-only:** the base Gemma 4 vision/audio weights were dropped during fine-tuning, so this checkpoint is **not multimodal** — by design (Fin-R1 is a text recipe). > **Note on loading:** these are brand-new Gemma 4 "unified" weights. With some `mlx-lm` > versions you may need a small load-time shim that (a) resolves `model_type: gemma4` and > (b) drops unused multimodal tensors. This is a **text-only** checkpoint. ## Limitations & disclosures - **Not financial advice.** Outputs are model-generated and can be wrong; verify numbers and do your own research before acting on any market view. - **De-refusal calibration.** Trained (with the FalseReject dataset) to answer legitimate finance/investment questions candidly instead of over-refusing. The boundary kept during training was **not** optimizing for fraud, money-laundering, or market-manipulation use. - **Includes a private corpus.** Part of the SFT mix is the author's own industry/security ("OAK") corpus; outputs may reflect its style/content. - **MLX checkpoint.** Built and tested with `mlx-lm`; not validated under `transformers`. ## License This is a derivative of Google **Gemma** and is distributed under the [**Gemma Terms of Use**](https://ai.google.dev/gemma/terms). By using these weights you agree to those terms and to Google's [Prohibited Use Policy](https://ai.google.dev/gemma/prohibited_use_policy). ## Citation Built following the Fin-R1 recipe: ```bibtex @article{liu2025finr1, title={Fin-R1: A Large Language Model for Financial Reasoning through Reinforcement Learning}, author={Liu, Zhaowei and others}, journal={arXiv preprint arXiv:2503.16252}, year={2025} } ```