diff --git a/apps/models_provider/constants/model_provider_constants.py b/apps/models_provider/constants/model_provider_constants.py
index ae749795cb7..986995d0e82 100644
--- a/apps/models_provider/constants/model_provider_constants.py
+++ b/apps/models_provider/constants/model_provider_constants.py
@@ -10,6 +10,7 @@
from models_provider.impl.docker_ai_model_provider.docker_ai_model_provider import DockerModelProvider
from models_provider.impl.gemini_model_provider.gemini_model_provider import GeminiModelProvider
from models_provider.impl.kimi_model_provider.kimi_model_provider import KimiModelProvider
+from models_provider.impl.llmman_model_provider.llmman_model_provider import LlmmanModelProvider
from models_provider.impl.local_model_provider.local_model_provider import LocalModelProvider
from models_provider.impl.ollama_model_provider.ollama_model_provider import OllamaModelProvider
from models_provider.impl.openai_model_provider.openai_model_provider import OpenAIModelProvider
@@ -30,6 +31,7 @@ class ModelProvideConstants(Enum):
model_azure_provider = AzureModelProvider()
model_wenxin_provider = WenxinModelProvider()
model_ollama_provider = OllamaModelProvider()
+ model_llmman_provider = LlmmanModelProvider()
model_openai_provider = OpenAIModelProvider()
model_docker_ai_provider = DockerModelProvider()
model_kimi_provider = KimiModelProvider()
diff --git a/apps/models_provider/impl/llmman_model_provider/__init__.py b/apps/models_provider/impl/llmman_model_provider/__init__.py
new file mode 100644
index 00000000000..9bad5790a57
--- /dev/null
+++ b/apps/models_provider/impl/llmman_model_provider/__init__.py
@@ -0,0 +1 @@
+# coding=utf-8
diff --git a/apps/models_provider/impl/llmman_model_provider/icon/__init__.py b/apps/models_provider/impl/llmman_model_provider/icon/__init__.py
new file mode 100644
index 00000000000..9bad5790a57
--- /dev/null
+++ b/apps/models_provider/impl/llmman_model_provider/icon/__init__.py
@@ -0,0 +1 @@
+# coding=utf-8
diff --git a/apps/models_provider/impl/llmman_model_provider/icon/llmman_icon_svg b/apps/models_provider/impl/llmman_model_provider/icon/llmman_icon_svg
new file mode 100644
index 00000000000..fe064836a6b
--- /dev/null
+++ b/apps/models_provider/impl/llmman_model_provider/icon/llmman_icon_svg
@@ -0,0 +1,5 @@
+
diff --git a/apps/models_provider/impl/llmman_model_provider/llmman_model_provider.py b/apps/models_provider/impl/llmman_model_provider/llmman_model_provider.py
new file mode 100644
index 00000000000..4f57707c33c
--- /dev/null
+++ b/apps/models_provider/impl/llmman_model_provider/llmman_model_provider.py
@@ -0,0 +1,47 @@
+# coding=utf-8
+"""
+ llmman (https://github.com/llmmanorg/llmman) is a local model runner that serves the
+ Ollama API on port 17434, so the Ollama model classes and credentials are reused as-is.
+"""
+import os
+
+from common.utils.common import get_file_content
+from maxkb.conf import PROJECT_DIR
+from models_provider.base_model_provider import ModelInfo, ModelInfoManage, ModelProvideInfo, ModelTypeConst
+from models_provider.impl.ollama_model_provider.credential.embedding import OllamaEmbeddingModelCredential
+from models_provider.impl.ollama_model_provider.credential.llm import OllamaLLMModelCredential
+from models_provider.impl.ollama_model_provider.model.embedding import OllamaEmbedding
+from models_provider.impl.ollama_model_provider.model.llm import OllamaChatModel
+from models_provider.impl.ollama_model_provider.ollama_model_provider import OllamaModelProvider
+
+llmman_llm_model_credential = OllamaLLMModelCredential()
+llmman_embedding_model_credential = OllamaEmbeddingModelCredential()
+model_info_list = [
+ ModelInfo('gemma4', '', ModelTypeConst.LLM, llmman_llm_model_credential, OllamaChatModel),
+ ModelInfo('qwen3.8', '', ModelTypeConst.LLM, llmman_llm_model_credential, OllamaChatModel),
+ ModelInfo('hf.co/unsloth/Qwen3.5-0.8B-GGUF', '', ModelTypeConst.LLM, llmman_llm_model_credential,
+ OllamaChatModel),
+]
+embedding_model_info = [
+ ModelInfo('hf.co/nomic-ai/nomic-embed-text-v1.5-GGUF', '', ModelTypeConst.EMBEDDING,
+ llmman_embedding_model_credential, OllamaEmbedding),
+]
+
+model_info_manage = (
+ ModelInfoManage.builder()
+ .append_model_info_list(model_info_list)
+ .append_default_model_info(model_info_list[0])
+ .append_model_info_list(embedding_model_info)
+ .append_default_model_info(embedding_model_info[0])
+ .build()
+)
+
+
+class LlmmanModelProvider(OllamaModelProvider):
+ def get_model_info_manage(self):
+ return model_info_manage
+
+ def get_model_provide_info(self):
+ return ModelProvideInfo(provider='model_llmman_provider', name='llmman', icon=get_file_content(
+ os.path.join(PROJECT_DIR, "apps", 'models_provider', 'impl', 'llmman_model_provider', 'icon',
+ 'llmman_icon_svg')))
diff --git a/ui/src/components/dynamics-form/items/model/provider-data.ts b/ui/src/components/dynamics-form/items/model/provider-data.ts
index 5e7b39b82c6..6b6ee31fe0a 100644
--- a/ui/src/components/dynamics-form/items/model/provider-data.ts
+++ b/ui/src/components/dynamics-form/items/model/provider-data.ts
@@ -14,6 +14,11 @@ export const providerList = [
"name": "Ollama",
"icon": "\n"
},
+ {
+ "provider": "model_llmman_provider",
+ "name": "llmman",
+ "icon": "\n"
+ },
{
"provider": "model_openai_provider",
"name": "OpenAI",
diff --git a/ui/src/views/model/component/Provider.vue b/ui/src/views/model/component/Provider.vue
index 1498e20c8a9..fe2f8732cf6 100644
--- a/ui/src/views/model/component/Provider.vue
+++ b/ui/src/views/model/component/Provider.vue
@@ -126,6 +126,7 @@ watch(
(list) => {
const local_provider = [
'model_ollama_provider',
+ 'model_llmman_provider',
'model_local_provider',
'model_xinference_provider',
'model_vllm_provider',