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

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

package dev.langchain4j.model.ollama;

import dev.langchain4j.data.message.AiMessage;
import dev.langchain4j.data.message.ChatMessage;
import dev.langchain4j.model.StreamingResponseHandler;
import dev.langchain4j.model.chat.StreamingChatLanguageModel;
import dev.langchain4j.model.chat.listener.ChatModelListener;
import dev.langchain4j.model.ollama.spi.OllamaStreamingChatModelBuilderFactory;

import java.time.Duration;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import static dev.langchain4j.internal.Utils.getOrDefault;
import static dev.langchain4j.internal.ValidationUtils.ensureNotBlank;
import static dev.langchain4j.internal.ValidationUtils.ensureNotEmpty;
import static dev.langchain4j.model.ollama.OllamaMessagesUtils.toOllamaMessages;
import static dev.langchain4j.spi.ServiceHelper.loadFactories;
import static java.time.Duration.ofSeconds;
import static java.util.Collections.emptyList;

/**
 * Ollama API reference
 * 
* Ollama API parameters. */ public class OllamaStreamingChatModel implements StreamingChatLanguageModel { private final OllamaClient client; private final String modelName; private final Options options; private final String format; private final List listeners; public OllamaStreamingChatModel(String baseUrl, String modelName, Double temperature, Integer topK, Double topP, Double repeatPenalty, Integer seed, Integer numPredict, Integer numCtx, List stop, String format, Duration timeout, Boolean logRequests, Boolean logResponses, Map customHeaders, List listeners ) { this.client = OllamaClient.builder() .baseUrl(baseUrl) .timeout(getOrDefault(timeout, ofSeconds(60))) .logRequests(logRequests) .logStreamingResponses(logResponses) .customHeaders(customHeaders) .build(); this.modelName = ensureNotBlank(modelName, "modelName"); this.options = Options.builder() .temperature(temperature) .topK(topK) .topP(topP) .repeatPenalty(repeatPenalty) .seed(seed) .numPredict(numPredict) .numCtx(numCtx) .stop(stop) .build(); this.format = format; this.listeners = new ArrayList<>(getOrDefault(listeners, emptyList())); } public static OllamaStreamingChatModelBuilder builder() { for (OllamaStreamingChatModelBuilderFactory factory : loadFactories(OllamaStreamingChatModelBuilderFactory.class)) { return factory.get(); } return new OllamaStreamingChatModelBuilder(); } @Override public void generate(List messages, StreamingResponseHandler handler) { ensureNotEmpty(messages, "messages"); ChatRequest request = ChatRequest.builder() .model(modelName) .messages(toOllamaMessages(messages)) .options(options) .format(format) .stream(true) .build(); client.streamingChat(request, handler, listeners, messages); } public static class OllamaStreamingChatModelBuilder { private String baseUrl; private String modelName; private Double temperature; private Integer topK; private Double topP; private Double repeatPenalty; private Integer seed; private Integer numPredict; private Integer numCtx; private List stop; private String format; private Duration timeout; private Map customHeaders; private Boolean logRequests; private Boolean logResponses; private List listeners; public OllamaStreamingChatModelBuilder() { // This is public so it can be extended // By default with Lombok it becomes package private } public OllamaStreamingChatModelBuilder baseUrl(String baseUrl) { this.baseUrl = baseUrl; return this; } public OllamaStreamingChatModelBuilder modelName(String modelName) { this.modelName = modelName; return this; } public OllamaStreamingChatModelBuilder temperature(Double temperature) { this.temperature = temperature; return this; } public OllamaStreamingChatModelBuilder topK(Integer topK) { this.topK = topK; return this; } public OllamaStreamingChatModelBuilder topP(Double topP) { this.topP = topP; return this; } public OllamaStreamingChatModelBuilder repeatPenalty(Double repeatPenalty) { this.repeatPenalty = repeatPenalty; return this; } public OllamaStreamingChatModelBuilder seed(Integer seed) { this.seed = seed; return this; } public OllamaStreamingChatModelBuilder numPredict(Integer numPredict) { this.numPredict = numPredict; return this; } public OllamaStreamingChatModelBuilder numCtx(Integer numCtx) { this.numCtx = numCtx; return this; } public OllamaStreamingChatModelBuilder stop(List stop) { this.stop = stop; return this; } public OllamaStreamingChatModelBuilder format(String format) { this.format = format; return this; } public OllamaStreamingChatModelBuilder timeout(Duration timeout) { this.timeout = timeout; return this; } public OllamaStreamingChatModelBuilder customHeaders(Map customHeaders) { this.customHeaders = customHeaders; return this; } public OllamaStreamingChatModelBuilder logRequests(Boolean logRequests) { this.logRequests = logRequests; return this; } public OllamaStreamingChatModelBuilder logResponses(Boolean logResponses) { this.logResponses = logResponses; return this; } public OllamaStreamingChatModelBuilder listeners(List listeners) { this.listeners = listeners; return this; } public OllamaStreamingChatModel build() { return new OllamaStreamingChatModel( baseUrl, modelName, temperature, topK, topP, repeatPenalty, seed, numPredict, numCtx, stop, format, timeout, logRequests, logResponses, customHeaders, listeners ); } } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy