Add generic /api/storage config/state endpoints with merge-patch, migrate legacy YAML/JSON layout, and update UI/server to read and write owner-scoped settings. Replace config SSE events and drop /api/config routes.
82 lines
2.3 KiB
TypeScript
82 lines
2.3 KiB
TypeScript
import { agents, providers } from "./session-state"
|
|
import { uiState, getAgentModelPreference } from "./preferences"
|
|
|
|
const DEFAULT_MODEL_OUTPUT_LIMIT = 32_000
|
|
|
|
function isModelValid(
|
|
instanceId: string,
|
|
model?: { providerId: string; modelId: string } | null,
|
|
): model is { providerId: string; modelId: string } {
|
|
if (!model?.providerId || !model.modelId) return false
|
|
const instanceProviders = providers().get(instanceId) || []
|
|
const provider = instanceProviders.find((p) => p.id === model.providerId)
|
|
if (!provider) return false
|
|
return provider.models.some((item) => item.id === model.modelId)
|
|
}
|
|
|
|
function getRecentModelPreferenceForInstance(
|
|
instanceId: string,
|
|
): { providerId: string; modelId: string } | undefined {
|
|
const recents = uiState().models.recents ?? []
|
|
for (const item of recents) {
|
|
if (isModelValid(instanceId, item)) {
|
|
return item
|
|
}
|
|
}
|
|
}
|
|
|
|
async function getDefaultModel(
|
|
instanceId: string,
|
|
agentName?: string,
|
|
): Promise<{ providerId: string; modelId: string }> {
|
|
const instanceProviders = providers().get(instanceId) || []
|
|
const instanceAgents = agents().get(instanceId) || []
|
|
|
|
if (agentName) {
|
|
const agent = instanceAgents.find((a) => a.name === agentName)
|
|
if (agent && agent.model && isModelValid(instanceId, agent.model)) {
|
|
return {
|
|
providerId: agent.model.providerId,
|
|
modelId: agent.model.modelId,
|
|
}
|
|
}
|
|
|
|
const stored = await getAgentModelPreference(instanceId, agentName)
|
|
if (isModelValid(instanceId, stored)) {
|
|
return stored
|
|
}
|
|
}
|
|
|
|
const recent = getRecentModelPreferenceForInstance(instanceId)
|
|
if (recent) {
|
|
return recent
|
|
}
|
|
|
|
for (const provider of instanceProviders) {
|
|
if (provider.defaultModelId) {
|
|
const model = provider.models.find((m) => m.id === provider.defaultModelId)
|
|
if (model) {
|
|
return {
|
|
providerId: provider.id,
|
|
modelId: model.id,
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
if (instanceProviders.length > 0) {
|
|
const firstProvider = instanceProviders[0]
|
|
const firstModel = firstProvider.models[0]
|
|
if (firstModel) {
|
|
return {
|
|
providerId: firstProvider.id,
|
|
modelId: firstModel.id,
|
|
}
|
|
}
|
|
}
|
|
|
|
return { providerId: "", modelId: "" }
|
|
}
|
|
|
|
export { DEFAULT_MODEL_OUTPUT_LIMIT, getDefaultModel, getRecentModelPreferenceForInstance, isModelValid }
|