File size: 1,631 Bytes
abcf568
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
import { resolveStudioToolChoice } from '../../session/session-agent-config'
import type { StudioAssistantMessage, StudioRun } from '../../../domain/types'
import type {
  StudioPreparedRunContext,
  StudioRunRequestInput,
  StudioSessionRunnerDependencies
} from './dependency-center'
import { hasUsableCustomApiConfig } from './factory'
import { createAgentLoopExecution, createResolvedPlanExecution } from './execution-factories'
import { executePreparedStream } from './execution-manager'

export async function routePreparedRun(
  deps: StudioSessionRunnerDependencies,
  prepared: StudioPreparedRunContext,
  abortSignal: AbortSignal,
): Promise<{ run: StudioRun; assistantMessage: StudioAssistantMessage; text: string }> {
  if (hasUsableCustomApiConfig(prepared.input.customApiConfig)) {
    return executePreparedStream(deps, prepared, createAgentLoopExecution(deps, {
      prepared,
      customApiConfig: prepared.input.customApiConfig,
      toolChoice: resolveStudioToolChoice({ session: prepared.input.session, override: prepared.input.toolChoice }),
      abortSignal,
    }), abortSignal)
  }

  const plan = await deps.resolveTurnPlan({
    projectId: prepared.input.projectId,
    session: prepared.input.session,
    run: prepared.run,
    assistantMessage: prepared.assistantMessage,
    inputText: prepared.input.inputText,
    workContext: prepared.workContext
  })

  return executePreparedStream(deps, prepared, createResolvedPlanExecution(deps, {
    prepared,
    plan,
    customApiConfig: prepared.input.customApiConfig,
    toolChoice: prepared.input.toolChoice,
    abortSignal,
  }), abortSignal)
}