CoolFace
Modelpublic

applexml/kimi-k2-poc2

sourceHugging Faceapache-2.0updated 7mo agoView on Hugging Face
0likes74downloads
Model Card

🧠 NanoAgent β€” 135M Parameter Agentic LLM

NanoAgent is a compact 135M parameter, 8k context-length language model trained to perform tool calls and generate responses based on tool outputs. Despite its small size (~135 MB in 8-bit precision), it’s optimized for agentic use cases and runs easily on personal devices.

Github: NanoAgent

Inference resource: link


✨ Features

  • β€”πŸ§° Tool Calling β€” understands and responds with structured outputs from tool calls.
  • β€”πŸ§­ Instruction Following β€” strong instruction following abilities.
  • β€”πŸ§  Basic Reasoning β€” handles lightweight reasoning and ReAct-style interactions.
  • β€”βš‘ Lightweight β€” runs on local hardware with minimal resources.

πŸ§ͺ Training Overview

Base model: `SmolLM2-135M-Instruct` Fine-tuning method: Dynamic Fine-Tuning (DFT) Hardware: Apple Mac M1 (16 GB Unified Memory) using MLX.

πŸ“š Datasets Used

  • β€”microsoft/orca-agentinstruct-1M-v1 β€” agentic tasks, RAG answers, classification
  • β€”microsoft/orca-math-word-problems-200k β€” lightweight reasoning
  • β€”allenai/tulu-3-sft-personas-instruction-following β€” instruction following
  • β€”xingyaoww/code-act β€” ReAct style reasoning and action
  • β€”m-a-p/Code-Feedback β€” alignment via feedback
  • β€”HuggingFaceTB/smoltalk + /apigen β€” tool calling stabilization
  • β€”weijie210/gsm8k_decomposed β€” question decomposition
  • β€”Locutusque/function-calling-chatml β€” tool call response structure

⚠️ Disclaimer

This is a beta model.

  • β€”It may produce incorrect or incomplete outputs.
  • β€”Tool call execution is basic and can fail in some cases.
  • β€”Intended for research and experimentation only β€” not production use.

🧭 Roadmap

  • β€”βœ… Initial release with DFT fine-tuning
  • β€”πŸ§ͺ Benchmarking on agentic tasks
  • β€”~~πŸ”¬ Experimenting with GRPO for tool calling (failed)~~
  • β€”πŸ§  Weight merging experiments for improved performance
  • β€”Add more tool calling dataset

πŸ“₯ Model Size

  • β€”135M parameters
  • β€”~135 MB in 8-bit precision
  • β€”8k context length

⚑ Example Usage

python
from transformers import AutoModelForCausalLM, AutoTokenizer

model_name = "quwsarohi/NanoAgent-135M"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(model_name)

def inference(messages, max_new_tokens=256, temperature=0.3, min_p=0.15, **kwargs):
    input_text = tokenizer.apply_chat_template(
        messages, tokenize=False, add_generation_prompt=True
    )
    inputs = tokenizer.encode(input_text, return_tensors="pt")
    outputs = model.generate(
        inputs,
        max_new_tokens=max_new_tokens,
        do_sample=True,
        min_p=0.15,
        temperature=temperature,
        **kwargs
    )
    return tokenizer.decode(outputs[0][inputs.shape[1] :], skip_special_tokens=True)

messages = [{"role": "user", "content": "Hi! Do you have a name?"}]
print(inference(messages))

Use the following template for tool calling:

python
TOOL_TEMPLATE = """You are a helpful AI assistant. You have a set of possible functions/tools inside <tools></tools> tags. 
Based on question, you may need to make one or more function/tool calls to answer user.

You have access to the following tools/functions:
<tools>{tools}</tools>

For each function call, return a JSON list object with function name and arguments within <tool_call></tool_call> tags."""

Sample tool call definition:

json
{
  "name": "web_search",
  "description": "Performs a web search for a query and returns a string of the top search results formatted as markdown with titles, links, and descriptions.",
  "parameters": {
    "type": "object",
    "properties": {
      "query": {
        "type": "string",
        "description": "The search query to perform.",
      }
    },
    "required": ["query"],
  },
}