Files

11 KiB

AI provider connections

In Settings → AI Assistant, add a named connection, choose a provider, fill in its configuration, and choose a default model. Discover models uses the current form values. Browse models opens a searchable picker; manual model entry remains available for gateways and providers without discovery. Save connection stores credentials encrypted. The first connection becomes the default automatically; another connection can be made default when saving it. The Enable AI assistant switch saves immediately and refreshes the chat UI. Disabling blocks new messages in both chat endpoints while retaining conversation history. Limits and protections have their own Save action; saving a connection preserves unsaved changes to those settings.

New chats offer a task, model role, and optional connection/model override. The selected connection and model are saved with the conversation. Changing the panel default does not reroute existing chats. Configured fallback or budget degradation may switch the saved binding before a turn produces output. You can rotate a connection's credentials, but changing a provider or endpoint used by existing chats requires a new connection. Delete those chats and remove task/routing/fallback references before deleting their connection, and select another default before deleting the current default.

Native providers and gateways

The catalog comes from the installed Prompture chat-provider descriptors, with aliases deduplicated. Anthropic/Claude, OpenAI, Google, Azure, Bedrock, Mistral, and other registered chat drivers appear together. Providers needing optional Python dependencies are labeled in the selector. The backend requirements include the OpenAI and Anthropic SDKs; other providers may require their SDKs to be installed in the same backend environment before they become available.

For OmniRoute, select OpenAI-Compatible, set the API base URL to your backend-reachable OmniRoute address (for example http://omniroute:20128/v1 on a shared Docker network), and enter the gateway key if authentication is enabled. Enter the exact model ID or routing alias from that instance. Slashes are preserved; ServerKit does not add an upstream-provider prefix. The endpoint preset selector also exposes Prompture's curated compatible-provider URLs. Prompture Hub has its own friendly entry and uses the same connection mechanism.

localhost means the machine or container running the ServerKit backend, not the browser. Endpoints accept HTTP or HTTPS but cannot embed credentials, query strings, or fragments. When changing an endpoint, re-enter credentials; ServerKit does not forward the previous endpoint's saved key to the new address.

Testing and capabilities

For compatible endpoints and OpenAI, Test connection makes a small chat completion request, which may consume tokens. For other native providers, it verifies model discovery and checks that the requested model is returned. An unsupported or failed discovery reports an error, never a successful connection based only on constructing a driver. Discovery does not prove streaming or tool support; these depend on the provider and model. Error responses omit raw SDK errors and credentials.

ServerKit pins Prompture 1.11.0 and uses its native OpenAI-compatible driver for custom gateways, Prompture Hub, and LM Studio. That driver handles text streaming, streamed tool calls, and ordinary tool calls without the OpenAI SDK. Explicit model IDs are preserved, and unauthenticated gateways omit the Authorization header even if a process-level compatible API key is set. Native Anthropic's installed driver does not accept an endpoint argument: ServerKit refuses a conflicting process-level ANTHROPIC_BASE_URL override instead of silently using it. Vertex Gemini requires an explicit API key; Vertex Claude requires a project, location, and access token. Ambient cloud credentials are not a connection option.

Existing assistant RBAC, redaction, and write-action confirmations remain active. The picker includes catalog prices per million input/output tokens, context and output limits, and tools, vision, reasoning, and structured-output capabilities. Capability filters show only confirmed support. Missing metadata stays unknown. Gateway aliases are not assigned an upstream model's price or capabilities. Discovering a saved connection caches its nonsecret catalog; changing its configuration clears that cache. Manual IDs remain supported.

Task models and execution

Task models and behavior assigns a saved connection and exact model ID to Utility, Standard, and Advanced. Standard inherits the panel default; Utility and Advanced inherit Standard when unset. The UI shows the inherited binding. Prompture's ModelResolver resolves these slots before execution.

Task Default role Runtime behavior
Chat Standard Existing assistant tools and confirmations, or simple text mode
Summarize Utility Summarizes supplied text and attached context without tools
Extract structured facts Utility Prompture validates an object with summary, facts, and warnings; no tools
Read-only diagnosis Advanced Only tools marked read-only and authorized for the caller; bounded tool rounds

An explicit connection/model override wins, followed by an explicit role. Without either, enabled automatic routing uses the approved pool; otherwise the task's role is used. Existing conversations retain their task and binding. Advanced models never grant additional permissions.

Routing uses Prompture's cost-optimized, balanced, quality-first, or fast strategy, with discovery restricted to administrator-approved saved bindings. Candidate capability tiers guide its heuristics; “fast” is not a measured latency guarantee. The routing preview runs against the unsaved draft without making a model call. Each run records the selection strategy and explanation.

Fallback is opt-in and tries the ordered list with each candidate's own endpoint and credentials. It only runs before any provider output has been delivered. The unused legacy fallback_models settings field is rejected; fallback candidates must include a saved connection ID in /ai/management. Once output or a tool response starts, a failure ends that turn; actions are never replayed on another connection. The adapter avoids Prompture's ambient credential fallback path. The actual selected model appears in run reporting.

Generation and spending controls

Generation controls are applied to actual conversations: maximum output tokens per response, lifetime conversation tokens, history messages, tool rounds, and tool-result characters. Temperature is forwarded only with catalog-confirmed support; reasoning effort is forwarded only to supported OpenAI reasoning models. Unsupported settings retain provider defaults. Arbitrary driver JSON and detached tool timeouts are not exposed.

The conversation cost ceiling defaults to $0.50; zero disables it. Select:

  • Stop at the limit: check cumulative cost/tokens before every provider call.
  • Warn and continue: retain usage and show the exceeded allowance in chat.
  • Use a cheaper model near the limit, then stop: at 80% of the cost allowance, switch before a turn to the first configured fallback with lower known combined input/output rates, then enforce the hard ceiling. Unknown prices are not compared.

Monthly allowances can apply panel-wide, per user, and per workspace. Workspace attribution is captured from the active workspace when a chat starts and access is rechecked on resume. All-workspace chats still use panel/user allowances. Reservations prevent concurrent runs from all consuming the same remaining allowance in ServerKit's single worker. Each run stops further calls once its reservation is spent. Unknown-cost attempts conservatively consume that reservation. A restarted worker marks abandoned runs interrupted and retains their conservative charge.

Limits use reported/estimated usage; a final call can overshoot. Unknown gateway pricing cannot enforce a billing ceiling. Use provider/gateway limits for authoritative spending enforcement.

Usage and plugin integration

Each response shows its actual model, per-run tokens and cost source, duration, provider calls/errors, routing reason, and remaining conversation allowance. Reloading history retains those run details. AI usage provides administrator reports by period, role, model, connection, user, and workspace, with daily breakdowns, remaining monthly allowances, and a drawer for provider attempts. Unknown/partial pricing is labeled separately from known cost.

Prompture UsageSession collects each actual driver call; its cost calculation and BudgetState checks are reused. ServerKit stores one migration-backed AiRun per turn, with idempotent completion. Cumulative Conversation snapshots remain for lifetime limits and are never summed as per-run costs. Run records survive transcript deletion. Reporting starts with this migration; older transcripts are not backfilled with invented per-call costs.

The plugin SDK ask() and ask_stream() use the same enable state, role/routing policy, guardrails, limits, driver adapter, and ledger without creating chat transcripts. Both accept optional profile and workflow arguments:

from app.plugins_sdk import ai

summary = ai.ask(text, workflow='summarize')
facts = ai.ask(text, workflow='extract', profile='utility')

The implementation was checked against local Prompture d36872b and AgentSite db323d4. AgentSite informed the model-picker/reporting interactions. Prompture 1.11.0 already supplies the relevant resolver, router, structured output, budget, and usage machinery. ServerKit supplies credential binding, authorization, scope-filtered accounting, persistence, and UI. In this SDK version, router preferences are not an allowlist and tracker budget scopes do not filter usage by tenant; ServerKit explicitly enforces both boundaries. No upstream issue or external message was sent.

Upgrade behavior

Migration 098_ai_provider_connections creates encrypted connection records, copies the existing single-provider configuration into Existing connection, and attaches matching legacy conversations to it. Older conversations from a different provider cannot borrow the current connection's credentials: start a new chat using an explicitly configured connection. Resumed chats reconstruct their Prompture driver with their saved connection, and restore history and usage without exporting credentials or using global provider configuration.

Migration 099_ai_management adds cached model metadata, conversation task snapshots, and the durable run ledger. Apply normal Alembic upgrades before starting the updated backend. No SDK upgrade or manual schema creation is needed.