From b8adffbe897aaa7f4635819c4a9869eb2bbd0134 Mon Sep 17 00:00:00 2001 From: jingyaogong Date: Fri, 17 Oct 2025 00:11:08 +0800 Subject: [PATCH] [fix] update model --- others/HF-Space/app.py | 320 ----------------------------------------- 1 file changed, 320 deletions(-) delete mode 100644 others/HF-Space/app.py diff --git a/others/HF-Space/app.py b/others/HF-Space/app.py deleted file mode 100644 index e056546..0000000 --- a/others/HF-Space/app.py +++ /dev/null @@ -1,320 +0,0 @@ -import random -import re -from threading import Thread - -import torch -import numpy as np -import streamlit as st - -st.set_page_config(page_title="MiniMind", initial_sidebar_state="collapsed") - -st.markdown(""" - -""", unsafe_allow_html=True) - -system_prompt = [] -device = "cuda" if torch.cuda.is_available() else "cpu" - - -def process_assistant_content(content): - if model_source == "API" and 'R1' not in api_model_name: - return content - if model_source != "API" and 'R1' not in MODEL_PATHS[selected_model][1]: - return content - - if '' in content and '' in content: - content = re.sub(r'()(.*?)()', - r'
推理内容(展开)\2
', - content, - flags=re.DOTALL) - - if '' in content and '' not in content: - content = re.sub(r'(.*?)$', - r'
推理中...\1
', - content, - flags=re.DOTALL) - - if '' not in content and '' in content: - content = re.sub(r'(.*?)
', - r'
推理内容(展开)\1
', - content, - flags=re.DOTALL) - - return content - - -@st.cache_resource -def load_model_tokenizer(model_path): - model = AutoModelForCausalLM.from_pretrained( - model_path, - trust_remote_code=True - ) - tokenizer = AutoTokenizer.from_pretrained( - model_path, - trust_remote_code=True - ) - model = model.eval().to(device) - return model, tokenizer - - -def clear_chat_messages(): - del st.session_state.messages - del st.session_state.chat_messages - - -def init_chat_messages(): - if "messages" in st.session_state: - for i, message in enumerate(st.session_state.messages): - if message["role"] == "assistant": - with st.chat_message("assistant", avatar=image_url): - st.markdown(process_assistant_content(message["content"]), unsafe_allow_html=True) - if st.button("🗑", key=f"delete_{i}"): - st.session_state.messages.pop(i) - st.session_state.messages.pop(i - 1) - st.session_state.chat_messages.pop(i) - st.session_state.chat_messages.pop(i - 1) - st.rerun() - else: - st.markdown( - f'
{message["content"]}
', - unsafe_allow_html=True) - - else: - st.session_state.messages = [] - st.session_state.chat_messages = [] - - return st.session_state.messages - - -def regenerate_answer(index): - st.session_state.messages.pop() - st.session_state.chat_messages.pop() - st.rerun() - - -def delete_conversation(index): - st.session_state.messages.pop(index) - st.session_state.messages.pop(index - 1) - st.session_state.chat_messages.pop(index) - st.session_state.chat_messages.pop(index - 1) - st.rerun() - - -st.sidebar.title("模型设定调整") - -# st.sidebar.text("训练数据偏差,增加上下文记忆时\n多轮对话(较单轮)容易出现能力衰减") -st.session_state.history_chat_num = st.sidebar.slider("Number of Historical Dialogues", 0, 6, 0, step=2) -# st.session_state.history_chat_num = 0 -st.session_state.max_new_tokens = st.sidebar.slider("Max Sequence Length", 256, 8192, 8192, step=1) -st.session_state.temperature = st.sidebar.slider("Temperature", 0.6, 1.2, 0.85, step=0.01) - -model_source = st.sidebar.radio("选择模型来源", ["本地模型", "API"], index=0) - -if model_source == "API": - api_url = st.sidebar.text_input("API URL", value="http://127.0.0.1:8000/v1") - api_model_id = st.sidebar.text_input("Model ID", value="minimind") - api_model_name = st.sidebar.text_input("Model Name", value="MiniMind2") - api_key = st.sidebar.text_input("API Key", value="none", type="password") - slogan = f"Hi, I'm {api_model_name}" -else: - MODEL_PATHS = { - "MiniMind2 (0.1B)": ["./MiniMind2", "MiniMind2"], - "MiniMind2-MoE (0.15B)": ["./MiniMind2-MoE", "MiniMind2-MoE"], - "MiniMind2-Small (0.02B)": ["./MiniMind2-Small", "MiniMind2-Small"] - } - - selected_model = st.sidebar.selectbox('Models', list(MODEL_PATHS.keys()), index=0) # 默认选择 MiniMind2 - model_path = MODEL_PATHS[selected_model][0] - slogan = f"Hi, I'm {MODEL_PATHS[selected_model][1]}" - -image_url = "https://www.modelscope.cn/api/v1/studio/gongjy/MiniMind/repo?Revision=master&FilePath=images%2Flogo2.png&View=true" - -st.markdown( - f'
' - '
' - f' ' - f'{slogan}' - '
' - '内容完全由AI生成,请务必仔细甄别
Content AI-generated, please discern with care
' - '
', - unsafe_allow_html=True -) - - -def setup_seed(seed): - random.seed(seed) - np.random.seed(seed) - torch.manual_seed(seed) - torch.cuda.manual_seed(seed) - torch.cuda.manual_seed_all(seed) - torch.backends.cudnn.deterministic = True - torch.backends.cudnn.benchmark = False - - -def main(): - if model_source == "本地模型": - model, tokenizer = load_model_tokenizer(model_path) - else: - model, tokenizer = None, None - - if "messages" not in st.session_state: - st.session_state.messages = [] - st.session_state.chat_messages = [] - - messages = st.session_state.messages - - for i, message in enumerate(messages): - if message["role"] == "assistant": - with st.chat_message("assistant", avatar=image_url): - st.markdown(process_assistant_content(message["content"]), unsafe_allow_html=True) - if st.button("×", key=f"delete_{i}"): - st.session_state.messages = st.session_state.messages[:i - 1] - st.session_state.chat_messages = st.session_state.chat_messages[:i - 1] - st.rerun() - else: - st.markdown( - f'
{message["content"]}
', - unsafe_allow_html=True) - - prompt = st.chat_input(key="input", placeholder="给 MiniMind 发送消息") - - if hasattr(st.session_state, 'regenerate') and st.session_state.regenerate: - prompt = st.session_state.last_user_message - regenerate_index = st.session_state.regenerate_index - delattr(st.session_state, 'regenerate') - delattr(st.session_state, 'last_user_message') - delattr(st.session_state, 'regenerate_index') - - if prompt: - st.markdown( - f'
{prompt}
', - unsafe_allow_html=True) - messages.append({"role": "user", "content": prompt[-st.session_state.max_new_tokens:]}) - st.session_state.chat_messages.append({"role": "user", "content": prompt[-st.session_state.max_new_tokens:]}) - - with st.chat_message("assistant", avatar=image_url): - placeholder = st.empty() - - if model_source == "API": - try: - from openai import OpenAI - - client = OpenAI( - api_key=api_key, - base_url=api_url - ) - history_num = st.session_state.history_chat_num + 1 # +1 是为了包含当前的用户消息 - conversation_history = system_prompt + st.session_state.chat_messages[-history_num:] - answer = "" - response = client.chat.completions.create( - model=api_model_id, - messages=conversation_history, - stream=True, - temperature=st.session_state.temperature - ) - - for chunk in response: - content = chunk.choices[0].delta.content or "" - answer += content - placeholder.markdown(process_assistant_content(answer), unsafe_allow_html=True) - - except Exception as e: - answer = f"API调用出错: {str(e)}" - placeholder.markdown(answer, unsafe_allow_html=True) - else: - random_seed = random.randint(0, 2 ** 32 - 1) - setup_seed(random_seed) - - st.session_state.chat_messages = system_prompt + st.session_state.chat_messages[ - -(st.session_state.history_chat_num + 1):] - new_prompt = tokenizer.apply_chat_template( - st.session_state.chat_messages, - tokenize=False, - add_generation_prompt=True - ) - - inputs = tokenizer( - new_prompt, - return_tensors="pt", - truncation=True - ).to(device) - - streamer = TextIteratorStreamer(tokenizer, skip_prompt=True, skip_special_tokens=True) - generation_kwargs = { - "input_ids": inputs.input_ids, - "max_length": inputs.input_ids.shape[1] + st.session_state.max_new_tokens, - "num_return_sequences": 1, - "do_sample": True, - "attention_mask": inputs.attention_mask, - "pad_token_id": tokenizer.pad_token_id, - "eos_token_id": tokenizer.eos_token_id, - "temperature": st.session_state.temperature, - "top_p": 0.85, - "streamer": streamer, - } - - Thread(target=model.generate, kwargs=generation_kwargs).start() - - answer = "" - for new_text in streamer: - answer += new_text - placeholder.markdown(process_assistant_content(answer), unsafe_allow_html=True) - - messages.append({"role": "assistant", "content": answer}) - st.session_state.chat_messages.append({"role": "assistant", "content": answer}) - with st.empty(): - if st.button("×", key=f"delete_{len(messages) - 1}"): - st.session_state.messages = st.session_state.messages[:-2] - st.session_state.chat_messages = st.session_state.chat_messages[:-2] - st.rerun() - - -if __name__ == "__main__": - from transformers import AutoModelForCausalLM, AutoTokenizer, TextIteratorStreamer - - main() \ No newline at end of file