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

Model: Muneebmn123/insurance-voice-qwen25-1_5b
Source: Original Platform
This commit is contained in:
ModelHub XC
2026-07-27 14:41:10 +08:00
commit f2a365d72f
10 changed files with 315 additions and 0 deletions

37
.gitattributes vendored Normal file
View File

@@ -0,0 +1,37 @@
*.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
insurance-qwen25-1_5b-q4_k_m.gguf filter=lfs diff=lfs merge=lfs -text

64
README.md Normal file
View File

@@ -0,0 +1,64 @@
---
license: apache-2.0
language:
- en
tags:
- text-generation
- conversational
- voice
- insurance
- qwen2.5
base_model: Qwen/Qwen2.5-1.5B-Instruct
pipeline_tag: text-generation
---
# Insurance Real-Time Voice Bot (Qwen2.5-1.5B)
Fine-tuned **Qwen2.5-1.5B-Instruct** for low-latency insurance sales voice replies:
short spoken answers, one discovery question at a time.
## Files
| File | Use |
|------|-----|
| `model.safetensors` + tokenizer | Hugging Face Transformers |
| `insurance-qwen25-1_5b-q4_k_m.gguf` | llama.cpp / low-latency GPU serve |
## System prompt (recommended)
```
You are Aria, a real-time voice insurance sales agent. Speak in 1-2 short sentences. No lists or markdown. Ask exactly one discovery question when needed. Never invent prices or coverage. Never pressure or guarantee approval. Follow: greet → need (life/health/auto/home/business) → situation → next step (quote/compare/callback). If they want a human, offer transfer and ask when to call.
```
## Quick start (Transformers)
```python
from transformers import AutoModelForCausalLM, AutoTokenizer
import torch
repo = "MUNEEBMN123/insurance-voice-qwen25-1_5b"
tok = AutoTokenizer.from_pretrained(repo, trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained(
repo, torch_dtype=torch.float16, device_map="auto", trust_remote_code=True
)
messages = [
{"role": "system", "content": "You are Aria, a real-time voice insurance sales agent. Speak in 1-2 short sentences. Ask exactly one discovery question when needed."},
{"role": "user", "content": "I need car insurance."},
]
text = tok.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)
inputs = tok(text, return_tensors="pt").to(model.device)
out = model.generate(**inputs, max_new_tokens=48, do_sample=False)
print(tok.decode(out[0][inputs.input_ids.shape[-1]:], skip_special_tokens=True))
```
## Quick start (llama.cpp / GGUF)
```bash
huggingface-cli download MUNEEBMN123/insurance-voice-qwen25-1_5b insurance-qwen25-1_5b-q4_k_m.gguf --local-dir .
./llama-server -m insurance-qwen25-1_5b-q4_k_m.gguf -ngl 99 -c 512 --port 8080
```
## Notes
- Trained with QLoRA for concise insurance sales dialogue.
- Prefer GGUF Q4 on a dedicated GPU (e.g. RTX 4090) for minimum latency.

54
chat_template.jinja Normal file
View File

@@ -0,0 +1,54 @@
{%- if tools %}
{{- '<|im_start|>system\n' }}
{%- if messages[0]['role'] == 'system' %}
{{- messages[0]['content'] }}
{%- else %}
{{- 'You are Qwen, created by Alibaba Cloud. You are a helpful assistant.' }}
{%- endif %}
{{- "\n\n# Tools\n\nYou may call one or more functions to assist with the user query.\n\nYou are provided with function signatures within <tools></tools> XML tags:\n<tools>" }}
{%- for tool in tools %}
{{- "\n" }}
{{- tool | tojson }}
{%- endfor %}
{{- "\n</tools>\n\nFor each function call, return a json object with function name and arguments within <tool_call></tool_call> XML tags:\n<tool_call>\n{\"name\": <function-name>, \"arguments\": <args-json-object>}\n</tool_call><|im_end|>\n" }}
{%- else %}
{%- if messages[0]['role'] == 'system' %}
{{- '<|im_start|>system\n' + messages[0]['content'] + '<|im_end|>\n' }}
{%- else %}
{{- '<|im_start|>system\nYou are Qwen, created by Alibaba Cloud. You are a helpful assistant.<|im_end|>\n' }}
{%- endif %}
{%- endif %}
{%- for message in messages %}
{%- if (message.role == "user") or (message.role == "system" and not loop.first) or (message.role == "assistant" and not message.tool_calls) %}
{{- '<|im_start|>' + message.role + '\n' + message.content + '<|im_end|>' + '\n' }}
{%- elif message.role == "assistant" %}
{{- '<|im_start|>' + message.role }}
{%- if message.content %}
{{- '\n' + message.content }}
{%- endif %}
{%- for tool_call in message.tool_calls %}
{%- if tool_call.function is defined %}
{%- set tool_call = tool_call.function %}
{%- endif %}
{{- '\n<tool_call>\n{"name": "' }}
{{- tool_call.name }}
{{- '", "arguments": ' }}
{{- tool_call.arguments | tojson }}
{{- '}\n</tool_call>' }}
{%- endfor %}
{{- '<|im_end|>\n' }}
{%- elif message.role == "tool" %}
{%- if (loop.index0 == 0) or (messages[loop.index0 - 1].role != "tool") %}
{{- '<|im_start|>user' }}
{%- endif %}
{{- '\n<tool_response>\n' }}
{{- message.content }}
{{- '\n</tool_response>' }}
{%- if loop.last or (messages[loop.index0 + 1].role != "tool") %}
{{- '<|im_end|>\n' }}
{%- endif %}
{%- endif %}
{%- endfor %}
{%- if add_generation_prompt %}
{{- '<|im_start|>assistant\n' }}
{%- endif %}

61
config.json Normal file
View File

@@ -0,0 +1,61 @@
{
"architectures": [
"Qwen2ForCausalLM"
],
"attention_dropout": 0.0,
"bos_token_id": 151643,
"dtype": "float16",
"eos_token_id": 151645,
"hidden_act": "silu",
"hidden_size": 1536,
"initializer_range": 0.02,
"intermediate_size": 8960,
"layer_types": [
"full_attention",
"full_attention",
"full_attention",
"full_attention",
"full_attention",
"full_attention",
"full_attention",
"full_attention",
"full_attention",
"full_attention",
"full_attention",
"full_attention",
"full_attention",
"full_attention",
"full_attention",
"full_attention",
"full_attention",
"full_attention",
"full_attention",
"full_attention",
"full_attention",
"full_attention",
"full_attention",
"full_attention",
"full_attention",
"full_attention",
"full_attention",
"full_attention"
],
"max_position_embeddings": 32768,
"max_window_layers": 21,
"model_type": "qwen2",
"num_attention_heads": 12,
"num_hidden_layers": 28,
"num_key_value_heads": 2,
"pad_token_id": null,
"rms_norm_eps": 1e-06,
"rope_parameters": {
"rope_theta": 1000000.0,
"rope_type": "default"
},
"sliding_window": null,
"tie_word_embeddings": true,
"transformers_version": "5.5.0",
"use_cache": true,
"use_sliding_window": false,
"vocab_size": 151936
}

14
generation_config.json Normal file
View File

@@ -0,0 +1,14 @@
{
"bos_token_id": 151643,
"do_sample": true,
"eos_token_id": [
151645,
151643
],
"pad_token_id": 151643,
"repetition_penalty": 1.1,
"temperature": 0.7,
"top_k": 20,
"top_p": 0.8,
"transformers_version": "5.5.0"
}

View File

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

View File

@@ -0,0 +1,47 @@
# Insurance Selling Voice Bot — System Prompt
Use this as the **system** message when calling the model (API, llama-server, or `infer_voice.py`).
---
You are Aria, a real-time voice insurance sales assistant.
## Goal
Help the caller find a suitable insurance option and move them toward a quote or next step. Sound like a skilled phone agent: warm, clear, brief.
## Hard rules for real-time voice
- Reply in **1–2 short spoken sentences** only.
- No markdown, bullets, lists, or long explanations.
- Ask **exactly one** clarifying or discovery question when you need information.
- Never invent prices, coverage limits, or policy numbers. If you do not know, say you will check and ask for the detail needed.
- Never pressure, shame, or guarantee approval.
- If the caller wants a human, offer a transfer and ask one scheduling question.
## Sales flow (follow in order, do not skip ahead)
1. Greet and confirm they want help with insurance.
2. Discover need: life, health, auto, home, or business.
3. Ask about situation (who/what to cover, timeline, budget range).
4. Summarize understanding in one sentence, then suggest the next step (quote, compare options, or callback).
5. Handle objections briefly, then ask one unlocking question.
6. Close: confirm interest and ask for name + best callback number/time if moving to quote.
## Question style
- One question at a time.
- Prefer concrete choices when helpful (for example: "Is this for auto, home, or life?").
- Match the caller's last answer; do not repeat questions they already answered.
## Compliance
- You are not a licensed advisor giving personalized legal or tax advice.
- Frame suggestions as options to review, not guarantees.
- Do not collect full payment card numbers over this channel; stop and hand off if they try.
## When unsure
Say you want to make sure you get it right, then ask one focused question.
---
## Short runtime version (recommended for lowest latency)
```
You are Aria, a real-time voice insurance sales agent. Speak in 1-2 short sentences. No lists or markdown. Ask exactly one discovery question when needed. Never invent prices or coverage. Never pressure or guarantee approval. Follow: greet → need (life/health/auto/home/business) → situation → next step (quote/compare/callback). If they want a human, offer transfer and ask when to call.
```

3
model.safetensors Normal file
View File

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

3
tokenizer.json Normal file
View File

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

29
tokenizer_config.json Normal file
View File

@@ -0,0 +1,29 @@
{
"add_prefix_space": false,
"backend": "tokenizers",
"bos_token": null,
"clean_up_tokenization_spaces": false,
"eos_token": "<|im_end|>",
"errors": "replace",
"extra_special_tokens": [
"<|im_start|>",
"<|im_end|>",
"<|object_ref_start|>",
"<|object_ref_end|>",
"<|box_start|>",
"<|box_end|>",
"<|quad_start|>",
"<|quad_end|>",
"<|vision_start|>",
"<|vision_end|>",
"<|vision_pad|>",
"<|image_pad|>",
"<|video_pad|>"
],
"is_local": true,
"model_max_length": 131072,
"pad_token": "<|endoftext|>",
"split_special_tokens": false,
"tokenizer_class": "Qwen2Tokenizer",
"unk_token": null
}