mirror of
https://github.com/ollama/ollama.git
synced 2026-04-24 01:35:49 +02:00
* add ability to disable cloud
Users can now easily opt-out of cloud inference and web search by
setting
```
"disable_ollama_cloud": true
```
in their `~/.ollama/server.json` settings file. After a setting update,
the server must be restarted.
Alternatively, setting the environment variable `OLLAMA_NO_CLOUD=1` will
also disable cloud features. While users previously were able to avoid
cloud models by not pulling or `ollama run`ing them, this gives them an
easy way to enforce that decision. Any attempt to run a cloud model when
cloud is disabled will fail.
The app's old "airplane mode" setting, which did a similar thing for
hiding cloud models within the app is now unified with this new cloud
disabled mode. That setting has been replaced with a "Cloud" toggle,
which behind the scenes edits `server.json` and then restarts the
server.
* gate cloud models across TUI and launch flows when cloud is disabled
Block cloud models from being selected, launched, or written to
integration configs when cloud mode is turned off:
- TUI main menu: open model picker instead of launching with a
disabled cloud model
- cmd.go: add IsCloudModelDisabled checks for all Selection* paths
- LaunchCmd: filter cloud models from saved Editor configs before
launch, fall through to picker if none remain
- Editor Run() methods (droid, opencode, openclaw): filter cloud
models before calling Edit() and persist the cleaned list
- Export SaveIntegration, remove SaveIntegrationModel wrapper that
was accumulating models instead of replacing them
* rename saveIntegration to SaveIntegration in config.go and tests
* cmd/config: add --model guarding and empty model list fixes
* Update docs/faq.mdx
Co-authored-by: Jeffrey Morgan <jmorganca@gmail.com>
* Update internal/cloud/policy.go
Co-authored-by: Jeffrey Morgan <jmorganca@gmail.com>
* Update internal/cloud/policy.go
Co-authored-by: Jeffrey Morgan <jmorganca@gmail.com>
* Update server/routes.go
Co-authored-by: Jeffrey Morgan <jmorganca@gmail.com>
* Revert "Update internal/cloud/policy.go"
This reverts commit 8bff8615f9.
Since this error shows up in other integrations, we want it to be
prefixed with Ollama
* rename cloud status
* more status renaming
* fix tests that weren't updated after rename
---------
Co-authored-by: ParthSareen <parth.sareen@ollama.com>
Co-authored-by: Jeffrey Morgan <jmorganca@gmail.com>
102 lines
2.8 KiB
TypeScript
102 lines
2.8 KiB
TypeScript
import { Model } from "@/gotypes";
|
|
|
|
// Featured models list (in priority order)
|
|
export const FEATURED_MODELS = [
|
|
"gpt-oss:120b-cloud",
|
|
"gpt-oss:20b-cloud",
|
|
"deepseek-v3.1:671b-cloud",
|
|
"qwen3-coder:480b-cloud",
|
|
"qwen3-vl:235b-cloud",
|
|
"minimax-m2:cloud",
|
|
"glm-4.6:cloud",
|
|
"gpt-oss:120b",
|
|
"gpt-oss:20b",
|
|
"gemma3:27b",
|
|
"gemma3:12b",
|
|
"gemma3:4b",
|
|
"gemma3:1b",
|
|
"deepseek-r1:8b",
|
|
"qwen3-coder:30b",
|
|
"qwen3-vl:30b",
|
|
"qwen3-vl:8b",
|
|
"qwen3-vl:4b",
|
|
"qwen3:30b",
|
|
"qwen3:8b",
|
|
"qwen3:4b",
|
|
];
|
|
|
|
function alphabeticalSort(a: Model, b: Model): number {
|
|
return a.model.toLowerCase().localeCompare(b.model.toLowerCase());
|
|
}
|
|
|
|
//Merges models, sorting cloud models first, then other models
|
|
export function mergeModels(
|
|
localModels: Model[],
|
|
hideCloudModels: boolean = false,
|
|
): Model[] {
|
|
const allModels = (localModels || []).map((model) => model);
|
|
|
|
// 1. Get cloud models from local models and featured list
|
|
const cloudModels = [...allModels.filter((m) => m.isCloud())];
|
|
|
|
// Add any cloud models from FEATURED_MODELS that aren't in local models
|
|
FEATURED_MODELS.filter((f) => f.endsWith("cloud")).forEach((cloudModel) => {
|
|
if (!cloudModels.some((m) => m.model === cloudModel)) {
|
|
cloudModels.push(new Model({ model: cloudModel }));
|
|
}
|
|
});
|
|
|
|
// 2. Get other featured models (non-cloud)
|
|
const featuredModels = FEATURED_MODELS.filter(
|
|
(f) => !f.endsWith("cloud"),
|
|
).map((model) => {
|
|
// Check if this model exists in local models
|
|
const localMatch = allModels.find(
|
|
(m) => m.model.toLowerCase() === model.toLowerCase(),
|
|
);
|
|
|
|
if (localMatch) return localMatch;
|
|
|
|
return new Model({
|
|
model,
|
|
});
|
|
});
|
|
|
|
// 3. Get remaining local models that aren't featured and aren't cloud models
|
|
const remainingModels = allModels.filter(
|
|
(model) =>
|
|
!model.isCloud() &&
|
|
!FEATURED_MODELS.some(
|
|
(f) => f.toLowerCase() === model.model.toLowerCase(),
|
|
),
|
|
);
|
|
|
|
cloudModels.sort((a, b) => {
|
|
const aIndex = FEATURED_MODELS.indexOf(a.model);
|
|
const bIndex = FEATURED_MODELS.indexOf(b.model);
|
|
|
|
// If both are featured, sort by their position in FEATURED_MODELS
|
|
if (aIndex !== -1 && bIndex !== -1) {
|
|
return aIndex - bIndex;
|
|
}
|
|
|
|
// If only one is featured, featured model comes first
|
|
if (aIndex !== -1 && bIndex === -1) return -1;
|
|
if (aIndex === -1 && bIndex !== -1) return 1;
|
|
|
|
// If neither is featured, sort alphabetically
|
|
return a.model.toLowerCase().localeCompare(b.model.toLowerCase());
|
|
});
|
|
|
|
featuredModels.sort(
|
|
(a, b) =>
|
|
FEATURED_MODELS.indexOf(a.model) - FEATURED_MODELS.indexOf(b.model),
|
|
);
|
|
|
|
remainingModels.sort(alphabeticalSort);
|
|
|
|
return hideCloudModels
|
|
? [...featuredModels, ...remainingModels]
|
|
: [...cloudModels, ...featuredModels, ...remainingModels];
|
|
}
|