nnbw-liu/deepseek-ai-dsh-llm-local1

@deepseek-ai/dsh-llm-local

OpenAI-compatible local model adapter (Ollama, llama.cpp, Foundry Local, LM Studio, vLLM, gateways) for the DeepSeek Harness LLM seam

包名
@deepseek-ai/dsh-llm-local
版本
0.1.0-rc.5
许可证
MIT
最近更新
2026年8月15日

安装

此插件尚未提供可验证的 bundle,或兼容性检查未通过。请先阅读仓库说明。 阅读完整 README ↗

Configuration

The plugin registers the llm-local settings namespace. The providers dict keys ARE the provider routes: ollama, llamacpp, and foundry-local are shipped presets (endpoint and display name inherited), any other key is a hand-declared endpoint and must name a baseURL.

Minimal working example (Ollama)

llm-local:
  providers:
    ollama:
      models:
        - id: qwen3:8b
          contextWindow: 32768

That is everything: the preset endpoint http://127.0.0.1:11434/v1 is inherited, no API key is needed, and the route registers the moment the file is saved. Request with provider: ollama, model: qwen3:8b.

Full example with every field

llm-local:
  providers:
    # Shipped preset: endpoint defaults to http://127.0.0.1:11434/v1.
    ollama:
      models:                        # optional; discovery can fill these
        - id: qwen3:8b
          contextWindow: 32768
      # defaultContextWindow: 128000   # fallback capacity for unlisted models
      # maxTokens: 32768               # default per-request output cap
      # usageInStream: true            # stream_options.include_usage
      # vision: false                  # image input for vision models
      # streamIdleTimeoutMs: 300000    # per-read idle budget
    # Shipped preset for the llama.cpp server.
    llamacpp:
      baseURL: http://127.0.0.1:8080/v1
      models:
        - id: qwen2.5-coder-14b-instruct-q4_K_M
          contextWindow: 32768
    # Shipped preset for Microsoft Foundry Local.
    foundry-local:
      baseURL: http://127.0.0.1:53415/v1   # confirm the port in `foundry local` output
      models: []
    # Hand-declared route: any OpenAI-compatible endpoint.
    my-gateway:
      displayName: My Gateway
      baseURL: http://127.0.0.1:1234/v1
      apiKeyEnv: MY_GATEWAY_KEY   # optional; local servers usually need none
      vision: true                # optional; image input for vision models
      usageInStream: true         # optional; stream_options.include_usage
      maxTokens: 32768            # optional default per-request output cap
      defaultContextWindow: 128000  # optional fallback context capacity
      streamIdleTimeoutMs: 300000   # optional per-read idle budget
      retryPolicy:                  # optional; normal defaults when omitted
        mode: normal
        maxRetries: 2
      models:
        - id: gpt-oss-120b
          contextWindow: 131072
          maxTokens: 32768

Per-provider fields:

  • baseURL — the OpenAI-compatible root (/chat/completions and /models are appended). Presets default to http://127.0.0.1:11434/v1 (Ollama), http://127.0.0.1:8080/v1 (llama.cpp), http://127.0.0.1:53415/v1 (Foundry Local — confirm the exact port in foundry local output). Required for hand-declared routes.
  • apiKeyEnv — credential reference resolved per request through ctx.credentials, then the environment. Omitted means unauthenticated — the local default; Ollama, llama.cpp, and Foundry Local need no key. Once named, a miss fails loud with MISSING_CREDENTIAL.
  • models — advisory catalog exposed to selectors and discovery; requests accept unlisted ids too. Each entry: id, optional name/description/contextWindow/maxTokens/vision. models: [] advertises none.
  • vision (profile or per-model) — declares image input. Image blocks serialize as image_url data-URL parts through the durable attachment service; a text-only model rejects them with UNSUPPORTED_CONTENT.
  • usageInStream — default true (stream_options.include_usage). Disable for an older llama.cpp build that rejects the field.
  • maxTokens, defaultContextWindow, streamIdleTimeoutMs, retryPolicy — same semantics as the DeepSeek adapter.

Dynamic configuration (settings + credentials)

Connection facts are not frozen at load. resolveAdapterOptions is the one explicit resolve step, and the adapter re-reads facts through a thunk once per operation: base URL, catalog, usage reporting, vision, output cap, and idle budget all take effect on the next request, while an in-flight stream keeps the facts it started with.

  • ctx.settings — the plugin registers the llm-local namespace with this same Config schema and its composition entry as the base, so a llm-local: section in the user settings document overrides any field without a restart.
  • ctx.credentials — the key resolves per stream call from the same snapshot that supplies the endpoint. Configuration carries only apiKeyEnv, never a literal key; a route without one is asked unauthenticated.

The one registration-captured fact is the retry policy: when a route's resolved value changes, the plugin re-registers the route set in place (same adapter instance, one synchronous section). Route-set changes (adding/removing a route) re-register the same way. Every route change logs a line (llm-local: serving ollama (http://127.0.0.1:11434/v1), ...), and a dormant mount logs llm-local: dormant; ... — the first thing to check when a section appears to do nothing.