From 0ff40fbaea9fa36529f322715a0e0d703ebfac2f Mon Sep 17 00:00:00 2001 From: Fu Cheng Date: Thu, 2 Jan 2025 11:04:53 +1300 Subject: [PATCH] add ollama support --- .../core/tool/AgentToolFactory.kt | 2 -- llm/ollama/pom.xml | 32 +++++++++++++++++++ .../llm/ollama/OllamaChatModelProvider.kt | 32 +++++++++++++++++++ .../llm/ollama/OllamaChatOptionsConfigurer.kt | 23 +++++++++++++ .../llm/ollama/OllamaConfig.kt | 6 ++++ ...hub.llmagentbuilder.core.ChatModelProvider | 1 + ...llmagentbuilder.core.ChatOptionsConfigurer | 1 + llm/pom.xml | 1 + 8 files changed, 96 insertions(+), 2 deletions(-) create mode 100644 llm/ollama/pom.xml create mode 100644 llm/ollama/src/main/kotlin/io/github/llmagentbuilder/llm/ollama/OllamaChatModelProvider.kt create mode 100644 llm/ollama/src/main/kotlin/io/github/llmagentbuilder/llm/ollama/OllamaChatOptionsConfigurer.kt create mode 100644 llm/ollama/src/main/kotlin/io/github/llmagentbuilder/llm/ollama/OllamaConfig.kt create mode 100644 llm/ollama/src/main/resources/META-INF/services/io.github.llmagentbuilder.core.ChatModelProvider create mode 100644 llm/ollama/src/main/resources/META-INF/services/io.github.llmagentbuilder.core.ChatOptionsConfigurer diff --git a/core/src/main/kotlin/io/github/llmagentbuilder/core/tool/AgentToolFactory.kt b/core/src/main/kotlin/io/github/llmagentbuilder/core/tool/AgentToolFactory.kt index 42a44f1..0519fd1 100644 --- a/core/src/main/kotlin/io/github/llmagentbuilder/core/tool/AgentToolFactory.kt +++ b/core/src/main/kotlin/io/github/llmagentbuilder/core/tool/AgentToolFactory.kt @@ -9,7 +9,6 @@ import java.util.function.Supplier */ interface AgentToolFactory> { /** - * @param T Agent tool type * @return Agent tool */ fun create(): T @@ -21,7 +20,6 @@ interface AgentToolFactory> { interface ConfigurableAgentToolFactory> : AgentToolFactory { /** - * @param T Agent tool type * @param config Tool configuration object * @return Agent tool */ diff --git a/llm/ollama/pom.xml b/llm/ollama/pom.xml new file mode 100644 index 0000000..02e0784 --- /dev/null +++ b/llm/ollama/pom.xml @@ -0,0 +1,32 @@ + + + 4.0.0 + + io.github.llmagentbuilder + llm + 0.4.2 + + + llm-ollama + LLM Adapter :: Ollama + + + UTF-8 + 21 + 21 + + + + + org.springframework.ai + spring-ai-ollama + + + io.github.llmagentbuilder + core + ${project.version} + + + \ No newline at end of file diff --git a/llm/ollama/src/main/kotlin/io/github/llmagentbuilder/llm/ollama/OllamaChatModelProvider.kt b/llm/ollama/src/main/kotlin/io/github/llmagentbuilder/llm/ollama/OllamaChatModelProvider.kt new file mode 100644 index 0000000..be90bf9 --- /dev/null +++ b/llm/ollama/src/main/kotlin/io/github/llmagentbuilder/llm/ollama/OllamaChatModelProvider.kt @@ -0,0 +1,32 @@ +package io.github.llmagentbuilder.llm.ollama + +import io.github.llmagentbuilder.core.ChatModelProvider +import io.github.llmagentbuilder.core.MapToObject +import org.springframework.ai.chat.model.ChatModel +import org.springframework.ai.model.function.FunctionCallbackResolver +import org.springframework.ai.ollama.OllamaChatModel +import org.springframework.ai.ollama.api.OllamaApi +import org.springframework.ai.ollama.api.OllamaModel +import org.springframework.ai.ollama.api.OllamaOptions + +class OllamaChatModelProvider : ChatModelProvider { + override fun configKey(): String { + return "ollama" + } + + override fun provideChatModel( + functionCallbackResolver: FunctionCallbackResolver, + config: Map? + ): ChatModel? { + val ollamaConfig = MapToObject.toObject(config) + if (ollamaConfig?.enabled == false) { + return null + } + val model = ollamaConfig?.model ?: OllamaModel.PHI3.id() + return OllamaChatModel.builder() + .ollamaApi(OllamaApi()) + .defaultOptions(OllamaOptions.builder().model(model).build()) + .functionCallbackResolver(functionCallbackResolver) + .build() + } +} \ No newline at end of file diff --git a/llm/ollama/src/main/kotlin/io/github/llmagentbuilder/llm/ollama/OllamaChatOptionsConfigurer.kt b/llm/ollama/src/main/kotlin/io/github/llmagentbuilder/llm/ollama/OllamaChatOptionsConfigurer.kt new file mode 100644 index 0000000..1e5d0d7 --- /dev/null +++ b/llm/ollama/src/main/kotlin/io/github/llmagentbuilder/llm/ollama/OllamaChatOptionsConfigurer.kt @@ -0,0 +1,23 @@ +package io.github.llmagentbuilder.llm.ollama + +import io.github.llmagentbuilder.core.ChatOptionsConfigurer +import org.springframework.ai.chat.prompt.ChatOptions +import org.springframework.ai.ollama.api.OllamaOptions + +class OllamaChatOptionsConfigurer : ChatOptionsConfigurer { + override fun supports(chatOptions: ChatOptions?): Boolean { + return chatOptions is OllamaOptions + } + + override fun configure( + chatOptions: ChatOptions?, + config: ChatOptionsConfigurer.ChatOptionsConfig + ): ChatOptions { + val stops = config.stopSequence ?: listOf() + return chatOptions?.let { + val options = OllamaOptions.fromOptions(it as OllamaOptions) + options.stop = ((options.stopSequences ?: listOf()) + stops) + return options + } ?: OllamaOptions.builder().stop(stops).build() + } +} \ No newline at end of file diff --git a/llm/ollama/src/main/kotlin/io/github/llmagentbuilder/llm/ollama/OllamaConfig.kt b/llm/ollama/src/main/kotlin/io/github/llmagentbuilder/llm/ollama/OllamaConfig.kt new file mode 100644 index 0000000..c51f3f6 --- /dev/null +++ b/llm/ollama/src/main/kotlin/io/github/llmagentbuilder/llm/ollama/OllamaConfig.kt @@ -0,0 +1,6 @@ +package io.github.llmagentbuilder.llm.ollama + +data class OllamaConfig( + val enabled: Boolean? = true, + val model: String? = null, +) diff --git a/llm/ollama/src/main/resources/META-INF/services/io.github.llmagentbuilder.core.ChatModelProvider b/llm/ollama/src/main/resources/META-INF/services/io.github.llmagentbuilder.core.ChatModelProvider new file mode 100644 index 0000000..d879f49 --- /dev/null +++ b/llm/ollama/src/main/resources/META-INF/services/io.github.llmagentbuilder.core.ChatModelProvider @@ -0,0 +1 @@ +io.github.llmagentbuilder.llm.ollama.OllamaChatModelProvider \ No newline at end of file diff --git a/llm/ollama/src/main/resources/META-INF/services/io.github.llmagentbuilder.core.ChatOptionsConfigurer b/llm/ollama/src/main/resources/META-INF/services/io.github.llmagentbuilder.core.ChatOptionsConfigurer new file mode 100644 index 0000000..c7ee5d4 --- /dev/null +++ b/llm/ollama/src/main/resources/META-INF/services/io.github.llmagentbuilder.core.ChatOptionsConfigurer @@ -0,0 +1 @@ +io.github.llmagentbuilder.llm.ollama.OllamaChatOptionsConfigurer \ No newline at end of file diff --git a/llm/pom.xml b/llm/pom.xml index d43da7f..3ab12af 100644 --- a/llm/pom.xml +++ b/llm/pom.xml @@ -14,6 +14,7 @@ pom openai + ollama