初始化项目,由ModelHub XC社区提供模型
Model: DineshKasi/ai-assistant Source: Original Platform
This commit is contained in:
35
.gitattributes
vendored
Normal file
35
.gitattributes
vendored
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
*.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
|
||||||
58
README.md
Normal file
58
README.md
Normal file
@@ -0,0 +1,58 @@
|
|||||||
|
---
|
||||||
|
base_model: microsoft/DialoGPT-medium
|
||||||
|
library_name: transformers
|
||||||
|
model_name: ai-assistant
|
||||||
|
tags:
|
||||||
|
- generated_from_trainer
|
||||||
|
- sft
|
||||||
|
- trl
|
||||||
|
licence: license
|
||||||
|
---
|
||||||
|
|
||||||
|
# Model Card for ai-assistant
|
||||||
|
|
||||||
|
This model is a fine-tuned version of [microsoft/DialoGPT-medium](https://huggingface.co/microsoft/DialoGPT-medium).
|
||||||
|
It has been trained using [TRL](https://github.com/huggingface/trl).
|
||||||
|
|
||||||
|
## Quick start
|
||||||
|
|
||||||
|
```python
|
||||||
|
from transformers import pipeline
|
||||||
|
|
||||||
|
question = "If you had a time machine, but could only go to the past or the future once and never return, which would you choose and why?"
|
||||||
|
generator = pipeline("text-generation", model="DineshKasi/ai-assistant", device="cuda")
|
||||||
|
output = generator([{"role": "user", "content": question}], max_new_tokens=128, return_full_text=False)[0]
|
||||||
|
print(output["generated_text"])
|
||||||
|
```
|
||||||
|
|
||||||
|
## Training procedure
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
This model was trained with SFT.
|
||||||
|
|
||||||
|
### Framework versions
|
||||||
|
|
||||||
|
- TRL: 1.0.0
|
||||||
|
- Transformers: 5.0.0
|
||||||
|
- Pytorch: 2.10.0+cu128
|
||||||
|
- Datasets: 4.8.4
|
||||||
|
- Tokenizers: 0.22.2
|
||||||
|
|
||||||
|
## Citations
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Cite TRL as:
|
||||||
|
|
||||||
|
```bibtex
|
||||||
|
@software{vonwerra2020trl,
|
||||||
|
title = {{TRL: Transformers Reinforcement Learning}},
|
||||||
|
author = {von Werra, Leandro and Belkada, Younes and Tunstall, Lewis and Beeching, Edward and Thrush, Tristan and Lambert, Nathan and Huang, Shengyi and Rasul, Kashif and Gallouédec, Quentin},
|
||||||
|
license = {Apache-2.0},
|
||||||
|
url = {https://github.com/huggingface/trl},
|
||||||
|
year = {2020}
|
||||||
|
}
|
||||||
|
```
|
||||||
208
app.py
Normal file
208
app.py
Normal file
@@ -0,0 +1,208 @@
|
|||||||
|
"""
|
||||||
|
STEP 3 — Gradio app that uses YOUR OWN model
|
||||||
|
=============================================
|
||||||
|
Upload this as app.py to your Hugging Face Space.
|
||||||
|
It loads YOUR model (dineshkasi/my-ai-assistant) — not anyone else's!
|
||||||
|
|
||||||
|
Your friends visit:
|
||||||
|
https://huggingface.co/spaces/YOUR_USERNAME/YOUR_MODEL_NAME
|
||||||
|
"""
|
||||||
|
|
||||||
|
import torch
|
||||||
|
import gradio as gr
|
||||||
|
from transformers import AutoModelForCausalLM, AutoTokenizer
|
||||||
|
|
||||||
|
# ══════════════════════════════════════════════════════
|
||||||
|
# ✏️ CHANGE THESE TO YOUR OWN DETAILS
|
||||||
|
# ══════════════════════════════════════════════════════
|
||||||
|
HF_USERNAME = "DineshKasi"
|
||||||
|
MODEL_NAME = "ai-assistant"
|
||||||
|
# ══════════════════════════════════════════════════════
|
||||||
|
|
||||||
|
REPO_ID = f"{HF_USERNAME}/{MODEL_NAME}"
|
||||||
|
|
||||||
|
print(f"Loading YOUR model: {REPO_ID} ...")
|
||||||
|
tokenizer = AutoTokenizer.from_pretrained(REPO_ID)
|
||||||
|
model = AutoModelForCausalLM.from_pretrained(REPO_ID)
|
||||||
|
model.eval()
|
||||||
|
print("Model loaded!")
|
||||||
|
|
||||||
|
|
||||||
|
def ask(question, history, temperature, max_tokens):
|
||||||
|
"""Generate a response from YOUR model."""
|
||||||
|
# Build context from history (last 3 turns)
|
||||||
|
context = ""
|
||||||
|
for user_msg, bot_msg in history[-3:]:
|
||||||
|
context += f"<|user|>{user_msg}<|endoftext|>"
|
||||||
|
context += f"<|assistant|>{bot_msg}<|endoftext|>"
|
||||||
|
|
||||||
|
prompt = context + f"<|user|>{question}<|endoftext|><|assistant|>"
|
||||||
|
|
||||||
|
inputs = tokenizer.encode(prompt, return_tensors="pt")
|
||||||
|
|
||||||
|
with torch.no_grad():
|
||||||
|
output = model.generate(
|
||||||
|
inputs,
|
||||||
|
max_new_tokens=int(max_tokens),
|
||||||
|
temperature=float(temperature),
|
||||||
|
do_sample=True,
|
||||||
|
top_p=0.92,
|
||||||
|
repetition_penalty=1.1,
|
||||||
|
pad_token_id=tokenizer.eos_token_id,
|
||||||
|
eos_token_id=tokenizer.eos_token_id,
|
||||||
|
)
|
||||||
|
|
||||||
|
full_text = tokenizer.decode(output[0], skip_special_tokens=True)
|
||||||
|
|
||||||
|
# Extract only the last assistant reply
|
||||||
|
if "<|assistant|>" in full_text:
|
||||||
|
reply = full_text.split("<|assistant|>")[-1].strip()
|
||||||
|
else:
|
||||||
|
reply = full_text[len(prompt):].strip()
|
||||||
|
|
||||||
|
return reply
|
||||||
|
|
||||||
|
|
||||||
|
# ── Gradio UI ─────────────────────────────────────────
|
||||||
|
with gr.Blocks(
|
||||||
|
theme=gr.themes.Soft(primary_hue="violet"),
|
||||||
|
title=f"{HF_USERNAME}'s AI Assistant",
|
||||||
|
css="""
|
||||||
|
#header { text-align:center; padding: 24px 0 8px; }
|
||||||
|
#header h1 { font-size:2rem; font-weight:700; color:#7c3aed; margin:0; }
|
||||||
|
#header p { color:#6b7280; margin:6px 0 0; }
|
||||||
|
.badge {
|
||||||
|
display:inline-block; background:#f3e8ff; color:#7c3aed;
|
||||||
|
border-radius:999px; padding:3px 14px; font-size:0.8rem;
|
||||||
|
margin:3px; font-weight:500;
|
||||||
|
}
|
||||||
|
#badges { text-align:center; margin:8px 0 18px; }
|
||||||
|
#model-credit {
|
||||||
|
text-align:center; margin-top:14px;
|
||||||
|
font-size:0.8rem; color:#9ca3af;
|
||||||
|
}
|
||||||
|
#model-credit a { color:#7c3aed; text-decoration:none; }
|
||||||
|
footer { display:none !important; }
|
||||||
|
""",
|
||||||
|
) as demo:
|
||||||
|
|
||||||
|
gr.HTML(f"""
|
||||||
|
<div id="header">
|
||||||
|
<h1>🤖 {HF_USERNAME}'s AI Assistant</h1>
|
||||||
|
<p>Powered by <a href="https://huggingface.co/{REPO_ID}" target="_blank"
|
||||||
|
style="color:#7c3aed;">{REPO_ID}</a> — your very own model!</p>
|
||||||
|
</div>
|
||||||
|
<div id="badges">
|
||||||
|
<span class="badge">💻 Coding</span>
|
||||||
|
<span class="badge">🔬 Science</span>
|
||||||
|
<span class="badge">📐 Math</span>
|
||||||
|
<span class="badge">✍️ Writing</span>
|
||||||
|
<span class="badge">📊 Business</span>
|
||||||
|
<span class="badge">🌍 General</span>
|
||||||
|
</div>
|
||||||
|
""")
|
||||||
|
|
||||||
|
chatbot = gr.Chatbot(
|
||||||
|
label="Chat with my model",
|
||||||
|
bubble_full_width=False,
|
||||||
|
height=460,
|
||||||
|
)
|
||||||
|
|
||||||
|
with gr.Row():
|
||||||
|
txt = gr.Textbox(
|
||||||
|
placeholder="Ask me anything...",
|
||||||
|
show_label=False,
|
||||||
|
scale=8,
|
||||||
|
container=False,
|
||||||
|
)
|
||||||
|
btn = gr.Button("Send ➤", variant="primary", scale=1)
|
||||||
|
|
||||||
|
gr.Examples(
|
||||||
|
examples=[
|
||||||
|
"Write a Python function to find prime numbers",
|
||||||
|
"Explain how neural networks learn",
|
||||||
|
"What is the difference between RAM and ROM?",
|
||||||
|
"Help me write a professional email",
|
||||||
|
"What is quantum entanglement?",
|
||||||
|
"How does a binary search tree work?",
|
||||||
|
],
|
||||||
|
inputs=txt,
|
||||||
|
label="💡 Try these",
|
||||||
|
)
|
||||||
|
|
||||||
|
with gr.Accordion("⚙️ Settings", open=False):
|
||||||
|
temperature = gr.Slider(0.1, 1.2, value=0.7, step=0.1,
|
||||||
|
label="Temperature (creativity)")
|
||||||
|
max_tokens = gr.Slider(64, 512, value=200, step=32,
|
||||||
|
label="Max response length")
|
||||||
|
|
||||||
|
with gr.Accordion("🔌 Use this model in your project", open=False):
|
||||||
|
gr.Markdown(f"""
|
||||||
|
### Load my model directly in Python
|
||||||
|
|
||||||
|
```python
|
||||||
|
pip install transformers torch
|
||||||
|
```
|
||||||
|
|
||||||
|
```python
|
||||||
|
from transformers import AutoModelForCausalLM, AutoTokenizer
|
||||||
|
import torch
|
||||||
|
|
||||||
|
tokenizer = AutoTokenizer.from_pretrained("{REPO_ID}")
|
||||||
|
model = AutoModelForCausalLM.from_pretrained("{REPO_ID}")
|
||||||
|
|
||||||
|
def ask(question):
|
||||||
|
prompt = f"<|user|>{{question}}<|endoftext|><|assistant|>"
|
||||||
|
inputs = tokenizer.encode(prompt, return_tensors="pt")
|
||||||
|
with torch.no_grad():
|
||||||
|
output = model.generate(inputs, max_new_tokens=200,
|
||||||
|
temperature=0.7, do_sample=True,
|
||||||
|
pad_token_id=tokenizer.eos_token_id)
|
||||||
|
reply = tokenizer.decode(output[0], skip_special_tokens=True)
|
||||||
|
return reply.split("<|assistant|>")[-1].strip()
|
||||||
|
|
||||||
|
print(ask("Explain machine learning in simple terms"))
|
||||||
|
```
|
||||||
|
|
||||||
|
### Via Hugging Face Inference API (no install)
|
||||||
|
|
||||||
|
```python
|
||||||
|
from huggingface_hub import InferenceClient
|
||||||
|
|
||||||
|
client = InferenceClient("{REPO_ID}")
|
||||||
|
result = client.text_generation(
|
||||||
|
"<|user|>What is a neural network?<|endoftext|><|assistant|>",
|
||||||
|
max_new_tokens=200,
|
||||||
|
)
|
||||||
|
print(result)
|
||||||
|
```
|
||||||
|
|
||||||
|
> Model page: [huggingface.co/{REPO_ID}](https://huggingface.co/{REPO_ID})
|
||||||
|
""")
|
||||||
|
|
||||||
|
gr.HTML(f"""
|
||||||
|
<div id="model-credit">
|
||||||
|
Model: <a href="https://huggingface.co/{REPO_ID}">{REPO_ID}</a>
|
||||||
|
· Built by {HF_USERNAME}
|
||||||
|
· Hosted on Hugging Face Spaces
|
||||||
|
</div>
|
||||||
|
""")
|
||||||
|
|
||||||
|
# Wiring
|
||||||
|
def submit(msg, history):
|
||||||
|
return "", history + [[msg, None]]
|
||||||
|
|
||||||
|
def respond(history, temp, max_tok):
|
||||||
|
question = history[-1][0]
|
||||||
|
history[-1][1] = ask(question, history[:-1], temp, max_tok)
|
||||||
|
return history
|
||||||
|
|
||||||
|
txt.submit(submit, [txt, chatbot], [txt, chatbot], queue=False).then(
|
||||||
|
respond, [chatbot, temperature, max_tokens], chatbot
|
||||||
|
)
|
||||||
|
btn.click(submit, [txt, chatbot], [txt, chatbot], queue=False).then(
|
||||||
|
respond, [chatbot, temperature, max_tokens], chatbot
|
||||||
|
)
|
||||||
|
|
||||||
|
demo.queue()
|
||||||
|
demo.launch()
|
||||||
1
chat_template.jinja
Normal file
1
chat_template.jinja
Normal file
@@ -0,0 +1 @@
|
|||||||
|
{% for message in messages %}{{ message.content }}{{ eos_token }}{% endfor %}
|
||||||
40
config.json
Normal file
40
config.json
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
{
|
||||||
|
"activation_function": "gelu_new",
|
||||||
|
"add_cross_attention": false,
|
||||||
|
"architectures": [
|
||||||
|
"GPT2LMHeadModel"
|
||||||
|
],
|
||||||
|
"attn_pdrop": 0.1,
|
||||||
|
"bos_token_id": 50256,
|
||||||
|
"dtype": "float32",
|
||||||
|
"embd_pdrop": 0.1,
|
||||||
|
"eos_token_id": 50256,
|
||||||
|
"initializer_range": 0.02,
|
||||||
|
"layer_norm_epsilon": 1e-05,
|
||||||
|
"model_type": "gpt2",
|
||||||
|
"n_ctx": 1024,
|
||||||
|
"n_embd": 1024,
|
||||||
|
"n_head": 16,
|
||||||
|
"n_inner": null,
|
||||||
|
"n_layer": 24,
|
||||||
|
"n_positions": 1024,
|
||||||
|
"pad_token_id": 50256,
|
||||||
|
"reorder_and_upcast_attn": false,
|
||||||
|
"resid_pdrop": 0.1,
|
||||||
|
"scale_attn_by_inverse_layer_idx": false,
|
||||||
|
"scale_attn_weights": true,
|
||||||
|
"summary_activation": null,
|
||||||
|
"summary_first_dropout": 0.1,
|
||||||
|
"summary_proj_to_labels": true,
|
||||||
|
"summary_type": "cls_index",
|
||||||
|
"summary_use_proj": true,
|
||||||
|
"task_specific_params": {
|
||||||
|
"conversational": {
|
||||||
|
"max_length": 1000
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"tie_word_embeddings": false,
|
||||||
|
"transformers_version": "5.0.0",
|
||||||
|
"use_cache": false,
|
||||||
|
"vocab_size": 50257
|
||||||
|
}
|
||||||
9
generation_config.json
Normal file
9
generation_config.json
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
{
|
||||||
|
"_from_model_config": true,
|
||||||
|
"bos_token_id": 50256,
|
||||||
|
"eos_token_id": [
|
||||||
|
50256
|
||||||
|
],
|
||||||
|
"pad_token_id": 50256,
|
||||||
|
"transformers_version": "5.0.0"
|
||||||
|
}
|
||||||
3
model.safetensors
Normal file
3
model.safetensors
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:b9eb5184a380fdb755ae917ab03703a2b4057b8e54037b80b6437abed13f01c5
|
||||||
|
size 1625175792
|
||||||
7
requirements.txt
Normal file
7
requirements.txt
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
transformers>=4.38.0
|
||||||
|
datasets>=2.18.0
|
||||||
|
accelerate>=0.27.0
|
||||||
|
huggingface_hub>=0.21.0
|
||||||
|
torch>=2.0.0
|
||||||
|
gradio>=4.0.0
|
||||||
|
tqdm
|
||||||
250326
tokenizer.json
Normal file
250326
tokenizer.json
Normal file
File diff suppressed because it is too large
Load Diff
13
tokenizer_config.json
Normal file
13
tokenizer_config.json
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
{
|
||||||
|
"add_prefix_space": false,
|
||||||
|
"backend": "tokenizers",
|
||||||
|
"bos_token": "<|endoftext|>",
|
||||||
|
"clean_up_tokenization_spaces": true,
|
||||||
|
"eos_token": "<|endoftext|>",
|
||||||
|
"errors": "replace",
|
||||||
|
"is_local": false,
|
||||||
|
"model_max_length": 1024,
|
||||||
|
"pad_token": "<|endoftext|>",
|
||||||
|
"tokenizer_class": "GPT2Tokenizer",
|
||||||
|
"unk_token": "<|endoftext|>"
|
||||||
|
}
|
||||||
3
training_args.bin
Normal file
3
training_args.bin
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:1cd115a50865c9da87775f08f6a5bf9e28b5ebc21b0b76dc208ba96181b1276d
|
||||||
|
size 5713
|
||||||
Reference in New Issue
Block a user