Dhee-Pravega v3

Agentic tool-calling model for 18 languages, fine-tuned from google/gemma-4-E2B-it and merged to bf16.

What v3 changes

Accuracy when the model is offered numerous choices of tools.

v1 and v2 were trained on a corpus that presents one tool per conversation and fills every argument slot in 92.2% of its calls. A model trained that way is never given a choice it can get wrong, so it learns to call whatever it is shown

  • all tools or none. v3 is trained instead on our own 18-language corpus, where 68.8% of turns offer a genuine choice among several tools and 12.3% of conversations correctly make no call at all.

The schema diversity behind that: 16,037 distinct tool schemas, against 1,071 in the corpus v1/v2 saw.

v3 also introduces language switching (change_language) and translation prompts, neither of which existed in any earlier Pravega training data.

Evaluation

720 held-out conversations, 40 per language across all 18, scored against the reference tool call:

metric v3
tool call emitted when expected 0.9847
correct tool selected 0.9653
all arguments correct 0.7111

Read the tool-selection number in context: it is measured on a test set where most turns present several candidate tools, which is a materially harder task than the single-tool setting earlier versions were scored in. The two are not directly comparable.

Usage

Tools are rendered with Gemma-4's own chat template - pass them structured, not as prose in the system prompt.

from transformers import AutoModelForCausalLM, AutoTokenizer

tok = AutoTokenizer.from_pretrained("dheeyantra/dhee-pravega")
model = AutoModelForCausalLM.from_pretrained("dheeyantra/dhee-pravega",
                                             dtype="bfloat16", device_map="auto")

messages = [{"role": "user", "content": "Mumbai ka mausam kaisa hai?"}]
tools = [{"type": "function", "function": {
    "name": "get_weather",
    "description": "Current weather for a city",
    "parameters": {"type": "object",
                   "properties": {"city": {"type": "string"}},
                   "required": ["city"]}}}]

ids = tok.apply_chat_template(messages, tools=tools,
                              add_generation_prompt=True, return_tensors="pt")
print(tok.decode(model.generate(ids.to(model.device), max_new_tokens=128)[0]))

Training

base google/gemma-4-E2B-it
method QLoRA (r=16, alpha=32) on the text decoder, merged to bf16
corpus 181,191 conversations / 18 languages
schedule 11,472 steps, effective batch 16, max_seq_len 1536, lr 5e-5
continues from the v2 adapter, rather than the base

These weights are the final checkpoint. The best checkpoint by held-out loss was step 9,000 (0.9654 against 0.9664 at the end) - a noise-level difference, and the evaluation above was run on the final weights, so the reported numbers describe exactly what is published here.

Licence

Research use only. Dhee-Pravega is released under the Dhee Research-Only Licence v1.0: academic research, evaluation, benchmarking, red-teaming, teaching and personal experimentation are permitted; commercial use is not. Commercial licences are available from Dheeyantra Research Labs on request.

Two sets of terms apply, not one. This model is a fine-tune of Google's Gemma, so the Gemma Terms of Use and the Gemma Prohibited Use Policy continue to apply in addition to ours. Nothing in our licence grants rights Google has not granted. Where ours is narrower, ours controls for Dheeyantra's contribution; where Gemma's is narrower, Gemma's controls.

If you redistribute the model or anything derived from it, you must pass both sets of terms along.

Earlier versions. Revisions tagged v2 and earlier were published under license: gemma and remain available under the terms in force when they were distributed. This licence applies from v3 onward.

Downloads last month
534
Safetensors
Model size
5B params
Tensor type
BF16
·
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Model tree for dheeyantra/dhee-pravega

Finetuned
(346)
this model