plvictor commited on
Commit
a350083
·
verified ·
1 Parent(s): ea3162a

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +55 -60
app.py CHANGED
@@ -1,12 +1,15 @@
1
  import gradio as gr
2
  from transformers import AutoTokenizer, AutoModelForCausalLM
3
  import torch
 
4
 
5
- # TinyLlama - apenas 2.2GB, muito rápido no free tier
 
 
 
6
  MODEL_NAME = "TinyLlama/TinyLlama-1.1B-Chat-v1.0"
7
 
8
  print("Carregando TinyLlama 1.1B...")
9
- print("Este modelo é muito mais eficiente para o plano gratuito!")
10
 
11
  tokenizer = AutoTokenizer.from_pretrained(MODEL_NAME)
12
  model = AutoModelForCausalLM.from_pretrained(
@@ -20,23 +23,24 @@ model = AutoModelForCausalLM.from_pretrained(
20
  if tokenizer.pad_token is None:
21
  tokenizer.pad_token = tokenizer.eos_token
22
 
23
- print("Modelo carregado com sucesso!")
24
 
25
- def generate_response(message, max_tokens=300, temperature=0.8):
 
26
  try:
27
- # Template específico do TinyLlama
28
- prompt = f"<|system|>\nVocê é um assistente útil e amigável. Responda em português quando possível.<|user|>\n{message}<|assistant|>\n"
29
 
30
  # Tokenizar
31
  inputs = tokenizer(
32
  prompt,
33
  return_tensors="pt",
34
  truncation=True,
35
- max_length=1500,
36
  padding=False
37
  )
38
 
39
- # Gerar resposta
40
  with torch.no_grad():
41
  outputs = model.generate(
42
  inputs.input_ids,
@@ -47,72 +51,63 @@ def generate_response(message, max_tokens=300, temperature=0.8):
47
  top_p=0.9,
48
  repetition_penalty=1.1,
49
  pad_token_id=tokenizer.eos_token_id,
50
- eos_token_id=tokenizer.eos_token_id,
51
- early_stopping=True
52
  )
53
 
54
- # Decodificar apenas a parte nova
55
  new_tokens = outputs[0][len(inputs.input_ids[0]):]
56
  response = tokenizer.decode(new_tokens, skip_special_tokens=True)
57
 
58
  # Limpar resposta
59
- response = response.split("<|user|>")[0].strip()
60
- response = response.split("<|system|>")[0].strip()
 
61
 
62
- return response if response else "Desculpe, não consegui gerar uma resposta adequada."
63
 
64
  except Exception as e:
65
- return f"Erro na geração: {str(e)}"
66
 
67
- # Interface Gradio SIMPLES (mais estável)
68
- def create_interface():
69
- iface = gr.Interface(
70
- fn=generate_response,
71
- inputs=[
72
- gr.Textbox(
73
- label="💬 Sua pergunta",
74
- placeholder="Digite aqui...",
75
- lines=3
76
- ),
77
- gr.Slider(
78
- minimum=50,
79
- maximum=500,
80
- value=300,
81
- label="Max Tokens"
82
- ),
83
- gr.Slider(
84
- minimum=0.1,
85
- maximum=1.5,
86
- value=0.8,
87
- label="Temperature"
88
- )
89
- ],
90
- outputs=gr.Textbox(
91
- label="🤖 Resposta",
92
- lines=6
93
  ),
94
- title="🦙 TinyLlama Chat API",
95
- description="Modelo leve (2.2GB) otimizado para HF Spaces Free",
96
- examples=[
97
- ["Olá! Como você está?", 300, 0.8],
98
- ["Explique o que é inteligência artificial", 400, 0.7],
99
- ["Conte uma curiosidade interessante", 250, 0.9]
100
- ],
101
- theme="default"
102
- )
103
- return iface
 
 
 
 
 
 
 
 
104
 
105
  if __name__ == "__main__":
106
- print("Iniciando interface web...")
107
-
108
- # Criar interface
109
- iface = create_interface()
110
-
111
- # Lançar com configurações estáveis
112
- iface.launch(
113
  server_name="0.0.0.0",
114
  server_port=7860,
115
  share=False,
116
- show_error=False,
117
- quiet=True
118
  )
 
1
  import gradio as gr
2
  from transformers import AutoTokenizer, AutoModelForCausalLM
3
  import torch
4
+ import os
5
 
6
+ # Reduzir verbosidade dos warnings
7
+ os.environ["TRANSFORMERS_VERBOSITY"] = "error"
8
+
9
+ # TinyLlama - modelo leve e eficiente
10
  MODEL_NAME = "TinyLlama/TinyLlama-1.1B-Chat-v1.0"
11
 
12
  print("Carregando TinyLlama 1.1B...")
 
13
 
14
  tokenizer = AutoTokenizer.from_pretrained(MODEL_NAME)
15
  model = AutoModelForCausalLM.from_pretrained(
 
23
  if tokenizer.pad_token is None:
24
  tokenizer.pad_token = tokenizer.eos_token
25
 
26
+ print("Modelo carregado! Interface iniciando...")
27
 
28
+ def chat_response(message, max_tokens, temperature):
29
+ """Função principal de chat"""
30
  try:
31
+ # Template do TinyLlama
32
+ prompt = f"<|system|>\nVocê é um assistente útil. Responda de forma clara e concisa.<|user|>\n{message}<|assistant|>\n"
33
 
34
  # Tokenizar
35
  inputs = tokenizer(
36
  prompt,
37
  return_tensors="pt",
38
  truncation=True,
39
+ max_length=1200,
40
  padding=False
41
  )
42
 
43
+ # Gerar resposta (sem early_stopping para evitar warning)
44
  with torch.no_grad():
45
  outputs = model.generate(
46
  inputs.input_ids,
 
51
  top_p=0.9,
52
  repetition_penalty=1.1,
53
  pad_token_id=tokenizer.eos_token_id,
54
+ eos_token_id=tokenizer.eos_token_id
 
55
  )
56
 
57
+ # Extrair resposta
58
  new_tokens = outputs[0][len(inputs.input_ids[0]):]
59
  response = tokenizer.decode(new_tokens, skip_special_tokens=True)
60
 
61
  # Limpar resposta
62
+ response = response.split("<|user|>")[0]
63
+ response = response.split("<|system|>")[0]
64
+ response = response.strip()
65
 
66
+ return response if response else "Não consegui gerar uma resposta. Tente reformular sua pergunta."
67
 
68
  except Exception as e:
69
+ return f"Erro: {str(e)}"
70
 
71
+ # Interface Gradio simples e funcional
72
+ interface = gr.Interface(
73
+ fn=chat_response,
74
+ inputs=[
75
+ gr.Textbox(
76
+ label="💬 Sua pergunta",
77
+ placeholder="Digite sua pergunta aqui...",
78
+ lines=2
79
+ ),
80
+ gr.Slider(
81
+ minimum=50,
82
+ maximum=400,
83
+ value=200,
84
+ step=10,
85
+ label="🔢 Tokens máximos"
 
 
 
 
 
 
 
 
 
 
 
86
  ),
87
+ gr.Slider(
88
+ minimum=0.1,
89
+ maximum=1.2,
90
+ value=0.7,
91
+ step=0.1,
92
+ label="🌡️ Criatividade"
93
+ )
94
+ ],
95
+ outputs=gr.Textbox(
96
+ label="🤖 Resposta do TinyLlama",
97
+ lines=5
98
+ ),
99
+ title="🦙 TinyLlama Chat API",
100
+ description="Modelo de IA leve (2.2GB) otimizado para Hugging Face Spaces gratuito",
101
+ theme="default",
102
+ # Sem examples para evitar cache/erros
103
+ allow_flagging="never"
104
+ )
105
 
106
  if __name__ == "__main__":
107
+ print("🚀 Iniciando servidor...")
108
+ interface.launch(
 
 
 
 
 
109
  server_name="0.0.0.0",
110
  server_port=7860,
111
  share=False,
112
+ show_error=False
 
113
  )