| --- |
| language: |
| - en |
| license: gemma |
| library_name: transformers |
| tags: |
| - function-calling |
| - multi-agent |
| - router |
| - gemma |
| - fine-tuned |
| - customer-support |
| base_model: google/functiongemma-270m-it |
| datasets: |
| - bhaiyahnsingh45/multiagent-router-finetuning |
| metrics: |
| - accuracy |
| pipeline_tag: text-generation |
| widget: |
| - text: "My app keeps crashing when I upload large files" |
| example_title: "Technical Issue" |
| - text: "I need a refund for my subscription" |
| example_title: "Billing Request" |
| - text: "What integrations do you support?" |
| example_title: "Product Info" |
| --- |
| |
| # Multi-Agent Router (Fine-tuned FunctionGemma 270M) |
|
|
| <div align="center"> |
| <img src="https://huggingface.co/datasets/huggingface/brand-assets/resolve/main/hf-logo.png" alt="Hugging Face" width="100"/> |
|
|
| **Intelligent routing model for multi-agent customer support systems** |
|
|
| [](https://ai.google.dev/gemma/terms) |
| [](https://huggingface.co/google/functiongemma-270m-it) |
| [](https://huggingface.co/datasets/bhaiyahnsingh45/multiagent-router-finetuning) |
| </div> |
|
|
| ## ๐ Model Description |
|
|
| This model is a **fine-tuned version of Google's FunctionGemma 270M** specifically trained for intelligent routing in multi-agent customer support systems. It learns to: |
|
|
| 1. **Classify user intent** from natural language queries |
| 2. **Route to the appropriate specialist agent** |
| 3. **Extract relevant parameters** (priority, urgency, category) |
|
|
| ### ๐ค Supported Agents |
|
|
| The model routes queries to three specialized agents: |
|
|
| | Agent | Handles | Parameters | |
| |-------|---------|------------| |
| | ๐ง **Technical Support** | Crashes, bugs, API errors, authentication issues | `issue_type`, `priority` | |
| | ๐ฐ **Billing** | Payments, refunds, subscriptions, invoices | `request_type`, `urgency` | |
| | ๐ **Product Info** | Features, integrations, plans, compliance | `query_type`, `category` | |
|
|
| ## ๐ฏ Training Details |
|
|
| ### Base Model |
| - **Model**: `google/functiongemma-270m-it` |
| - **Parameters**: 270 Million |
| - **Architecture**: Gemma with function calling capabilities |
|
|
| ### Fine-tuning Configuration |
| - **Training Samples**: 92 |
| - **Test Samples**: 23 |
| - **Epochs**: 15 |
| - **Batch Size**: 4 |
| - **Learning Rate**: 5e-05 |
| - **GPU**: NVIDIA T4 (Google Colab Free Tier) |
| - **Training Time**: ~5-8 minutes |
|
|
| ### Dataset |
| Fine-tuned on [bhaiyahnsingh45/multiagent-router-finetuning](https://huggingface.co/datasets/bhaiyahnsingh45/multiagent-router-finetuning) containing 85 realistic customer support queries across three categories. |
|
|
| ## ๐ Performance |
|
|
| | Metric | Before Training | After Training | Improvement | |
| |--------|----------------|----------------|-------------| |
| | **Accuracy** | 4.3% | 82.6% | **+78.3%** | |
| | **Correct Predictions** | 1/23 | 19/23 | +18 | |
|
|
| ### Per-Agent Performance |
| - **Technical Support**: High accuracy on crash reports, API errors, authentication issues |
| - **Billing**: Excellent routing for refunds, payments, subscription management |
| - **Product Info**: Strong performance on feature queries, integrations, compliance questions |
|
|
| ## ๐ Quick Start |
|
|
| ### Installation |
|
|
| ```bash |
| pip install transformers torch |
| ``` |
|
|
| ### Basic Usage |
|
|
| ```python |
| from transformers import AutoTokenizer, AutoModelForCausalLM |
| import re |
| import json |
| |
| # Load model and tokenizer |
| model_name = "bhaiyahnsingh45/functiongemma-multiagent-router" |
| tokenizer = AutoTokenizer.from_pretrained(model_name) |
| model = AutoModelForCausalLM.from_pretrained( |
| model_name, |
| device_map="auto", |
| torch_dtype="auto" |
| ) |
| |
| # Define your agent tools |
| from transformers.utils import get_json_schema |
| |
| def technical_support_agent(issue_type: str, priority: str) -> str: |
| """ |
| Routes technical issues to specialized support team. |
| |
| Args: |
| issue_type: Type of technical issue (crash, authentication, performance, api_error, etc.) |
| priority: Priority level (low, medium, high) |
| """ |
| return f"Routing to Technical Support: {issue_type} with {priority} priority" |
| |
| def billing_agent(request_type: str, urgency: str) -> str: |
| """ |
| Routes billing and payment queries. |
| |
| Args: |
| request_type: Type of request (refund, invoice, upgrade, cancellation, etc.) |
| urgency: How urgent (low, medium, high) |
| """ |
| return f"Routing to Billing: {request_type} with {urgency} urgency" |
| |
| def product_info_agent(query_type: str, category: str) -> str: |
| """ |
| Routes product information queries. |
| |
| Args: |
| query_type: Type of query (features, comparison, integrations, limits, etc.) |
| category: Category (plans, storage, mobile, security, etc.) |
| """ |
| return f"Routing to Product Info: {query_type} about {category}" |
| |
| # Get tool schemas |
| AGENT_TOOLS = [ |
| get_json_schema(technical_support_agent), |
| get_json_schema(billing_agent), |
| get_json_schema(product_info_agent) |
| ] |
| |
| # System message |
| SYSTEM_MSG = "You are an intelligent routing agent that directs customer queries to the appropriate specialized agent." |
| |
| # Function to route queries |
| def route_query(user_query: str): |
| """Route a user query to the appropriate agent""" |
| |
| messages = [ |
| {"role": "developer", "content": SYSTEM_MSG}, |
| {"role": "user", "content": user_query} |
| ] |
| |
| # Format prompt |
| inputs = tokenizer.apply_chat_template( |
| messages, |
| tools=AGENT_TOOLS, |
| add_generation_prompt=True, |
| return_dict=True, |
| return_tensors="pt" |
| ) |
| |
| # Generate |
| outputs = model.generate( |
| **inputs.to(model.device), |
| max_new_tokens=128, |
| pad_token_id=tokenizer.eos_token_id |
| ) |
| |
| # Decode |
| result = tokenizer.decode( |
| outputs[0][len(inputs["input_ids"][0]):], |
| skip_special_tokens=False |
| ) |
| |
| return result |
| |
| # Example usage |
| query = "My app crashes when I try to upload large files" |
| result = route_query(query) |
| print(f"Query: {query}") |
| print(f"Routing: {result}") |
| ``` |
|
|
| ### Expected Output Format |
|
|
| ``` |
| <start_function_call>call:technical_support_agent{issue_type:crash,priority:high}<end_function_call> |
| ``` |
|
|
| ## ๐ก Usage Examples |
|
|
| ### Example 1: Technical Issue |
| ```python |
| query = "I'm getting a 500 error when calling the API" |
| result = route_query(query) |
| # Output: technical_support_agent(issue_type="api_error", priority="high") |
| ``` |
|
|
| ### Example 2: Billing Request |
| ```python |
| query = "I need a refund for my annual subscription" |
| result = route_query(query) |
| # Output: billing_agent(request_type="refund", urgency="medium") |
| ``` |
|
|
| ### Example 3: Product Question |
| ```python |
| query = "What integrations do you support for project management?" |
| result = route_query(query) |
| # Output: product_info_agent(query_type="integrations", category="project_management") |
| ``` |
|
|
| ## ๐ง Advanced Usage: Parse Function Calls |
|
|
| ```python |
| def parse_function_call(output: str) -> dict: |
| """Extract function name and arguments from model output""" |
| |
| pattern = r'<start_function_call>call:(\w+)\{([^}]+)\}<end_function_call>' |
| match = re.search(pattern, output) |
| |
| if match: |
| func_name = match.group(1) |
| params_str = match.group(2) |
| |
| # Parse parameters |
| params = {} |
| param_pattern = r'(\w+):(?:<escape>(.*?)<escape>|([^,{}]+))' |
| for p_match in re.finditer(param_pattern, params_str): |
| key = p_match.group(1) |
| val = p_match.group(2) or p_match.group(3).strip() |
| params[key] = val |
| |
| return { |
| "agent": func_name, |
| "parameters": params |
| } |
| |
| return {"agent": "unknown", "parameters": {}} |
| |
| # Use it |
| query = "I was charged twice this month" |
| result = route_query(query) |
| parsed = parse_function_call(result) |
| print(parsed) |
| # Output: {'agent': 'billing_agent', 'parameters': {'request_type': 'dispute', 'urgency': 'high'}} |
| ``` |
|
|
| ## ๐๏ธ Integration Example |
|
|
| ```python |
| class MultiAgentRouter: |
| def __init__(self, model_name: str): |
| self.tokenizer = AutoTokenizer.from_pretrained(model_name) |
| self.model = AutoModelForCausalLM.from_pretrained( |
| model_name, |
| device_map="auto", |
| torch_dtype="auto" |
| ) |
| self.system_msg = "You are an intelligent routing agent..." |
| |
| def route(self, query: str) -> dict: |
| """Route query and return agent + parameters""" |
| messages = [ |
| {"role": "developer", "content": self.system_msg}, |
| {"role": "user", "content": query} |
| ] |
| |
| inputs = self.tokenizer.apply_chat_template( |
| messages, |
| tools=AGENT_TOOLS, |
| add_generation_prompt=True, |
| return_dict=True, |
| return_tensors="pt" |
| ) |
| |
| outputs = self.model.generate( |
| **inputs.to(self.model.device), |
| max_new_tokens=128, |
| pad_token_id=self.tokenizer.eos_token_id |
| ) |
| |
| result = self.tokenizer.decode( |
| outputs[0][len(inputs["input_ids"][0]):], |
| skip_special_tokens=False |
| ) |
| |
| return parse_function_call(result) |
| |
| # Usage |
| router = MultiAgentRouter("bhaiyahnsingh45/functiongemma-multiagent-router") |
| routing = router.route("My payment failed but I don't know why") |
| print(f"Route to: {routing['agent']}") |
| print(f"Parameters: {routing['parameters']}") |
| ``` |
|
|
| ## ๐ Evaluation |
|
|
| The model was evaluated on a held-out test set of 23 queries: |
|
|
| - **Routing Accuracy**: 82.6% |
| - **False Positive Rate**: 17.4% |
| - **Average Inference Time**: ~50ms on T4 GPU |
|
|
| ## โ ๏ธ Limitations |
|
|
| 1. **Language**: Currently supports English only |
| 2. **Domain**: Optimized for customer support; may need fine-tuning for other domains |
| 3. **Agents**: Limited to 3 agent types (can be extended with additional training) |
| 4. **Context**: Works best with single-turn queries; multi-turn conversations may need context handling |
| 5. **Edge Cases**: Ambiguous queries may require fallback logic |
|
|
| ## ๐ฎ Future Improvements |
|
|
| - [ ] Add support for more languages |
| - [ ] Expand to 5+ agent types (sales, feedback, onboarding) |
| - [ ] Handle multi-turn conversations |
| - [ ] Add confidence scores for routing decisions |
| - [ ] Support for compound queries requiring multiple agents |
|
|
| ## ๐ Citation |
|
|
| ```bibtex |
| @misc{functiongemma_multiagent_router, |
| author = {Bhaiya Singh}, |
| title = {Multi-Agent Router: Fine-tuned FunctionGemma for Customer Support}, |
| year = {2025}, |
| publisher = {Hugging Face}, |
| howpublished = {\url{https://huggingface.co/bhaiyahnsingh45/functiongemma-multiagent-router}} |
| } |
| ``` |
|
|
| ## ๐ License |
|
|
| This model inherits the [Gemma License](https://ai.google.dev/gemma/terms) from the base model. |
|
|
| ## ๐ Acknowledgments |
|
|
| - Base model: [google/functiongemma-270m-it](https://huggingface.co/google/functiongemma-270m-it) |
| - Training framework: [Hugging Face TRL](https://github.com/huggingface/trl) |
| - Dataset: [bhaiyahnsingh45/multiagent-router-finetuning](https://huggingface.co/datasets/bhaiyahnsingh45/multiagent-router-finetuning) |
|
|
| ## ๐ง Contact |
|
|
| For questions, issues, or collaboration opportunities: |
| - Open an issue on the [model repository](https://huggingface.co/bhaiyahnsingh45/functiongemma-multiagent-router) |
| - Dataset issues: [dataset repository](https://huggingface.co/datasets/bhaiyahnsingh45/multiagent-router-finetuning) |
|
|
| --- |
|
|
| **Built with โค๏ธ using FunctionGemma and Hugging Face Transformers** |
|
|