hermes-agent/plugins
emozilla 83f88909ef feat(desktop): first-class local Ollama provider with detection, model management, and capability-aware picking
Promote bare "ollama" from a custom-endpoint alias to a real provider and
build the desktop UX around it. A local server's connection kind is
reachability rather than a credential, so every credential-shaped gate
(provider registry, picker filters, settings surfaces) gets an explicit
path for it.

Backend:
- Provider overlay + registry entry (127.0.0.1:11434/v1 default, keyless
  with a local-only placeholder, base-url normalization for /api and /v1
  forms). Existing provider=custom configs are untouched.
- GET /api/local-servers/detect fingerprints well-known local ports plus a
  local configured base_url; response shape leaves room for a future
  installed/running/managed distinction.
- /api/ollama/* management endpoints: installed+running+recommended models,
  registry pull as a poll-able background job streaming native NDJSON
  progress, delete, and load (warm-up / keep_alive pinning). Pull and
  delete bust the picker's model-id cache.
- Model picker payload: per-model capabilities widened to tools/vision/
  context_length; local Ollama rows enriched from the server's native
  /api/show (authoritative for on-disk tags, where models.dev is sparse),
  backfilled off the request path by a background thread.
- The explicit-only picker filter keeps ollama rows: the row only exists
  when the server answered a probe, which is as explicit as a pasted key.
- Reasoning safety: /api/show thinking capability gates all reasoning
  fields (Ollama 400s reasoning_effort on non-thinking models), and
  OpenAI-only effort levels map to the nearest accepted level
  (xhigh->max, minimal->low).
- model.ollama_keep_alive config: sent per-request as extra_body.keep_alive.
- Latency discipline for a local server that may be down: a 300ms TCP
  pre-check with a short negative cache guards every native-API read; the
  status endpoint probes fresh so a just-started server is noticed
  immediately; localhost is rewritten to 127.0.0.1 (Windows resolves
  localhost to ::1 first and Ollama binds IPv4 loopback — each request
  otherwise pays a ~2s failed IPv6 connect, including chat inference).

Desktop:
- Providers -> Accounts: a "Local servers" card mirroring the OAuth card
  language ("Running · N models" / a start-the-server hint), expanding to
  model management: installed models with size/quant/VRAM, delete, warm-up,
  curated pull recommendations with a progress bar, free-form pull, and a
  KV-cache advisory when a loaded model runs well under its trained window.
  Polls while down so it flips to Running by itself.
- Model picker: "No tools" badge (explicit tools:false only — absence means
  unknown) with demotion, plus context window / parameter size / quant per
  row; refetches once after open so backfilled metadata appears in place.
- Onboarding: detected-server row with a model select, replacing blind
  first-model assignment for detected servers.
- Composer status stack: "Loading <model> into memory" row during cold
  starts, confirmed against /api/ps so ordinary slow generations stay quiet.

Chat inference stays on the OpenAI-compatible /v1 endpoint; the native
/api surface is used read-only for metadata plus explicit management
actions. Lifecycle management (starting or installing Ollama) is not
included.
2026-07-09 13:50:40 -04:00
..
browser fix: guard int(os.getenv()) casts against malformed env vars (#40598) 2026-06-07 06:14:24 -07:00
context_engine feat(context-engine): host contract for external context engines 2026-05-28 01:45:30 -07:00
cron_providers fix(cron): avoid provider package shadowing core cron 2026-06-23 23:39:22 -07:00
dashboard_auth feat(dashboard_auth): support confidential clients (client_secret) in self-hosted OIDC (#55344) 2026-06-30 13:32:51 +10:00
disk-cleanup docs(disk-cleanup): clarify cron output-root protection is exact-match 2026-07-01 15:42:04 +05:30
google_meet refactor(setup): route dependency installs through the canonical uv→pip→ensurepip ladder 2026-07-07 04:09:35 -07:00
hermes-achievements revert(plugins): restore user dashboard plugin backend API auto-import (#43719) (#51950) 2026-06-24 07:46:54 -07:00
image_gen fix(image-gen): route local-input credential guard through one shared chokepoint + cover xai (#57698) 2026-07-03 18:47:53 +05:30
kanban feat(kanban): add grab-to-pan board scrolling 2026-07-07 05:54:29 -07:00
memory feat(mem0): add self-hosted mode to the setup wizard 2026-07-07 14:07:16 -07:00
model-providers feat(desktop): first-class local Ollama provider with detection, model management, and capability-aware picking 2026-07-09 13:50:40 -04:00
observability fix(langfuse): bound _TRACE_STATE growth from non-finalizing turns 2026-06-18 12:59:41 +05:30
platforms fix(whatsapp): use windows_detach_popen_kwargs to prevent console window flash on Windows 2026-07-08 07:49:22 -07:00
security-guidance plugins: add security-guidance — pattern-matched warnings on dangerous code writes (#33131) 2026-05-27 02:07:21 -07:00
spotify chore: prune unused imports and duplicate import redefinitions 2026-05-28 22:26:25 -07:00
teams_pipeline fix(teams-pipeline): reject dot-only recording display_name 2026-07-01 02:03:48 -07:00
video_gen fix(xai): route video-gen local inputs through the shared read guard 2026-07-03 18:47:53 +05:30
web fix(web): widen config-aware env resolution to exa/parallel/tavily/brave-free providers 2026-07-06 02:42:24 -07:00
__init__.py feat(memory): pluggable memory provider interface with profile isolation, review fixes, and honcho CLI restoration (#4623) 2026-04-02 15:33:51 -07:00
plugin_utils.py fix(plugins): thread-safe lazy-singleton helpers; fix honcho TOCTOU (#24759) (#42150) 2026-06-08 09:35:22 -07:00