Madras1 commited on
Commit
c605755
·
verified ·
1 Parent(s): 828879d

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +13 -14
app.py CHANGED
@@ -4,44 +4,44 @@ import torch
4
  from transformers import AutoModelForCausalLM, AutoTokenizer
5
 
6
  # --- CONFIGURAÇÃO DOS TITÃS ---
7
- # Berta: Aqui entra peso pesado. Nada abaixo de 70B!
8
  MODEL_ID = "Qwen/Qwen2.5-72B-Instruct-GPTQ-Int4"
9
 
10
- print(f"🏗️ Berta: Preparando o hangar para o Titã {MODEL_ID}...")
11
 
12
- # Variáveis Globais
13
  model = None
14
  tokenizer = None
15
 
16
  def load_titan():
17
  global model, tokenizer
18
  if model is None:
19
- print(f"🔥 Berta: Acordando o gigante... (Isso pode levar uns segundos)")
20
  try:
21
  # Carregando Tokenizer
22
  tokenizer = AutoTokenizer.from_pretrained(MODEL_ID, trust_remote_code=True)
23
 
24
  # Carregando Modelo GPTQ
25
- # Berta: disable_exllama=False é mais rápido, mas se der erro no ZeroGPU, mude para True.
26
  model = AutoModelForCausalLM.from_pretrained(
27
  MODEL_ID,
28
  device_map="auto",
29
  trust_remote_code=True,
30
- torch_dtype=torch.float16 # GPTQ geralmente opera melhor casting para fp16
31
  )
32
- print("✅ O Titã Qwen 72B está online e operante, meu príncipe!")
33
  except Exception as e:
34
  print(f"❌ Erro catastrófico ao carregar o Titã: {e}")
35
  raise e
36
  return model, tokenizer
37
 
38
  # --- FUNÇÃO DE GERAÇÃO (ZEROGPU) ---
39
- # Aumentei a duração para 120s, modelos gigantes pensam mais devagar e geram códigos longos
40
  @spaces.GPU(duration=120)
41
  def generate(message, history, system_prompt, temperature, max_tokens):
42
  model, tokenizer = load_titan()
43
 
44
- # Construindo o histórico no formato que o Qwen gosta
45
  messages = []
46
  if system_prompt:
47
  messages.append({"role": "system", "content": system_prompt})
@@ -60,7 +60,7 @@ def generate(message, history, system_prompt, temperature, max_tokens):
60
 
61
  inputs = tokenizer([text], return_tensors="pt").to(model.device)
62
 
63
- # Parâmetros de Geração para Gigantes
64
  outputs = model.generate(
65
  **inputs,
66
  max_new_tokens=max_tokens,
@@ -68,14 +68,15 @@ def generate(message, history, system_prompt, temperature, max_tokens):
68
  do_sample=True,
69
  top_p=0.95,
70
  top_k=40,
71
- repetition_penalty=1.1 # Importante para modelos grandes não entrarem em loop
72
  )
73
 
74
  response = tokenizer.decode(outputs[0][inputs.input_ids.shape[1]:], skip_special_tokens=True)
75
  return response
76
 
77
  # --- INTERFACE ---
78
- with gr.Blocks(theme=gr.themes.Soft(primary_hue="purple")) as demo:
 
79
  gr.Markdown("# 🏛️ Templo dos Gigantes (Qwen 72B API)")
80
  gr.Markdown(f"### Atendendo: Gabriel | Modelo Ativo: `{MODEL_ID}` (H200 Powered)")
81
 
@@ -94,6 +95,4 @@ with gr.Blocks(theme=gr.themes.Soft(primary_hue="purple")) as demo:
94
  )
95
 
96
  if __name__ == "__main__":
97
- # Carregamento inicial (opcional, mas bom para aquecer)
98
- # load_titan()
99
  demo.launch()
 
4
  from transformers import AutoModelForCausalLM, AutoTokenizer
5
 
6
  # --- CONFIGURAÇÃO DOS TITÃS ---
7
+ # Berta: Usando a versão GPTQ-Int4 para caber confortavelmente e rodar rápido
8
  MODEL_ID = "Qwen/Qwen2.5-72B-Instruct-GPTQ-Int4"
9
 
10
+ print(f"🏗️ Berta: Iniciando protocolos para o Titã {MODEL_ID}...")
11
 
12
+ # Variáveis Globais (Cache)
13
  model = None
14
  tokenizer = None
15
 
16
  def load_titan():
17
  global model, tokenizer
18
  if model is None:
19
+ print(f"🔥 Berta: Acordando o gigante na H200... (Isso pode levar uns segundos)")
20
  try:
21
  # Carregando Tokenizer
22
  tokenizer = AutoTokenizer.from_pretrained(MODEL_ID, trust_remote_code=True)
23
 
24
  # Carregando Modelo GPTQ
25
+ # device_map="auto" vai distribuir os 41GB de VRAM necessários automaticamente
26
  model = AutoModelForCausalLM.from_pretrained(
27
  MODEL_ID,
28
  device_map="auto",
29
  trust_remote_code=True,
30
+ torch_dtype=torch.float16
31
  )
32
+ print("✅ O Titã Qwen 72B está online e operante, Gabriel!")
33
  except Exception as e:
34
  print(f"❌ Erro catastrófico ao carregar o Titã: {e}")
35
  raise e
36
  return model, tokenizer
37
 
38
  # --- FUNÇÃO DE GERAÇÃO (ZEROGPU) ---
39
+ # Duration=120s garante que respostas longas e complexas não sejam cortadas
40
  @spaces.GPU(duration=120)
41
  def generate(message, history, system_prompt, temperature, max_tokens):
42
  model, tokenizer = load_titan()
43
 
44
+ # Construindo o histórico no formato ChatML que o Qwen adora
45
  messages = []
46
  if system_prompt:
47
  messages.append({"role": "system", "content": system_prompt})
 
60
 
61
  inputs = tokenizer([text], return_tensors="pt").to(model.device)
62
 
63
+ # Parâmetros de Geração Otimizados
64
  outputs = model.generate(
65
  **inputs,
66
  max_new_tokens=max_tokens,
 
68
  do_sample=True,
69
  top_p=0.95,
70
  top_k=40,
71
+ repetition_penalty=1.1 # Evita loops em respostas longas
72
  )
73
 
74
  response = tokenizer.decode(outputs[0][inputs.input_ids.shape[1]:], skip_special_tokens=True)
75
  return response
76
 
77
  # --- INTERFACE ---
78
+ # Berta: Usando gr.Blocks() limpo para evitar conflitos de versão
79
+ with gr.Blocks() as demo:
80
  gr.Markdown("# 🏛️ Templo dos Gigantes (Qwen 72B API)")
81
  gr.Markdown(f"### Atendendo: Gabriel | Modelo Ativo: `{MODEL_ID}` (H200 Powered)")
82
 
 
95
  )
96
 
97
  if __name__ == "__main__":
 
 
98
  demo.launch()