victorafarias commited on
Commit
3c12f7f
·
1 Parent(s): ca62925

Refactor: Replace custom Grok wrapper with standard ChatOpenAI for compatibility

Browse files
Files changed (1) hide show
  1. app.py +21 -3
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