File size: 2,341 Bytes
963aa40
3bcd330
b5abc49
b491ef7
963aa40
87f543c
4416811
e9fe7ab
2c48891
b5abc49
 
4416811
 
 
312ca37
 
4416811
2c48891
b5abc49
 
 
 
 
 
312ca37
b5abc49
 
87f543c
 
 
b5abc49
 
 
87f543c
312ca37
b5abc49
 
 
2c48891
ce4a82b
b5abc49
 
312ca37
b5abc49
 
 
312ca37
 
b491ef7
87f543c
312ca37
87f543c
 
 
312ca37
87f543c
2c48891
b5abc49
963aa40
b5abc49
ce4a82b
b5abc49
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
import gradio as gr
from transformers import AutoModelForCausalLM, AutoTokenizer
from peft import PeftModel, PeftConfig
import torch

# Конфигурация
BASE_MODEL = "deepseek-ai/DeepSeek-R1-Distill-Qwen-1.5B"
PEFT_MODEL = "Aleks84/autotrain-5zwfh-fm328"

# 1. Загрузка с исправлением словаря
tokenizer = AutoTokenizer.from_pretrained(BASE_MODEL, trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained(
    BASE_MODEL,
    torch_dtype=torch.float32,
    trust_remote_code=True,
    low_cpu_mem_usage=True
)

# 2. Принудительная синхронизация размеров
model.resize_token_embeddings(len(tokenizer))
original_embeddings = model.get_input_embeddings().weight.data
new_embeddings = original_embeddings[:len(tokenizer), :]
model.get_input_embeddings().weight.data = new_embeddings
model.lm_head.weight.data = new_embeddings  # Для моделей с shared weights

# 3. Загрузка адаптеров с пересчетом весов
peft_config = PeftConfig.from_pretrained(PEFT_MODEL)
model = PeftModel.from_pretrained(
    model,
    PEFT_MODEL,
    config=peft_config,
    adapter_name="default",
    strict=False  # Игнорируем несоответствия размеров
)

# 4. Объединение с проверкой
model = model.merge_and_unload()
model.eval()

def generate_response(message, history):
    # Форматирование для Qwen
    prompt = "<|im_start|>system\nОтветь как помощник<|im_end|>\n"
    for user, assistant in history:
        prompt += f"<|im_start|>user\n{user}<|im_end|>\n"
        prompt += f"<|im_start|>assistant\n{assistant}<|im_end|>\n"
    prompt += f"<|im_start|>user\n{message}<|im_end|>\n<|im_start|>assistant\n"
    
    inputs = tokenizer(prompt, return_tensors="pt")
    
    outputs = model.generate(
        inputs.input_ids,
        max_new_tokens=128,
        temperature=0.7,
        repetition_penalty=1.1,
        pad_token_id=tokenizer.eos_token_id
    )
    
    return tokenizer.decode(outputs[0][inputs.input_ids.shape[-1]:], skip_special_tokens=True)

gr.ChatInterface(
    fn=generate_response,
    title="DeepSeek Assistant",
    examples=["Как работает ИИ?", "Напиши код на Python"],
    theme=gr.themes.Soft()
).launch()