All Downloads are FREE. Search and download functionalities are using the official Maven repository.

dev.langchain4j.model.ollama.OllamaLanguageModel Maven / Gradle / Ivy

There is a newer version: 1.0.0-alpha1
Show newest version
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