初始化项目,由ModelHub XC社区提供模型

Model: mlx-community/functiongemma-270m-it-bf16
Source: Original Platform
This commit is contained in:
ModelHub XC
2026-06-21 14:51:20 +08:00
commit 95a8238b8b
10 changed files with 1526 additions and 0 deletions

36
.gitattributes vendored Normal file
View File

@@ -0,0 +1,36 @@
*.7z filter=lfs diff=lfs merge=lfs -text
*.arrow filter=lfs diff=lfs merge=lfs -text
*.bin filter=lfs diff=lfs merge=lfs -text
*.bz2 filter=lfs diff=lfs merge=lfs -text
*.ckpt filter=lfs diff=lfs merge=lfs -text
*.ftz filter=lfs diff=lfs merge=lfs -text
*.gz filter=lfs diff=lfs merge=lfs -text
*.h5 filter=lfs diff=lfs merge=lfs -text
*.joblib filter=lfs diff=lfs merge=lfs -text
*.lfs.* filter=lfs diff=lfs merge=lfs -text
*.mlmodel filter=lfs diff=lfs merge=lfs -text
*.model filter=lfs diff=lfs merge=lfs -text
*.msgpack filter=lfs diff=lfs merge=lfs -text
*.npy filter=lfs diff=lfs merge=lfs -text
*.npz filter=lfs diff=lfs merge=lfs -text
*.onnx filter=lfs diff=lfs merge=lfs -text
*.ot filter=lfs diff=lfs merge=lfs -text
*.parquet filter=lfs diff=lfs merge=lfs -text
*.pb filter=lfs diff=lfs merge=lfs -text
*.pickle filter=lfs diff=lfs merge=lfs -text
*.pkl filter=lfs diff=lfs merge=lfs -text
*.pt filter=lfs diff=lfs merge=lfs -text
*.pth filter=lfs diff=lfs merge=lfs -text
*.rar filter=lfs diff=lfs merge=lfs -text
*.safetensors filter=lfs diff=lfs merge=lfs -text
saved_model/**/* filter=lfs diff=lfs merge=lfs -text
*.tar.* filter=lfs diff=lfs merge=lfs -text
*.tar filter=lfs diff=lfs merge=lfs -text
*.tflite filter=lfs diff=lfs merge=lfs -text
*.tgz filter=lfs diff=lfs merge=lfs -text
*.wasm filter=lfs diff=lfs merge=lfs -text
*.xz filter=lfs diff=lfs merge=lfs -text
*.zip filter=lfs diff=lfs merge=lfs -text
*.zst filter=lfs diff=lfs merge=lfs -text
*tfevents* filter=lfs diff=lfs merge=lfs -text
tokenizer.json filter=lfs diff=lfs merge=lfs -text

45
README.md Normal file
View File

@@ -0,0 +1,45 @@
---
license: gemma
tags:
- gemma3
- gemma
- google
- functiongemma
- mlx
pipeline_tag: text-generation
library_name: mlx
extra_gated_heading: Access Gemma on Hugging Face
extra_gated_prompt: To access FunctionGemma on Hugging Face, youre required to review
and agree to Googles usage license. To do this, please ensure youre logged in
to Hugging Face and click below. Requests are processed immediately.
extra_gated_button_content: Acknowledge license
base_model: google/functiongemma-270m-it
---
# mlx-community/functiongemma-270m-it-bf16
This model [mlx-community/functiongemma-270m-it-bf16](https://huggingface.co/mlx-community/functiongemma-270m-it-bf16) was
converted to MLX format from [google/functiongemma-270m-it](https://huggingface.co/google/functiongemma-270m-it)
using mlx-lm version **0.28.4**.
## Use with mlx
```bash
pip install mlx-lm
```
```python
from mlx_lm import load, generate
model, tokenizer = load("mlx-community/functiongemma-270m-it-bf16")
prompt = "hello"
if tokenizer.chat_template is not None:
messages = [{"role": "user", "content": prompt}]
prompt = tokenizer.apply_chat_template(
messages, add_generation_prompt=True
)
response = generate(model, tokenizer, prompt=prompt, verbose=True)
```

279
chat_template.jinja Normal file
View File

@@ -0,0 +1,279 @@
{%- macro format_parameters(properties, required) -%}
{%- set standard_keys = ['description', 'type', 'properties', 'required', 'nullable'] -%}
{%- set ns = namespace(found_first=false) -%}
{%- for key, value in properties | dictsort -%}
{%- if key not in standard_keys -%}
{%- if ns.found_first %},{% endif -%}
{%- set ns.found_first = true -%}
{{- key }}:{description:<escape>{{ value['description'] }}<escape>
{%- if value['type'] | upper == 'STRING' -%}
{%- if value['enum'] -%}
,enum:{{ format_argument(value['enum']) }}
{%- endif -%}
{%- elif value['type'] | upper == 'OBJECT' -%}
,properties:{
{%- if value['properties'] is defined and value['properties'] is mapping -%}
{{- format_parameters(value['properties'], value['required'] | default([])) -}}
{%- elif value is mapping -%}
{{- format_parameters(value, value['required'] | default([])) -}}
{%- endif -%}
}
{%- if value['required'] -%}
,required:[
{%- for item in value['required'] | default([]) -%}
<escape>{{- item -}}<escape>
{%- if not loop.last %},{% endif -%}
{%- endfor -%}
]
{%- endif -%}
{%- elif value['type'] | upper == 'ARRAY' -%}
{%- if value['items'] is mapping and value['items'] -%}
,items:{
{%- set ns_items = namespace(found_first=false) -%}
{%- for item_key, item_value in value['items'] | dictsort -%}
{%- if item_value is not none -%}
{%- if ns_items.found_first %},{% endif -%}
{%- set ns_items.found_first = true -%}
{%- if item_key == 'properties' -%}
properties:{
{%- if item_value is mapping -%}
{{- format_parameters(item_value, value['items']['required'] | default([])) -}}
{%- endif -%}
}
{%- elif item_key == 'required' -%}
required:[
{%- for req_item in item_value -%}
<escape>{{- req_item -}}<escape>
{%- if not loop.last %},{% endif -%}
{%- endfor -%}
]
{%- elif item_key == 'type' -%}
{%- if item_value is string -%}
type:{{ format_argument(item_value | upper) }}
{%- else -%}
type:{{ format_argument(item_value | map('upper') | list) }}
{%- endif -%}
{%- else -%}
{{ item_key }}:{{ format_argument(item_value) }}
{%- endif -%}
{%- endif -%}
{%- endfor -%}
}
{%- endif -%}
{%- endif -%}
,type:<escape>{{ value['type'] | upper }}<escape>}
{%- endif -%}
{%- endfor -%}
{%- endmacro -%}
{% macro format_function_declaration(tool_data) -%}
declaration:{{- tool_data['function']['name'] -}}
{description:<escape>{{- tool_data['function']['description'] -}}<escape>
{%- set params = tool_data['function']['parameters'] -%}
{%- if params -%}
,parameters:{
{%- if params['properties'] -%}
properties:{ {{- format_parameters(params['properties'], params['required']) -}} },
{%- endif -%}
{%- if params['required'] -%}
required:[
{%- for item in params['required'] -%}
<escape>{{- item -}}<escape>
{{- ',' if not loop.last -}}
{%- endfor -%}
],
{%- endif -%}
{%- if params['type'] -%}
type:<escape>{{- params['type'] | upper -}}<escape>}
{%- endif -%}
{%- endif -%}
}
{%- endmacro -%}
{% macro format_argument(argument, escape_keys=True) -%}
{%- if argument is string -%}
{{- '<escape>' + argument + '<escape>' -}}
{%- elif argument is boolean -%}
{%- if argument -%}
{{- 'true' -}}
{%- else -%}
{{- 'false' -}}
{%- endif -%}
{%- elif argument is mapping -%}
{{- '{' -}}
{%- set ns = namespace(found_first=false) -%}
{%- for key, value in argument | dictsort -%}
{%- if ns.found_first %},{% endif -%}
{%- set ns.found_first = true -%}
{%- if escape_keys -%}
{{- '<escape>' + key + '<escape>' -}}
{%- else -%}
{{- key -}}
{%- endif -%}
:{{- format_argument(value, escape_keys=escape_keys) -}}
{%- endfor -%}
{{- '}' -}}
{%- elif argument is sequence -%}
{{- '[' -}}
{%- for item in argument -%}
{{- format_argument(item, escape_keys=escape_keys) -}}
{%- if not loop.last %},{% endif -%}
{%- endfor -%}
{{- ']' -}}
{%- else -%}
{{- argument -}}
{%- endif -%}
{%- endmacro -%}
{{ bos_token }}
{%- set ns = namespace(prev_message_type=None) -%}
{#- Tool Declarations -#}
{%- set loop_messages = messages -%}
{%- if tools or messages[0]['role'] == 'system' or messages[0]['role'] == 'developer' -%}
{{- '<start_of_turn>developer\n' -}}
{%- if messages[0]['role'] == 'system' or messages[0]['role'] == 'developer' -%}
{%- if messages[0]['content'] is string -%}
{{- messages[0]['content'] | trim -}}
{%- elif messages[0]['content'] is sequence -%}
{%- for item in messages[0]['content'] -%}
{%- if item['type'] == 'text' -%}
{{- item['text'] | trim -}}
{%- endif -%}
{%- endfor -%}
{%- endif -%}
{%- set loop_messages = messages[1:] -%}
{%- endif -%}
{%- if tools -%}
{%- for tool in tools %}
{{- '<start_function_declaration>' -}}
{{- format_function_declaration(tool) | trim }}
{{- '<end_function_declaration>' -}}
{%- endfor %}
{%- endif -%}
{{- '<end_of_turn>\n' }}
{%- endif %}
{#- Loop through messages. -#}
{%- for message in loop_messages -%}
{%- if (message['role'] == 'assistant') -%}
{#- Rename "assistant" to "model". -#}
{%- set role = "model" -%}
{%- else -%}
{%- set role = message['role'] -%}
{%- endif -%}
{%- if role != 'tool' -%}
{%- if ns.prev_message_type != 'tool_response' -%}
{{- '<start_of_turn>' + role + '\n' }}
{%- endif -%}
{%- set ns.prev_message_type = None -%}
{%- if 'content' in message and message['content'] is not none -%}
{%- if message['content'] is string -%}
{{ message['content'] | trim }}
{%- elif message['content'] is sequence -%}
{%- for item in message['content'] -%}
{%- if item['type'] == 'image' -%}
{{ '<start_of_image>' }}
{%- elif item['type'] == 'text' -%}
{{ item['text'] | trim }}
{%- endif -%}
{%- endfor -%}
{%- else -%}
{{ raise_exception("Invalid content type in user/assistant message") }}
{%- endif -%}
{%- set ns.prev_message_type = 'content' -%}
{%- endif -%}
{%- if 'tool_calls' in message and message['tool_calls'] and message['tool_calls'] is iterable -%}
{#- Tool Calls -#}
{%- for tool_call in message['tool_calls'] -%}
{% set function = tool_call['function'] %}
{{- '<start_function_call>call:' + function['name'] + '{' -}}
{%- if 'arguments' in function -%}
{%- if function['arguments'] is mapping -%}
{%- set ns = namespace(found_first=false) -%}
{%- for key, value in function['arguments'] | dictsort -%}
{%- if ns.found_first %},{% endif -%}
{%- set ns.found_first = true -%}
{{- key -}}:{{- format_argument(value, escape_keys=False) -}}
{%- endfor -%}
{%- elif function['arguments'] is string -%}
{# This handles string-JSON, just in case #}
{{ function['arguments'] }}
{%- endif %}
{%- endif -%}
{{- '}<end_function_call>' -}}
{%- endfor -%}
{%- if loop.last -%}
{{ '<start_function_response>' }}
{%- endif -%}
{%- set ns.prev_message_type = 'tool_call' -%}
{%- endif -%}
{%- else -%}
{#- Tool Responses -#}
{%- if 'content' in message and message['content'] -%}
{%- if message['content'] is mapping -%}
{%- if 'name' in message['content'] and 'response' in message['content'] -%}
{{ '<start_function_response>response:' + message['content']['name'] | trim + '{' }}
{%- set response_ns = namespace(found_first=false) -%}
{%- for key, value in message['content']['response'] | dictsort -%}
{%- if response_ns.found_first %},{% endif -%}
{%- set response_ns.found_first = true -%}
{{- key -}}:{{- format_argument(value, escape_keys=False) -}}
{%- endfor -%}
{{- '}<end_function_response>' -}}
{%- elif 'name' in message -%}
{{ '<start_function_response>response:' + message['name'] | trim + '{' }}
{%- set response_ns = namespace(found_first=false) -%}
{%- for key, value in message['content'] | dictsort -%}
{%- if response_ns.found_first %},{% endif -%}
{%- set response_ns.found_first = true -%}
{{- key -}}:{{- format_argument(value, escape_keys=False) -}}
{%- endfor -%}
{{- '}<end_function_response>' -}}
{%- else -%}
{{ raise_exception("Invalid tool response mapping: must contain 'name' and 'response' keys, or 'name' must be in the message.") }}
{%- endif -%}
{%- elif message['content'] is string -%}
{%- if 'name' in message -%}
{{ '<start_function_response>response:' + message['name'] | trim + '{value:' + format_argument(message['content'], escape_keys=False) + '}<end_function_response>' }}
{%- else -%}
{{ raise_exception("Invalid tool response: 'name' must be provided.") }}
{%- endif -%}
{%- elif message['content'] is sequence -%}
{%- for item in message['content'] -%}
{%- if item is mapping -%}
{%- if 'name' in item and 'response' in item -%}
{{ '<start_function_response>response:' + item['name'] | trim + '{' }}
{%- set response_ns = namespace(found_first=false) -%}
{%- for key, value in item['response'] | dictsort -%}
{%- if response_ns.found_first %},{% endif -%}
{%- set response_ns.found_first = true -%}
{{- key -}}:{{- format_argument(value, escape_keys=False) -}}
{%- endfor -%}
{{- '}<end_function_response>' -}}
{%- elif 'name' in message -%}
{{ '<start_function_response>response:' + message['name'] | trim + '{' }}
{%- set response_ns = namespace(found_first=false) -%}
{%- for key, value in item | dictsort -%}
{%- if response_ns.found_first %},{% endif -%}
{%- set response_ns.found_first = true -%}
{{- key -}}:{{- format_argument(value, escape_keys=False) -}}
{%- endfor -%}
{{- '}<end_function_response>' -}}
{%- else -%}
{{ raise_exception("Invalid tool response mapping: must contain 'name' and 'response' keys, or 'name' must be in the message.") }}
{%- endif -%}
{%- else -%}
{{ raise_exception("Invalid tool response message: multiple responses must all be mappings") }}
{%- endif -%}
{%- endfor -%}
{%- else -%}
{{ raise_exception("Invalid content type in tool message: must be mapping, sequence of mappings, or string.") }}
{%- endif -%}
{%- endif -%}
{%- set ns.prev_message_type = 'tool_response' -%}
{%- endif -%}
{%- if ns.prev_message_type not in ['tool_call', 'tool_response'] -%}
{{ '<end_of_turn>\n' }}
{%- endif -%}
{%- endfor -%}
{%- if add_generation_prompt -%}
{%- if ns.prev_message_type != 'tool_response' -%}
{{- '<start_of_turn>model\n' -}}
{%- endif -%}
{%- endif -%}

58
config.json Normal file
View File

@@ -0,0 +1,58 @@
{
"_sliding_window_pattern": 6,
"architectures": [
"Gemma3ForCausalLM"
],
"attention_bias": false,
"attention_dropout": 0.0,
"attn_logit_softcapping": null,
"bos_token_id": 2,
"dtype": "bfloat16",
"eos_token_id": [
1,
49
],
"final_logit_softcapping": null,
"head_dim": 256,
"hidden_activation": "gelu_pytorch_tanh",
"hidden_size": 640,
"initializer_range": 0.02,
"intermediate_size": 2048,
"layer_types": [
"sliding_attention",
"sliding_attention",
"sliding_attention",
"sliding_attention",
"sliding_attention",
"full_attention",
"sliding_attention",
"sliding_attention",
"sliding_attention",
"sliding_attention",
"sliding_attention",
"full_attention",
"sliding_attention",
"sliding_attention",
"sliding_attention",
"sliding_attention",
"sliding_attention",
"full_attention"
],
"max_position_embeddings": 32768,
"model_type": "gemma3_text",
"num_attention_heads": 4,
"num_hidden_layers": 18,
"num_key_value_heads": 1,
"pad_token_id": 0,
"query_pre_attn_scalar": 256,
"rms_norm_eps": 1e-06,
"rope_local_base_freq": 10000.0,
"rope_parameters": null,
"rope_scaling": null,
"rope_theta": 1000000.0,
"sliding_window": 512,
"transformers_version": "4.57.3",
"use_bidirectional_attention": false,
"use_cache": true,
"vocab_size": 262144
}

View File

@@ -0,0 +1,819 @@
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Function Calling with FunctionGemma\n",
"\n",
"This notebook demonstrates how to use [Google's FunctionGemma](https://huggingface.co/google/functiongemma-270m-it) for function calling with MLX-LM. We'll cover different use cases including datetime, weather, calendar, email, database queries, and more.\n",
"\n",
"## Requirements\n",
"\n",
"```bash\n",
"pip install -U mlx-lm\n",
"```"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Setup"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"import json\n",
"import re\n",
"from datetime import datetime\n",
"from mlx_lm import load, generate"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# Load the model\n",
"model, tokenizer = load(\"mlx-community/functiongemma-270m-it-bf16\")\n",
"print(\"✅ Model loaded\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Function Definitions\n",
"\n",
"Below are mock implementations of various functions that demonstrate different use cases. In production, these would connect to real APIs and services."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# Use Case 0: System DateTime\n",
"def get_current_datetime() -> dict:\n",
" \"\"\"Get current system date and time.\"\"\"\n",
" now = datetime.now()\n",
" return {\n",
" \"datetime\": now.isoformat(),\n",
" \"date\": now.strftime(\"%Y-%m-%d\"),\n",
" \"time\": now.strftime(\"%H:%M:%S\"),\n",
" \"day_of_week\": now.strftime(\"%A\"),\n",
" \"timezone\": now.astimezone().tzname()\n",
" }\n",
"\n",
"datetime_schema = {\n",
" \"type\": \"function\",\n",
" \"function\": {\n",
" \"name\": \"get_current_datetime\",\n",
" \"description\": \"Gets the current system date and time\",\n",
" \"parameters\": {\n",
" \"type\": \"OBJECT\",\n",
" \"properties\": {},\n",
" \"required\": [],\n",
" },\n",
" }\n",
"}"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# Use Case 1: Weather\n",
"def get_current_temperature(location: str) -> dict:\n",
" \"\"\"Get current temperature for a location.\"\"\"\n",
" temps = {\n",
" \"London\": 15, \"Paris\": 18, \"Tokyo\": 22,\n",
" \"New York\": 12, \"Sydney\": 25\n",
" }\n",
" return {\n",
" \"location\": location,\n",
" \"temperature\": temps.get(location, 20),\n",
" \"unit\": \"celsius\"\n",
" }\n",
"\n",
"weather_schema = {\n",
" \"type\": \"function\",\n",
" \"function\": {\n",
" \"name\": \"get_current_temperature\",\n",
" \"description\": \"Gets the current temperature for a given location.\",\n",
" \"parameters\": {\n",
" \"type\": \"OBJECT\",\n",
" \"properties\": {\n",
" \"location\": {\n",
" \"type\": \"STRING\",\n",
" \"description\": \"The city name, e.g. San Francisco\",\n",
" },\n",
" },\n",
" \"required\": [\"location\"],\n",
" },\n",
" }\n",
"}"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# Use Case 2: Calendar\n",
"def create_calendar_event(title: str, date: str, time: str) -> dict:\n",
" \"\"\"Create a calendar event.\"\"\"\n",
" return {\n",
" \"success\": True,\n",
" \"event\": {\n",
" \"title\": title,\n",
" \"date\": date,\n",
" \"time\": time,\n",
" \"event_id\": f\"evt_{hash(title+date)}\"\n",
" }\n",
" }\n",
"\n",
"calendar_schema = {\n",
" \"type\": \"function\",\n",
" \"function\": {\n",
" \"name\": \"create_calendar_event\",\n",
" \"description\": \"Creates a new event in the calendar\",\n",
" \"parameters\": {\n",
" \"type\": \"OBJECT\",\n",
" \"properties\": {\n",
" \"title\": {\"type\": \"STRING\", \"description\": \"Event title\"},\n",
" \"date\": {\"type\": \"STRING\", \"description\": \"Event date (YYYY-MM-DD)\"},\n",
" \"time\": {\"type\": \"STRING\", \"description\": \"Event time (HH:MM)\"}\n",
" },\n",
" \"required\": [\"title\", \"date\", \"time\"],\n",
" },\n",
" }\n",
"}"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# Use Case 3: Email\n",
"def send_email(recipient: str, subject: str, body: str) -> dict:\n",
" \"\"\"Send an email.\"\"\"\n",
" return {\n",
" \"success\": True,\n",
" \"message_id\": f\"msg_{hash(recipient+subject)}\",\n",
" \"sent_to\": recipient\n",
" }\n",
"\n",
"email_schema = {\n",
" \"type\": \"function\",\n",
" \"function\": {\n",
" \"name\": \"send_email\",\n",
" \"description\": \"Sends an email to a recipient\",\n",
" \"parameters\": {\n",
" \"type\": \"OBJECT\",\n",
" \"properties\": {\n",
" \"recipient\": {\"type\": \"STRING\", \"description\": \"Email address\"},\n",
" \"subject\": {\"type\": \"STRING\", \"description\": \"Email subject\"},\n",
" \"body\": {\"type\": \"STRING\", \"description\": \"Email body\"}\n",
" },\n",
" \"required\": [\"recipient\", \"subject\", \"body\"],\n",
" },\n",
" }\n",
"}"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# Use Case 4: Database\n",
"def search_database(query: str, table: str) -> dict:\n",
" \"\"\"Search database.\"\"\"\n",
" return {\n",
" \"results\": [\n",
" {\"id\": 1, \"name\": \"Result 1\"},\n",
" {\"id\": 2, \"name\": \"Result 2\"}\n",
" ],\n",
" \"count\": 2,\n",
" \"table\": table\n",
" }\n",
"\n",
"database_schema = {\n",
" \"type\": \"function\",\n",
" \"function\": {\n",
" \"name\": \"search_database\",\n",
" \"description\": \"Searches a database table\",\n",
" \"parameters\": {\n",
" \"type\": \"OBJECT\",\n",
" \"properties\": {\n",
" \"query\": {\"type\": \"STRING\", \"description\": \"Search query\"},\n",
" \"table\": {\"type\": \"STRING\", \"description\": \"Table name\"}\n",
" },\n",
" \"required\": [\"query\", \"table\"],\n",
" },\n",
" }\n",
"}"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# Use Case 5: File System\n",
"def list_files(directory: str) -> dict:\n",
" \"\"\"List files in directory.\"\"\"\n",
" return {\n",
" \"files\": [\"file1.txt\", \"file2.py\", \"file3.md\"],\n",
" \"count\": 3,\n",
" \"directory\": directory\n",
" }\n",
"\n",
"filesystem_schema = {\n",
" \"type\": \"function\",\n",
" \"function\": {\n",
" \"name\": \"list_files\",\n",
" \"description\": \"Lists files in a directory\",\n",
" \"parameters\": {\n",
" \"type\": \"OBJECT\",\n",
" \"properties\": {\n",
" \"directory\": {\"type\": \"STRING\", \"description\": \"Directory path\"}\n",
" },\n",
" \"required\": [\"directory\"],\n",
" },\n",
" }\n",
"}"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# Use Case 6: Translation\n",
"def translate_text(text: str, target_language: str) -> dict:\n",
" \"\"\"Translate text.\"\"\"\n",
" return {\n",
" \"original\": text,\n",
" \"translated\": f\"[{target_language.upper()}] {text}\",\n",
" \"language\": target_language\n",
" }\n",
"\n",
"translation_schema = {\n",
" \"type\": \"function\",\n",
" \"function\": {\n",
" \"name\": \"translate_text\",\n",
" \"description\": \"Translates text to another language\",\n",
" \"parameters\": {\n",
" \"type\": \"OBJECT\",\n",
" \"properties\": {\n",
" \"text\": {\"type\": \"STRING\", \"description\": \"Text to translate\"},\n",
" \"target_language\": {\"type\": \"STRING\", \"description\": \"Target language (e.g., Spanish, French)\"}\n",
" },\n",
" \"required\": [\"text\", \"target_language\"],\n",
" },\n",
" }\n",
"}"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# Use Case 7: Calculator\n",
"def calculate(expression: str) -> dict:\n",
" \"\"\"Calculate expression.\"\"\"\n",
" try:\n",
" result = eval(expression)\n",
" return {\"expression\": expression, \"result\": result, \"success\": True}\n",
" except Exception as e:\n",
" return {\"expression\": expression, \"error\": str(e), \"success\": False}\n",
"\n",
"calculator_schema = {\n",
" \"type\": \"function\",\n",
" \"function\": {\n",
" \"name\": \"calculate\",\n",
" \"description\": \"Evaluates a mathematical expression\",\n",
" \"parameters\": {\n",
" \"type\": \"OBJECT\",\n",
" \"properties\": {\n",
" \"expression\": {\"type\": \"STRING\", \"description\": \"Math expression (e.g., '2+2', '10*5')\"}\n",
" },\n",
" \"required\": [\"expression\"],\n",
" },\n",
" }\n",
"}"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# Use Case 8: Timer\n",
"def set_timer(duration_minutes: int, label: str) -> dict:\n",
" \"\"\"Set a timer.\"\"\"\n",
" return {\n",
" \"timer_id\": f\"timer_{hash(label)}\",\n",
" \"duration_minutes\": duration_minutes,\n",
" \"label\": label,\n",
" \"status\": \"active\"\n",
" }\n",
"\n",
"timer_schema = {\n",
" \"type\": \"function\",\n",
" \"function\": {\n",
" \"name\": \"set_timer\",\n",
" \"description\": \"Sets a timer with specified duration\",\n",
" \"parameters\": {\n",
" \"type\": \"OBJECT\",\n",
" \"properties\": {\n",
" \"duration_minutes\": {\"type\": \"NUMBER\", \"description\": \"Duration in minutes\"},\n",
" \"label\": {\"type\": \"STRING\", \"description\": \"Timer label\"}\n",
" },\n",
" \"required\": [\"duration_minutes\", \"label\"],\n",
" },\n",
" }\n",
"}"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# Use Case 9: News\n",
"def get_news(category: str, limit: int) -> dict:\n",
" \"\"\"Get news articles.\"\"\"\n",
" return {\n",
" \"category\": category,\n",
" \"articles\": [f\"Article {i+1}\" for i in range(limit)],\n",
" \"count\": limit\n",
" }\n",
"\n",
"news_schema = {\n",
" \"type\": \"function\",\n",
" \"function\": {\n",
" \"name\": \"get_news\",\n",
" \"description\": \"Gets news articles by category\",\n",
" \"parameters\": {\n",
" \"type\": \"OBJECT\",\n",
" \"properties\": {\n",
" \"category\": {\"type\": \"STRING\", \"description\": \"News category (e.g., technology, sports)\"},\n",
" \"limit\": {\"type\": \"NUMBER\", \"description\": \"Number of articles\"}\n",
" },\n",
" \"required\": [\"category\", \"limit\"],\n",
" },\n",
" }\n",
"}"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# Use Case 10: Reminder\n",
"def create_reminder(task: str, reminder_time: str) -> dict:\n",
" \"\"\"Create a reminder.\"\"\"\n",
" return {\n",
" \"reminder_id\": f\"rem_{hash(task)}\",\n",
" \"task\": task,\n",
" \"reminder_time\": reminder_time,\n",
" \"status\": \"scheduled\"\n",
" }\n",
"\n",
"reminder_schema = {\n",
" \"type\": \"function\",\n",
" \"function\": {\n",
" \"name\": \"create_reminder\",\n",
" \"description\": \"Creates a reminder for a task\",\n",
" \"parameters\": {\n",
" \"type\": \"OBJECT\",\n",
" \"properties\": {\n",
" \"task\": {\"type\": \"STRING\", \"description\": \"Task description\"},\n",
" \"reminder_time\": {\"type\": \"STRING\", \"description\": \"Time for reminder (e.g., '2pm tomorrow')\"}\n",
" },\n",
" \"required\": [\"task\", \"reminder_time\"],\n",
" },\n",
" }\n",
"}"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Function & Schema Registry"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"ALL_FUNCTIONS = {\n",
" \"get_current_datetime\": get_current_datetime,\n",
" \"get_current_temperature\": get_current_temperature,\n",
" \"create_calendar_event\": create_calendar_event,\n",
" \"send_email\": send_email,\n",
" \"search_database\": search_database,\n",
" \"list_files\": list_files,\n",
" \"translate_text\": translate_text,\n",
" \"calculate\": calculate,\n",
" \"set_timer\": set_timer,\n",
" \"get_news\": get_news,\n",
" \"create_reminder\": create_reminder\n",
"}\n",
"\n",
"ALL_SCHEMAS = {\n",
" \"datetime\": datetime_schema,\n",
" \"weather\": weather_schema,\n",
" \"calendar\": calendar_schema,\n",
" \"email\": email_schema,\n",
" \"database\": database_schema,\n",
" \"filesystem\": filesystem_schema,\n",
" \"translation\": translation_schema,\n",
" \"calculator\": calculator_schema,\n",
" \"timer\": timer_schema,\n",
" \"news\": news_schema,\n",
" \"reminder\": reminder_schema\n",
"}"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Response Parser\n",
"\n",
"FunctionGemma uses a specific format for function calls:\n",
"```\n",
"<start_function_call>call:function_name{key:value,key:value}<end_function_call>\n",
"```\n",
"\n",
"String values may be wrapped in `<escape>` tags."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"def parse_function_call(response: str):\n",
" \"\"\"Parse FunctionGemma's response format.\"\"\"\n",
" if \"<start_function_call>\" not in response:\n",
" return None, None\n",
"\n",
" start = response.find(\"<start_function_call>\") + len(\"<start_function_call>\")\n",
" end = response.find(\"<end_function_call>\")\n",
"\n",
" if end == -1:\n",
" call_str = response[start:].strip()\n",
" else:\n",
" call_str = response[start:end].strip()\n",
"\n",
" # Parse: call:function_name{key:value,key:value}\n",
" match = re.match(r'call:([\\w_]+)\\{([^}]*)\\}?', call_str, re.DOTALL)\n",
" if not match:\n",
" return None, None\n",
"\n",
" func_name = match.group(1)\n",
" args_str = match.group(2).strip()\n",
"\n",
" # Handle empty parameters\n",
" if not args_str:\n",
" return func_name, {}\n",
"\n",
" # Process escape tags\n",
" temp = args_str\n",
" while '<escape>' in temp:\n",
" start_idx = temp.find('<escape>')\n",
" end_idx = temp.find('<escape>', start_idx + 8)\n",
" if end_idx != -1:\n",
" escaped_content = temp[start_idx+8:end_idx]\n",
" temp = temp[:start_idx] + escaped_content + temp[end_idx+8:]\n",
" else:\n",
" temp = temp.replace('<escape>', '')\n",
" break\n",
"\n",
" # Parse key:value pairs\n",
" args = {}\n",
" for pair in temp.split(','):\n",
" if ':' in pair:\n",
" key, value = pair.split(':', 1)\n",
" key = key.strip()\n",
" value = value.strip()\n",
"\n",
" # Type conversion\n",
" try:\n",
" if '.' in value:\n",
" args[key] = float(value)\n",
" else:\n",
" args[key] = int(value)\n",
" except ValueError:\n",
" args[key] = value.strip('\"\\'')\n",
"\n",
" return func_name, args"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Test Runner"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"def run_function_call(query: str, schema: dict, verbose: bool = True) -> dict:\n",
" \"\"\"\n",
" Run a function call with FunctionGemma.\n",
"\n",
" Args:\n",
" query: Natural language query from the user\n",
" schema: Function schema to make available\n",
" verbose: Whether to print detailed output\n",
"\n",
" Returns:\n",
" dict with 'success', 'function', 'args', and 'result' keys\n",
" \"\"\"\n",
" current_dt = get_current_datetime()\n",
"\n",
" # IMPORTANT: Developer role activates function calling\n",
" messages = [\n",
" {\n",
" \"role\": \"developer\",\n",
" \"content\": f\"\"\"You are a model that can do function calling with the following functions.\n",
"\n",
"Current system information:\n",
"- Date: {current_dt['date']} ({current_dt['day_of_week']})\n",
"- Time: {current_dt['time']}\n",
"- Timezone: {current_dt['timezone']}\"\"\"\n",
" },\n",
" {\n",
" \"role\": \"user\",\n",
" \"content\": query\n",
" }\n",
" ]\n",
"\n",
" # Apply chat template with tools\n",
" prompt = tokenizer.apply_chat_template(\n",
" messages,\n",
" tools=[schema],\n",
" add_generation_prompt=True,\n",
" tokenize=False\n",
" )\n",
"\n",
" # Generate response\n",
" response = generate(model, tokenizer, prompt=prompt, max_tokens=1024, verbose=False)\n",
"\n",
" if verbose:\n",
" print(f\"Query: {query}\")\n",
" print(f\"Response: {response}\")\n",
"\n",
" # Parse and execute\n",
" func_name, func_args = parse_function_call(response)\n",
"\n",
" if func_name and func_args is not None:\n",
" if verbose:\n",
" print(f\"\\n✅ Function: {func_name}()\")\n",
" print(f\" Arguments: {json.dumps(func_args, indent=2)}\")\n",
"\n",
" if func_name in ALL_FUNCTIONS:\n",
" result = ALL_FUNCTIONS[func_name](**func_args)\n",
" if verbose:\n",
" print(f\" Result: {json.dumps(result, indent=2)}\")\n",
" return {\"success\": True, \"function\": func_name, \"args\": func_args, \"result\": result}\n",
"\n",
" if verbose:\n",
" print(\"\\n❌ No function call detected\")\n",
" return {\"success\": False, \"function\": None, \"args\": None, \"result\": None}"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Examples\n",
"\n",
"Let's test each use case:"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# DateTime\n",
"run_function_call(\"What is the current date and time?\", datetime_schema)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# Weather\n",
"run_function_call(\"What's the temperature in London?\", weather_schema)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# Calendar\n",
"run_function_call(\"Create a meeting event for tomorrow at 2pm called Team Sync\", calendar_schema)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# Email\n",
"run_function_call(\n",
" \"Send an email to john@example.com with subject 'Meeting' and body 'See you tomorrow'\",\n",
" email_schema\n",
")"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# Database\n",
"run_function_call(\"Search the users table for active accounts\", database_schema)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# File System\n",
"run_function_call(\"List files in the /home/user directory\", filesystem_schema)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# Translation\n",
"run_function_call(\"Translate 'Hello World' to Spanish\", translation_schema)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# Calculator\n",
"run_function_call(\"Calculate 25 * 4 + 10\", calculator_schema)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# Timer\n",
"run_function_call(\"Set a 5 minute timer for coffee\", timer_schema)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# News\n",
"run_function_call(\"Get 3 technology news articles\", news_schema)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# Reminder\n",
"run_function_call(\"Remind me to call mom at 6pm today\", reminder_schema)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Run All Tests"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"test_cases = [\n",
" (\"datetime\", datetime_schema, \"What is the current date and time?\"),\n",
" (\"weather\", weather_schema, \"What's the temperature in London?\"),\n",
" (\"calendar\", calendar_schema, \"Create a meeting event for tomorrow at 2pm called Team Sync\"),\n",
" (\"email\", email_schema, \"Send an email to john@example.com with subject 'Meeting' and body 'See you tomorrow'\"),\n",
" (\"database\", database_schema, \"Search the users table for active accounts\"),\n",
" (\"filesystem\", filesystem_schema, \"List files in the /home/user directory\"),\n",
" (\"translation\", translation_schema, \"Translate 'Hello World' to Spanish\"),\n",
" (\"calculator\", calculator_schema, \"Calculate 25 * 4 + 10\"),\n",
" (\"timer\", timer_schema, \"Set a 5 minute timer for coffee\"),\n",
" (\"news\", news_schema, \"Get 3 technology news articles\"),\n",
" (\"reminder\", reminder_schema, \"Remind me to call mom at 6pm today\")\n",
"]\n",
"\n",
"successful = 0\n",
"for name, schema, query in test_cases:\n",
" print(f\"\\n{'='*60}\")\n",
" print(f\"USE CASE: {name.upper()}\")\n",
" print(f\"{'='*60}\")\n",
" result = run_function_call(query, schema)\n",
" if result[\"success\"]:\n",
" successful += 1\n",
"\n",
"print(f\"\\n\\n{'='*60}\")\n",
"print(f\"SUMMARY: {successful}/{len(test_cases)} tests passed ({successful/len(test_cases)*100:.1f}%)\")\n",
"print(f\"{'='*60}\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Key Takeaways\n",
"\n",
"1. **Developer Role**: Use `role: \"developer\"` to activate function calling mode\n",
"2. **Schema Format**: Follow the OBJECT/STRING/NUMBER type format in schemas\n",
"3. **Response Format**: FunctionGemma uses `<start_function_call>call:name{args}<end_function_call>`\n",
"4. **Escaped Strings**: String values may be wrapped in `<escape>` tags\n",
"5. **Context**: Providing current datetime helps with time-aware queries"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "mlx",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.12.12"
}
},
"nbformat": 4,
"nbformat_minor": 4
}

12
generation_config.json Normal file
View File

@@ -0,0 +1,12 @@
{
"cache_implementation": "hybrid",
"do_sample": true,
"eos_token_id": [
1,
50,
106
],
"top_k": 64,
"top_p": 0.95,
"transformers_version": "4.57.3"
}

3
model.safetensors Normal file
View File

@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:fb64bf18b2911fcaa59d44c1b7d5842a011a874530be9dc5bc9d307e82b4edee
size 536222768

View File

@@ -0,0 +1,244 @@
{
"metadata": {
"total_size": 536196352,
"total_parameters": 268098176
},
"weight_map": {
"model.embed_tokens.weight": "model.safetensors",
"model.layers.0.input_layernorm.weight": "model.safetensors",
"model.layers.0.mlp.down_proj.weight": "model.safetensors",
"model.layers.0.mlp.gate_proj.weight": "model.safetensors",
"model.layers.0.mlp.up_proj.weight": "model.safetensors",
"model.layers.0.post_attention_layernorm.weight": "model.safetensors",
"model.layers.0.post_feedforward_layernorm.weight": "model.safetensors",
"model.layers.0.pre_feedforward_layernorm.weight": "model.safetensors",
"model.layers.0.self_attn.k_norm.weight": "model.safetensors",
"model.layers.0.self_attn.k_proj.weight": "model.safetensors",
"model.layers.0.self_attn.o_proj.weight": "model.safetensors",
"model.layers.0.self_attn.q_norm.weight": "model.safetensors",
"model.layers.0.self_attn.q_proj.weight": "model.safetensors",
"model.layers.0.self_attn.v_proj.weight": "model.safetensors",
"model.layers.1.input_layernorm.weight": "model.safetensors",
"model.layers.1.mlp.down_proj.weight": "model.safetensors",
"model.layers.1.mlp.gate_proj.weight": "model.safetensors",
"model.layers.1.mlp.up_proj.weight": "model.safetensors",
"model.layers.1.post_attention_layernorm.weight": "model.safetensors",
"model.layers.1.post_feedforward_layernorm.weight": "model.safetensors",
"model.layers.1.pre_feedforward_layernorm.weight": "model.safetensors",
"model.layers.1.self_attn.k_norm.weight": "model.safetensors",
"model.layers.1.self_attn.k_proj.weight": "model.safetensors",
"model.layers.1.self_attn.o_proj.weight": "model.safetensors",
"model.layers.1.self_attn.q_norm.weight": "model.safetensors",
"model.layers.1.self_attn.q_proj.weight": "model.safetensors",
"model.layers.1.self_attn.v_proj.weight": "model.safetensors",
"model.layers.10.input_layernorm.weight": "model.safetensors",
"model.layers.10.mlp.down_proj.weight": "model.safetensors",
"model.layers.10.mlp.gate_proj.weight": "model.safetensors",
"model.layers.10.mlp.up_proj.weight": "model.safetensors",
"model.layers.10.post_attention_layernorm.weight": "model.safetensors",
"model.layers.10.post_feedforward_layernorm.weight": "model.safetensors",
"model.layers.10.pre_feedforward_layernorm.weight": "model.safetensors",
"model.layers.10.self_attn.k_norm.weight": "model.safetensors",
"model.layers.10.self_attn.k_proj.weight": "model.safetensors",
"model.layers.10.self_attn.o_proj.weight": "model.safetensors",
"model.layers.10.self_attn.q_norm.weight": "model.safetensors",
"model.layers.10.self_attn.q_proj.weight": "model.safetensors",
"model.layers.10.self_attn.v_proj.weight": "model.safetensors",
"model.layers.11.input_layernorm.weight": "model.safetensors",
"model.layers.11.mlp.down_proj.weight": "model.safetensors",
"model.layers.11.mlp.gate_proj.weight": "model.safetensors",
"model.layers.11.mlp.up_proj.weight": "model.safetensors",
"model.layers.11.post_attention_layernorm.weight": "model.safetensors",
"model.layers.11.post_feedforward_layernorm.weight": "model.safetensors",
"model.layers.11.pre_feedforward_layernorm.weight": "model.safetensors",
"model.layers.11.self_attn.k_norm.weight": "model.safetensors",
"model.layers.11.self_attn.k_proj.weight": "model.safetensors",
"model.layers.11.self_attn.o_proj.weight": "model.safetensors",
"model.layers.11.self_attn.q_norm.weight": "model.safetensors",
"model.layers.11.self_attn.q_proj.weight": "model.safetensors",
"model.layers.11.self_attn.v_proj.weight": "model.safetensors",
"model.layers.12.input_layernorm.weight": "model.safetensors",
"model.layers.12.mlp.down_proj.weight": "model.safetensors",
"model.layers.12.mlp.gate_proj.weight": "model.safetensors",
"model.layers.12.mlp.up_proj.weight": "model.safetensors",
"model.layers.12.post_attention_layernorm.weight": "model.safetensors",
"model.layers.12.post_feedforward_layernorm.weight": "model.safetensors",
"model.layers.12.pre_feedforward_layernorm.weight": "model.safetensors",
"model.layers.12.self_attn.k_norm.weight": "model.safetensors",
"model.layers.12.self_attn.k_proj.weight": "model.safetensors",
"model.layers.12.self_attn.o_proj.weight": "model.safetensors",
"model.layers.12.self_attn.q_norm.weight": "model.safetensors",
"model.layers.12.self_attn.q_proj.weight": "model.safetensors",
"model.layers.12.self_attn.v_proj.weight": "model.safetensors",
"model.layers.13.input_layernorm.weight": "model.safetensors",
"model.layers.13.mlp.down_proj.weight": "model.safetensors",
"model.layers.13.mlp.gate_proj.weight": "model.safetensors",
"model.layers.13.mlp.up_proj.weight": "model.safetensors",
"model.layers.13.post_attention_layernorm.weight": "model.safetensors",
"model.layers.13.post_feedforward_layernorm.weight": "model.safetensors",
"model.layers.13.pre_feedforward_layernorm.weight": "model.safetensors",
"model.layers.13.self_attn.k_norm.weight": "model.safetensors",
"model.layers.13.self_attn.k_proj.weight": "model.safetensors",
"model.layers.13.self_attn.o_proj.weight": "model.safetensors",
"model.layers.13.self_attn.q_norm.weight": "model.safetensors",
"model.layers.13.self_attn.q_proj.weight": "model.safetensors",
"model.layers.13.self_attn.v_proj.weight": "model.safetensors",
"model.layers.14.input_layernorm.weight": "model.safetensors",
"model.layers.14.mlp.down_proj.weight": "model.safetensors",
"model.layers.14.mlp.gate_proj.weight": "model.safetensors",
"model.layers.14.mlp.up_proj.weight": "model.safetensors",
"model.layers.14.post_attention_layernorm.weight": "model.safetensors",
"model.layers.14.post_feedforward_layernorm.weight": "model.safetensors",
"model.layers.14.pre_feedforward_layernorm.weight": "model.safetensors",
"model.layers.14.self_attn.k_norm.weight": "model.safetensors",
"model.layers.14.self_attn.k_proj.weight": "model.safetensors",
"model.layers.14.self_attn.o_proj.weight": "model.safetensors",
"model.layers.14.self_attn.q_norm.weight": "model.safetensors",
"model.layers.14.self_attn.q_proj.weight": "model.safetensors",
"model.layers.14.self_attn.v_proj.weight": "model.safetensors",
"model.layers.15.input_layernorm.weight": "model.safetensors",
"model.layers.15.mlp.down_proj.weight": "model.safetensors",
"model.layers.15.mlp.gate_proj.weight": "model.safetensors",
"model.layers.15.mlp.up_proj.weight": "model.safetensors",
"model.layers.15.post_attention_layernorm.weight": "model.safetensors",
"model.layers.15.post_feedforward_layernorm.weight": "model.safetensors",
"model.layers.15.pre_feedforward_layernorm.weight": "model.safetensors",
"model.layers.15.self_attn.k_norm.weight": "model.safetensors",
"model.layers.15.self_attn.k_proj.weight": "model.safetensors",
"model.layers.15.self_attn.o_proj.weight": "model.safetensors",
"model.layers.15.self_attn.q_norm.weight": "model.safetensors",
"model.layers.15.self_attn.q_proj.weight": "model.safetensors",
"model.layers.15.self_attn.v_proj.weight": "model.safetensors",
"model.layers.16.input_layernorm.weight": "model.safetensors",
"model.layers.16.mlp.down_proj.weight": "model.safetensors",
"model.layers.16.mlp.gate_proj.weight": "model.safetensors",
"model.layers.16.mlp.up_proj.weight": "model.safetensors",
"model.layers.16.post_attention_layernorm.weight": "model.safetensors",
"model.layers.16.post_feedforward_layernorm.weight": "model.safetensors",
"model.layers.16.pre_feedforward_layernorm.weight": "model.safetensors",
"model.layers.16.self_attn.k_norm.weight": "model.safetensors",
"model.layers.16.self_attn.k_proj.weight": "model.safetensors",
"model.layers.16.self_attn.o_proj.weight": "model.safetensors",
"model.layers.16.self_attn.q_norm.weight": "model.safetensors",
"model.layers.16.self_attn.q_proj.weight": "model.safetensors",
"model.layers.16.self_attn.v_proj.weight": "model.safetensors",
"model.layers.17.input_layernorm.weight": "model.safetensors",
"model.layers.17.mlp.down_proj.weight": "model.safetensors",
"model.layers.17.mlp.gate_proj.weight": "model.safetensors",
"model.layers.17.mlp.up_proj.weight": "model.safetensors",
"model.layers.17.post_attention_layernorm.weight": "model.safetensors",
"model.layers.17.post_feedforward_layernorm.weight": "model.safetensors",
"model.layers.17.pre_feedforward_layernorm.weight": "model.safetensors",
"model.layers.17.self_attn.k_norm.weight": "model.safetensors",
"model.layers.17.self_attn.k_proj.weight": "model.safetensors",
"model.layers.17.self_attn.o_proj.weight": "model.safetensors",
"model.layers.17.self_attn.q_norm.weight": "model.safetensors",
"model.layers.17.self_attn.q_proj.weight": "model.safetensors",
"model.layers.17.self_attn.v_proj.weight": "model.safetensors",
"model.layers.2.input_layernorm.weight": "model.safetensors",
"model.layers.2.mlp.down_proj.weight": "model.safetensors",
"model.layers.2.mlp.gate_proj.weight": "model.safetensors",
"model.layers.2.mlp.up_proj.weight": "model.safetensors",
"model.layers.2.post_attention_layernorm.weight": "model.safetensors",
"model.layers.2.post_feedforward_layernorm.weight": "model.safetensors",
"model.layers.2.pre_feedforward_layernorm.weight": "model.safetensors",
"model.layers.2.self_attn.k_norm.weight": "model.safetensors",
"model.layers.2.self_attn.k_proj.weight": "model.safetensors",
"model.layers.2.self_attn.o_proj.weight": "model.safetensors",
"model.layers.2.self_attn.q_norm.weight": "model.safetensors",
"model.layers.2.self_attn.q_proj.weight": "model.safetensors",
"model.layers.2.self_attn.v_proj.weight": "model.safetensors",
"model.layers.3.input_layernorm.weight": "model.safetensors",
"model.layers.3.mlp.down_proj.weight": "model.safetensors",
"model.layers.3.mlp.gate_proj.weight": "model.safetensors",
"model.layers.3.mlp.up_proj.weight": "model.safetensors",
"model.layers.3.post_attention_layernorm.weight": "model.safetensors",
"model.layers.3.post_feedforward_layernorm.weight": "model.safetensors",
"model.layers.3.pre_feedforward_layernorm.weight": "model.safetensors",
"model.layers.3.self_attn.k_norm.weight": "model.safetensors",
"model.layers.3.self_attn.k_proj.weight": "model.safetensors",
"model.layers.3.self_attn.o_proj.weight": "model.safetensors",
"model.layers.3.self_attn.q_norm.weight": "model.safetensors",
"model.layers.3.self_attn.q_proj.weight": "model.safetensors",
"model.layers.3.self_attn.v_proj.weight": "model.safetensors",
"model.layers.4.input_layernorm.weight": "model.safetensors",
"model.layers.4.mlp.down_proj.weight": "model.safetensors",
"model.layers.4.mlp.gate_proj.weight": "model.safetensors",
"model.layers.4.mlp.up_proj.weight": "model.safetensors",
"model.layers.4.post_attention_layernorm.weight": "model.safetensors",
"model.layers.4.post_feedforward_layernorm.weight": "model.safetensors",
"model.layers.4.pre_feedforward_layernorm.weight": "model.safetensors",
"model.layers.4.self_attn.k_norm.weight": "model.safetensors",
"model.layers.4.self_attn.k_proj.weight": "model.safetensors",
"model.layers.4.self_attn.o_proj.weight": "model.safetensors",
"model.layers.4.self_attn.q_norm.weight": "model.safetensors",
"model.layers.4.self_attn.q_proj.weight": "model.safetensors",
"model.layers.4.self_attn.v_proj.weight": "model.safetensors",
"model.layers.5.input_layernorm.weight": "model.safetensors",
"model.layers.5.mlp.down_proj.weight": "model.safetensors",
"model.layers.5.mlp.gate_proj.weight": "model.safetensors",
"model.layers.5.mlp.up_proj.weight": "model.safetensors",
"model.layers.5.post_attention_layernorm.weight": "model.safetensors",
"model.layers.5.post_feedforward_layernorm.weight": "model.safetensors",
"model.layers.5.pre_feedforward_layernorm.weight": "model.safetensors",
"model.layers.5.self_attn.k_norm.weight": "model.safetensors",
"model.layers.5.self_attn.k_proj.weight": "model.safetensors",
"model.layers.5.self_attn.o_proj.weight": "model.safetensors",
"model.layers.5.self_attn.q_norm.weight": "model.safetensors",
"model.layers.5.self_attn.q_proj.weight": "model.safetensors",
"model.layers.5.self_attn.v_proj.weight": "model.safetensors",
"model.layers.6.input_layernorm.weight": "model.safetensors",
"model.layers.6.mlp.down_proj.weight": "model.safetensors",
"model.layers.6.mlp.gate_proj.weight": "model.safetensors",
"model.layers.6.mlp.up_proj.weight": "model.safetensors",
"model.layers.6.post_attention_layernorm.weight": "model.safetensors",
"model.layers.6.post_feedforward_layernorm.weight": "model.safetensors",
"model.layers.6.pre_feedforward_layernorm.weight": "model.safetensors",
"model.layers.6.self_attn.k_norm.weight": "model.safetensors",
"model.layers.6.self_attn.k_proj.weight": "model.safetensors",
"model.layers.6.self_attn.o_proj.weight": "model.safetensors",
"model.layers.6.self_attn.q_norm.weight": "model.safetensors",
"model.layers.6.self_attn.q_proj.weight": "model.safetensors",
"model.layers.6.self_attn.v_proj.weight": "model.safetensors",
"model.layers.7.input_layernorm.weight": "model.safetensors",
"model.layers.7.mlp.down_proj.weight": "model.safetensors",
"model.layers.7.mlp.gate_proj.weight": "model.safetensors",
"model.layers.7.mlp.up_proj.weight": "model.safetensors",
"model.layers.7.post_attention_layernorm.weight": "model.safetensors",
"model.layers.7.post_feedforward_layernorm.weight": "model.safetensors",
"model.layers.7.pre_feedforward_layernorm.weight": "model.safetensors",
"model.layers.7.self_attn.k_norm.weight": "model.safetensors",
"model.layers.7.self_attn.k_proj.weight": "model.safetensors",
"model.layers.7.self_attn.o_proj.weight": "model.safetensors",
"model.layers.7.self_attn.q_norm.weight": "model.safetensors",
"model.layers.7.self_attn.q_proj.weight": "model.safetensors",
"model.layers.7.self_attn.v_proj.weight": "model.safetensors",
"model.layers.8.input_layernorm.weight": "model.safetensors",
"model.layers.8.mlp.down_proj.weight": "model.safetensors",
"model.layers.8.mlp.gate_proj.weight": "model.safetensors",
"model.layers.8.mlp.up_proj.weight": "model.safetensors",
"model.layers.8.post_attention_layernorm.weight": "model.safetensors",
"model.layers.8.post_feedforward_layernorm.weight": "model.safetensors",
"model.layers.8.pre_feedforward_layernorm.weight": "model.safetensors",
"model.layers.8.self_attn.k_norm.weight": "model.safetensors",
"model.layers.8.self_attn.k_proj.weight": "model.safetensors",
"model.layers.8.self_attn.o_proj.weight": "model.safetensors",
"model.layers.8.self_attn.q_norm.weight": "model.safetensors",
"model.layers.8.self_attn.q_proj.weight": "model.safetensors",
"model.layers.8.self_attn.v_proj.weight": "model.safetensors",
"model.layers.9.input_layernorm.weight": "model.safetensors",
"model.layers.9.mlp.down_proj.weight": "model.safetensors",
"model.layers.9.mlp.gate_proj.weight": "model.safetensors",
"model.layers.9.mlp.up_proj.weight": "model.safetensors",
"model.layers.9.post_attention_layernorm.weight": "model.safetensors",
"model.layers.9.post_feedforward_layernorm.weight": "model.safetensors",
"model.layers.9.pre_feedforward_layernorm.weight": "model.safetensors",
"model.layers.9.self_attn.k_norm.weight": "model.safetensors",
"model.layers.9.self_attn.k_proj.weight": "model.safetensors",
"model.layers.9.self_attn.o_proj.weight": "model.safetensors",
"model.layers.9.self_attn.q_norm.weight": "model.safetensors",
"model.layers.9.self_attn.q_proj.weight": "model.safetensors",
"model.layers.9.self_attn.v_proj.weight": "model.safetensors",
"model.norm.weight": "model.safetensors"
}
}

3
tokenizer.json Normal file
View File

@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:3b83627b470a2b3eeb6cbd480490191e50f21549cb3de1d0fcc1a001a48c6c04
size 33378493

27
tokenizer_config.json Normal file
View File

@@ -0,0 +1,27 @@
{
"additional_special_tokens": null,
"backend": "tokenizers",
"boi_token": "<start_of_image>",
"bos_token": "<bos>",
"clean_up_tokenization_spaces": false,
"eoi_token": "<end_of_image>",
"eos_token": "<eos>",
"image_token": "<image_soft_token>",
"is_local": true,
"mask_token": "<mask>",
"model_max_length": 1000000000000000019884624838656,
"model_specific_special_tokens": {
"boi_token": "<start_of_image>",
"eoi_token": "<end_of_image>",
"image_token": "<image_soft_token>",
"sfr_token": "<start_function_response>"
},
"pad_token": "<pad>",
"padding_side": "left",
"sfr_token": "<start_function_response>",
"sp_model_kwargs": null,
"spaces_between_special_tokens": false,
"tokenizer_class": "GemmaTokenizer",
"unk_token": "<unk>",
"use_default_system_prompt": false
}