Something went wrong. Try again.
opencode v2 mirror
Something went wrong. Try again.
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768export * as SessionGenerate from "./generate.js"
import { LLMClient, Message, type AIError } from "@opencode/ai"import { Effect } from "effect"import { Database } from "../database/database.js"import { Instance } from "../instance/service.js"import { Plugin } from "../plugin/service.js"import type { Instructions } from "../instructions/index.js"import { SessionContext } from "./context.js"import type { AgentNotFoundError } from "./error.js"import { SessionHistory } from "./history.js"import { SessionProviderContext } from "./provider-context.js"import { SessionModelRequest } from "./model-request.js"import type { SessionRunnerModel } from "./runner/model.js"import type { SessionSchema } from "./schema.js"
export type Error = AgentNotFoundError | Instructions.InitializationBlocked | SessionRunnerModel.Error | AIError
/** Generates text from current Session context without mutating the Session. */export const generate = Effect.fn("SessionGenerate.generate")(function* (input: { session: SessionSchema.Info prompt: string}) { const instances = yield* Instance.Service const database = yield* Database.Service const llm = yield* LLMClient.Service
return yield* Effect.gen(function* () { yield* Plugin.awaitActivation const context = yield* SessionContext.Service const selection = yield* context.select(input.session.id) const model = yield* context.resolveModel(selection.session) const history = yield* SessionHistory.preview( database.db, selection.session.id, selection.instructions, SessionProviderContext.provenance(model) ?? "local", ) const transcript = SessionModelRequest.baseTranscript({ agent: selection.agent.info, model, tools: selection.tools, initial: history.initial, messages: history.messages, }) const prepared = yield* context.request.generate({ session: selection.session, agent: selection.agent.id, model, tools: selection.tools, system: transcript.system, messages: [ ...transcript.messages, ...(history.instructionUpdate ? [Message.system(history.instructionUpdate)] : []), Message.user(input.prompt), ], }) yield* Effect.logInfo("sending session generation request", { sessionID: selection.session.id, providerID: model.ref.providerID, modelID: model.ref.id, }) const response = yield* llm.generate(prepared.request, prepared.options) yield* Effect.logInfo("session generation usage diagnostic", { usage: response.usage }) return response.text }).pipe(instances.provide(input.session))})