victorafarias commited on
Commit
9c538d9
·
1 Parent(s): 51ebe5d

Fix: Correct column order in test mode simulation

Browse files
Files changed (1) hide show
  1. app.py +9 -20
app.py CHANGED
@@ -5,17 +5,17 @@ import markdown2
5
  import json
6
  import time
7
  import os
8
- import uuid # Para gerar nomes de arquivo únicos
9
 
10
  # Importações do LangChain
11
  from langchain.prompts import PromptTemplate
12
  from langchain.chains import LLMChain
13
 
14
  # Importa os LLMs
15
- from llms import grok_llm, claude_llm, gemini_llm
16
 
17
  # Importa os prompts
18
- from config import PROMPT_GROK, PROMPT_CLAUDE_SONNET, PROMPT_GEMINI
19
 
20
  # Importa nosso processador RAG
21
  from rag_processor import get_relevant_context
@@ -24,8 +24,7 @@ app = Flask(__name__)
24
 
25
  app.config['MAX_CONTENT_LENGTH'] = 100 * 1024 * 1024
26
 
27
- if not os.path.exists('uploads'):
28
- os.makedirs('uploads')
29
 
30
  @app.route('/')
31
  def index():
@@ -47,22 +46,21 @@ def process():
47
  temp_file_paths.append(file_path)
48
 
49
  def generate_stream(current_mode, form_data, file_paths):
50
- # Lógica de simulação atualizada para a nova ordem
51
  if current_mode == 'test':
52
  mock_text = form_data.get('mock_text', 'Este é um texto de simulação.')
53
  mock_html = markdown2.markdown(mock_text, extras=["fenced-code-blocks", "tables"])
54
 
 
55
  yield f"data: {json.dumps({'progress': 0, 'message': 'Simulando Etapa 1: GROK...'})}\n\n"
56
  time.sleep(1)
57
- # O primeiro resultado agora vai para a coluna do GROK
58
  yield f"data: {json.dumps({'progress': 33, 'message': 'Simulando Etapa 2: Claude Sonnet...', 'partial_result': {'id': 'grok-output', 'content': mock_html}})}\n\n"
59
  time.sleep(1)
60
- # O segundo resultado vai para a coluna do Sonnet
61
  yield f"data: {json.dumps({'progress': 66, 'message': 'Simulando Etapa 3: Gemini...', 'partial_result': {'id': 'sonnet-output', 'content': mock_html}})}\n\n"
62
  time.sleep(1)
63
  yield f"data: {json.dumps({'progress': 100, 'message': 'Simulação concluída!', 'partial_result': {'id': 'gemini-output', 'content': mock_html}, 'done': True})}\n\n"
64
 
65
- # Lógica real com a ordem de execução alterada
66
  else:
67
  solicitacao_usuario = form_data.get('solicitacao', '')
68
  if not solicitacao_usuario:
@@ -70,11 +68,9 @@ def process():
70
  return
71
 
72
  try:
73
- # --- ETAPA RAG (continua sendo o passo zero) ---
74
  yield f"data: {json.dumps({'progress': 0, 'message': 'Processando arquivos e extraindo contexto...'})}\n\n"
75
  rag_context = get_relevant_context(file_paths, solicitacao_usuario)
76
 
77
- # --- ETAPA 1: GROK (agora o primeiro) ---
78
  yield f"data: {json.dumps({'progress': 15, 'message': 'O GROK está processando sua solicitação com os arquivos...'})}\n\n"
79
  prompt_grok = PromptTemplate(template=PROMPT_GROK, input_variables=["solicitacao_usuario", "rag_context"])
80
  chain_grok = LLMChain(llm=grok_llm, prompt=prompt_grok)
@@ -82,22 +78,15 @@ def process():
82
  grok_html = markdown2.markdown(resposta_grok, extras=["fenced-code-blocks", "tables"])
83
  yield f"data: {json.dumps({'progress': 33, 'message': 'Agora, o Claude Sonnet está aprofundando o texto...', 'partial_result': {'id': 'grok-output', 'content': grok_html}})}\n\n"
84
 
85
- # --- ETAPA 2: Claude Sonnet (agora o segundo) ---
86
  prompt_sonnet = PromptTemplate(template=PROMPT_CLAUDE_SONNET, input_variables=["solicitacao_usuario", "texto_para_analise"])
87
-
88
- # Usamos .bind() para anexar o parâmetro max_tokens ao modelo nesta chamada específica.
89
- claude_with_max_tokens = claude_llm.bind(max_tokens=10000)
90
  chain_sonnet = LLMChain(llm=claude_with_max_tokens, prompt=prompt_sonnet)
91
-
92
- # O input agora é a resposta do GROK
93
  resposta_sonnet = chain_sonnet.invoke({"solicitacao_usuario": solicitacao_usuario, "texto_para_analise": resposta_grok})['text']
94
  sonnet_html = markdown2.markdown(resposta_sonnet, extras=["fenced-code-blocks", "tables"])
95
  yield f"data: {json.dumps({'progress': 66, 'message': 'Estamos quase lá! Seu texto está passando por uma revisão final com o Gemini...', 'partial_result': {'id': 'sonnet-output', 'content': sonnet_html}})}\n\n"
96
 
97
- # --- ETAPA 3: Gemini (continua o último) ---
98
  prompt_gemini = PromptTemplate(template=PROMPT_GEMINI, input_variables=["solicitacao_usuario", "texto_para_analise"])
99
  chain_gemini = LLMChain(llm=gemini_llm, prompt=prompt_gemini)
100
- # O input agora é a resposta do SONNET
101
  resposta_gemini = chain_gemini.invoke({"solicitacao_usuario": solicitacao_usuario, "texto_para_analise": resposta_sonnet})['text']
102
  gemini_html = markdown2.markdown(resposta_gemini, extras=["fenced-code-blocks", "tables"])
103
  yield f"data: {json.dumps({'progress': 100, 'message': 'Processamento concluído!', 'partial_result': {'id': 'gemini-output', 'content': gemini_html}, 'done': True})}\n\n"
@@ -109,4 +98,4 @@ def process():
109
  return Response(generate_stream(mode, form_data, temp_file_paths), mimetype='text/event-stream')
110
 
111
  if __name__ == '__main__':
112
- app.run(debug=True)
 
5
  import json
6
  import time
7
  import os
8
+ import uuid
9
 
10
  # Importações do LangChain
11
  from langchain.prompts import PromptTemplate
12
  from langchain.chains import LLMChain
13
 
14
  # Importa os LLMs
15
+ from llms import claude_llm, grok_llm, gemini_llm
16
 
17
  # Importa os prompts
18
+ from config import PROMPT_CLAUDE_SONNET, PROMPT_GROK, PROMPT_GEMINI
19
 
20
  # Importa nosso processador RAG
21
  from rag_processor import get_relevant_context
 
24
 
25
  app.config['MAX_CONTENT_LENGTH'] = 100 * 1024 * 1024
26
 
27
+ # A linha 'os.makedirs('uploads')' foi removida daqui, pois agora é gerenciada pelo Dockerfile.
 
28
 
29
  @app.route('/')
30
  def index():
 
46
  temp_file_paths.append(file_path)
47
 
48
  def generate_stream(current_mode, form_data, file_paths):
 
49
  if current_mode == 'test':
50
  mock_text = form_data.get('mock_text', 'Este é um texto de simulação.')
51
  mock_html = markdown2.markdown(mock_text, extras=["fenced-code-blocks", "tables"])
52
 
53
+ # --- CORREÇÃO APLICADA AQUI ---
54
  yield f"data: {json.dumps({'progress': 0, 'message': 'Simulando Etapa 1: GROK...'})}\n\n"
55
  time.sleep(1)
56
+ # O primeiro resultado agora vai corretamente para 'grok-output'
57
  yield f"data: {json.dumps({'progress': 33, 'message': 'Simulando Etapa 2: Claude Sonnet...', 'partial_result': {'id': 'grok-output', 'content': mock_html}})}\n\n"
58
  time.sleep(1)
59
+ # O segundo resultado agora vai corretamente para 'sonnet-output'
60
  yield f"data: {json.dumps({'progress': 66, 'message': 'Simulando Etapa 3: Gemini...', 'partial_result': {'id': 'sonnet-output', 'content': mock_html}})}\n\n"
61
  time.sleep(1)
62
  yield f"data: {json.dumps({'progress': 100, 'message': 'Simulação concluída!', 'partial_result': {'id': 'gemini-output', 'content': mock_html}, 'done': True})}\n\n"
63
 
 
64
  else:
65
  solicitacao_usuario = form_data.get('solicitacao', '')
66
  if not solicitacao_usuario:
 
68
  return
69
 
70
  try:
 
71
  yield f"data: {json.dumps({'progress': 0, 'message': 'Processando arquivos e extraindo contexto...'})}\n\n"
72
  rag_context = get_relevant_context(file_paths, solicitacao_usuario)
73
 
 
74
  yield f"data: {json.dumps({'progress': 15, 'message': 'O GROK está processando sua solicitação com os arquivos...'})}\n\n"
75
  prompt_grok = PromptTemplate(template=PROMPT_GROK, input_variables=["solicitacao_usuario", "rag_context"])
76
  chain_grok = LLMChain(llm=grok_llm, prompt=prompt_grok)
 
78
  grok_html = markdown2.markdown(resposta_grok, extras=["fenced-code-blocks", "tables"])
79
  yield f"data: {json.dumps({'progress': 33, 'message': 'Agora, o Claude Sonnet está aprofundando o texto...', 'partial_result': {'id': 'grok-output', 'content': grok_html}})}\n\n"
80
 
 
81
  prompt_sonnet = PromptTemplate(template=PROMPT_CLAUDE_SONNET, input_variables=["solicitacao_usuario", "texto_para_analise"])
82
+ claude_with_max_tokens = claude_llm.bind(max_tokens=8000)
 
 
83
  chain_sonnet = LLMChain(llm=claude_with_max_tokens, prompt=prompt_sonnet)
 
 
84
  resposta_sonnet = chain_sonnet.invoke({"solicitacao_usuario": solicitacao_usuario, "texto_para_analise": resposta_grok})['text']
85
  sonnet_html = markdown2.markdown(resposta_sonnet, extras=["fenced-code-blocks", "tables"])
86
  yield f"data: {json.dumps({'progress': 66, 'message': 'Estamos quase lá! Seu texto está passando por uma revisão final com o Gemini...', 'partial_result': {'id': 'sonnet-output', 'content': sonnet_html}})}\n\n"
87
 
 
88
  prompt_gemini = PromptTemplate(template=PROMPT_GEMINI, input_variables=["solicitacao_usuario", "texto_para_analise"])
89
  chain_gemini = LLMChain(llm=gemini_llm, prompt=prompt_gemini)
 
90
  resposta_gemini = chain_gemini.invoke({"solicitacao_usuario": solicitacao_usuario, "texto_para_analise": resposta_sonnet})['text']
91
  gemini_html = markdown2.markdown(resposta_gemini, extras=["fenced-code-blocks", "tables"])
92
  yield f"data: {json.dumps({'progress': 100, 'message': 'Processamento concluído!', 'partial_result': {'id': 'gemini-output', 'content': gemini_html}, 'done': True})}\n\n"
 
98
  return Response(generate_stream(mode, form_data, temp_file_paths), mimetype='text/event-stream')
99
 
100
  if __name__ == '__main__':
101
+ app.run(debug=True)