testing/vitest
@alexkroman1/aai-runtime/testing/vitest — the vitest-coupled testing door:
everything that INSTALLS or RESTORES, and the eval suites.
A test file imports from two places: @alexkroman1/aai-runtime/testing for
every fake and reader that installs nothing, and this subpath for the rest.
One import serves a unit spec and an eval file alike:
- every installer of
@alexkroman1/aai/testing/vitest(installStubGateway,installStubStepFetch,installStubTranscribe, …), each of which arms a fake and restores it withonTestFinished; - everything
@alexkroman1/aai-runtime/eval/vitestprovides — thedescribeEval/describeTextEval/describeWorkflowEvalsuites, the session and the readers, the simulated caller and the judge, and the SDK stubs a case composes with.
import { tool } from "@alexkroman1/aai";import { z } from "zod";
export default tool({ description: "Look an order up", inputSchema: z.object({ orderId: z.string() }), execute: ({ orderId }) => ({ orderId, status: "shipped" }),});
// file: agent.eval.test.tsimport agentDef from "virtual:aai/agent";import { describeEval, expectCalled } from "@alexkroman1/aai-runtime/testing/vitest";import lookUp from "./tools/look_up.ts";
describeEval(agentDef, (test) => { test( "looks the order up before answering", async ({ session }) => { // The claim takes the tool's DEF, matched by the name the agent registered. expectCalled(await session.say("where is order W1234?"), lookUp); }, { stubReply: "Order W1234 shipped yesterday." }, );});Every name is a re-export of the SAME declaration as its original subpath,
so ownership does not move: the eval names keep their eval* capabilities,
the SDK stubs eval-stubs, and the other installers testing-stubs.
vitest is an OPTIONAL peer dependency, and importing this subpath is what
pulls it; /testing and /eval stay importable without it.
Functions
Section titled “Functions”describeAgent()
Section titled “describeAgent()”describeAgent<
D>(agent,define):void
Declare a suite for one deployed agent: the built-in “is deployable” case, then the body, handed the typed ToolRunner for the agent.
Every shipped template’s spec opened with the same two things — a
describe(agentDef.name, …) whose first case was expectDeployable(agentDef),
and const run = toolRunner(agentDef) above it. The deployable case is the
one no agent spec should be without (a config the platform refuses is a spec
measuring nothing), and binding the runner is the line every file repeated.
The body takes vitest’s own test/expect from vitest as usual; only the
runner is handed in, so a case reads run(addItem, { … }) typed by the def
— a tool file’s default export, or a speaker’s tools entry — and gated as
the agent gates it.
Type Parameters
Section titled “Type Parameters”D extends ToolBearingAgent & object
Parameters
Section titled “Parameters”D
define
Section titled “define”(run, agent) => void
Returns
Section titled “Returns”void
Example
Section titled “Example”import { agent } from "@alexkroman1/aai";
export default agent({ name: "Orders" });
// file: tools/add_item.tsimport { tool } from "@alexkroman1/aai";import { z } from "zod";
export default tool({ description: "Add an item to the order", inputSchema: z.object({ item: z.string() }), execute: ({ item }) => ({ added: item }),});
// file: agent.test.tsimport { deployedAgent } from "@alexkroman1/aai/testing";import { describeAgent } from "@alexkroman1/aai/testing/vitest";import { expect, test } from "vitest";import authored from "./agent.ts";import addItem from "./tools/add_item.ts";
// Under vitest, `import agentDef from "virtual:aai/agent"` is this line.const agentDef = deployedAgent(authored, { tools: import.meta.glob("./tools/*.ts", { eager: true }),});
describeAgent(agentDef, (run) => { test("adds the item", async () => { const { added } = await run(addItem, { item: "apple" }); expect(added).toBe("apple"); });});installStubClientInbox()
Section titled “installStubClientInbox()”installStubClientInbox(
options?):StubClientInbox
Publish a device inbox for stepNotifyClient, restored when this test
finishes.
stubClientInbox with the bookkeeping done — see it for the call log and how
to make the device answer busy or offline. The usual partner of
installStubSpeech: a step that speaks a notice and pushes it to a
speaker needs both, and each used to cost a try/finally of its own.
Parameters
Section titled “Parameters”options?
Section titled “options?”Returns
Section titled “Returns”Example
Section titled “Example”In a test body or a beforeEach:
import { stepNotifyClient } from "@alexkroman1/aai/step";import { installStubClientInbox } from "@alexkroman1/aai/testing/vitest";
const inbox = installStubClientInbox();await stepNotifyClient("kitchen", { id: "wrun_1", event: "reminder" });console.log(inbox.calls[0]?.clientId); // "kitchen"installStubFfmpeg()
Section titled “installStubFfmpeg()”installStubFfmpeg(
script?):StubFfmpeg
Route every ffmpeg-family spawn through script, restored when this test
finishes.
The fake never times out and never honours the run’s abort signal: a child
that hangs is not something a script can express, and the deadline
machinery it would exercise is the SDK’s own, tested in ffmpeg.test.ts.
Parameters
Section titled “Parameters”script?
Section titled “script?”Returns
Section titled “Returns”Example
Section titled “Example”import { probeMedia, runFfmpeg } from "@alexkroman1/aai/ffmpeg";import { installStubFfmpeg } from "@alexkroman1/aai-runtime/testing/vitest";import { writeFile } from "node:fs/promises";import { expect, test } from "vitest";
test("a scripted ffmpeg answers each call by its args", async () => { const ffmpeg = installStubFfmpeg(async ({ args }) => { if (args.includes("-show_streams")) { return { stdout: '{"streams":[{"codec_type":"audio"}],"format":{"duration":"1.0"}}' }; } // A transcode's output is whatever the script writes at the out path. await writeFile(args.at(-1) ?? "", new Uint8Array(32_000)); return {}; }); const info = await probeMedia("call.m4a"); expect(info.durationSec).toBe(1); await runFfmpeg(["-i", "call.m4a", "out.wav"]); expect(ffmpeg.calls).toHaveLength(2);});installStubGateway()
Section titled “installStubGateway()”installStubGateway(
replies,options?):StubGatewayCall[]
Install a fake LLM gateway as the global fetch, and return its call log.
stubGateway (@alexkroman1/aai/testing) installed for you. Import it under
THIS name — aliasing it to stubGateway shadows the uninstalled fake of that
name. A step whose HTTP goes through a published stepFetch wants
stubGatewayRoute instead; stubGateway’s doc has the table.
The calls array is what a spec asserts on, and it is live — a reference taken before the code under test runs holds every call made after.
Lifetime is one test, as it is for any vi.stubGlobal under
unstubGlobals — which this repo’s shared config and defineAgentTestConfig
(@alexkroman1/aai/testing/vite) both set, so the real fetch is back
before the next test. Install per test (the test body or a beforeEach);
one installed in beforeAll is gone before the first test runs. Without
unstubGlobals, vi.unstubAllGlobals() is the explicit undo.
It also seeds ASSEMBLYAI_API_KEY for the test when the process holds
none, since stepGenerate refuses by name without one and the fake never
reads it — apiKey: false ensures there is NONE, whatever the shell exports.
Either way the previous value is put back when the test finishes.
Parameters
Section titled “Parameters”replies
Section titled “replies”string | readonly string[]
Completion contents, in order; the last repeats — see
stubGateway in @alexkroman1/aai/testing, which this installs.
options?
Section titled “options?”Returns
Section titled “Returns”Example
Section titled “Example”import { stepGenerateJson } from "@alexkroman1/aai/step";import { z } from "zod";
export const summarize = (article: string) => stepGenerateJson(`One headline for: ${article}`, { schema: z.object({ headline: z.string() }) });
// file: digest.test.tsimport { installStubGateway } from "@alexkroman1/aai/testing/vitest";import { expect, test } from "vitest";import { summarize } from "./workflows/digest.ts";
test("summarize sends the article", async () => { const calls = installStubGateway('{"headline":"Otters use tools"}'); await summarize("Otters use tools."); expect(calls[0]?.prompt).toContain("Otters use tools.");});installStubReporter()
Section titled “installStubReporter()”installStubReporter():
StubReporter
Capture what a step narrates and emits, restored when this test finishes.
stubReporter with the bookkeeping done — see it for why stepReport() and
stepEmit() are separated the way the streams are.
Returns
Section titled “Returns”installStubWorkflows()
Section titled “installStubWorkflows()”installStubWorkflows(
options?):WorkflowClient
Parameters
Section titled “Parameters”options?
Section titled “options?”Returns
Section titled “Returns”installStubWorld()
Section titled “installStubWorld()”installStubWorld(
options?):StubWorld
Install every seam a workflow step reaches through, composed in the one order that works, and seed the credential — restored when this test finishes.
A step’s HTTP goes through ONE published stepFetch, so a flow that calls a
model AND fetches a page AND transcribes a recording cannot install three
fakes: whichever published last answers everything. The composition every
workflow spec therefore hand-wrote is the gateway route in FRONT of the page
stub (model.route(request) ?? page()), and in front of both the
transcription fake holding the slot with the pair as its otherwise. Get
the order wrong and the page stub answers the gateway’s request with HTML,
which stepGenerate retries against until its budget runs out; a shipped
template carries a paragraph warning about exactly this. Here the order is
fixed, and a spec names only the legs it has.
It also seeds ASSEMBLYAI_API_KEY (apiKey: false ensures there is none
instead), because stepGenerate refuses by name without one and the fake
never reads it; the previous value is put back when the test finishes. stubGatewayRoute itself
cannot seed anything — it installs nothing and owns no lifetime — so the
seeding lives with the installers.
installStubReporter is installed too, so what the steps narrated is on
reported without a second call — unless a reporter is already published
(an eval’s), which is left in place: reporter decides. A SECOND world in
one test replaces the first’s reporter along with its other legs, so the
world a spec holds last is the one whose reported records.
Parameters
Section titled “Parameters”options?
Section titled “options?”Returns
Section titled “Returns”Example
Section titled “Example”import { stepFetch, stepGenerateJson } from "@alexkroman1/aai/step";import { z } from "zod";
export async function digest(input: { url: string }) { const page = await (await stepFetch(input.url)).text(); return stepGenerateJson(`One headline for: ${page}`, { schema: z.object({ headline: z.string() }), });}
// file: digest.test.tsimport { installStubWorld } from "@alexkroman1/aai/testing/vitest";import { expect, test } from "vitest";import { digest } from "./workflows/digest.ts";
test("the digest reads the page and asks the model", async () => { const world = installStubWorld({ model: '{"headline":"Otters use tools"}', pages: { "https://example.com/otters": { body: "<p>Otters use tools.</p>" } }, }); await digest({ url: "https://example.com/otters" }); expect(world.model[0]?.prompt).toContain("Otters");});Type Aliases
Section titled “Type Aliases”InstallStubGatewayOptions
Section titled “InstallStubGatewayOptions”InstallStubGatewayOptions =
StubGatewayOptions&object
Input
Options for installStubGateway: stubGateway’s, plus the credential.
Type Declaration
Section titled “Type Declaration”apiKey?
Section titled “apiKey?”
optionalapiKey?:string|false
The ASSEMBLYAI_API_KEY to seed for this test, when the process holds
none — see installStubWorld. Defaults to a recognizable stub
value; false ENSURES there is none for the test (a key the shell exports
is stubbed away and put back afterwards), for the one spec whose subject
IS the missing-key refusal.
StubFfmpeg
Section titled “StubFfmpeg”StubFfmpeg =
object
Sealed
The installed fake.
Properties
Section titled “Properties”
readonlycalls:StubFfmpegCall[]
Every spawn so far, in order.
StubFfmpegCall
Section titled “StubFfmpegCall”StubFfmpegCall =
object
Sealed
One spawn, as the fake saw it.
Properties
Section titled “Properties”
readonlyargs: readonlystring[]
The argv, exactly as the caller built it (standing flags included).
binary
Section titled “binary”
readonlybinary:string
The binary the SDK resolved — ffmpeg, ffprobe, or whatever the env named.
readonlystdin:Uint8Array|undefined
Bytes the run handed to stdin, for an argv that reads pipe:0.
StubFfmpegReply
Section titled “StubFfmpegReply”StubFfmpegReply =
object
Input
What the scripted child does with one spawn.
Every field is optional: an empty reply is a child that printed nothing and
exited 0.
Properties
Section titled “Properties”exitCode?
Section titled “exitCode?”
readonlyoptionalexitCode?:number
Exit code. Defaults to 0; anything else is an exit failure.
spawnError?
Section titled “spawnError?”
readonlyoptionalspawnError?:Error
Fail the SPAWN itself with this error instead of running — ENOENT, say.
stderr?
Section titled “stderr?”
readonlyoptionalstderr?:string
What the child wrote to stderr — loudnorm’s block, an error line.
stdout?
Section titled “stdout?”
readonlyoptionalstdout?:string|Uint8Array
What the child wrote to stdout — ffprobe’s JSON, or a pipe:1 output.
StubFfmpegScript
Section titled “StubFfmpegScript”StubFfmpegScript = (
call) =>StubFfmpegReply|undefined|Promise<StubFfmpegReply|undefined>
Input
Called once per spawn, with the argv. May be async, and may write files.
Parameters
Section titled “Parameters”Returns
Section titled “Returns”StubFfmpegReply | undefined | Promise<StubFfmpegReply | undefined>
StubWorkflowsOptions
Section titled “StubWorkflowsOptions”StubWorkflowsOptions =
object
Input
What installStubWorkflows answers each read with.
Every field has a default, so installStubWorkflows() is a client whose reads all
answer “nothing has run” — which is the arm a *_status tool branches on
first and the one most specs of one want.
Properties
Section titled “Properties”agent?
Section titled “agent?”
optionalagent?:WorkflowAppLike
The agent under test, whose declared workflows are what listing()
reports — so a renamed workflow is read off the def rather than restated.
Pass agentDef; an explicit names wins over it.
lastLine?
Section titled “lastLine?”
optionallastLine?:unknown
What lastLine resolves with. Defaults to undefined, which means “the
run has written nothing yet” — the arm a progress tool branches on, and the
reason this has a default rather than being left to reject.
names?
Section titled “names?”
optionalnames?: readonlystring[]
Workflow names listing() reports, in order — normally the one the agent
under test declares. Defaults to the keys of StubWorkflowsOptions.agent’s
workflows, else none, i.e. an agent declaring no workflow.
runId?
Section titled “runId?”
optionalrunId?:string
What start resolves with. Defaults to "wrun_stub".
optionalruns?: readonlyWorkflowRunSnapshot[]
The runs get, find and recent answer from — get with the first,
the other two with the whole list. One list rather than three, because a
spec asserting what a tool REPORTS is describing one world, and three
fixtures that can disagree about it is a way to write a passing test for a
state the platform cannot produce. Build them with createRunSnapshot.
StubWorld
Section titled “StubWorld”StubWorld =
object
Sealed
What installStubWorld returns: every fake’s call log, live.
Properties
Section titled “Properties”
readonlyfiles:StubUploads|undefined
The upload store itself — undefined when uploads was not named. Read a
file back with read; what a step wrote (under writable) is writes.
readonlymodel:StubGatewayCall[]
Every completion request the gateway answered, decoded.
provider
Section titled “provider”
readonlyprovider:StubTranscribeCall[]
Every transcription request, by leg — empty when transcribe was not named.
reported
Section titled “reported”
readonlyreported:StubReporter
What the steps narrated and emitted (installStubReporter) — empty, and
recording nothing, when the world left a published reporter in place
(see StubWorldOptions.reporter).
speech
Section titled “speech”
readonlyspeech:StubSpeechCall[]
Every line the synthesizer was asked to say — empty when speech was not named.
StubWorldOptions
Section titled “StubWorldOptions”StubWorldOptions =
object
Input
What installStubWorld may be told: one entry per seam a step reaches through, each optional, each installed only when named.
Properties
Section titled “Properties”apiKey?
Section titled “apiKey?”
readonlyoptionalapiKey?:string|false
The ASSEMBLYAI_API_KEY to seed for this test, when the process holds
none. Defaults to a recognizable stub value; false ensures there is
none for the test, whatever the shell exports.
model?
Section titled “model?”
readonlyoptionalmodel?:string| readonlystring[]
What the LLM gateway answers, in order, the last repeating — stubGatewayRoute’s
replies. Routed FIRST, on the completions path, before every other leg:
a page stub answering the gateway’s request with HTML is the footgun this
ordering exists for (the summarize step retries six times against it).
Absent, a completion request falls through to the other legs.
pages?
Section titled “pages?”
readonlyoptionalpages?:FetchRouteTable| readonlyFetchRouteHandler[] |FetchRouteHandler
Everything else a step fetches — a page, a vendor API — as a
stubFetchRoutes table, an ordered handler list (what describeEval’s
steps.routes takes too) or one handler. The LAST leg: a request it does
not answer is a finding and throws naming the method and URL, never an
empty 200 a step would try to parse — after a transcribe.otherwise of
your own has declined it.
reporter?
Section titled “reporter?”
readonlyoptionalreporter?:boolean
Publish the recording reporter (installStubReporter). Defaults to
publishing one only when NO reporter is published yet — inside
describeEval the harness’s reporter is what run.reported reads, and a
stub published over it emptied that log — or when the one published is an
EARLIER world’s, which this one replaces like every other leg (its
reported then records; the earlier world’s stops). false never
publishes one; true always does.
speech?
Section titled “speech?”
readonlyoptionalspeech?:StubSpeechOptions|true
Publish a recording synthesizer — installStubSpeech’s options, or true for the defaults.
transcribe?
Section titled “transcribe?”
readonlyoptionaltranscribe?:StubTranscribeOptions
Answer AssemblyAI’s transcription endpoints — installStubTranscribe’s
options. When present, the transcription fake OWNS the published step
fetch and the gateway and pages legs are its otherwise, which is the
only order that works: publishing replaces, so two fakes cannot both hold
the slot. An otherwise of your own runs after both.
uploads?
Section titled “uploads?”
readonlyoptionaluploads?:StubUploadsOptions&object
Publish an in-memory upload store — installStubUploads’s two arguments
as one object: the files it holds by id, beside its options (writable,
idPrefix). {} publishes an empty read-only store; { writable: true }
one a step may write into, read back on files.
Type Declaration
Section titled “Type Declaration”files?
Section titled “files?”
readonlyoptionalfiles?:Readonly<Record<string,StubUpload>>
References
Section titled “References”CallVerdict
Section titled “CallVerdict”Re-exports CallVerdict
completedOutput
Section titled “completedOutput”Re-exports completedOutput
createRecordingWorkflows
Section titled “createRecordingWorkflows”Re-exports createRecordingWorkflows
createStubSttOpener
Section titled “createStubSttOpener”Re-exports createStubSttOpener
createStubTtsOpener
Section titled “createStubTtsOpener”Re-exports createStubTtsOpener
createVmRunCode
Section titled “createVmRunCode”Re-exports createVmRunCode
CriterionVerdict
Section titled “CriterionVerdict”Re-exports CriterionVerdict
customEventsIn
Section titled “customEventsIn”Re-exports customEventsIn
DEFAULT_MAX_TURNS
Section titled “DEFAULT_MAX_TURNS”Re-exports DEFAULT_MAX_TURNS
DEFAULT_RUN_TIMEOUT_MS
Section titled “DEFAULT_RUN_TIMEOUT_MS”Re-exports DEFAULT_RUN_TIMEOUT_MS
describeEval
Section titled “describeEval”Re-exports describeEval
DescribeEvalOptions
Section titled “DescribeEvalOptions”Re-exports DescribeEvalOptions
describeTextEval
Section titled “describeTextEval”Re-exports describeTextEval
DescribeTextEvalOptions
Section titled “DescribeTextEvalOptions”Re-exports DescribeTextEvalOptions
describeToolCalls
Section titled “describeToolCalls”Re-exports describeToolCalls
describeTurn
Section titled “describeTurn”Re-exports describeTurn
describeWorkflowEval
Section titled “describeWorkflowEval”Re-exports describeWorkflowEval
dialogRefusalPattern
Section titled “dialogRefusalPattern”Re-exports dialogRefusalPattern
dialogResultSchema
Section titled “dialogResultSchema”Re-exports dialogResultSchema
END_CALL_TOOL
Section titled “END_CALL_TOOL”Re-exports END_CALL_TOOL
errorsIn
Section titled “errorsIn”Re-exports errorsIn
EvalCaseOptions
Section titled “EvalCaseOptions”Re-exports EvalCaseOptions
evalCredentials
Section titled “evalCredentials”Re-exports evalCredentials
EvalCredentials
Section titled “EvalCredentials”Re-exports EvalCredentials
EvalEmitted
Section titled “EvalEmitted”Re-exports EvalEmitted
EvalMode
Section titled “EvalMode”Re-exports EvalMode
evalNetwork
Section titled “evalNetwork”Re-exports evalNetwork
EvalNetwork
Section titled “EvalNetwork”Re-exports EvalNetwork
EvalNetworkOptions
Section titled “EvalNetworkOptions”Re-exports EvalNetworkOptions
EvalRequest
Section titled “EvalRequest”Re-exports EvalRequest
EvalRequestFilter
Section titled “EvalRequestFilter”Re-exports EvalRequestFilter
EvalRoute
Section titled “EvalRoute”Re-exports EvalRoute
evalRunOf
Section titled “evalRunOf”Re-exports evalRunOf
EvalRunOptions
Section titled “EvalRunOptions”Re-exports EvalRunOptions
EvalSession
Section titled “EvalSession”Re-exports EvalSession
EvalSessionOptions
Section titled “EvalSessionOptions”Re-exports EvalSessionOptions
evalSimulation
Section titled “evalSimulation”Re-exports evalSimulation
EvalSimulationContext
Section titled “EvalSimulationContext”Re-exports EvalSimulationContext
EvalSimulationOptions
Section titled “EvalSimulationOptions”Re-exports EvalSimulationOptions
EvalSleep
Section titled “EvalSleep”Re-exports EvalSleep
EvalSteps
Section titled “EvalSteps”Re-exports EvalSteps
EvalStepsOptions
Section titled “EvalStepsOptions”Re-exports EvalStepsOptions
EvalTest
Section titled “EvalTest”Re-exports EvalTest
EvalTestContext
Section titled “EvalTestContext”Re-exports EvalTestContext
EvalTextAgent
Section titled “EvalTextAgent”Re-exports EvalTextAgent
EvalTextAgentOptions
Section titled “EvalTextAgentOptions”Re-exports EvalTextAgentOptions
evalTextCredentials
Section titled “evalTextCredentials”Re-exports evalTextCredentials
EvalTextTest
Section titled “EvalTextTest”Re-exports EvalTextTest
EvalTextTestContext
Section titled “EvalTextTestContext”Re-exports EvalTextTestContext
EvalToolCall
Section titled “EvalToolCall”Re-exports EvalToolCall
EvalToolOutput
Section titled “EvalToolOutput”Re-exports EvalToolOutput
EvalTurn
Section titled “EvalTurn”Re-exports EvalTurn
EvalWorkflowCaseOptions
Section titled “EvalWorkflowCaseOptions”Re-exports EvalWorkflowCaseOptions
evalWorkflowCredentials
Section titled “evalWorkflowCredentials”Re-exports evalWorkflowCredentials
EvalWorkflowRun
Section titled “EvalWorkflowRun”Re-exports EvalWorkflowRun
EvalWorkflows
Section titled “EvalWorkflows”Re-exports EvalWorkflows
EvalWorkflowsOptions
Section titled “EvalWorkflowsOptions”Re-exports EvalWorkflowsOptions
EvalWorkflowStart
Section titled “EvalWorkflowStart”Re-exports EvalWorkflowStart
EvalWorkflowTest
Section titled “EvalWorkflowTest”Re-exports EvalWorkflowTest
EvalWorkflowTestContext
Section titled “EvalWorkflowTestContext”Re-exports EvalWorkflowTestContext
eventsOf
Section titled “eventsOf”Re-exports eventsOf
expectCalled
Section titled “expectCalled”Re-exports expectCalled
expectToolBeforeSpeech
Section titled “expectToolBeforeSpeech”Re-exports expectToolBeforeSpeech
HostAgentOptions
Section titled “HostAgentOptions”Re-exports HostAgentOptions
installStubLlm
Section titled “installStubLlm”Re-exports installStubLlm
installStubSpeech
Section titled “installStubSpeech”Re-exports installStubSpeech
installStubSpeechProviders
Section titled “installStubSpeechProviders”Re-exports installStubSpeechProviders
installStubStepDelegate
Section titled “installStubStepDelegate”Re-exports installStubStepDelegate
installStubStepFetch
Section titled “installStubStepFetch”Re-exports installStubStepFetch
installStubTranscribe
Section titled “installStubTranscribe”Re-exports installStubTranscribe
installStubUploads
Section titled “installStubUploads”Re-exports installStubUploads
isEvent
Section titled “isEvent”Re-exports isEvent
judgeCall
Section titled “judgeCall”Re-exports judgeCall
JudgeCallOptions
Section titled “JudgeCallOptions”Re-exports JudgeCallOptions
JudgeInput
Section titled “JudgeInput”Re-exports JudgeInput
lastStateIn
Section titled “lastStateIn”Re-exports lastStateIn
lastToolResultIn
Section titled “lastToolResultIn”Re-exports lastToolResultIn
LogContext
Section titled “LogContext”Re-exports LogContext
Re-exports LogFn
Logger
Section titled “Logger”Re-exports Logger
LogLevel
Section titled “LogLevel”Re-exports LogLevel
openEvalSession
Section titled “openEvalSession”Re-exports openEvalSession
openEvalTextAgent
Section titled “openEvalTextAgent”Re-exports openEvalTextAgent
openEvalWorkflows
Section titled “openEvalWorkflows”Re-exports openEvalWorkflows
PhoneMenu
Section titled “PhoneMenu”Re-exports PhoneMenu
PhoneTree
Section titled “PhoneTree”Re-exports PhoneTree
PhoneTreeLeaf
Section titled “PhoneTreeLeaf”Re-exports PhoneTreeLeaf
PhoneTreeStep
Section titled “PhoneTreeStep”Re-exports PhoneTreeStep
PhoneTreeWalk
Section titled “PhoneTreeWalk”Re-exports PhoneTreeWalk
RecordingWorkflows
Section titled “RecordingWorkflows”Re-exports RecordingWorkflows
RecordingWorkflowsOptions
Section titled “RecordingWorkflowsOptions”Re-exports RecordingWorkflowsOptions
resolveEvalMode
Section titled “resolveEvalMode”Re-exports resolveEvalMode
resolveWorkflowEvalMode
Section titled “resolveWorkflowEvalMode”Re-exports resolveWorkflowEvalMode
RunCodeExecutor
Section titled “RunCodeExecutor”Re-exports RunCodeExecutor
runCodeIn
Section titled “runCodeIn”Re-exports runCodeIn
runCodeOutput
Section titled “runCodeOutput”Re-exports runCodeOutput
saidIn
Section titled “saidIn”Re-exports saidIn
simulateCall
Section titled “simulateCall”Re-exports simulateCall
SimulateCallOptions
Section titled “SimulateCallOptions”Re-exports SimulateCallOptions
SimulatedCall
Section titled “SimulatedCall”Re-exports SimulatedCall
SimulatedCaller
Section titled “SimulatedCaller”Re-exports SimulatedCaller
SimulatedTurn
Section titled “SimulatedTurn”Re-exports SimulatedTurn
SimulationMetrics
Section titled “SimulationMetrics”Re-exports SimulationMetrics
SimulationTarget
Section titled “SimulationTarget”Re-exports SimulationTarget
statesIn
Section titled “statesIn”Re-exports statesIn
SttError
Section titled “SttError”Re-exports SttError
SttEvents
Section titled “SttEvents”Re-exports SttEvents
SttOpener
Section titled “SttOpener”Re-exports SttOpener
SttOpenOptions
Section titled “SttOpenOptions”Re-exports SttOpenOptions
SttSession
Section titled “SttSession”Re-exports SttSession
SttTurnMeta
Section titled “SttTurnMeta”Re-exports SttTurnMeta
STUB_LLM_API_KEY_ENV
Section titled “STUB_LLM_API_KEY_ENV”Re-exports STUB_LLM_API_KEY_ENV
STUB_SPEECH_API_KEY_ENV
Section titled “STUB_SPEECH_API_KEY_ENV”Re-exports STUB_SPEECH_API_KEY_ENV
stubGatewayRoute
Section titled “stubGatewayRoute”Re-exports stubGatewayRoute
StubGatewayRoute
Section titled “StubGatewayRoute”Re-exports StubGatewayRoute
StubLlm
Section titled “StubLlm”Re-exports StubLlm
StubScript
Section titled “StubScript”Re-exports StubScript
StubSpeech
Section titled “StubSpeech”Re-exports StubSpeech
StubSpeechOptions
Section titled “StubSpeechOptions”Re-exports StubSpeechOptions
StubSpeechProviders
Section titled “StubSpeechProviders”Re-exports StubSpeechProviders
StubStep
Section titled “StubStep”Re-exports StubStep
StubStepDelegate
Section titled “StubStepDelegate”Re-exports StubStepDelegate
StubStepFetch
Section titled “StubStepFetch”Re-exports StubStepFetch
StubSttSession
Section titled “StubSttSession”Re-exports StubSttSession
StubTranscribe
Section titled “StubTranscribe”Re-exports StubTranscribe
StubTranscribeOptions
Section titled “StubTranscribeOptions”Re-exports StubTranscribeOptions
StubTtsSession
Section titled “StubTtsSession”Re-exports StubTtsSession
StubUploads
Section titled “StubUploads”Re-exports StubUploads
StubUploadsOptions
Section titled “StubUploadsOptions”Re-exports StubUploadsOptions
toolArgsIn
Section titled “toolArgsIn”Re-exports toolArgsIn
toolCallsInEvents
Section titled “toolCallsInEvents”Re-exports toolCallsInEvents
toolCallsInTurns
Section titled “toolCallsInTurns”Re-exports toolCallsInTurns
toolNames
Section titled “toolNames”Re-exports toolNames
toolResultIn
Section titled “toolResultIn”Re-exports toolResultIn
toolResultsIn
Section titled “toolResultsIn”Re-exports toolResultsIn
transcriptOf
Section titled “transcriptOf”Re-exports transcriptOf
TtsError
Section titled “TtsError”Re-exports TtsError
TtsEvents
Section titled “TtsEvents”Re-exports TtsEvents
TtsOpener
Section titled “TtsOpener”Re-exports TtsOpener
TtsOpenOptions
Section titled “TtsOpenOptions”Re-exports TtsOpenOptions
TtsSession
Section titled “TtsSession”Re-exports TtsSession
TtsWordTiming
Section titled “TtsWordTiming”Re-exports TtsWordTiming
TURN_ENDS
Section titled “TURN_ENDS”Re-exports TURN_ENDS
turnCalling
Section titled “turnCalling”Re-exports turnCalling
Unsubscribe
Section titled “Unsubscribe”Re-exports Unsubscribe
VmRunCodeOptions
Section titled “VmRunCodeOptions”Re-exports VmRunCodeOptions
walkPhoneTree
Section titled “walkPhoneTree”Re-exports walkPhoneTree
WalkPhoneTreeOptions
Section titled “WalkPhoneTreeOptions”Re-exports WalkPhoneTreeOptions