Optional options: CreateOrchestrationMachineOptions<TContext>The options for the configuration of the machine, including emits and transformers.
An object containing the created machine, onOrchestrationEvent function, and onOrchestrationState function.
Creates an orchestration state machine designed to run in a short-lived serverless environment.
The machine returned by this function can be used by the CloudOrchestrationActor for execution.
This machine adheres to the State Machine defined in XState XState Documentation,
with limitations on invoke and delay functionality, which can be achieved through a microservice in a serverless fleet.
There are some helper functions out of the box as well. You can pass these via the actions in the events parts (on). These are:
updateContext which will update the context of the machine when a new event is processed.updateLogs which will update the logs of the of machineupdateCheckpoint which will log time of the event processed by the orchestrationupdateExecutionUnits which will update the execution units on the eventProhibited context variable name (don't use them or put them in the context):
__machineLogs contains the machine logs upon usage of updateLogs__cloudevent contains the most recent cloudevent used__traceId contains the string with which you can trace the entire orchestration__orchestrationTime contains the list of all checkpoint times and elapsed times__executionunits contains the list of all the execution units utilised along the span of the orchestration. Initailly, there only one object which defines the execution unit of the orchestrator by event_type=init.import { createOrchestrationMachineV2 } from '../../src/create_orchestration_machine/v2';
import * as zod from 'zod';
type TriState = 'TRUE' | 'FALSE' | 'ERRORED';
export type SummaryStateMachineContext = {
bookId: string;
bookData?: string[];
summary?: string;
grounded?: TriState;
compliant?: TriState;
};
export const summaryStateMachine =
createOrchestrationMachineV2<SummaryStateMachineContext>(
{
id: 'RegulatedSummaryStateMachine',
initial: 'FetchData',
context: ({ input }) => ({
...(input || {}),
bookId: (input as any).bookId,
}),
states: {
FetchData: {
eventSchema: {
type: 'cmd.book.fetch',
data: zod.object({
bookId: zod.string(),
}),
},
emit: (id, state, { context }) => ({
type: 'cmd.book.fetch',
data: {
bookId: context.bookId,
},
}),
on: {
'evt.book.fetch.success': {
eventSchema: {
type: 'evt.book.fetch.success',
data: zod.object({
bookData: zod.string().array(),
}),
},
transformer: false,
target: 'Summarise',
actions: withDefaultActions(),
},
'books.evt.fetch.error': {
eventSchema: {
type: 'books.evt.fetch.error',
data: zod.object({
bookData: zod.string().array(),
}),
},
target: 'Error',
actions: withDefaultActions(),
},
},
},
Summarise: {
emit: 'cmd.gpt.summary',
eventSchema: {
type: 'cmd.gpt.summary',
data: zod.object({
content: zod.string().array(),
}),
},
on: {
'evt.gpt.summary.success': {
eventSchema: {
type: 'evt.gpt.summary.success',
data: zod.object({
summary: zod.string(),
}),
},
target: 'Regulate',
actions: withDefaultActions(),
},
'evt.gpt.summary.error': {
eventSchema: {
type: 'evt.gpt.summary.error',
data: zod.object({
error: zod.string(),
}),
},
target: 'Error',
actions: withDefaultActions(),
},
},
},
Regulate: {
type: 'parallel',
states: {
Grounded: {
initial: 'Check',
states: {
Check: {
emit: 'cmd.regulations.grounded',
eventSchema: {
type: 'cmd.regulations.grounded',
data: zod.object({
content: zod.string().array(),
summary: zod.string(),
}),
},
on: {
'evt.regulations.grounded.success': {
transformer: 'onGroundedSuccess',
eventSchema: {
type: 'evt.regulations.grounded.success',
data: zod.object({
grounded: zod.boolean(),
}),
},
target: 'Done',
actions: withDefaultActions(),
},
'evt.regulations.grounded.error': {
eventSchema: {
type: 'evt.regulations.grounded.error',
data: zod.object({
error: zod.string(),
}),
},
target: 'Done',
actions: withDefaultActions(),
},
},
},
Done: { type: 'final' },
},
},
Compliant: {
initial: 'Check',
states: {
Check: {
emit: 'cmd.regulations.compliant',
eventSchema: {
type: 'cmd.regulations.compliant',
data: zod.object({
content: zod.string().array(),
summary: zod.string(),
}),
},
on: {
'evt.regulations.compliant.success': {
transformer: true,
eventSchema: {
type: 'evt.regulations.compliant.success',
data: zod.object({
content: zod.string().array(),
summary: zod.string(),
}),
},
target: 'Done',
actions: withDefaultActions(),
},
'evt.regulations.compliant.error': {
eventSchema: {
type: 'evt.regulations.compliant.error',
data: zod.object({
error: zod.string(),
}),
},
target: 'Done',
actions: withDefaultActions(),
},
},
},
Done: { type: 'final' },
},
},
},
onDone: { target: 'Done' },
},
Error: { type: 'final' },
Done: { type: 'final', emit: 'onDone' },
},
},
{
emits: {
'cmd.gpt.summary': (id, state, { context }) => ({
data: {
content: context.bookData,
},
}),
'cmd.regulations.grounded': (id, state, { context }) => ({
data: {
content: context.bookData,
summary: context.summary,
},
}),
'cmd.regulations.compliant': (id, state, { context }) => ({
data: {
content: context.summary,
},
}),
onDone: (id, state, { context }) => ({
type: 'notif.done',
data: context,
}),
},
transformers: {
'evt.regulations.compliant.success': (event) => {
return {
data: {
compliant: (event?.data?.compliant
? 'TRUE'
: 'FALSE') as TriState,
},
};
},
'evt.book.fetch.success': (event) => ({
data: event.data || {},
}),
onGroundedSuccess: (event) => {
return {
data: {
grounded: (event?.data?.grounded ? 'TRUE' : 'FALSE') as TriState,
},
};
},
},
},
);
Generated using TypeDoc
The orchestration machine definition, specifying its structure and behavior.