Spaces:
Running
Running
| import { InMemoryStudioEventBus } from '../../../events/event-bus' | |
| import { createStudioUserMessage } from '../../../domain/factories' | |
| import { logPlotStudioTiming, readElapsedMs } from '../../../observability/plot-studio-timing' | |
| import { buildDraftAssistantMessage } from '../session-runner-helpers' | |
| import { buildStudioWorkContext } from '../work-context' | |
| import type { StudioSession, StudioWorkContext } from '../../../domain/types' | |
| import type { | |
| StudioPreparedRunContext, | |
| StudioRunRequestInput, | |
| StudioSessionRunnerDependencies | |
| } from './dependency-center' | |
| import { hasUsableCustomApiConfig } from './factory' | |
| export async function buildWorkContext( | |
| deps: Pick<StudioSessionRunnerDependencies, 'workStore' | 'workResultStore' | 'taskStore' | 'sessionEventStore'>, | |
| input: { | |
| session: StudioSession | |
| inputText: string | |
| }, | |
| ): Promise<StudioWorkContext> { | |
| const draftAssistantMessage = buildDraftAssistantMessage(input.session) | |
| const workContext = await buildStudioWorkContext({ | |
| sessionId: input.session.id, | |
| agent: input.session.agentType, | |
| assistantMessage: draftAssistantMessage, | |
| workStore: deps.workStore, | |
| workResultStore: deps.workResultStore, | |
| taskStore: deps.taskStore, | |
| sessionEventStore: deps.sessionEventStore | |
| }) | |
| return workContext ?? { | |
| sessionId: input.session.id, | |
| agent: input.session.agentType | |
| } | |
| } | |
| export async function prepareRun( | |
| deps: StudioSessionRunnerDependencies, | |
| input: StudioRunRequestInput, | |
| ): Promise<StudioPreparedRunContext> { | |
| const prepareStartedAt = Date.now() | |
| const workContext = await deps.buildWorkContext(input) | |
| const run = deps.createRun(input.session, input.inputText, input.runMetadata) | |
| const persistedRun = deps.runStore ? await deps.runStore.create(run) : run | |
| await deps.messageStore.createUserMessage(createStudioUserMessage({ | |
| sessionId: input.session.id, | |
| text: input.inputText | |
| })) | |
| const assistantMessage = await deps.createAssistantMessage(input.session, persistedRun.id) | |
| const eventBus = deps.sharedEventBus ?? new InMemoryStudioEventBus() | |
| logPlotStudioTiming(input.session.studioKind, 'run.started', { | |
| sessionId: input.session.id, | |
| runId: persistedRun.id, | |
| assistantMessageId: assistantMessage.id, | |
| prepareDurationMs: readElapsedMs(prepareStartedAt), | |
| hasCustomApiConfig: hasUsableCustomApiConfig(input.customApiConfig), | |
| }) | |
| const runningRun = deps.runStore | |
| ? await deps.runStore.update(persistedRun.id, { status: 'running' }) ?? { ...persistedRun, status: 'running' } | |
| : { ...persistedRun, status: 'running' as const } | |
| eventBus.publish({ | |
| type: 'run_updated', | |
| run: runningRun | |
| }) | |
| return { | |
| input, | |
| workContext, | |
| run: runningRun, | |
| assistantMessage, | |
| eventBus | |
| } | |
| } | |