diff --git a/docs/extensions.md b/docs/extensions.md index 3877b05..b244af3 100644 --- a/docs/extensions.md +++ b/docs/extensions.md @@ -53,7 +53,7 @@ comfy: | `ollama` | только при `LLM_RUNTIME=ollama` | | `any-llm` | при `LLM_RUNTIME=ollama` | -Строки с несовпавшим `requires` пропускаются (лог), остальные ставятся как обычно. В `extensions.example.yaml` по умолчанию — **swarm-assistent** с `requires: ollama` (чат + доска Generate/Ref + persona/Cards, ветка `main`). После `seed-extensions` + рестарта SwarmUI подтягивается текущий `main` (с **0.10.8**: Cyrillic intent, park LLM opt-in, persona≠user name, Civitai без пустого query). На `up` (и `gpu-rent seed-personas`) сидится папка `assistent-personas/` → overlay `/mnt/swarm_data/Assistent/personas//*.json`, плюс `_base/assistant.json` (`default_persona`, опционально `num_ctx` с GPU tier). Seed **не** удаляет overlay-личности, созданные в UI. Legacy `personas.json` / yaml-prompt больше не пишутся. +Строки с несовпавшим `requires` пропускаются (лог), остальные ставятся как обычно. В `extensions.example.yaml` по умолчанию — **swarm-assistent** с `requires: ollama` (чат + доска Generate/Ref + persona/Cards, ветка `main`). После `seed-extensions` + рестарта SwarmUI подтягивается текущий `main` (с **0.10.11**: default chat = `default_chat` / старший тег, warm той же моделью). На `up` (и `gpu-rent seed-personas`) сидится папка `assistent-personas/` → overlay `/mnt/swarm_data/Assistent/personas//*.json`, плюс `_base/assistant.json` (`default_persona`, опционально `num_ctx` с GPU tier). Seed **не** удаляет overlay-личности, созданные в UI. Legacy `personas.json` / yaml-prompt больше не пишутся. В git репозитория gpu-rent не коммитить рабочий список с лишними приватными URL сверх примера. diff --git a/docs/llm.md b/docs/llm.md index 979450a..32ec116 100644 --- a/docs/llm.md +++ b/docs/llm.md @@ -96,7 +96,7 @@ Qwen3-VL (`huihui_ai/qwen3-vl-abliterated:…`) требует **Ollama ≥ 0.12 Рекомендуемый пресет — **abliterated Qwen3-VL Instruct**; light / text / big пока Qwen2.5. Официальные censored-теги (`qwen2.5vl:…`) в меню нет. -`default: true` в yaml — preferred в логе; pull идёт по всему списку. +`default: true` в yaml — preferred в логе и в `Assistent/ollama-roles.json` → `default_chat` (Assistent UI + warmup); pull идёт по всему списку. --- @@ -127,7 +127,7 @@ Personas: laptop `assistent-personas/` → on `up` / `seed-personas` overlay fol use: memory ``` -Roles are written to `/mnt/swarm_data/Assistent/ollama-roles.json` for the Assistent extension (chat select vs memory select). +Roles are written to `/mnt/swarm_data/Assistent/ollama-roles.json` for the Assistent extension (`chat` / `memory` lists + `default_chat` for UI default and warmup). --- diff --git a/src/gpu_rent/llm_runtime.py b/src/gpu_rent/llm_runtime.py index 2282094..1277ee7 100644 --- a/src/gpu_rent/llm_runtime.py +++ b/src/gpu_rent/llm_runtime.py @@ -182,10 +182,14 @@ def preferred_ollama_model(path: Path) -> str | None: return entries[0].name if entries else None -def ollama_roles_payload(entries: list[OllamaModelEntry]) -> dict[str, list[str]]: +def ollama_roles_payload(entries: list[OllamaModelEntry]) -> dict[str, list[str] | str | None]: + """Sidecar for Assistent: chat/memory lists + preferred default_chat (manifest default: true).""" chat = [e.name for e in entries if e.use == "chat"] memory = [e.name for e in entries if e.use == "memory"] - return {"chat": chat, "memory": memory} + preferred = next((e.name for e in entries if e.use == "chat" and e.default), None) + if preferred is None and chat: + preferred = chat[0] + return {"chat": chat, "memory": memory, "default_chat": preferred} def _ollama_ps_names(payload: object) -> set[str]: diff --git a/tests/test_ollama_model_use.py b/tests/test_ollama_model_use.py index d275b64..212da2e 100644 --- a/tests/test_ollama_model_use.py +++ b/tests/test_ollama_model_use.py @@ -33,6 +33,7 @@ models: roles = ollama_roles_payload(entries) assert roles["chat"] == ["chat-model:7b"] assert roles["memory"] == ["nomic-embed-text"] + assert roles["default_chat"] == "chat-model:7b" def test_ensure_memory_appended():