|
|
@@ -7,9 +7,11 @@ import { Credential } from "@opencode-ai/core/credential"
|
|
|
import { EventV2 } from "@opencode-ai/core/event"
|
|
|
import { Flag } from "@opencode-ai/core/flag/flag"
|
|
|
import { Location } from "@opencode-ai/core/location"
|
|
|
+import { ModelV2 } from "@opencode-ai/core/model"
|
|
|
import { ModelsDev } from "@opencode-ai/core/models-dev"
|
|
|
import { ModelsDevPlugin } from "@opencode-ai/core/plugin/models-dev"
|
|
|
import { Policy } from "@opencode-ai/core/policy"
|
|
|
+import { ProviderV2 } from "@opencode-ai/core/provider"
|
|
|
import { AbsolutePath } from "@opencode-ai/core/schema"
|
|
|
import { location } from "../fixture/location"
|
|
|
import { testEffect } from "../lib/effect"
|
|
|
@@ -73,4 +75,48 @@ describe("ModelsDevPlugin", () => {
|
|
|
}),
|
|
|
),
|
|
|
)
|
|
|
+
|
|
|
+ it.effect("loads models.dev variants without replacing existing variants", () =>
|
|
|
+ Effect.acquireUseRelease(
|
|
|
+ Effect.sync(() => {
|
|
|
+ const previous = {
|
|
|
+ path: Flag.OPENCODE_MODELS_PATH,
|
|
|
+ disabled: Flag.OPENCODE_DISABLE_MODELS_FETCH,
|
|
|
+ }
|
|
|
+ Flag.OPENCODE_MODELS_PATH = path.join(import.meta.dir, "fixtures", "models-dev.json")
|
|
|
+ Flag.OPENCODE_DISABLE_MODELS_FETCH = true
|
|
|
+ return previous
|
|
|
+ }),
|
|
|
+ () =>
|
|
|
+ Effect.gen(function* () {
|
|
|
+ const service = yield* Catalog.Service
|
|
|
+ const integrations = yield* Integration.Service
|
|
|
+ yield* service.transform((catalog) => {
|
|
|
+ catalog.model.update(ProviderV2.ID.make("local"), ModelV2.ID.make("model"), (model) => {
|
|
|
+ model.variants = [
|
|
|
+ { id: ModelV2.VariantID.make("high"), headers: { custom: "true" }, body: {} },
|
|
|
+ { id: ModelV2.VariantID.make("custom"), headers: {}, body: { custom: true } },
|
|
|
+ ]
|
|
|
+ })
|
|
|
+ })
|
|
|
+ yield* ModelsDevPlugin.effect(
|
|
|
+ host({
|
|
|
+ catalog: catalogHost(service),
|
|
|
+ integration: integrationHost(integrations),
|
|
|
+ }),
|
|
|
+ )
|
|
|
+
|
|
|
+ expect((yield* service.model.get(ProviderV2.ID.make("local"), ModelV2.ID.make("model")))?.variants).toEqual([
|
|
|
+ expect.objectContaining({ id: "high", headers: { custom: "true" } }),
|
|
|
+ expect.objectContaining({ id: "max", headers: { "x-variant": "max" }, body: { reasoning_effort: "max" } }),
|
|
|
+ expect.objectContaining({ id: "custom", body: { custom: true } }),
|
|
|
+ ])
|
|
|
+ }).pipe(Effect.provide(ModelsDev.defaultLayer)),
|
|
|
+ (previous) =>
|
|
|
+ Effect.sync(() => {
|
|
|
+ Flag.OPENCODE_MODELS_PATH = previous.path
|
|
|
+ Flag.OPENCODE_DISABLE_MODELS_FETCH = previous.disabled
|
|
|
+ }),
|
|
|
+ ),
|
|
|
+ )
|
|
|
})
|