akra35567 commited on
Commit
6921978
·
1 Parent(s): 179baf7

Update main.py

Browse files
Files changed (1) hide show
  1. main.py +16 -6
main.py CHANGED
@@ -16,9 +16,10 @@ logger = logging.getLogger(__name__)
16
  warnings.filterwarnings("ignore")
17
 
18
  # --- Configuração do Modelo e Diretórios ---
19
- # Usamos o modelo HF nativo, mas mantemos o ID para referência
20
- HF_MODEL_ID = "microsoft/Phi-3-mini-4k-instruct"
21
  LOCAL_MODEL_DIR = "./models"
 
22
  API_TOKEN = os.environ.get("HF_TOKEN")
23
 
24
  # Variáveis globais para o LLM e a Aplicação Flask
@@ -83,6 +84,7 @@ def initialize_llm():
83
 
84
  except Exception as e:
85
  logger.error(f"FATAL: Erro na inicialização do LLM (Transformers): {e}", exc_info=True)
 
86
  sys.exit(f"Falha Crítica ao iniciar: Erro ao carregar o LLM. Detalhe: {e}")
87
 
88
 
@@ -91,6 +93,7 @@ def initialize_llm():
91
  @app.route("/")
92
  def index():
93
  """Rota de bem-vindo."""
 
94
  return "AKIRA IA ONLINE (Transformers)! Bué fixe, kota! Vamos kandandar!", 200
95
 
96
  @app.route("/health")
@@ -116,20 +119,25 @@ def generate():
116
  return jsonify({"error": "O campo 'prompt' é obrigatório."}), 400
117
 
118
  model, tokenizer = llm
 
119
  device = model.device
120
 
121
  # 1. Cria a lista de mensagens no formato de chat
 
122
  messages = [
123
  {"role": "system", "content": "Você é um assistente de IA prestativo e criativo. Responda em português de Portugal."},
124
  {"role": "user", "content": prompt}
125
  ]
126
 
127
  # 2. Aplica o template de chat do Phi-3 e tokeniza
 
128
  formatted_prompt = tokenizer.apply_chat_template(
129
  messages,
130
  tokenize=False,
131
- add_generation_prompt=True
132
  )
 
 
133
  input_ids = tokenizer.encode(formatted_prompt, return_tensors="pt").to(device)
134
 
135
  # 3. Geração de Texto
@@ -138,9 +146,10 @@ def generate():
138
  input_ids,
139
  max_new_tokens=int(max_tokens),
140
  temperature=float(temperature),
141
- do_sample=True, # Necessário para usar temperature/top_p
142
  pad_token_id=tokenizer.eos_token_id,
143
- # Outras configurações opcionais
 
144
  )
145
 
146
  # 4. Decodifica a resposta (ignorando o prompt de entrada)
@@ -163,4 +172,5 @@ if __name__ == "__main__":
163
 
164
  # Inicia o servidor Flask na porta padrão do Hugging Face Spaces (7860)
165
  logger.info("SERVIDOR FLASK PRONTO. RODANDO EM http://0.0.0.0:7860")
166
- app.run(host="0.0.0.0", port=7860, debug=False, threaded=False) # threaded=False é geralmente mais estável em Flask
 
 
16
  warnings.filterwarnings("ignore")
17
 
18
  # --- Configuração do Modelo e Diretórios ---
19
+ # ID do modelo Hugging Face que será carregado
20
+ HF_MODEL_ID = "microsoft/Phi-3-mini-4k-instruct"
21
  LOCAL_MODEL_DIR = "./models"
22
+ # O token é opcional, mas útil se o modelo for privado
23
  API_TOKEN = os.environ.get("HF_TOKEN")
24
 
25
  # Variáveis globais para o LLM e a Aplicação Flask
 
84
 
85
  except Exception as e:
86
  logger.error(f"FATAL: Erro na inicialização do LLM (Transformers): {e}", exc_info=True)
87
+ # O sys.exit é crucial em ambientes de contêiner para sinalizar falha
88
  sys.exit(f"Falha Crítica ao iniciar: Erro ao carregar o LLM. Detalhe: {e}")
89
 
90
 
 
93
  @app.route("/")
94
  def index():
95
  """Rota de bem-vindo."""
96
+ # Mensagem de bem-vindo em Português de Portugal (Português Europeu)
97
  return "AKIRA IA ONLINE (Transformers)! Bué fixe, kota! Vamos kandandar!", 200
98
 
99
  @app.route("/health")
 
119
  return jsonify({"error": "O campo 'prompt' é obrigatório."}), 400
120
 
121
  model, tokenizer = llm
122
+ # Verifica se o modelo está no dispositivo correto (importante para evitar erros)
123
  device = model.device
124
 
125
  # 1. Cria a lista de mensagens no formato de chat
126
+ # Definindo a persona e o idioma de resposta (Português de Portugal)
127
  messages = [
128
  {"role": "system", "content": "Você é um assistente de IA prestativo e criativo. Responda em português de Portugal."},
129
  {"role": "user", "content": prompt}
130
  ]
131
 
132
  # 2. Aplica o template de chat do Phi-3 e tokeniza
133
+ # O template garante que o modelo entenda a estrutura da conversa
134
  formatted_prompt = tokenizer.apply_chat_template(
135
  messages,
136
  tokenize=False,
137
+ add_generation_prompt=True # Adiciona o token final para iniciar a resposta do assistente
138
  )
139
+
140
+ # Tokeniza e move para o dispositivo onde o modelo está
141
  input_ids = tokenizer.encode(formatted_prompt, return_tensors="pt").to(device)
142
 
143
  # 3. Geração de Texto
 
146
  input_ids,
147
  max_new_tokens=int(max_tokens),
148
  temperature=float(temperature),
149
+ do_sample=True, # Permite amostragem (importante para temperatura > 0)
150
  pad_token_id=tokenizer.eos_token_id,
151
+ # Usa o token de fim de sequência para parar a geração
152
+ eos_token_id=tokenizer.eos_token_id
153
  )
154
 
155
  # 4. Decodifica a resposta (ignorando o prompt de entrada)
 
172
 
173
  # Inicia o servidor Flask na porta padrão do Hugging Face Spaces (7860)
174
  logger.info("SERVIDOR FLASK PRONTO. RODANDO EM http://0.0.0.0:7860")
175
+ # 'threaded=False' é geralmente recomendado para evitar problemas de concorrência com PyTorch
176
+ app.run(host="0.0.0.0", port=7860, debug=False, threaded=False)