v1.2.0:7 — add SparkControl AI provider + fix base-URL footgun
SparkControl is a self-hosted local-inference gateway with an OpenAI-compatible API, reached over the internal same-box StartOS address (http://spark-control.startos:9999/v1, plain HTTP). It takes no API key, so generateOpenAIStyle gained a { requireApiKey } option and now omits the Authorization header when no key is set. The Settings form auto-detects the loaded vLLM model via SparkControl's /api/endpoints probe, mirroring the Ollama auto-detect; it's $0 in the cost UI. Custom-URL => admin-only + SSRF-guarded, same as Ollama. Also fixes a config footgun behind the empty-response report: a custom base URL could ride along to a fixed-URL provider (claude/openai/gemini) whose form field is hidden, get stored, and be silently ignored (the provider always hits its hardcoded endpoint). Both config write paths now null baseUrl for non-custom-URL providers, and the form clears it on provider change. No schema/data change (AIConfigProfile.provider is free-text). 259 tests pass; built + sideloaded to immense-voyage.local with a clean non-root launch.
This commit is contained in:
@@ -0,0 +1,33 @@
|
||||
import { IMPOSSIBLE, VersionInfo } from '@start9labs/start-sdk'
|
||||
|
||||
/**
|
||||
* v1.2.0:7 — SparkControl AI provider + base-URL footgun fix (2026-06-19).
|
||||
*
|
||||
* Adds a 6th AI provider, "SparkControl (local)" — the operator's own
|
||||
* self-hosted local-inference gateway. Its LLM surface is OpenAI-compatible,
|
||||
* so it reuses the OpenAI-style streamer, with two twists: no API key (keyless
|
||||
* on the LAN) and reached over the internal same-box StartOS address
|
||||
* (http://spark-control.startos:9999/v1, plain HTTP — no TLS games). The
|
||||
* Settings UI auto-detects the loaded vLLM model via SparkControl's
|
||||
* /api/endpoints discovery, mirroring the Ollama auto-detect.
|
||||
*
|
||||
* Also fixes a config footgun: a base URL could ride along to a fixed-URL
|
||||
* provider (Claude/OpenAI/Gemini) whose form field is hidden — stored but
|
||||
* silently ignored by the provider, which always hits its hardcoded endpoint.
|
||||
* Both config write paths now drop a base URL for non-custom-URL providers,
|
||||
* and the form clears it on provider change.
|
||||
*
|
||||
* No schema or data change: `AIConfigProfile.provider` is a free-text column,
|
||||
* so the new value needs no migration. Existing configs are untouched.
|
||||
*/
|
||||
export const v_1_2_0_7 = VersionInfo.of({
|
||||
version: '1.2.0:7',
|
||||
releaseNotes: {
|
||||
en_US:
|
||||
'New AI provider: SparkControl — your self-hosted local-inference gateway. Reached over the same-box address with no API key; the model is auto-detected. Also fixes a bug where a custom base URL could attach to a fixed-URL provider (Claude/OpenAI/Gemini) and be silently ignored. No data changes.',
|
||||
},
|
||||
migrations: {
|
||||
up: async () => {},
|
||||
down: IMPOSSIBLE,
|
||||
},
|
||||
})
|
||||
Reference in New Issue
Block a user