corrigir os novos erros amnhã e adicionar qual tipo de sexo a pessoa é no register
This commit is contained in:
@@ -38,7 +38,7 @@ public class FotoActivity extends AppCompatActivity {
|
||||
private Bitmap imagemCapturada;
|
||||
private String textoAnalise = "";
|
||||
|
||||
// MANTÉM A TUA CHAVE AQUI
|
||||
// A TUA CHAVE DA API
|
||||
private final String MINHA_API_KEY = "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";
|
||||
|
||||
@Override
|
||||
@@ -46,12 +46,13 @@ public class FotoActivity extends AppCompatActivity {
|
||||
super.onCreate(savedInstanceState);
|
||||
setContentView(R.layout.activity_foto);
|
||||
|
||||
// Ligar ao XML
|
||||
ivFotoComida = findViewById(R.id.ivFotoComida);
|
||||
btnTirarFoto = findViewById(R.id.btnTirarFoto);
|
||||
btnGaleria = findViewById(R.id.btnGaleria);
|
||||
btnAnalisarIA = findViewById(R.id.btnAnalisarIA);
|
||||
btnIrParaChat = findViewById(R.id.btnIrParaChat);
|
||||
btnCorrigir = findViewById(R.id.btnCorrigir); // Ligado ao XML
|
||||
btnCorrigir = findViewById(R.id.btnCorrigir);
|
||||
tvResultadoIA = findViewById(R.id.tvResultadoIA);
|
||||
|
||||
ActivityResultLauncher<Intent> camLauncher = registerForActivityResult(
|
||||
@@ -86,6 +87,7 @@ public class FotoActivity extends AppCompatActivity {
|
||||
});
|
||||
|
||||
btnTirarFoto.setOnClickListener(v -> camLauncher.launch(new Intent(MediaStore.ACTION_IMAGE_CAPTURE)));
|
||||
|
||||
btnGaleria.setOnClickListener(v -> {
|
||||
Intent intent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
|
||||
galLauncher.launch(intent);
|
||||
@@ -100,7 +102,7 @@ public class FotoActivity extends AppCompatActivity {
|
||||
startActivity(intent);
|
||||
});
|
||||
|
||||
// NOVO: Clique para corrigir erro
|
||||
// Clique para corrigir o erro da IA
|
||||
btnCorrigir.setOnClickListener(v -> mostrarPopupCorrecao());
|
||||
|
||||
findViewById(R.id.btnVoltarFoto).setOnClickListener(v -> finish());
|
||||
@@ -113,12 +115,12 @@ public class FotoActivity extends AppCompatActivity {
|
||||
ivFotoComida.setImageBitmap(imagemCapturada);
|
||||
btnAnalisarIA.setVisibility(View.VISIBLE);
|
||||
btnIrParaChat.setVisibility(View.GONE);
|
||||
btnCorrigir.setVisibility(View.GONE); // Esconde a correção até analisar
|
||||
btnCorrigir.setVisibility(View.GONE);
|
||||
tvResultadoIA.setText("Pronto para analisar.");
|
||||
}
|
||||
}
|
||||
|
||||
// Função melhorada que aceita a comida certa se o utilizador corrigir
|
||||
// Função blindada contra erros da IA
|
||||
private void enviarParaIA(String comidaCerta) {
|
||||
tvResultadoIA.setText("A processar... ⏳");
|
||||
btnAnalisarIA.setEnabled(false);
|
||||
@@ -131,23 +133,22 @@ public class FotoActivity extends AppCompatActivity {
|
||||
|
||||
String ordemParaIA;
|
||||
if (comidaCerta == null) {
|
||||
// Análise normal
|
||||
ordemParaIA = "És um nutricionista prático. Identifica a comida e dá os valores de forma SUPER RESUMIDA. " +
|
||||
"REGRAS: 1. Português de Portugal. 2. SEM asteriscos. 3. Máximo 4 linhas. " +
|
||||
"Formato exato: \n" +
|
||||
// Regras super restritas para a primeira análise
|
||||
ordemParaIA = "És uma API de nutrição. Avalia a foto. É ESTRITAMENTE PROIBIDO usar texto de conversa, saudações ou tags de segurança. " +
|
||||
"Responde APENAS E SÓ neste formato exato:\n" +
|
||||
"Prato: [Nome]\n" +
|
||||
"Calorias: [Valor] kcal\n" +
|
||||
"Macros: [X]g Proteína, [X]g Hidratos, [X]g Gordura\n" +
|
||||
"Dica: [Uma frase curta].";
|
||||
"Dica: [Frase curta sem asteriscos].";
|
||||
} else {
|
||||
// Análise forçada com a correção do utilizador
|
||||
ordemParaIA = "Atenção: A tua análise anterior falhou. O prato na imagem é na verdade: '" + comidaCerta + "'. " +
|
||||
"Esquece tudo o resto e foca-te em dar os valores reais APENAS para '" + comidaCerta + "'. " +
|
||||
"Usa este formato exato: \n" +
|
||||
// Regras super restritas para a correção
|
||||
ordemParaIA = "Atenção: ignora a imagem. O utilizador confirmou que o prato é '" + comidaCerta + "'. " +
|
||||
"É ESTRITAMENTE PROIBIDO usar texto de conversa ou avisos de segurança (ex: User:safe). " +
|
||||
"Responde APENAS E SÓ com os valores nutricionais médios para '" + comidaCerta + "' neste formato exato:\n" +
|
||||
"Prato: " + comidaCerta + "\n" +
|
||||
"Calorias: [Valor] kcal\n" +
|
||||
"Macros: [X]g Proteína, [X]g Hidratos, [X]g Gordura\n" +
|
||||
"Dica: [Frase de saúde curta e sem asteriscos].";
|
||||
"Dica: [Frase curta sem asteriscos].";
|
||||
}
|
||||
|
||||
AiRequest request = new AiRequest(Collections.singletonList(
|
||||
@@ -167,9 +168,15 @@ public class FotoActivity extends AppCompatActivity {
|
||||
try {
|
||||
String resposta = response.body().choices.get(0).message.content;
|
||||
textoAnalise = resposta.replace("**", "").replace("*", "");
|
||||
tvResultadoIA.setText(textoAnalise);
|
||||
|
||||
// Mostra os botões
|
||||
// O NOSSO ESCUDO: Se a resposta não tiver a palavra "Calorias", a IA deu tilt!
|
||||
if (!textoAnalise.contains("Calorias:") || !textoAnalise.contains("Macros:")) {
|
||||
tvResultadoIA.setText("A IA ficou confusa com o prato 😵\u200D💫. Clica em 'Corrigir' e tenta ser mais específico (Ex: Bife com Arroz).");
|
||||
btnCorrigir.setVisibility(View.VISIBLE);
|
||||
return; // Pára tudo aqui, não guarda lixo na memória!
|
||||
}
|
||||
|
||||
tvResultadoIA.setText(textoAnalise);
|
||||
btnIrParaChat.setVisibility(View.VISIBLE);
|
||||
btnCorrigir.setVisibility(View.VISIBLE);
|
||||
|
||||
@@ -181,8 +188,8 @@ public class FotoActivity extends AppCompatActivity {
|
||||
// Guarda a nova resposta
|
||||
extrairEGuardarDados(textoAnalise);
|
||||
|
||||
} catch (Exception e) { tvResultadoIA.setText("Erro na resposta."); }
|
||||
} else { tvResultadoIA.setText("Erro: " + response.code()); }
|
||||
} catch (Exception e) { tvResultadoIA.setText("Erro na leitura da resposta."); }
|
||||
} else { tvResultadoIA.setText("Erro no servidor: " + response.code()); }
|
||||
}
|
||||
@Override
|
||||
public void onFailure(Call<AiResponse> call, Throwable t) {
|
||||
@@ -209,7 +216,7 @@ public class FotoActivity extends AppCompatActivity {
|
||||
builder.setPositiveButton("Re-Analisar", (dialog, which) -> {
|
||||
String comidaCerta = input.getText().toString().trim();
|
||||
if (!comidaCerta.isEmpty()) {
|
||||
enviarParaIA(comidaCerta); // Manda o texto escrito pelo user
|
||||
enviarParaIA(comidaCerta);
|
||||
} else {
|
||||
Toast.makeText(FotoActivity.this, "Tens de escrever a comida!", Toast.LENGTH_SHORT).show();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user