dev.langchain4j.model.ollama.OllamaLanguageModel Maven / Gradle / Ivy
package dev.langchain4j.model.ollama;
import dev.langchain4j.model.language.LanguageModel;
import dev.langchain4j.model.ollama.spi.OllamaLanguageModelBuilderFactory;
import dev.langchain4j.model.output.Response;
import dev.langchain4j.model.output.TokenUsage;
import lombok.Builder;
import java.time.Duration;
import java.util.List;
import static dev.langchain4j.internal.RetryUtils.withRetry;
import static dev.langchain4j.internal.Utils.getOrDefault;
import static dev.langchain4j.internal.ValidationUtils.ensureNotBlank;
import static dev.langchain4j.spi.ServiceHelper.loadFactories;
import static java.time.Duration.ofSeconds;
/**
* Ollama API reference
*
* Ollama API parameters.
*/
public class OllamaLanguageModel implements LanguageModel {
private final OllamaClient client;
private final String modelName;
private final Options options;
private final String format;
private final Integer maxRetries;
@Builder
public OllamaLanguageModel(String baseUrl,
String modelName,
Double temperature,
Integer topK,
Double topP,
Double repeatPenalty,
Integer seed,
Integer numPredict,
List stop,
String format,
Duration timeout,
Integer maxRetries) {
this.client = OllamaClient.builder()
.baseUrl(baseUrl)
.timeout(getOrDefault(timeout, ofSeconds(60)))
.build();
this.modelName = ensureNotBlank(modelName, "modelName");
this.options = Options.builder()
.temperature(temperature)
.topK(topK)
.topP(topP)
.repeatPenalty(repeatPenalty)
.seed(seed)
.numPredict(numPredict)
.stop(stop)
.build();
this.format = format;
this.maxRetries = getOrDefault(maxRetries, 3);
}
@Override
public Response generate(String prompt) {
CompletionRequest request = CompletionRequest.builder()
.model(modelName)
.prompt(prompt)
.options(options)
.format(format)
.stream(false)
.build();
CompletionResponse response = withRetry(() -> client.completion(request), maxRetries);
return Response.from(
response.getResponse(),
new TokenUsage(response.getPromptEvalCount(), response.getEvalCount())
);
}
public static OllamaLanguageModelBuilder builder() {
for (OllamaLanguageModelBuilderFactory factory : loadFactories(OllamaLanguageModelBuilderFactory.class)) {
return factory.get();
}
return new OllamaLanguageModelBuilder();
}
public static class OllamaLanguageModelBuilder {
public OllamaLanguageModelBuilder() {
// This is public so it can be extended
// By default with Lombok it becomes package private
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy