Java integration library enabling LangChain4j applications to use Ollama's local language models with support for chat, streaming, embeddings, and advanced reasoning features
The langchain4j-ollama module provides SPI (Service Provider Interface) interfaces for custom builder factory implementations. These interfaces enable framework integrations and dependency injection scenarios.
SPI interfaces follow the Java ServiceLoader pattern, allowing custom implementations to provide builder instances. Each model class has a corresponding factory interface.
Common use cases:
Factory interface for creating OllamaChatModel builder instances.
package dev.langchain4j.model.ollama.spi;
import dev.langchain4j.model.ollama.OllamaChatModel;
import java.util.function.Supplier;
public interface OllamaChatModelBuilderFactory
extends Supplier<OllamaChatModel.OllamaChatModelBuilder>Thread Safety: Implementations should be stateless and thread-safe
OllamaChatModel.OllamaChatModelBuilder get()Returns a new builder instance for OllamaChatModel.
Returns: Fresh OllamaChatModelBuilder instance
Thread Safety: Must be safe for concurrent calls
Example Implementation:
public class CustomOllamaChatModelBuilderFactory
implements OllamaChatModelBuilderFactory {
@Override
public OllamaChatModel.OllamaChatModelBuilder get() {
return OllamaChatModel.builder()
.baseUrl(loadFromConfig("ollama.baseUrl"))
.timeout(Duration.ofMinutes(5))
.logRequests(true);
}
}Create file META-INF/services/dev.langchain4j.model.ollama.spi.OllamaChatModelBuilderFactory:
com.example.CustomOllamaChatModelBuilderFactoryimport dev.langchain4j.model.ollama.spi.OllamaChatModelBuilderFactory;
import java.util.ServiceLoader;
ServiceLoader<OllamaChatModelBuilderFactory> loader =
ServiceLoader.load(OllamaChatModelBuilderFactory.class);
OllamaChatModelBuilderFactory factory = loader.findFirst()
.orElseThrow(() -> new IllegalStateException("No factory found"));
OllamaChatModel model = factory.get()
.modelName("llama2")
.build();@Override
public OllamaChatModel.OllamaChatModelBuilder get() {
return OllamaChatModel.builder()
.baseUrl("http://localhost:11434") // Default URL
.timeout(Duration.ofMinutes(5)) // Reasonable timeout
.maxRetries(3); // Automatic retries
}// Factories should be stateless and thread-safe
public class ThreadSafeFactory implements OllamaChatModelBuilderFactory {
@Override
public OllamaChatModel.OllamaChatModelBuilder get() {
// Returns new builder instance each time - thread safe
return OllamaChatModel.builder()
.baseUrl(getConfiguredUrl());
}
private String getConfiguredUrl() {
// Read from thread-safe configuration source
return ConfigurationManager.getOllamaUrl();
}
}Install with Tessl CLI
npx tessl i tessl/maven-dev-langchain4j--langchain4j-ollama@1.11.0