Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -119,7 +119,7 @@ MindWork AI Studio is a free desktop app for macOS, Windows, and Linux. It provi
- [IONOS](https://cloud.ionos.com/managed/ai-model-hub) (AI Model Hub running open-source models in Germany)
- [LiteLLM](https://www.litellm.ai/) (an AI gateway you run yourself, in front of models from many providers)
- [Hugging Face](https://huggingface.co/) using their [inference providers](https://huggingface.co/docs/inference-providers/index) such as Cerebras, Nebius, Sambanova, Novita, Hyperbolic, Together AI, Fireworks, Hugging Face
- Self-hosted models using [llama.cpp](https://github.com/ggerganov/llama.cpp), [ollama](https://github.com/ollama/ollama), [LM Studio](https://lmstudio.ai/), and [vLLM](https://github.com/vllm-project/vllm)
- Self-hosted models using [llama.cpp](https://github.com/ggerganov/llama.cpp), [ollama](https://github.com/ollama/ollama), [LM Studio](https://lmstudio.ai/), [vLLM](https://github.com/vllm-project/vllm), and [llmman](https://github.com/llmmanorg/llmman)
- [Groq](https://groq.com/)
- [Fireworks](https://fireworks.ai/)
- For scientists and employees of research institutions, we also support [Helmholtz](https://helmholtz.cloud/services/?serviceID=d7d5c597-a2f6-4bd1-b71e-4d6499d98570) and [GWDG](https://gwdg.de/services/application-services/ai-services/) AI services. These are available through federated logins like eduGAIN to all 18 Helmholtz Centers, the Max Planck Society, most German, and many international universities.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -127,7 +127,7 @@ public EmbeddingProviderDialog()
GetPreviousInstanceName = () => this.dataEditingPreviousInstanceName,
GetUsedInstanceNames = () => this.UsedInstanceNames,
GetHost = () => this.DataHost,
IsModelProvidedManually = () => this.DataLLMProvider is LLMProviders.SELF_HOSTED && this.DataHost is Host.OLLAMA,
IsModelProvidedManually = () => this.DataLLMProvider is LLMProviders.SELF_HOSTED && this.DataHost is (Host.OLLAMA or Host.LLMMAN),
};
}

Expand All @@ -137,7 +137,7 @@ private EmbeddingProvider CreateEmbeddingProviderSettings()
Model model = default;
if(this.DataLLMProvider is LLMProviders.SELF_HOSTED)
{
if (this.DataHost is Host.OLLAMA)
if (this.DataHost is Host.OLLAMA or Host.LLMMAN)
model = new Model(this.dataManuallyModel, null);
else if (this.DataHost is Host.LM_STUDIO)
model = this.DataModel;
Expand Down
4 changes: 2 additions & 2 deletions app/MindWork AI Studio/Plugins/configuration/plugin.lua
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,7 @@ CONFIG["LLM_PROVIDERS"] = {}
-- ["InstanceName"] = "<user-friendly name for the combination of server and model>",
-- ["UsedLLMProvider"] = "SELF_HOSTED",
--
-- -- Allowed values for Host are: LM_STUDIO, LLAMACPP, OLLAMA, and VLLM
-- -- Allowed values for Host are: LM_STUDIO, LLAMACPP, OLLAMA, VLLM, and LLMMAN
-- ["Host"] = "OLLAMA",
-- ["Hostname"] = "<https address of the server>",
--
Expand Down Expand Up @@ -200,7 +200,7 @@ CONFIG["EMBEDDING_PROVIDERS"] = {}
-- ["Name"] = "<user-friendly name for the embedding provider>",
-- ["UsedLLMProvider"] = "SELF_HOSTED",
--
-- -- Allowed values for Host are: LM_STUDIO, LLAMACPP, OLLAMA, and VLLM
-- -- Allowed values for Host are: LM_STUDIO, LLAMACPP, OLLAMA, VLLM, and LLMMAN
-- ["Host"] = "OLLAMA",
-- ["Hostname"] = "<https address of the server>",
--
Expand Down
1 change: 1 addition & 0 deletions app/MindWork AI Studio/Provider/LLMProvidersExtensions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -534,6 +534,7 @@ public static bool CanLoadModels(this LLMProviders provider, Host host, string?
case Host.OLLAMA:
case Host.LM_STUDIO:
case Host.VLLM:
case Host.LLMMAN:
return true;
}
}
Expand Down
3 changes: 3 additions & 0 deletions app/MindWork AI Studio/Provider/SelfHosted/Host.cs
Original file line number Diff line number Diff line change
Expand Up @@ -9,4 +9,7 @@ public enum Host
WHISPER_CPP,
OLLAMA,
VLLM,

// llmman, local runner with OpenAI-compatible /v1/ routes: https://github.com/llmmanorg/llmman
LLMMAN,
}
4 changes: 4 additions & 0 deletions app/MindWork AI Studio/Provider/SelfHosted/HostExtensions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ public static class HostExtensions
Host.WHISPER_CPP => "whisper.cpp",
Host.OLLAMA => "ollama",
Host.VLLM => "vLLM",
Host.LLMMAN => "llmman",

_ => "Unknown",
};
Expand Down Expand Up @@ -47,6 +48,7 @@ public static bool IsChatSupported(this Host host)
case Host.VLLM:
case Host.LM_STUDIO:
case Host.LLAMA_CPP:
case Host.LLMMAN:
return true;
}
}
Expand All @@ -58,6 +60,7 @@ public static bool IsEmbeddingSupported(this Host host)
case Host.LM_STUDIO:
case Host.OLLAMA:
case Host.VLLM:
case Host.LLMMAN:
return true;

default:
Expand All @@ -78,6 +81,7 @@ public static bool IsTranscriptionSupported(this Host host)
default:
case Host.LM_STUDIO:
case Host.LLAMA_CPP:
case Host.LLMMAN:
return false;
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ namespace AIStudio.Provider.SelfHosted;
public override string InstanceName { get; set; } = "Self-hosted";

/// <inheritdoc />
public override bool HasModelLoadingCapability => host is Host.OLLAMA or Host.LM_STUDIO or Host.VLLM or Host.LLAMA_CPP;
public override bool HasModelLoadingCapability => host is Host.OLLAMA or Host.LM_STUDIO or Host.VLLM or Host.LLAMA_CPP or Host.LLMMAN;

/// <inheritdoc />
public override async IAsyncEnumerable<ContentStreamChunk> StreamChatCompletion(Provider.Model chatModel, ChatThread chatThread, SettingsManager settingsManager, [EnumeratorCancellation] CancellationToken token = default)
Expand Down Expand Up @@ -101,6 +101,7 @@ public override async Task<ModelLoadResult> GetTextModels(string? apiKeyProvisio
case Host.LM_STUDIO:
case Host.OLLAMA:
case Host.VLLM:
case Host.LLMMAN:
return await this.LoadModels( SecretStoreType.LLM_PROVIDER, ["embed"], [], apiKeyProvisional, token);
}

Expand Down Expand Up @@ -128,6 +129,7 @@ public override async Task<ModelLoadResult> GetEmbeddingModels(string? apiKeyPro
case Host.LM_STUDIO:
case Host.OLLAMA:
case Host.VLLM:
case Host.LLMMAN:
return await this.LoadModels( SecretStoreType.EMBEDDING_PROVIDER, [], ["embed"], apiKeyProvisional, token);
}

Expand Down
1 change: 1 addition & 0 deletions app/MindWork AI Studio/wwwroot/changelog/v26.9.1.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,3 +9,4 @@
- Added organization-wide management for tools. IT departments can switch tools off entirely (`DataTools.EnableTools`), disable individual ones (`DataTools.DisabledToolIds`), raise the provider trust a tool requires (`DataTools.MinimumProviderConfidenceByToolId`), and manage every tool setting by tool and field name — either fixed (`DataTools.LockedToolSettings`) or as a pre-filled value the user may still change (`DataTools.DefaultToolSettings`). None of these needs to be known to AI Studio in advance, so it covers the tools future plugins will bring just as well. Secrets such as API keys can be rolled out too, encrypted with your enterprise encryption secret, the same way you already deploy provider keys. The example configuration plugin documents every setting of both tools.
- Added tool calling to the abilities you can state yourself in the expert provider settings. When you use a model AI Studio does not recognize as tool-capable, you can now declare that it is, the same way you already could for image input or reasoning.
- Improved loading web content in the assistants: it now uses the same reader as the Read Web Page tool, which extracts the main content of a page more reliably and skips navigation and boilerplate. Pages from your own network, including local servers, keep working as before. When a page cannot be read, AI Studio now says why instead of leaving the field empty.
- Added [llmman](https://github.com/llmmanorg/llmman) as a host option for self-hosted chat and embedding providers. llmman is a local model runner; use `http://localhost:17434` as the hostname.