From 17984035d2aa693e275098bfce69cb95d6755837 Mon Sep 17 00:00:00 2001 From: Eric Deandrea Date: Tue, 10 Dec 2024 13:25:59 -0500 Subject: [PATCH] The current implementation of the Ollama dev service is a hot mess. It doesn't work properly. Therefore I have done the following things: 1. Merged the `quarkus-langchain4j-ollama-devservices` artifact into the `quarkus-langchain4j-ollama-deployment` artifact. 2. The dev service is aware of whether or not there is a local Ollama service running on port `11434`. If so, it doesn't do anything. 3. If there isn't a local Ollama service running on port `11434` then it will start an `ollama/ollama:latest` container on a random port. It will also expose a few configuration properties with values of the host & port the container is running on. 4. The container shares the filesystem location with the Ollama client (`user.home/.ollama`), so any models downloaded by the client or the container are shared with each other, and therefore only need to be downloaded once. 5. The pulling of the required models hasn't changed. The main dev service still uses the Ollama rest api to pull the required models. It is simply passed a URL, which could be the local Ollama client, or it could be a url to a container. It doesn't matter at that point. The documentation has also been updated to reflect everything. --- .../OllamaDevServicesProcessor.java | 20 +++++++++---------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/model-providers/ollama/deployment/src/main/java/io/quarkiverse/langchain4j/ollama/deployment/devservices/OllamaDevServicesProcessor.java b/model-providers/ollama/deployment/src/main/java/io/quarkiverse/langchain4j/ollama/deployment/devservices/OllamaDevServicesProcessor.java index 2c3272603..deaeadf52 100644 --- a/model-providers/ollama/deployment/src/main/java/io/quarkiverse/langchain4j/ollama/deployment/devservices/OllamaDevServicesProcessor.java +++ b/model-providers/ollama/deployment/src/main/java/io/quarkiverse/langchain4j/ollama/deployment/devservices/OllamaDevServicesProcessor.java @@ -7,12 +7,6 @@ import org.jboss.logging.Logger; -import io.quarkiverse.langchain4j.deployment.devservice.Langchain4jDevServicesEnabled; -import io.quarkiverse.langchain4j.deployment.devservice.OllamaClient; -import io.quarkiverse.langchain4j.deployment.items.DevServicesChatModelRequiredBuildItem; -import io.quarkiverse.langchain4j.deployment.items.DevServicesEmbeddingModelRequiredBuildItem; -import io.quarkiverse.langchain4j.deployment.items.DevServicesOllamaConfigBuildItem; -import io.quarkiverse.langchain4j.ollama.deployment.LangChain4jOllamaOpenAiBuildConfig; import io.quarkus.bootstrap.classloading.QuarkusClassLoader; import io.quarkus.deployment.IsNormal; import io.quarkus.deployment.annotations.BuildProducer; @@ -28,6 +22,13 @@ import io.quarkus.deployment.dev.devservices.GlobalDevServicesConfig; import io.quarkus.deployment.logging.LoggingSetupBuildItem; +import io.quarkiverse.langchain4j.deployment.devservice.Langchain4jDevServicesEnabled; +import io.quarkiverse.langchain4j.deployment.devservice.OllamaClient; +import io.quarkiverse.langchain4j.deployment.items.DevServicesChatModelRequiredBuildItem; +import io.quarkiverse.langchain4j.deployment.items.DevServicesEmbeddingModelRequiredBuildItem; +import io.quarkiverse.langchain4j.deployment.items.DevServicesOllamaConfigBuildItem; +import io.quarkiverse.langchain4j.ollama.deployment.LangChain4jOllamaOpenAiBuildConfig; + /** * Starts a Ollama server as dev service if needed. */ @@ -60,7 +61,6 @@ public void startOllamaDevService( LangChain4jOllamaOpenAiBuildConfig ollamaBuildConfig, Optional consoleInstalledBuildItem, LoggingSetupBuildItem loggingSetupBuildItem, - GlobalDevServicesConfig devServicesConfig, List devServicesSharedNetworkBuildItem, List devServicesChatModels, List devServicesEmbeddingModels, @@ -97,8 +97,7 @@ public void startOllamaDevService( var compressor = new StartupLogCompressor((launchMode.isTest() ? "(test) " : "") + "Ollama Dev Services Starting:", consoleInstalledBuildItem, loggingSetupBuildItem); try { - devService = startOllama(dockerStatusBuildItem, ollamaDevServicesBuildConfig, devServicesConfig, - !devServicesSharedNetworkBuildItem.isEmpty()); + devService = startOllama(dockerStatusBuildItem, ollamaDevServicesBuildConfig, !devServicesSharedNetworkBuildItem.isEmpty()); if (devService == null) { compressor.closeAndDumpCaptured(); @@ -152,10 +151,9 @@ private boolean isOllamaClientRunning() { private DevServicesResultBuildItem.RunningDevService startOllama(DockerStatusBuildItem dockerStatusBuildItem, OllamaDevServicesBuildConfig ollamaDevServicesBuildConfig, - GlobalDevServicesConfig devServicesConfig, boolean useSharedNetwork) { - if (!new GlobalDevServicesConfig.Enabled(devServicesConfig).getAsBoolean() || !ollamaDevServicesBuildConfig.enabled()) { + if (!ollamaDevServicesBuildConfig.enabled()) { // explicitly disabled log.warn("Not starting dev services for Ollama, as it has been disabled in the config."); return null;