mirror of
https://github.com/anomalyco/opencode.git
synced 2026-11-14 20:21:39 +03:00
fix(core): use the agent's model when a session has none (#58355)
This commit is contained in:
committed by
GitHub
Unverified
parent
8ecd6add75
commit
4d30794bcf
@@ -5,6 +5,7 @@ import { LanguageModel } from "@opencode/ai"
|
||||
import { Model } from "@opencode/schema/model"
|
||||
import { Provider } from "@opencode/schema/provider"
|
||||
import { Context, Effect, Layer, Schema } from "effect"
|
||||
import { Agent } from "../../agent.js"
|
||||
import { ModelResolver } from "../../model-resolver.js"
|
||||
import { SessionSchema } from "../schema.js"
|
||||
|
||||
@@ -71,11 +72,18 @@ const layer = Layer.effect(
|
||||
Service,
|
||||
Effect.gen(function* () {
|
||||
const resolver = yield* ModelResolver.Service
|
||||
const agents = yield* Agent.Service
|
||||
return Service.of({
|
||||
resolve: Effect.fn("SessionRunnerModel.resolve")(function* (session, available) {
|
||||
// Location plugins populate and filter the catalog asynchronously during layer startup.
|
||||
if (!session.model) {
|
||||
const resolved = yield* resolver.resolve()
|
||||
const agent = (yield* agents.select(session.agent)).info?.model
|
||||
const preferred =
|
||||
agent &&
|
||||
(yield* available()).find((model) => model.providerID === agent.providerID && model.id === agent.id)
|
||||
const resolved = preferred
|
||||
? yield* resolver.resolveModel(preferred, agent.variant)
|
||||
: yield* resolver.resolve()
|
||||
if (resolved) return resolved
|
||||
return yield* new ModelNotSelectedError({ sessionID: session.id })
|
||||
}
|
||||
@@ -93,4 +101,4 @@ const layer = Layer.effect(
|
||||
}),
|
||||
)
|
||||
|
||||
export const node = makeLocationNode({ service: Service, layer, deps: [ModelResolver.node] })
|
||||
export const node = makeLocationNode({ service: Service, layer, deps: [ModelResolver.node, Agent.node] })
|
||||
|
||||
Reference in New Issue
Block a user