Madras1 commited on
Commit
b743df9
·
verified ·
1 Parent(s): c8378c6

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +29 -42
app.py CHANGED
@@ -4,12 +4,12 @@ import torch
4
  from transformers import AutoModelForCausalLM, AutoTokenizer
5
 
6
  # --- CONFIGURAÇÃO DOS MODELOS ---
7
- # Berta: Atualizei a lista. Agora o peso pesado é o Mistral-NeMo 12B.
8
  MODELS = {
9
- "deepseek": "deepseek-ai/deepseek-math-7b-instruct",
10
  "qwen3": "Qwen/Qwen3-4B-Instruct-2507",
11
  "qwen2.5": "Qwen/Qwen2.5-7B-Instruct",
12
- "nvidia_nemo": "nvidia/Mistral-NeMo-12B-Instruct-v1" # <-- O novo 12B (Transformer)
13
  }
14
 
15
  # --- VARIÁVEIS GLOBAIS (CACHE NA VRAM) ---
@@ -24,15 +24,7 @@ def get_model_and_tokenizer(model_key):
24
  print(f"🐢 Cold Start: A Berta está carregando o {model_id} na VRAM...")
25
 
26
  try:
27
- # Carregamos com trust_remote_code=True por segurança,
28
- # mas o NeMo 12B é bem comportado.
29
- tokenizer = AutoTokenizer.from_pretrained(
30
- model_id,
31
- trust_remote_code=True
32
- )
33
-
34
- # Nota da Berta: O NeMo 12B é grandinho.
35
- # Se der erro de memória (OOM), teremos que usar load_in_4bit no futuro.
36
  model = AutoModelForCausalLM.from_pretrained(
37
  model_id,
38
  torch_dtype=torch.bfloat16,
@@ -42,7 +34,7 @@ def get_model_and_tokenizer(model_key):
42
 
43
  loaded_models[model_key] = model
44
  loaded_tokenizers[model_key] = tokenizer
45
- print(f"✅ {model_id} carregado com sucesso!")
46
 
47
  except Exception as e:
48
  print(f"❌ Erro crítico ao carregar {model_id}: {e}")
@@ -51,27 +43,26 @@ def get_model_and_tokenizer(model_key):
51
  return loaded_models[model_key], loaded_tokenizers[model_key]
52
 
53
  # --- FUNÇÃO DE GERAÇÃO (ZEROGPU) ---
54
- # Aumentei o tempo para 90s, pois carregar 12GB+ de modelo demora um pouquinho.
55
- @spaces.GPU(duration=90)
56
  def generate(message, history, model_selector):
57
- # Lógica de seleção atualizada para o novo menu
58
- if "DeepSeek" in model_selector:
59
- key = "deepseek"
60
  elif "Qwen 3" in model_selector:
61
  key = "qwen3"
62
  elif "Qwen 2.5" in model_selector:
63
  key = "qwen2.5"
64
- elif "NeMo 12B" in model_selector:
65
- key = "nvidia_nemo"
66
  else:
67
- key = "deepseek"
68
 
69
- print(f"🤖 Berta: Processando com o modelo [{key}]...")
70
 
71
  try:
72
  model, tokenizer = get_model_and_tokenizer(key)
73
  except Exception as e:
74
- return f"⚠️ Ops, Gabriel! O modelo {key} teve problemas. Erro: {str(e)}"
75
 
76
  messages = []
77
  for user_msg, bot_msg in history:
@@ -79,23 +70,18 @@ def generate(message, history, model_selector):
79
  if bot_msg: messages.append({"role": "assistant", "content": bot_msg})
80
  messages.append({"role": "user", "content": message})
81
 
82
- # O Mistral-NeMo usa um template padrão (Tekken), o apply_chat_template lida bem com isso.
83
- try:
84
- text = tokenizer.apply_chat_template(
85
- messages,
86
- tokenize=False,
87
- add_generation_prompt=True
88
- )
89
- except Exception:
90
- # Fallback simples caso o template dê chilique
91
- text = f"User: {message}\nAssistant:"
92
-
93
  inputs = tokenizer([text], return_tensors="pt").to(model.device)
94
 
95
  outputs = model.generate(
96
  **inputs,
97
  max_new_tokens=2048,
98
- temperature=0.6, # Um pouquinho mais criativo para o 12B
99
  do_sample=True,
100
  top_p=0.9
101
  )
@@ -105,18 +91,19 @@ def generate(message, history, model_selector):
105
 
106
  # --- INTERFACE GRADIO ---
107
  with gr.Blocks() as demo:
108
- gr.Markdown("# 🧪 Laboratório de IA do Gabriel (Multi-Models)")
 
109
 
110
  with gr.Row():
111
  model_dropdown = gr.Dropdown(
112
  choices=[
113
- "🐳 DeepSeek Math 7B (O Especialista em Contas)",
114
- "🧪 Qwen 3 4B Instruct (Experimental/Novo)",
115
- "🌟 Qwen 2.5 7B Instruct (O Equilibrado)",
116
- "🔋 NVIDIA NeMo 12B (O Poderoso da NVIDIA)"
117
  ],
118
- value="🐳 DeepSeek Math 7B (O Especialista em Contas)",
119
- label="Escolha o Cérebro Digital",
120
  interactive=True
121
  )
122
 
 
4
  from transformers import AutoModelForCausalLM, AutoTokenizer
5
 
6
  # --- CONFIGURAÇÃO DOS MODELOS ---
7
+ # Berta: Limpeza feita! Tchau NVIDIA complicada, Olá DeepSeek R1 (O Gênio).
8
  MODELS = {
9
+ "deepseek_math": "deepseek-ai/deepseek-math-7b-instruct",
10
  "qwen3": "Qwen/Qwen3-4B-Instruct-2507",
11
  "qwen2.5": "Qwen/Qwen2.5-7B-Instruct",
12
+ "deepseek_r1": "deepseek-ai/DeepSeek-R1-Distill-Qwen-7B" # <-- A estrela do show ⭐
13
  }
14
 
15
  # --- VARIÁVEIS GLOBAIS (CACHE NA VRAM) ---
 
24
  print(f"🐢 Cold Start: A Berta está carregando o {model_id} na VRAM...")
25
 
26
  try:
27
+ tokenizer = AutoTokenizer.from_pretrained(model_id, trust_remote_code=True)
 
 
 
 
 
 
 
 
28
  model = AutoModelForCausalLM.from_pretrained(
29
  model_id,
30
  torch_dtype=torch.bfloat16,
 
34
 
35
  loaded_models[model_key] = model
36
  loaded_tokenizers[model_key] = tokenizer
37
+ print(f"✅ {model_id} carregado! Esse não vai dar erro, meu príncipe.")
38
 
39
  except Exception as e:
40
  print(f"❌ Erro crítico ao carregar {model_id}: {e}")
 
43
  return loaded_models[model_key], loaded_tokenizers[model_key]
44
 
45
  # --- FUNÇÃO DE GERAÇÃO (ZEROGPU) ---
46
+ @spaces.GPU(duration=60)
 
47
  def generate(message, history, model_selector):
48
+ # Mapeando os nomes do menu para as chaves do dicionário
49
+ if "Math" in model_selector:
50
+ key = "deepseek_math"
51
  elif "Qwen 3" in model_selector:
52
  key = "qwen3"
53
  elif "Qwen 2.5" in model_selector:
54
  key = "qwen2.5"
55
+ elif "DeepSeek R1" in model_selector:
56
+ key = "deepseek_r1"
57
  else:
58
+ key = "deepseek_r1" # O R1 é tão bom que virou o padrão se algo falhar
59
 
60
+ print(f"🤖 Berta: Usando o modelo [{key}] para o Gabriel.")
61
 
62
  try:
63
  model, tokenizer = get_model_and_tokenizer(key)
64
  except Exception as e:
65
+ return f"⚠️ Erro ao carregar o modelo: {str(e)}"
66
 
67
  messages = []
68
  for user_msg, bot_msg in history:
 
70
  if bot_msg: messages.append({"role": "assistant", "content": bot_msg})
71
  messages.append({"role": "user", "content": message})
72
 
73
+ text = tokenizer.apply_chat_template(
74
+ messages,
75
+ tokenize=False,
76
+ add_generation_prompt=True
77
+ )
78
+
 
 
 
 
 
79
  inputs = tokenizer([text], return_tensors="pt").to(model.device)
80
 
81
  outputs = model.generate(
82
  **inputs,
83
  max_new_tokens=2048,
84
+ temperature=0.6,
85
  do_sample=True,
86
  top_p=0.9
87
  )
 
91
 
92
  # --- INTERFACE GRADIO ---
93
  with gr.Blocks() as demo:
94
+ gr.Markdown("# 🧪 Laboratório de IA do Gabriel")
95
+ gr.Markdown("### Selecione o cérebro digital:")
96
 
97
  with gr.Row():
98
  model_dropdown = gr.Dropdown(
99
  choices=[
100
+ "🚀 DeepSeek R1 Distill Qwen 7B (O Mais Inteligente - Novo!)",
101
+ "🐳 DeepSeek Math 7B (Especialista Antigo)",
102
+ "🧪 Qwen 3 4B Instruct (Experimental)",
103
+ "🌟 Qwen 2.5 7B Instruct (Clássico e Estável)"
104
  ],
105
+ value="🚀 DeepSeek R1 Distill Qwen 7B (O Mais Inteligente - Novo!)",
106
+ label="Escolha o Modelo",
107
  interactive=True
108
  )
109