Add structured JSON generation support for assistant calls

This commit is contained in:
Lucio Lelii 2026-04-24 12:17:38 +02:00
parent f729c8a460
commit e4d8a0b2a8
2 changed files with 24 additions and 4 deletions

View File

@ -11,6 +11,10 @@ public interface LLMProvider {
List<String> getRegisteredModels();
String generate(String model, String prompt);
default String generateJson(String model, String prompt) {
return generate(model, prompt);
}
default String generate(String model, String prompt, String authorization) {
return generate(model, prompt);
}

View File

@ -1,6 +1,7 @@
package it.cnr.isti.workflow.manager.llms.providers.ollama;
import java.time.Duration;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
@ -46,13 +47,28 @@ public class InternalOllamaLLMProvider implements LLMProvider {
}
public String generate(String model, String prompt) {
return generate(model, prompt, false);
}
@Override
public String generateJson(String model, String prompt) {
return generate(model, prompt, true);
}
private String generate(String model, String prompt, boolean jsonResponse) {
Objects.requireNonNull(prompt, "prompt cannot be null");
Objects.requireNonNull(model, "model cannot be null");
ObjectMapper mapper = new ObjectMapper();
Map<String, Object> bodyMap = Map.of(
"model", model,
"prompt", prompt,
"stream", false);
Map<String, Object> bodyMap = new LinkedHashMap<>();
bodyMap.put("model", model);
bodyMap.put("prompt", prompt);
bodyMap.put("stream", false);
if (jsonResponse) {
bodyMap.put("format", "json");
bodyMap.put("options", Map.of(
"temperature", 0.1,
"num_predict", 4096));
}
// Implement the logic to call the Ollama API and return the response
WebClient webClient = webClientBuilder.baseUrl(this.ollamaURL).build();