FrontiersMind/Nandi-Mini-150M-Tool-Calling

🤗 Hugging Face sourcetext-generationapache-2.0153M params307 MBsafetensors✓ 2 checksumsupdated today
Submit in one command

Run it next to your model folder. It makes the torrent, checks your files against Hugging Face, and submits it. You just start seeding and paste your key from your account. It only reads your files and never changes them. Read the script first if you like.

curl -fsSL https://pirateface.co/package.sh | bash -s -- --repo FrontiersMind/Nandi-Mini-150M-Tool-Calling ./model-folder
Needs a seeder →

Nandi-Mini-150M-Tool-Calling

Introduction

Nandi-Mini-150M-Tool-Calling is a lightweight, single-turn specialized model designed to accurately interpret user queries and generate precise tool calls in one step, enabling efficient and reliable function execution

📝 Upcoming Releases & Roadmap

We’re just getting started with the Nandi series 🚀

  • Nandi-Mini-150M-Base — HF-Link
  • Nandi-Mini-150M-Instruct — HF-Link
  • Nandi-Mini-500M (Base + Instruct) — Pre-Training Going On
  • Nandi-Mini-1B (Base + Instruct) — Pre-Training Going On

📢 Blogs & technical deep-dives coming soon, where we’ll share:

  • Architecture decisions and design trade-offs
  • Training insights and dataset composition
  • Benchmarks and real-world applications

Stay tuned!

🚀 Usage

!pip install transformers=='5.4.0'

from transformers import AutoTokenizer, AutoModelForCausalLM
import torch
import json

model_name = "FrontiersMind/Nandi-Mini-150M-Tool-Calling"

device = "cuda" if torch.cuda.is_available() else "cpu"

tokenizer = AutoTokenizer.from_pretrained(model_name, trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained(
    model_name,
    trust_remote_code=True,
    dtype=torch.bfloat16
).to(device).eval()

def call_nandi_tool_calling(user_prompt,tools):

    tools = json.dumps(tools, indent=4)
    system_prompt = f"You are a helpful assistant with access to the following tools - You need to choose appropriate tool for given query, you also need to add appropriate parameters. Do not choose wrong tools, if user query does not belong to a tool. <|tools_start|>\n{tools}\n<|tools_end|>"
    
    messages = [
        {"role": "system", "content": system_prompt},
        {"role": "user", "content": user_prompt},
    ]
    
    prompt = tokenizer.apply_chat_template(messages, tokenize=False)
    inputs = tokenizer(prompt, return_tensors="pt").to(model.device)
    
    generated_ids = model.generate(
      **inputs,
      max_new_tokens=500,
      do_sample=True,
      temperature=0.3,
      top_p=0.90,
      top_k=20,
      repetition_penalty=1.1,
    )
    
    generated_ids = [
      output_ids[len(input_ids):] for input_ids, output_ids in zip(inputs.input_ids, generated_ids)
    ]
    
    response = tokenizer.batch_decode(generated_ids, skip_special_tokens=True)[0]

    return response

# Put your query here
user_prompt = "Get weather in Delhi"
# Update the tools according to your use case
tools = [
  {
    "name": "get_weather",
    "description": "Get current weather for a city",
    "parameters": {
      "city": {
        "type": "str",
        "description": "City name"
      }
    }
  },
  {
    "name": "get_time",
    "description": "Get current time for a city",
    "parameters": {
      "city": {
        "type": "str",
        "description": "City name"
      }
    }
  }
]

print(call_nandi_tool_calling(user_prompt,tools))

📬 Feedback & Suggestions

We’d love to hear your thoughts, feedback, and ideas!