Madras1 commited on
Commit
262ec9c
·
verified ·
1 Parent(s): c42c1be

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +26 -20
app.py CHANGED
@@ -2,59 +2,62 @@ import gradio as gr
2
  import spaces
3
  import torch
4
  from transformers import AutoModelForCausalLM, AutoTokenizer
 
5
 
6
  # --- CONFIGURAÇÃO DOS TITÃS ---
7
  MODEL_ID = "Qwen/Qwen2.5-72B-Instruct-GPTQ-Int4"
8
 
9
- print(f"🏗️ Berta: Iniciando protocolos para o Titã {MODEL_ID}...")
10
 
11
  # Variáveis Globais (Cache)
12
  model = None
13
  tokenizer = None
14
 
 
 
 
 
 
 
 
 
 
 
15
  def load_titan():
16
  global model, tokenizer
17
  if model is None:
18
- print(f"🔥 Berta: Acordando o gigante na H200... (Isso pode levar uns segundos)")
19
  try:
20
  tokenizer = AutoTokenizer.from_pretrained(MODEL_ID, trust_remote_code=True)
21
 
22
- # Carregando com suporte a GPTQ e device_map auto para usar a VRAM toda
23
  model = AutoModelForCausalLM.from_pretrained(
24
  MODEL_ID,
25
  device_map="auto",
26
  trust_remote_code=True,
27
  torch_dtype=torch.float16
28
  )
29
- print("✅ O Titã Qwen 72B está online e operante, Gabriel!")
30
  except Exception as e:
31
  print(f"❌ Erro catastrófico ao carregar o Titã: {e}")
32
  raise e
33
  return model, tokenizer
34
 
35
  # --- FUNÇÃO DE GERAÇÃO (ZEROGPU) ---
36
- @spaces.GPU(duration=120)
 
37
  def generate(message, history, system_prompt, temperature, max_tokens):
38
  model, tokenizer = load_titan()
39
 
40
- # --- TRATAMENTO DE HISTÓRICO CLÁSSICO (BLINDADO) ---
41
- # Berta: Aqui convertemos a lista de listas [[user, bot], ...] para o formato do Qwen
42
  messages = []
43
-
44
  if system_prompt:
45
  messages.append({"role": "system", "content": system_prompt})
46
 
47
- # Iteramos item a item para evitar erro de "too many values to unpack"
48
  for turn in history:
49
- user_msg = turn[0]
50
- bot_msg = turn[1]
51
-
52
- if user_msg:
53
- messages.append({"role": "user", "content": user_msg})
54
- if bot_msg:
55
- messages.append({"role": "assistant", "content": bot_msg})
56
 
57
- # Adiciona a mensagem atual
58
  messages.append({"role": "user", "content": message})
59
 
60
  text = tokenizer.apply_chat_template(
@@ -89,14 +92,17 @@ with gr.Blocks() as demo:
89
  value="Você é um assistente de IA especialista, focado em soluções de código complexas e arquitetura de software.",
90
  lines=2
91
  )
92
- temp = gr.Slider(minimum=0.1, maximum=1.0, value=0.7, label="Temperatura (Criatividade)")
93
- tokens = gr.Slider(minimum=256, maximum=8192, value=4096, label="Máximo de Tokens (Saída)")
94
 
95
- # Berta: Removi o 'type="messages"' e 'theme' para garantir compatibilidade total
96
  chat = gr.ChatInterface(
97
  fn=generate,
98
  additional_inputs=[sys_prompt, temp, tokens]
99
  )
100
 
101
  if __name__ == "__main__":
 
 
 
 
102
  demo.launch()
 
2
  import spaces
3
  import torch
4
  from transformers import AutoModelForCausalLM, AutoTokenizer
5
+ from huggingface_hub import snapshot_download # <--- Importante para baixar antes
6
 
7
  # --- CONFIGURAÇÃO DOS TITÃS ---
8
  MODEL_ID = "Qwen/Qwen2.5-72B-Instruct-GPTQ-Int4"
9
 
10
+ print(f"🏗️ Berta: Configurando o ambiente para o Titã {MODEL_ID}...")
11
 
12
  # Variáveis Globais (Cache)
13
  model = None
14
  tokenizer = None
15
 
16
+ # --- FUNÇÃO DE DOWNLOAD EXPLÍCITO ---
17
+ def download_model_first():
18
+ print("⏳ Berta: Iniciando download preventivo dos pesos (Isso vai demorar, tenha fé!)...")
19
+ try:
20
+ # Isso baixa os arquivos para o cache do Space SEM usar tempo de GPU
21
+ snapshot_download(repo_id=MODEL_ID)
22
+ print("✅ Download concluído! Os arquivos estão em casa.")
23
+ except Exception as e:
24
+ print(f"⚠️ Aviso: O download falhou ou já existe. Erro: {e}")
25
+
26
  def load_titan():
27
  global model, tokenizer
28
  if model is None:
29
+ print(f"🔥 Berta: Carregando o modelo na VRAM H200...")
30
  try:
31
  tokenizer = AutoTokenizer.from_pretrained(MODEL_ID, trust_remote_code=True)
32
 
33
+ # Aqui ele vai achar os arquivos baixados, então será rápido!
34
  model = AutoModelForCausalLM.from_pretrained(
35
  MODEL_ID,
36
  device_map="auto",
37
  trust_remote_code=True,
38
  torch_dtype=torch.float16
39
  )
40
+ print("✅ O Titã Qwen 72B está pronto para a batalha!")
41
  except Exception as e:
42
  print(f"❌ Erro catastrófico ao carregar o Titã: {e}")
43
  raise e
44
  return model, tokenizer
45
 
46
  # --- FUNÇÃO DE GERAÇÃO (ZEROGPU) ---
47
+ # Aumentei para 300 segundos (5 minutos) para garantir que ele tenha tempo de pensar
48
+ @spaces.GPU(duration=300)
49
  def generate(message, history, system_prompt, temperature, max_tokens):
50
  model, tokenizer = load_titan()
51
 
 
 
52
  messages = []
 
53
  if system_prompt:
54
  messages.append({"role": "system", "content": system_prompt})
55
 
56
+ # Tratamento manual do histórico (Blindado contra erros de versão)
57
  for turn in history:
58
+ if turn[0]: messages.append({"role": "user", "content": turn[0]})
59
+ if turn[1]: messages.append({"role": "assistant", "content": turn[1]})
 
 
 
 
 
60
 
 
61
  messages.append({"role": "user", "content": message})
62
 
63
  text = tokenizer.apply_chat_template(
 
92
  value="Você é um assistente de IA especialista, focado em soluções de código complexas e arquitetura de software.",
93
  lines=2
94
  )
95
+ temp = gr.Slider(minimum=0.1, maximum=1.0, value=0.7, label="Temperatura")
96
+ tokens = gr.Slider(minimum=256, maximum=8192, value=4096, label="Máximo de Tokens")
97
 
 
98
  chat = gr.ChatInterface(
99
  fn=generate,
100
  additional_inputs=[sys_prompt, temp, tokens]
101
  )
102
 
103
  if __name__ == "__main__":
104
+ # Berta: A mágica acontece aqui! 👇
105
+ # Antes de lançar o site, garantimos que o modelo está baixado.
106
+ download_model_first()
107
+
108
  demo.launch()