Text Generation
PEFT
Safetensors
English
agentic
tool-calling
function-calling
lora
qlora
unsloth
elicitation
rag
conversational
Eval Results (legacy)
Instructions to use 79Labs/astraforge-70b-TCR with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- PEFT
How to use 79Labs/astraforge-70b-TCR with PEFT:
from peft import PeftModel from transformers import AutoModelForCausalLM base_model = AutoModelForCausalLM.from_pretrained("unsloth/Llama-3.3-70B-Instruct-bnb-4bit") model = PeftModel.from_pretrained(base_model, "79Labs/astraforge-70b-TCR") - Notebooks
- Google Colab
- Kaggle
- Local Apps Settings
- Unsloth Studio
How to use 79Labs/astraforge-70b-TCR with Unsloth Studio:
Install Unsloth Studio (macOS, Linux, WSL)
curl -fsSL https://unsloth.ai/install.sh | sh # Run unsloth studio unsloth studio -H 0.0.0.0 -p 8888 # Then open http://localhost:8888 in your browser # Search for 79Labs/astraforge-70b-TCR to start chatting
Install Unsloth Studio (Windows)
irm https://unsloth.ai/install.ps1 | iex # Run unsloth studio unsloth studio -H 0.0.0.0 -p 8888 # Then open http://localhost:8888 in your browser # Search for 79Labs/astraforge-70b-TCR to start chatting
Using HuggingFace Spaces for Unsloth
# No setup required # Open https://huggingface.co/spaces/unsloth/studio in your browser # Search for 79Labs/astraforge-70b-TCR to start chatting
Load model with FastModel
pip install unsloth from unsloth import FastModel model, tokenizer = FastModel.from_pretrained( model_name="79Labs/astraforge-70b-TCR", max_seq_length=2048, )
| license: llama3.3 | |
| base_model: meta-llama/Llama-3.3-70B-Instruct | |
| library_name: peft | |
| pipeline_tag: text-generation | |
| tags: | |
| - agentic | |
| - tool-calling | |
| - function-calling | |
| - lora | |
| - qlora | |
| - unsloth | |
| - elicitation | |
| - rag | |
| language: | |
| - en | |
| model-index: | |
| - name: astraforge-70b-TCR | |
| results: | |
| - task: | |
| type: text-generation | |
| name: Agentic tool-calling | |
| dataset: | |
| type: in-house-agentic-benchmark | |
| name: 79Labs in-house agentic benchmark (N=100) | |
| metrics: | |
| - type: accuracy | |
| name: Tool-correct (right tool, schema-valid call, ≤2 turns) | |
| value: 0.81 | |
| - type: accuracy | |
| name: Confirmed-first (asks before acting) | |
| value: 0.94 | |
| - type: accuracy | |
| name: GSM8K (reasoning control, exact-match) | |
| value: 0.93 | |
| # astraforge-70b-TCR — Tool-Calling & Retrieval Agent (LoRA on Llama-3.3-70B) | |
| **Developed by [79Labs](https://huggingface.co/79Labs) · Version 1.0.0 · [Changelog](./CHANGELOG.md)** | |
| `astraforge-70b-TCR` (Tool-Calling / Retrieval) is a LoRA adapter for | |
| **`meta-llama/Llama-3.3-70B-Instruct`** specialised for **reliable agentic tool use**: retrieving the | |
| right tool from a large catalog (RAG), **eliciting missing parameters**, **confirming before acting**, | |
| emitting schema-valid calls, and staying grounded — while **preserving the base model's reasoning**. It | |
| is *not* a general capability upgrade; it is a focused, measurable improvement on the agentic behaviours | |
| that make a tool-using assistant trustworthy in production. | |
| - **Base:** Llama-3.3-70B-Instruct (4-bit QLoRA) | |
| - **Adapter:** LoRA (r=16), ~828 MB | |
| - **Training:** continued SFT on **1,006,113** agentic examples; eval-gated early stop (best val loss ≈ 0.1198) | |
| - **Serving:** load the adapter with PEFT / Unsloth on the base model (see *Usage*) | |
| > **What the evidence supports (and what it doesn't).** On an in-house agentic benchmark this model | |
| > **matches the base on reasoning** (GSM8K) while **substantially improving tool-calling correctness** | |
| > and learning a **confirm-before-call discipline the base lacks**. The full results table, run log, and | |
| > machine-readable scores are included in [`benchmarks/`](./benchmarks) so every number here is | |
| > verifiable. Sample size is stated (N=100); treat small-N differences as indicative, not leaderboard-grade. | |
| --- | |
| ## What it does | |
| Trained across **35 business domains** (sales/CRM, finance, support, logistics, healthcare, HR, IT, …) | |
| on these agentic behaviours: | |
| - **Tool calling** in OpenAI function-call JSON — the right tool, schema-valid arguments. | |
| - **Elicitation** — when required parameters are missing, it *asks* instead of hallucinating them. | |
| - **Confirm-before-call** — for consequential actions it asks the user to confirm, then calls. | |
| - **Multi-document RAG** — pick the relevant document, ground the answer, cite it. | |
| - **ReAct / planning** — reason → act → observe chains; plan before acting. | |
| - **Guardrails** — never call an undeclared tool; refuse when out of scope / unsure. | |
| - **Analytics reasoning** — arithmetic + stats (median / variance / %-change / forecast) over supplied data. | |
| ## Intended use & scope | |
| **Use it for** building tool-using / function-calling agents where reliability of the *agentic protocol* | |
| (right tool, ask-then-act, confirm, don't hallucinate tools) matters — especially private / on-prem | |
| deployments where a hosted frontier API isn't an option. | |
| **Do not expect** frontier general intelligence. This is a 70B open model specialised on a narrow skill | |
| set. For open-ended coding or research, use a larger / code-specialised model. | |
| --- | |
| ## Evaluation | |
| Comparable open models under **identical settings**: 4K context (`max_seq_len=4096`, also AstraForge's | |
| trained/served window), greedy decoding, 2048-token budget so reasoning models finish, answer extracted | |
| after any `</think>` and from `\boxed{}` where present, **N = 100**. Each model is prompted in **its own | |
| native tool format** (its tokenizer chat template) so none is penalised for a foreign format. | |
| | Model | Reasoning (GSM8K) | Tool-correct | Confirmed-first | | |
| |---|---|---|---| | |
| | **astraforge-70b-TCR (this model)** | **0.93** | **0.81** | **0.94** | | |
| | Llama-3.3-70B-Instruct (base) | 0.93 | 0.54 | 0.00 | | |
| | Qwen3-32B | 0.80 | 0.79 | 0.02 | | |
| | gpt-oss-120b | 0.87 | 0.43 | 0.05 | | |
| | gpt-oss-20b | 0.87 | 0.46 | 0.06 | | |
| | Gemma-4-31B-it | — | — | — *(excluded: generation hang under Unsloth; did not complete)* | | |
| **Δ vs base:** reasoning **+0.00**, tool-correct **+0.27**, confirmed-first **+0.94**. | |
| Evidence: [`benchmarks/nway_results.json`](./benchmarks/nway_results.json), | |
| [`benchmarks/nway_run.log`](./benchmarks/nway_run.log), | |
| methodology in [`benchmarks/BENCHMARK_METHODOLOGY.md`](./benchmarks/BENCHMARK_METHODOLOGY.md). | |
| **Reading it honestly:** | |
| - **Confirmed-first favours this model by design — that is the point, not a trick.** The other models | |
| were never trained/prompted to confirm before acting, so their score is near zero. The claim is | |
| *"this model learned a confirm-before-call protocol,"* **not** *"other models are bad at agents."* If | |
| your application doesn't want a confirmation step, weight this metric accordingly. | |
| - **Tool-correct is the fairer head-to-head:** whether the model ultimately emits a valid call to the | |
| right tool. The +0.27 vs base reflects genuine specialisation. | |
| - **Reasoning is a control, not a headline** — the goal was *no regression*; GSM8K parity shows the | |
| finetune didn't lobotomise general ability. | |
| - **N = 100 is indicative, not leaderboard-grade.** Treat a few points as noise. | |
| > Additional standardized external benchmarks are in progress and will be added in a future revision once | |
| > validated end-to-end. | |
| --- | |
| ## Usage | |
| ```python | |
| from peft import PeftModel | |
| from transformers import AutoModelForCausalLM, AutoTokenizer | |
| base = "meta-llama/Llama-3.3-70B-Instruct" | |
| model = AutoModelForCausalLM.from_pretrained(base, device_map="auto", load_in_4bit=True) | |
| model = PeftModel.from_pretrained(model, "79Labs/astraforge-70b-TCR") | |
| tok = AutoTokenizer.from_pretrained("79Labs/astraforge-70b-TCR") | |
| tools = [{ | |
| "type": "function", | |
| "function": { | |
| "name": "book_flight", | |
| "description": "Book a flight for a traveler.", | |
| "parameters": {"type": "object", | |
| "properties": {"traveler_name": {"type": "string"}, "origin": {"type": "string"}, | |
| "destination": {"type": "string"}, "depart_date": {"type": "string"}}, | |
| "required": ["traveler_name", "origin", "destination", "depart_date"]}}}] | |
| msgs = [{"role": "user", "content": "Book Ada a flight from SFO to JFK on 2026-08-01."}] | |
| ids = tok.apply_chat_template(msgs, tools=tools, add_generation_prompt=True, return_tensors="pt").to(model.device) | |
| print(tok.decode(model.generate(input_ids=ids, max_new_tokens=256)[0][ids.shape[1]:], skip_special_tokens=True)) | |
| ``` | |
| > With Unsloth: `FastLanguageModel.from_pretrained("79Labs/astraforge-70b-TCR", load_in_4bit=True)`. | |
| --- | |
| ## Training | |
| - **Data:** 1,006,113 deduplicated agentic examples, **self-verified by construction** (every positive | |
| passes an oracle; hard negatives fail it) across 35 domains + tool catalogs, continuous | |
| elicitation → confirmation → call, multi-doc RAG, ReAct, plans, guardrails, and real + synthetic | |
| reasoning. *(Training data is not distributed with this repo.)* | |
| - **Method:** continued SFT (warm-started from a prior SFT champion), 4-bit QLoRA (r=16), | |
| `max_seq_len=4096`, LR `1e-5`, effective batch 16, Unsloth gradient checkpointing. | |
| - **Governor:** held-out validation with early stopping (`load_best_model_at_end`) — stopped at | |
| convergence, best checkpoint at val loss ≈ **0.1198**. | |
| - **Hardware:** single NVIDIA GB10 (Grace-Blackwell, 128 GB unified memory). | |
| ## Limitations & risks | |
| - **Context: 4K trained / 128K max.** The base supports 128K, so it *runs* at any context ≤128K, but | |
| the agentic behaviours were reinforced within ~4K — keep the working context (system prompt + | |
| retrieved tools + dialogue) within ~4K for best fidelity. Pairs naturally with tool-RAG. | |
| - 70B open model — below frontier on general tasks; specialised, not general-purpose. | |
| - Synthetic eval tools — real deployments must wire real executors and **keep confirm-before-call and | |
| schema-validation guardrails in the harness**, not rely on the model alone. | |
| - Confirmation / elicitation phrasing is English-centric. Inherits base-model biases. | |
| ## License | |
| Governed by the **Llama 3.3 Community License** (inherited from the base model). | |
| ## Citation | |
| ```bibtex | |
| @misc{astraforge70b_tcr_2026, | |
| title = {astraforge-70b-TCR: Tool-Calling and Retrieval Agent (LoRA on Llama-3.3-70B)}, | |
| author = {79Labs}, | |
| year = {2026}, | |
| note = {Continued SFT on 1M agentic examples; eval-gated. Benchmark harness + raw evidence included.}, | |
| url = {https://huggingface.co/79Labs/astraforge-70b-TCR} | |
| } | |
| ``` | |