Spaces:
Sleeping
Sleeping
Commit
·
3c12f7f
1
Parent(s):
ca62925
Refactor: Replace custom Grok wrapper with standard ChatOpenAI for compatibility
Browse files
app.py
CHANGED
@@ -50,13 +50,10 @@ def process():
|
|
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"
|
@@ -71,23 +68,44 @@ def process():
|
|
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)
|
77 |
resposta_grok = chain_grok.invoke({"solicitacao_usuario": solicitacao_usuario, "rag_context": rag_context})['text']
|
|
|
|
|
|
|
|
|
|
|
|
|
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"
|
93 |
|
|
|
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 |
yield f"data: {json.dumps({'progress': 0, 'message': 'Simulando Etapa 1: GROK...'})}\n\n"
|
54 |
time.sleep(1)
|
|
|
55 |
yield f"data: {json.dumps({'progress': 33, 'message': 'Simulando Etapa 2: Claude Sonnet...', 'partial_result': {'id': 'grok-output', 'content': mock_html}})}\n\n"
|
56 |
time.sleep(1)
|
|
|
57 |
yield f"data: {json.dumps({'progress': 66, 'message': 'Simulando Etapa 3: Gemini...', 'partial_result': {'id': 'sonnet-output', 'content': mock_html}})}\n\n"
|
58 |
time.sleep(1)
|
59 |
yield f"data: {json.dumps({'progress': 100, 'message': 'Simulação concluída!', 'partial_result': {'id': 'gemini-output', 'content': mock_html}, 'done': True})}\n\n"
|
|
|
68 |
yield f"data: {json.dumps({'progress': 0, 'message': 'Processando arquivos e extraindo contexto...'})}\n\n"
|
69 |
rag_context = get_relevant_context(file_paths, solicitacao_usuario)
|
70 |
|
71 |
+
# --- ETAPA 1: GROK ---
|
72 |
yield f"data: {json.dumps({'progress': 15, 'message': 'O GROK está processando sua solicitação com os arquivos...'})}\n\n"
|
73 |
prompt_grok = PromptTemplate(template=PROMPT_GROK, input_variables=["solicitacao_usuario", "rag_context"])
|
74 |
chain_grok = LLMChain(llm=grok_llm, prompt=prompt_grok)
|
75 |
resposta_grok = chain_grok.invoke({"solicitacao_usuario": solicitacao_usuario, "rag_context": rag_context})['text']
|
76 |
+
|
77 |
+
# NOVA VALIDAÇÃO: Verifica se a resposta do GROK está vazia
|
78 |
+
if not resposta_grok or not resposta_grok.strip():
|
79 |
+
yield f"data: {json.dumps({'error': 'Falha no serviço GROK: Sem resposta.'})}\n\n"
|
80 |
+
return
|
81 |
+
|
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 ---
|
86 |
prompt_sonnet = PromptTemplate(template=PROMPT_CLAUDE_SONNET, input_variables=["solicitacao_usuario", "texto_para_analise"])
|
87 |
claude_with_max_tokens = claude_llm.bind(max_tokens=8000)
|
88 |
chain_sonnet = LLMChain(llm=claude_with_max_tokens, prompt=prompt_sonnet)
|
89 |
resposta_sonnet = chain_sonnet.invoke({"solicitacao_usuario": solicitacao_usuario, "texto_para_analise": resposta_grok})['text']
|
90 |
+
|
91 |
+
# NOVA VALIDAÇÃO: Verifica se a resposta do Claude Sonnet está vazia
|
92 |
+
if not resposta_sonnet or not resposta_sonnet.strip():
|
93 |
+
yield f"data: {json.dumps({'error': 'Falha no serviço Claude Sonnet: Sem resposta.'})}\n\n"
|
94 |
+
return
|
95 |
+
|
96 |
sonnet_html = markdown2.markdown(resposta_sonnet, extras=["fenced-code-blocks", "tables"])
|
97 |
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"
|
98 |
|
99 |
+
# --- ETAPA 3: Gemini ---
|
100 |
prompt_gemini = PromptTemplate(template=PROMPT_GEMINI, input_variables=["solicitacao_usuario", "texto_para_analise"])
|
101 |
chain_gemini = LLMChain(llm=gemini_llm, prompt=prompt_gemini)
|
102 |
resposta_gemini = chain_gemini.invoke({"solicitacao_usuario": solicitacao_usuario, "texto_para_analise": resposta_sonnet})['text']
|
103 |
+
|
104 |
+
# NOVA VALIDAÇÃO: Verifica se a resposta do Gemini está vazia
|
105 |
+
if not resposta_gemini or not resposta_gemini.strip():
|
106 |
+
yield f"data: {json.dumps({'error': 'Falha no serviço Gemini: Sem resposta.'})}\n\n"
|
107 |
+
return
|
108 |
+
|
109 |
gemini_html = markdown2.markdown(resposta_gemini, extras=["fenced-code-blocks", "tables"])
|
110 |
yield f"data: {json.dumps({'progress': 100, 'message': 'Processamento concluído!', 'partial_result': {'id': 'gemini-output', 'content': gemini_html}, 'done': True})}\n\n"
|
111 |
|