Update app/src/main/java/com/example/cuida/services/Ollama.java
This commit is contained in:
@@ -0,0 +1,82 @@
|
|||||||
|
package com.example.cuida.services;
|
||||||
|
|
||||||
|
import android.os.Handler;
|
||||||
|
import android.os.Looper;
|
||||||
|
|
||||||
|
import org.json.JSONObject;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
|
import okhttp3.Call;
|
||||||
|
import okhttp3.Callback;
|
||||||
|
import okhttp3.MediaType;
|
||||||
|
import okhttp3.OkHttpClient;
|
||||||
|
import okhttp3.Request;
|
||||||
|
import okhttp3.RequestBody;
|
||||||
|
import okhttp3.Response;
|
||||||
|
|
||||||
|
public class OllamaService {
|
||||||
|
// Definir o modelo especificado
|
||||||
|
private static final String MODEL_NAME = "gemma4:e2b";
|
||||||
|
// O endpoint padrão do Ollama para geração de texto é /api/generate
|
||||||
|
private static final String API_URL = "https://apichat.epvc.pt/api/generate";
|
||||||
|
|
||||||
|
private final OkHttpClient client;
|
||||||
|
private final Handler mainHandler;
|
||||||
|
|
||||||
|
public OllamaService() {
|
||||||
|
this.client = new OkHttpClient();
|
||||||
|
this.mainHandler = new Handler(Looper.getMainLooper());
|
||||||
|
}
|
||||||
|
|
||||||
|
public interface OllamaCallback {
|
||||||
|
void onSuccess(String result);
|
||||||
|
void onError(Throwable t);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void fazerPergunta(String promptUtilizador, OllamaCallback callback) {
|
||||||
|
try {
|
||||||
|
// Construção do JSON no formato esperado pelo Ollama
|
||||||
|
JSONObject jsonBody = new JSONObject();
|
||||||
|
jsonBody.put("model", MODEL_NAME);
|
||||||
|
jsonBody.put("prompt", promptUtilizador);
|
||||||
|
jsonBody.put("stream", false); // "false" garante que a resposta vem numa única string JSON
|
||||||
|
|
||||||
|
RequestBody body = RequestBody.create(jsonBody.toString(), MediaType.parse("application/json; charset=utf-8"));
|
||||||
|
Request request = new Request.Builder()
|
||||||
|
.url(API_URL)
|
||||||
|
.post(body)
|
||||||
|
.build();
|
||||||
|
|
||||||
|
client.newCall(request).enqueue(new Callback() {
|
||||||
|
@Override
|
||||||
|
public void onFailure(Call call, IOException e) {
|
||||||
|
mainHandler.post(() -> callback.onError(e));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onResponse(Call call, Response response) throws IOException {
|
||||||
|
if (response.isSuccessful()) {
|
||||||
|
try {
|
||||||
|
String responseBody = response.body().string();
|
||||||
|
JSONObject jsonObject = new JSONObject(responseBody);
|
||||||
|
|
||||||
|
// O Ollama devolve o texto final diretamente no campo "response"
|
||||||
|
String textResult = jsonObject.getString("response");
|
||||||
|
|
||||||
|
mainHandler.post(() -> callback.onSuccess(textResult));
|
||||||
|
} catch (Exception e) {
|
||||||
|
mainHandler.post(() -> callback.onError(new Exception("Erro ao ler resposta da IA", e)));
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
String errorBody = response.body() != null ? response.body().string() : "Erro desconhecido";
|
||||||
|
mainHandler.post(() -> callback.onError(new Exception("Erro da API HTTP " + response.code() + ": " + errorBody)));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
} catch (Exception e) {
|
||||||
|
mainHandler.post(() -> callback.onError(e));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user