rdubwiley commited on
Commit
1436471
Β·
verified Β·
1 Parent(s): 430fa0c

Upload README.md with huggingface_hub

Browse files
Files changed (1) hide show
  1. README.md +98 -0
README.md ADDED
@@ -0,0 +1,98 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ---
2
+ license: gemma
3
+ base_model: google/gemma-4-E4B-it
4
+ datasets:
5
+ - build-small-hackathon/agenda-parser-tool-traces
6
+ library_name: gguf
7
+ pipeline_tag: text-generation
8
+ tags:
9
+ - gguf
10
+ - llama.cpp
11
+ - agent
12
+ - agentic
13
+ - tool-use
14
+ - function-calling
15
+ - react
16
+ - local-government
17
+ - agenda-parser
18
+ ---
19
+
20
+ # agenda-parser-lite
21
+
22
+ **A Gemma 4 E4B fine-tune that drives the [Agenda Parser](https://huggingface.co/rdubwiley) agents' tool-calling loop** β€” quantized to **Q8_0** GGUF for [llama.cpp](https://github.com/ggml-org/llama.cpp).
23
+
24
+ This is the **lite** member of a three-model family (~4B (effective) params) fine-tuned to follow a strict ReAct *single-JSON-action* protocol over public-meeting agenda packets and local-government legal questions. It is **not** a general chat assistant.
25
+
26
+ | | |
27
+ |---|---|
28
+ | **Base model** | [`google/gemma-4-E4B-it`](https://huggingface.co/google/gemma-4-E4B-it) (~4B (effective)) |
29
+ | **Method** | LoRA SFT β†’ merged β†’ Q8_0 GGUF |
30
+ | **Training data** | [`build-small-hackathon/agenda-parser-tool-traces`](https://huggingface.co/datasets/build-small-hackathon/agenda-parser-tool-traces) (`filtered` config) |
31
+ | **LoRA adapter** | [`build-small-hackathon/agenda-parser-lite-lora`](https://huggingface.co/build-small-hackathon/agenda-parser-lite-lora) |
32
+ | **License** | [Gemma Terms of Use](https://ai.google.dev/gemma/terms) |
33
+
34
+ ## What it does β€” the agent protocol
35
+
36
+ The model is trained to act as a ReAct agent that calls one tool at a time. Each step it must emit **a single JSON object and nothing else**:
37
+
38
+ ```json
39
+ {"thought": "<one short sentence>", "tool": "<tool name>", "args": { ... }}
40
+ ```
41
+
42
+ It reads the tool's result, then emits the next action, until it calls `final_answer`. It is trained on **two toolkits**:
43
+
44
+ - **Agenda packet research** β€” `list_agenda_items`, `get_item_text`, `search_packet` (semantic), `find_text` (exact), `summarize`, `report`, `final_answer`. Answers questions about an uploaded agenda packet (what an item approves, costs, dates, which items mention X, briefings).
45
+ - **Cornell LII legal research** (scoped to **local-government** law) β€” `search_regulations`, `resolve_cfr`/`resolve_usc`, `mcl_find`/`mcl_search`/`mcl_text`/`mcl_outline`/`mcl_lookup`, etc. Answers questions on Open Meetings Act, FOIA, municipal budgeting/taxation, zoning, ethics, and the Michigan statutes governing local governments β€” citing CFR/USC and reading Michigan MCL text.
46
+
47
+ ## How it was trained
48
+
49
+ 1. **Teacher traces.** Two strong teacher models β€” **Kimi k2.6** and **DeepSeek 4 pro** (via [OpenCode Go](https://opencode.ai)) β€” drove the *real* agent loop over 11 public agenda packets and a set of local-government legal questions. Tools executed live, so every observation is grounded.
50
+ 2. **Judge filtering.** Each completed trace's final answer was scored for **faithfulness** against the text the agent actually retrieved (fast OpenCode-Go judge); only high-faithfulness traces were kept. One accepted agent step = one training example.
51
+ 3. **SFT.** LoRA on the base's attention projections (q/k/v/o), 3 epochs over **974 examples** (held-out packet excluded β€” see Evaluation), full-sequence loss (the Gemma chat template lacks `{% generation %}` markers for assistant-only loss), bf16 + gradient checkpointing, then **merged** and converted to GGUF.
52
+
53
+ | hyperparameter | value |
54
+ |---|---|
55
+ | LoRA rank / Ξ± / dropout | 32 / 64 / 0.05 |
56
+ | target modules | attention + MLP `q,k,v,o,gate,up,down_proj` (auto-detected real `nn.Linear`) |
57
+ | epochs | 3 |
58
+ | learning rate | 2e-4 (cosine, 3% warmup) |
59
+ | batch Γ— grad-accum | 2 Γ— 8 |
60
+ | max sequence length | 4096 |
61
+ | precision / GPU | bf16 / A100-80GB |
62
+ | final in-training token accuracy | ~0.99 |
63
+
64
+ The full training/generation pipeline (trace capture, judge, LoRA, merge, GGUF) is reproducible from the dataset card.
65
+
66
+ ## Training data & provenance
67
+
68
+ Built from [`build-small-hackathon/agenda-parser-tool-traces`](https://huggingface.co/datasets/build-small-hackathon/agenda-parser-tool-traces): per-step `{system, user, assistant}` chat examples whose `system` message is the deployed agent's exact tool catalog + protocol. The source agenda packets are published in that dataset's [`source_packets/`](https://huggingface.co/datasets/build-small-hackathon/agenda-parser-tool-traces/tree/main/source_packets) folder; each trace row links to its source by `meta.unit_id`. Distilled from third-party teacher models (their terms may apply to generated text); source PDFs are public meeting records.
69
+
70
+ ## Sibling models
71
+
72
+ | model | base | quant | this card |
73
+ |---|---|---|:---:|
74
+ | [`agenda-parser-lite`](https://huggingface.co/build-small-hackathon/agenda-parser-lite) | Gemma 4 E4B | Q8_0 | βœ… |
75
+ | [`agenda-parser-medium`](https://huggingface.co/build-small-hackathon/agenda-parser-medium) | Gemma 4 26B-A4B (MoE) | Q4_K_M | |
76
+ | [`agenda-parser-high`](https://huggingface.co/build-small-hackathon/agenda-parser-high) | Gemma 4 26B-A4B (MoE) | Q8_0 | |
77
+
78
+ (`lite` = fast/small; `medium` = balanced; `high` = best quality. `medium`/`high` share the 26B-A4B base, fine-tuned independently and shipped at different quants.)
79
+
80
+ ## Evaluation
81
+
82
+ One agenda packet (`oakland-1570`) and a held-out task seed are **excluded from training** and reserved for a base-vs-fine-tuned A/B benchmark (objective protocol metrics β€” valid-JSON-action rate, clean-`final_answer` rate, tool-error rate β€” plus an LLM-judge of answer faithfulness, absolute and pairwise). See the project repo's `sft/eval.py`.
83
+
84
+ ## Run
85
+
86
+ ```bash
87
+ huggingface-cli download build-small-hackathon/agenda-parser-lite agenda-parser-lite-Q8_0.gguf
88
+ # --jinja loads the embedded chat/tool template
89
+ llama-server -m agenda-parser-lite-Q8_0.gguf --jinja
90
+ ```
91
+
92
+ The model expects the agent's system prompt (tool catalog + protocol) and replies with one JSON action per turn.
93
+
94
+ ## Intended use & limitations
95
+
96
+ - **Intended:** the in-process llama.cpp backend for the Agenda Parser agents over uploaded agenda PDFs and local-government legal lookups.
97
+ - **Out of scope:** general-purpose chat; non-tool-calling use; legal/financial advice. Always verify answers against the cited source packet / statute.
98
+ - Inherits the [Gemma Terms of Use](https://ai.google.dev/gemma/terms) and use restrictions.