mirror of
https://github.com/anomalyco/opencode.git
synced 2026-07-23 10:45:33 -04:00
fix(schema): adapt legacy catalog responses
This commit is contained in:
@@ -78,6 +78,34 @@ export const Info = Schema.Struct({
|
||||
|
||||
export type MutableInfo = Omit<DeepMutable<Info>, "api"> & { api: ProviderV2.MutableApi<Api> }
|
||||
|
||||
export function flatten(info: Info): Model.Info {
|
||||
return Model.Info.make({
|
||||
id: info.id,
|
||||
modelID: info.api.id === info.id ? undefined : info.api.id,
|
||||
providerID: info.providerID,
|
||||
family: info.family,
|
||||
name: info.name,
|
||||
package: info.api.type === "aisdk" ? `aisdk:${info.api.package}` : undefined,
|
||||
settings: {
|
||||
...info.api.settings,
|
||||
...(info.api.url === undefined ? {} : { baseURL: info.api.url }),
|
||||
},
|
||||
headers: info.request.headers,
|
||||
body: info.request.body,
|
||||
capabilities: info.capabilities,
|
||||
variants: info.variants.map((variant) => ({
|
||||
id: variant.id,
|
||||
headers: variant.headers,
|
||||
body: variant.body,
|
||||
})),
|
||||
time: info.time,
|
||||
cost: info.cost,
|
||||
status: info.status,
|
||||
enabled: info.enabled,
|
||||
limit: info.limit,
|
||||
})
|
||||
}
|
||||
|
||||
export function parse(input: string): { providerID: ProviderV2.ID; modelID: ID } {
|
||||
const [providerID, ...modelID] = input.split("/")
|
||||
return {
|
||||
|
||||
@@ -59,3 +59,19 @@ export type MutableApi<T extends Api = Api> = T extends Api
|
||||
: never
|
||||
|
||||
export type MutableInfo = Omit<DeepMutable<Info>, "api"> & { api: MutableApi }
|
||||
|
||||
export function flatten(info: Info): Provider.Info {
|
||||
return Provider.Info.make({
|
||||
id: info.id,
|
||||
integrationID: info.integrationID,
|
||||
name: info.name,
|
||||
disabled: info.disabled,
|
||||
package: info.api.type === "aisdk" ? `aisdk:${info.api.package}` : "",
|
||||
settings: {
|
||||
...info.api.settings,
|
||||
...(info.api.url === undefined ? {} : { baseURL: info.api.url }),
|
||||
},
|
||||
headers: info.request.headers,
|
||||
body: info.request.body,
|
||||
})
|
||||
}
|
||||
|
||||
@@ -3,6 +3,7 @@ import { Effect } from "effect"
|
||||
import { HttpApiBuilder } from "effect/unstable/httpapi"
|
||||
import { Api } from "../api"
|
||||
import { response } from "../location"
|
||||
import { ModelV2 } from "@opencode-ai/core/model"
|
||||
|
||||
export const ModelHandler = HttpApiBuilder.group(Api, "server.model", (handlers) =>
|
||||
Effect.gen(function* () {
|
||||
@@ -10,7 +11,7 @@ export const ModelHandler = HttpApiBuilder.group(Api, "server.model", (handlers)
|
||||
"model.list",
|
||||
Effect.fn(function* () {
|
||||
const catalog = yield* Catalog.Service
|
||||
return yield* response(catalog.model.available())
|
||||
return yield* response(catalog.model.available().pipe(Effect.map((models) => models.map(ModelV2.flatten))))
|
||||
}),
|
||||
)
|
||||
}),
|
||||
|
||||
@@ -3,6 +3,7 @@ import { Effect } from "effect"
|
||||
import { HttpApiBuilder } from "effect/unstable/httpapi"
|
||||
import { Api } from "../api"
|
||||
import { ProviderNotFoundError } from "@opencode-ai/protocol/errors"
|
||||
import { ProviderV2 } from "@opencode-ai/core/provider"
|
||||
import { response } from "../location"
|
||||
|
||||
export const ProviderHandler = HttpApiBuilder.group(Api, "server.provider", (handlers) =>
|
||||
@@ -12,7 +13,9 @@ export const ProviderHandler = HttpApiBuilder.group(Api, "server.provider", (han
|
||||
"provider.list",
|
||||
Effect.fn(function* () {
|
||||
const catalog = yield* Catalog.Service
|
||||
return yield* response(catalog.provider.available())
|
||||
return yield* response(
|
||||
catalog.provider.available().pipe(Effect.map((providers) => providers.map(ProviderV2.flatten))),
|
||||
)
|
||||
}),
|
||||
)
|
||||
.handle(
|
||||
@@ -25,7 +28,7 @@ export const ProviderHandler = HttpApiBuilder.group(Api, "server.provider", (han
|
||||
providerID: ctx.params.providerID,
|
||||
message: `Provider not found: ${ctx.params.providerID}`,
|
||||
})
|
||||
return yield* response(Effect.succeed(provider))
|
||||
return yield* response(Effect.succeed(ProviderV2.flatten(provider)))
|
||||
}),
|
||||
)
|
||||
}),
|
||||
|
||||
Reference in New Issue
Block a user