Buckets:
| import { describe, expect } from "bun:test" | |
| import { Effect, Option, Schema } from "effect" | |
| import { Catalog } from "@opencode-ai/core/catalog" | |
| import { Config } from "@opencode-ai/core/config" | |
| import { ConfigProviderPlugin } from "@opencode-ai/core/config/plugin/provider" | |
| import { ModelV2 } from "@opencode-ai/core/model" | |
| import { PluginV2 } from "@opencode-ai/core/plugin" | |
| import { ProviderV2 } from "@opencode-ai/core/provider" | |
| import { it } from "../plugin/provider-helper" | |
| function request(headers: Record<string, string>, variant?: string) { | |
| return { | |
| headers, | |
| variant, | |
| } | |
| } | |
| const decode = Schema.decodeUnknownSync(Config.Info) | |
| describe("ConfigProviderPlugin.Plugin", () => { | |
| it.effect("partitions existing model variant bodies without changing config shape", () => | |
| Effect.gen(function* () { | |
| const catalog = yield* Catalog.Service | |
| const plugin = yield* PluginV2.Service | |
| const providerID = ProviderV2.ID.opencode | |
| const modelID = ModelV2.ID.make("alpha-gpt-next") | |
| const config = Config.Service.of({ | |
| entries: () => | |
| Effect.succeed([ | |
| new Config.Document({ | |
| type: "document", | |
| info: decode({ | |
| providers: { | |
| opencode: { | |
| api: { type: "aisdk", package: "@ai-sdk/openai", url: "https://opencode.test/v1" }, | |
| models: { | |
| "alpha-gpt-next": { | |
| variants: [ | |
| { | |
| id: "high", | |
| body: { | |
| reasoningEffort: "high", | |
| reasoningSummary: "auto", | |
| include: ["reasoning.encrypted_content"], | |
| }, | |
| }, | |
| ], | |
| }, | |
| }, | |
| }, | |
| }, | |
| }), | |
| }), | |
| ]), | |
| }) | |
| yield* plugin.add({ | |
| ...ConfigProviderPlugin.Plugin, | |
| effect: ConfigProviderPlugin.Plugin.effect.pipe( | |
| Effect.provideService(Config.Service, config), | |
| Effect.provideService(Catalog.Service, catalog), | |
| ), | |
| }) | |
| const model = yield* catalog.model.get(providerID, modelID) | |
| expect(model.variants).toMatchObject([ | |
| { | |
| id: "high", | |
| body: {}, | |
| options: { | |
| reasoningEffort: "high", | |
| reasoningSummary: "auto", | |
| include: ["reasoning.encrypted_content"], | |
| }, | |
| }, | |
| ]) | |
| }), | |
| ) | |
| it.effect("uses the effective provider package across layered config", () => | |
| Effect.gen(function* () { | |
| const catalog = yield* Catalog.Service | |
| const plugin = yield* PluginV2.Service | |
| const providerID = ProviderV2.ID.opencode | |
| const modelID = ModelV2.ID.make("alpha-gpt-next") | |
| const config = Config.Service.of({ | |
| entries: () => | |
| Effect.succeed([ | |
| new Config.Document({ | |
| type: "document", | |
| info: decode({ | |
| providers: { | |
| opencode: { | |
| api: { type: "aisdk", package: "@ai-sdk/openai", url: "https://opencode.test/v1" }, | |
| }, | |
| }, | |
| }), | |
| }), | |
| new Config.Document({ | |
| type: "document", | |
| info: decode({ | |
| providers: { | |
| opencode: { | |
| models: { | |
| "alpha-gpt-next": { | |
| variants: [{ id: "high", body: { reasoningEffort: "high" } }], | |
| }, | |
| }, | |
| }, | |
| }, | |
| }), | |
| }), | |
| ]), | |
| }) | |
| yield* plugin.add({ | |
| ...ConfigProviderPlugin.Plugin, | |
| effect: ConfigProviderPlugin.Plugin.effect.pipe( | |
| Effect.provideService(Config.Service, config), | |
| Effect.provideService(Catalog.Service, catalog), | |
| ), | |
| }) | |
| const model = yield* catalog.model.get(providerID, modelID) | |
| expect(model.variants[0]).toMatchObject({ | |
| id: "high", | |
| body: {}, | |
| options: { reasoningEffort: "high" }, | |
| }) | |
| }), | |
| ) | |
| it.effect("loads configured providers and applies later model overrides", () => | |
| Effect.gen(function* () { | |
| const catalog = yield* Catalog.Service | |
| const plugin = yield* PluginV2.Service | |
| const providerID = ProviderV2.ID.make("custom") | |
| const modelID = ModelV2.ID.make("chat") | |
| const config = Config.Service.of({ | |
| entries: () => | |
| Effect.succeed([ | |
| new Config.Document({ | |
| type: "document", | |
| info: decode({ | |
| model: "custom/first", | |
| providers: { | |
| custom: { | |
| name: "Configured", | |
| env: ["CUSTOM_API_KEY"], | |
| api: { type: "native", settings: {} }, | |
| request: request({ first: "first", shared: "first" }), | |
| models: { | |
| chat: { | |
| name: "First", | |
| capabilities: { tools: true, input: ["text"], output: ["text"] }, | |
| disabled: true, | |
| limit: { context: 100, output: 50 }, | |
| cost: { input: 1, output: 2 }, | |
| request: request({ first: "first", shared: "first" }, "retained"), | |
| variants: [ | |
| { | |
| id: "fast", | |
| headers: { first: "first", shared: "first" }, | |
| }, | |
| ], | |
| }, | |
| }, | |
| }, | |
| }, | |
| }), | |
| }), | |
| new Config.Document({ | |
| type: "document", | |
| info: decode({ | |
| model: "custom/default", | |
| providers: { | |
| custom: { | |
| api: { type: "aisdk", package: "custom-sdk", url: "https://example.test" }, | |
| request: request({ last: "last", shared: "last" }), | |
| models: { | |
| default: { | |
| name: "Default", | |
| }, | |
| chat: { | |
| api: { id: "api-chat" }, | |
| name: "Last", | |
| limit: { output: 75 }, | |
| request: request({ last: "last", shared: "last" }), | |
| variants: [ | |
| { | |
| id: "fast", | |
| headers: { last: "last", shared: "last" }, | |
| }, | |
| { | |
| id: "slow", | |
| headers: { slow: "slow" }, | |
| }, | |
| ], | |
| }, | |
| }, | |
| }, | |
| }, | |
| }), | |
| }), | |
| new Config.Document({ | |
| type: "document", | |
| info: decode({ | |
| providers: { | |
| custom: { name: "Renamed" }, | |
| }, | |
| }), | |
| }), | |
| ]), | |
| }) | |
| yield* plugin.add({ | |
| ...ConfigProviderPlugin.Plugin, | |
| effect: ConfigProviderPlugin.Plugin.effect.pipe( | |
| Effect.provideService(Config.Service, config), | |
| Effect.provideService(Catalog.Service, catalog), | |
| ), | |
| }) | |
| const provider = yield* catalog.provider.get(providerID) | |
| const model = yield* catalog.model.get(providerID, modelID) | |
| expect(Option.getOrUndefined(yield* catalog.model.default())?.id).toBe(ModelV2.ID.make("default")) | |
| expect(provider.name).toBe("Renamed") | |
| expect(provider.env).toEqual(["CUSTOM_API_KEY"]) | |
| expect(provider.enabled).toEqual({ via: "custom", data: {} }) | |
| expect(provider.api).toEqual({ type: "aisdk", package: "custom-sdk", url: "https://example.test" }) | |
| expect(provider.request.headers).toEqual({ first: "first", shared: "last", last: "last" }) | |
| expect(model.api.id).toBe(ModelV2.ID.make("api-chat")) | |
| expect(model.name).toBe("Last") | |
| expect(model.capabilities).toEqual({ tools: true, input: ["text"], output: ["text"] }) | |
| expect(model.enabled).toBe(false) | |
| expect(model.limit).toEqual({ context: 100, output: 75 }) | |
| expect(model.cost).toEqual([{ input: 1, output: 2, cache: { read: 0, write: 0 }, tier: undefined }]) | |
| expect(model.request.headers).toEqual({ first: "first", shared: "last", last: "last" }) | |
| expect(model.request.variant).toBe("retained") | |
| expect(model.variants.map((variant) => variant.id)).toEqual([ | |
| ModelV2.VariantID.make("fast"), | |
| ModelV2.VariantID.make("slow"), | |
| ]) | |
| expect(model.variants[0]?.headers).toEqual({ first: "first", shared: "last", last: "last" }) | |
| expect(model.variants[1]?.headers).toEqual({ slow: "slow" }) | |
| }), | |
| ) | |
| }) | |
Xet Storage Details
- Size:
- 9.1 kB
- Xet hash:
- 5e257894d2b8558fa6822bab02a7dc2fce2a78b021bc344cf671811eaae18af9
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.