Spaces:
Sleeping
Sleeping
Commit
·
9c538d9
1
Parent(s):
51ebe5d
Fix: Correct column order in test mode simulation
Browse files
app.py
CHANGED
@@ -5,17 +5,17 @@ import markdown2
|
|
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
|
16 |
|
17 |
# Importa os prompts
|
18 |
-
from config import
|
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 |
-
|
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
|
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
|
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)
|