Spaces:
Runtime error
Runtime error
| # app.py | |
| import os | |
| from transformers import AutoTokenizer, AutoModelForCausalLM, pipeline | |
| import gradio as gr | |
| # 设置缓存目录(节省空间) | |
| os.environ["HF_HOME"] = "/tmp/hf_cache" | |
| # 模型名称(来自 Hugging Face) | |
| model_name = "UnfilteredAI/DAN-L3-R1-8B" | |
| # 加载分词器 | |
| tokenizer = AutoTokenizer.from_pretrained(model_name) | |
| # 创建文本生成 pipeline | |
| pipe = pipeline( | |
| "text-generation", | |
| model=model_name, | |
| tokenizer=tokenizer, | |
| model_kwargs={"torch_dtype": "auto"}, # 自动选择精度(如 float16) | |
| device_map="auto", # 自动使用 GPU(如果有) | |
| max_new_tokens=512, | |
| temperature=0.7, | |
| top_p=0.9, | |
| repetition_penalty=1.1, | |
| return_full_text=False, # 只返回生成的回复,不包含输入 | |
| ) | |
| # 定义生成函数 | |
| def generate_response(user_input, history): | |
| # 将对话历史转换为 messages 格式 | |
| messages = [] | |
| for idx, (user_msg, assistant_msg) in enumerate(history): | |
| messages.append({"role": "user", "content": user_msg}) | |
| messages.append({"role": "assistant", "content": assistant_msg}) | |
| # 添加当前用户输入 | |
| messages.append({"role": "user", "content": user_input}) | |
| # 调用模型生成回复 | |
| try: | |
| outputs = pipe(messages) | |
| response = outputs[0]["generated_text"].strip() | |
| except Exception as e: | |
| response = f"❌ 模型生成出错:{str(e)}" | |
| # 返回更新后的对话历史 | |
| history.append((user_input, response)) | |
| return "", history | |
| # 创建 Gradio 界面 | |
| with gr.Blocks(title="💬 DAN-L3-R1-8B AI 助手", theme=gr.themes.Soft()) as demo: | |
| gr.Markdown("# 💬 DAN-L3-R1-8B AI 助手") | |
| gr.Markdown("基于 [UnfilteredAI/DAN-L3-R1-8B](https://huggingface.co/UnfilteredAI/DAN-L3-R1-8B) 的对话系统") | |
| chatbot = gr.Chatbot(height=600, show_copy_button=True) | |
| with gr.Row(): | |
| textbox = gr.Textbox( | |
| placeholder="请输入你的问题...", | |
| show_label=False, | |
| scale=7, | |
| container=False, | |
| ) | |
| submit_btn = gr.Button("发送", scale=1) | |
| # 示例问题 | |
| gr.Examples( | |
| examples=[ | |
| "你是谁?", | |
| "讲个笑话", | |
| "写一首关于秋天的诗", | |
| "解释量子力学" | |
| ], | |
| inputs=textbox | |
| ) | |
| # 清空按钮 | |
| clear_btn = gr.Button("🗑️ 清空聊天") | |
| # 事件绑定 | |
| textbox.submit(fn=generate_response, inputs=[textbox, chatbot], outputs=[textbox, chatbot]) | |
| submit_btn.click(fn=generate_response, inputs=[textbox, chatbot], outputs=[textbox, chatbot]) | |
| clear_btn.click(fn=lambda: ("", None), outputs=[textbox, chatbot]) | |
| # 启动应用 | |
| if __name__ == "__main__": | |
| demo.launch() |