/
Alex_Ural
/
opencode
Обзор
Документация
Войти
/
Alex_Ural
/
opencode
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
dev
packages/core/src/config/plugin/provider.ts
113 строк
5 KB
Dax Raad
refactor(core): simplify model requests
24 июн 2026, 20:17
24 июн 2026, 20:17
17f312d
Код
Авторство
О чём код?
export * as ConfigProviderPlugin from "./provider" import { define } from "../../plugin/internal" import { Effect } from "effect" import { Config } from "../../config" import { ModelV2 } from "../../model" import { ProviderV2 } from "../../provider" export const Plugin = define({ id: "config-provider", effect: Effect.fn(function* (ctx) { const config = yield* Config.Service yield* ctx.integration.transform( Effect.fn(function* (integrations) { const files = (yield* config.entries()).filter((entry): entry is Config.Document => entry.type === "document") const configuredIntegrations = new Set( files.flatMap((file) => Object.entries(file.info.providers ?? {}).flatMap(([id, provider]) => provider.env === undefined ? [] : [id], ), ), ) for (const file of files) { for (const [id, item] of Object.entries(file.info.providers ?? {})) { const integrationID = id if (!configuredIntegrations.has(id) && !integrations.get(integrationID)) continue integrations.update(integrationID, (integration) => { integration.name = item.name ?? integration.name }) if (item.env !== undefined) { integrations.method.update({ integrationID, method: { type: "env", names: [...item.env] }, }) } } } }), ) yield* ctx.catalog.transform( Effect.fn(function* (catalog) { const entries = yield* config.entries() const files = entries.filter((entry): entry is Config.Document => entry.type === "document") const configuredDefault = Config.latest(entries, "model") if (configuredDefault !== undefined) { const model = ModelV2.parse(configuredDefault) catalog.model.default.set(model.providerID, model.modelID) } for (const file of files) { for (const [id, item] of Object.entries(file.info.providers ?? {})) { const providerID = id catalog.provider.update(providerID, (provider) => { if (item.name !== undefined) provider.name = item.name if (item.api !== undefined) provider.api = { ...item.api } if (item.request !== undefined) { Object.assign(provider.request.headers, item.request.headers) Object.assign(provider.request.body, item.request.body) } }) for (const [id, config] of Object.entries(item.models ?? {})) { catalog.model.update(providerID, id, (model) => { if (config.family !== undefined) model.family = config.family if (config.name !== undefined) model.name = config.name if (config.api !== undefined) model.api = { ...model.api, ...config.api } if (config.capabilities !== undefined) { model.capabilities = { tools: config.capabilities.tools, input: [...config.capabilities.input], output: [...config.capabilities.output], } } if (config.request !== undefined) { Object.assign(model.request.headers, config.request.headers) Object.assign(model.request.body, config.request.body) if (config.request.variant !== undefined) model.request.variant = config.request.variant } if (config.variants !== undefined) { for (const variant of config.variants) { let existing = model.variants.find((item) => item.id === variant.id) if (!existing) { existing = { id: variant.id, headers: {}, body: {}, } model.variants.push(existing) } Object.assign(existing.headers, variant.headers) Object.assign(existing.body, variant.body) } } if (config.cost !== undefined) { model.cost = (Array.isArray(config.cost) ? config.cost : [config.cost]).map((cost) => ({ tier: cost.tier && { ...cost.tier }, input: cost.input, output: cost.output, cache: { read: cost.cache?.read ?? 0, write: cost.cache?.write ?? 0, }, })) } if (config.disabled !== undefined) model.enabled = !config.disabled if (config.limit !== undefined) model.limit = { ...model.limit, ...config.limit } }) } } } }), ) }), })