@alpic80/rivet-core 1.19.1-aidon.3 → 1.24.0-aidon.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (129) hide show
  1. package/README.md +4 -0
  2. package/dist/cjs/bundle.cjs +4512 -1240
  3. package/dist/cjs/bundle.cjs.map +4 -4
  4. package/dist/esm/api/createProcessor.js +8 -17
  5. package/dist/esm/api/looseDataValue.js +16 -0
  6. package/dist/esm/exports.js +2 -0
  7. package/dist/esm/integrations/CodeRunner.js +36 -0
  8. package/dist/esm/integrations/DatasetProvider.js +1 -1
  9. package/dist/esm/integrations/GptTokenizerTokenizer.js +7 -4
  10. package/dist/esm/integrations/openai/OpenAIEmbeddingGenerator.js +1 -1
  11. package/dist/esm/model/DataValue.js +14 -2
  12. package/dist/esm/model/GraphProcessor.js +276 -107
  13. package/dist/esm/model/NodeBase.js +11 -1
  14. package/dist/esm/model/NodeImpl.js +8 -0
  15. package/dist/esm/model/Nodes.js +31 -4
  16. package/dist/esm/model/ProjectReferenceLoader.js +1 -0
  17. package/dist/esm/model/nodes/AssembleMessageNode.js +12 -2
  18. package/dist/esm/model/nodes/AssemblePromptNode.js +22 -0
  19. package/dist/esm/model/nodes/CallGraphNode.js +3 -4
  20. package/dist/esm/model/nodes/ChatLoopNode.js +150 -0
  21. package/dist/esm/model/nodes/ChatNode.js +7 -934
  22. package/dist/esm/model/nodes/ChatNodeBase.js +1277 -0
  23. package/dist/esm/model/nodes/ChunkNode.js +2 -2
  24. package/dist/esm/model/nodes/CodeNode.js +40 -5
  25. package/dist/esm/model/nodes/CronNode.js +248 -0
  26. package/dist/esm/model/nodes/DelegateFunctionCallNode.js +37 -12
  27. package/dist/esm/model/nodes/DestructureNode.js +1 -1
  28. package/dist/esm/model/nodes/DocumentNode.js +183 -0
  29. package/dist/esm/model/nodes/ExtractJsonNode.js +4 -4
  30. package/dist/esm/model/nodes/ExtractRegexNode.js +10 -11
  31. package/dist/esm/model/nodes/GetAllDatasetsNode.js +1 -1
  32. package/dist/esm/model/nodes/GetEmbeddingNode.js +1 -1
  33. package/dist/esm/model/nodes/HttpCallNode.js +3 -1
  34. package/dist/esm/model/nodes/IfNode.js +5 -0
  35. package/dist/esm/model/nodes/LoopControllerNode.js +1 -1
  36. package/dist/esm/model/nodes/LoopUntilNode.js +214 -0
  37. package/dist/esm/model/nodes/ObjectNode.js +1 -1
  38. package/dist/esm/model/nodes/PromptNode.js +29 -6
  39. package/dist/esm/model/nodes/RaceInputsNode.js +1 -2
  40. package/dist/esm/model/nodes/ReadAllFilesNode.js +210 -0
  41. package/dist/esm/model/nodes/ReadDirectoryNode.js +31 -25
  42. package/dist/esm/model/nodes/ReferencedGraphAliasNode.js +199 -0
  43. package/dist/esm/model/nodes/ReplaceDatasetNode.js +1 -1
  44. package/dist/esm/model/nodes/SliceNode.js +0 -1
  45. package/dist/esm/model/nodes/SplitNode.js +1 -1
  46. package/dist/esm/model/nodes/SubGraphNode.js +0 -1
  47. package/dist/esm/model/nodes/TextNode.js +9 -4
  48. package/dist/esm/model/nodes/ToMarkdownTableNode.js +119 -0
  49. package/dist/esm/model/nodes/ToTreeNode.js +133 -0
  50. package/dist/esm/model/nodes/{GptFunctionNode.js → ToolNode.js} +10 -10
  51. package/dist/esm/model/nodes/UserInputNode.js +10 -12
  52. package/dist/esm/model/nodes/WriteFileNode.js +147 -0
  53. package/dist/esm/native/BrowserNativeApi.js +16 -1
  54. package/dist/esm/plugins/aidon/nodes/ChatAidonNode.js +5 -5
  55. package/dist/esm/plugins/anthropic/anthropic.js +29 -14
  56. package/dist/esm/plugins/anthropic/fetchEventSource.js +3 -2
  57. package/dist/esm/plugins/anthropic/nodes/ChatAnthropicNode.js +264 -147
  58. package/dist/esm/plugins/anthropic/plugin.js +9 -1
  59. package/dist/esm/plugins/assemblyAi/LemurQaNode.js +1 -1
  60. package/dist/esm/plugins/assemblyAi/LemurSummaryNode.js +1 -1
  61. package/dist/esm/plugins/gentrace/plugin.js +6 -6
  62. package/dist/esm/plugins/google/google.js +120 -6
  63. package/dist/esm/plugins/google/nodes/ChatGoogleNode.js +219 -56
  64. package/dist/esm/plugins/google/plugin.js +13 -6
  65. package/dist/esm/plugins/openai/nodes/RunThreadNode.js +2 -2
  66. package/dist/esm/plugins/openai/nodes/ThreadMessageNode.js +1 -1
  67. package/dist/esm/recording/ExecutionRecorder.js +59 -4
  68. package/dist/esm/utils/base64.js +13 -0
  69. package/dist/esm/utils/chatMessageToOpenAIChatCompletionMessage.js +15 -2
  70. package/dist/esm/utils/coerceType.js +4 -1
  71. package/dist/esm/utils/fetchEventSource.js +1 -1
  72. package/dist/esm/utils/interpolation.js +108 -3
  73. package/dist/esm/utils/openai.js +106 -50
  74. package/dist/esm/utils/paths.js +80 -0
  75. package/dist/esm/utils/serialization/serialization_v4.js +5 -0
  76. package/dist/types/api/createProcessor.d.ts +11 -5
  77. package/dist/types/api/looseDataValue.d.ts +4 -0
  78. package/dist/types/api/streaming.d.ts +1 -1
  79. package/dist/types/exports.d.ts +2 -0
  80. package/dist/types/integrations/CodeRunner.d.ts +18 -0
  81. package/dist/types/integrations/DatasetProvider.d.ts +1 -1
  82. package/dist/types/model/DataValue.d.ts +29 -6
  83. package/dist/types/model/EditorDefinition.d.ts +6 -1
  84. package/dist/types/model/GraphProcessor.d.ts +14 -7
  85. package/dist/types/model/NodeBase.d.ts +4 -0
  86. package/dist/types/model/NodeImpl.d.ts +5 -4
  87. package/dist/types/model/Nodes.d.ts +13 -4
  88. package/dist/types/model/ProcessContext.d.ts +16 -1
  89. package/dist/types/model/Project.d.ts +19 -7
  90. package/dist/types/model/ProjectReferenceLoader.d.ts +5 -0
  91. package/dist/types/model/RivetPlugin.d.ts +6 -0
  92. package/dist/types/model/RivetUIContext.d.ts +5 -1
  93. package/dist/types/model/Settings.d.ts +1 -0
  94. package/dist/types/model/nodes/AssemblePromptNode.d.ts +4 -1
  95. package/dist/types/model/nodes/ChatLoopNode.d.ts +21 -0
  96. package/dist/types/model/nodes/ChatNode.d.ts +2 -62
  97. package/dist/types/model/nodes/ChatNodeBase.d.ts +85 -0
  98. package/dist/types/model/nodes/CodeNode.d.ts +8 -2
  99. package/dist/types/model/nodes/CronNode.d.ts +34 -0
  100. package/dist/types/model/nodes/DelegateFunctionCallNode.d.ts +1 -0
  101. package/dist/types/model/nodes/DocumentNode.d.ts +28 -0
  102. package/dist/types/model/nodes/GetAllDatasetsNode.d.ts +2 -2
  103. package/dist/types/model/nodes/LoopUntilNode.d.ts +32 -0
  104. package/dist/types/model/nodes/ObjectNode.d.ts +2 -2
  105. package/dist/types/model/nodes/PromptNode.d.ts +2 -0
  106. package/dist/types/model/nodes/RaceInputsNode.d.ts +1 -2
  107. package/dist/types/model/nodes/ReadAllFilesNode.d.ts +30 -0
  108. package/dist/types/model/nodes/ReadDirectoryNode.d.ts +1 -1
  109. package/dist/types/model/nodes/ReferencedGraphAliasNode.d.ts +31 -0
  110. package/dist/types/model/nodes/SplitNode.d.ts +2 -2
  111. package/dist/types/model/nodes/ToMarkdownTableNode.d.ts +19 -0
  112. package/dist/types/model/nodes/ToTreeNode.d.ts +21 -0
  113. package/dist/types/model/nodes/UserInputNode.d.ts +2 -3
  114. package/dist/types/model/nodes/WriteFileNode.d.ts +23 -0
  115. package/dist/types/native/BrowserNativeApi.d.ts +8 -5
  116. package/dist/types/native/NativeApi.d.ts +12 -1
  117. package/dist/types/plugins/anthropic/anthropic.d.ts +94 -13
  118. package/dist/types/plugins/anthropic/nodes/ChatAnthropicNode.d.ts +7 -2
  119. package/dist/types/plugins/google/google.d.ts +101 -18
  120. package/dist/types/plugins/google/nodes/ChatGoogleNode.d.ts +3 -2
  121. package/dist/types/recording/RecordedEvents.d.ts +3 -0
  122. package/dist/types/utils/base64.d.ts +2 -1
  123. package/dist/types/utils/chatMessageToOpenAIChatCompletionMessage.d.ts +3 -1
  124. package/dist/types/utils/interpolation.d.ts +3 -0
  125. package/dist/types/utils/openai.d.ts +127 -21
  126. package/dist/types/utils/paths.d.ts +8 -0
  127. package/dist/types/utils/serialization/serialization_v3.d.ts +1 -0
  128. package/package.json +15 -11
  129. /package/dist/types/model/nodes/{GptFunctionNode.d.ts → ToolNode.d.ts} +0 -0
@@ -0,0 +1,18 @@
1
+ import type { Inputs, Outputs } from '../index.js';
2
+ export interface CodeRunnerOptions {
3
+ includeRequire: boolean;
4
+ includeFetch: boolean;
5
+ includeRivet: boolean;
6
+ includeProcess: boolean;
7
+ includeConsole: boolean;
8
+ }
9
+ /** An object that can run arbitrary code (evals it). */
10
+ export interface CodeRunner {
11
+ runCode: (code: string, inputs: Inputs, options: CodeRunnerOptions) => Promise<Outputs>;
12
+ }
13
+ export declare class IsomorphicCodeRunner implements CodeRunner {
14
+ runCode(code: string, inputs: Inputs, options: CodeRunnerOptions): Promise<Outputs>;
15
+ }
16
+ export declare class NotAllowedCodeRunner implements CodeRunner {
17
+ runCode(_code: string, _inputs: Inputs, _options: CodeRunnerOptions): Promise<Outputs>;
18
+ }
@@ -19,7 +19,7 @@ export declare class InMemoryDatasetProvider implements DatasetProvider {
19
19
  #private;
20
20
  constructor(datasets: CombinedDataset[]);
21
21
  getDatasetMetadata(id: DatasetId): Promise<DatasetMetadata | undefined>;
22
- getDatasetsForProject(projectId: ProjectId): Promise<DatasetMetadata[]>;
22
+ getDatasetsForProject(): Promise<DatasetMetadata[]>;
23
23
  getDatasetData(id: DatasetId): Promise<Dataset>;
24
24
  putDatasetRow(id: DatasetId, row: DatasetRow): Promise<void>;
25
25
  putDatasetData(id: DatasetId, data: Dataset): Promise<void>;
@@ -10,10 +10,14 @@ export type BoolDataValue = DataValueDef<'boolean', boolean>;
10
10
  export type SystemChatMessage = {
11
11
  type: 'system';
12
12
  message: ChatMessageMessagePart | ChatMessageMessagePart[];
13
+ /** If true, this message marks a breakpoint when used with prompt caching (as of right now, Anthropic-only). */
14
+ isCacheBreakpoint?: boolean;
13
15
  };
14
16
  export type UserChatMessage = {
15
17
  type: 'user';
16
18
  message: ChatMessageMessagePart | ChatMessageMessagePart[];
19
+ /** If true, this message marks a breakpoint when used with prompt caching (as of right now, Anthropic-only). */
20
+ isCacheBreakpoint?: boolean;
17
21
  };
18
22
  export type AssistantChatMessageFunctionCall = {
19
23
  id: string | undefined;
@@ -31,22 +35,34 @@ export type AssistantChatMessage = {
31
35
  /** @deprecated use function_calls instead */
32
36
  function_call: AssistantChatMessageFunctionCall | undefined;
33
37
  function_calls: AssistantChatMessageFunctionCall[] | undefined;
38
+ /** If true, this message marks a breakpoint when used with prompt caching (as of right now, Anthropic-only). */
39
+ isCacheBreakpoint?: boolean;
34
40
  };
35
41
  export type FunctionResponseChatMessage = {
36
42
  type: 'function';
37
43
  message: ChatMessageMessagePart | ChatMessageMessagePart[];
38
44
  name: string;
45
+ /** If true, this message marks a breakpoint when used with prompt caching (as of right now, Anthropic-only). */
46
+ isCacheBreakpoint?: boolean;
39
47
  };
40
48
  export type ChatMessage = SystemChatMessage | UserChatMessage | AssistantChatMessage | FunctionResponseChatMessage;
41
49
  export type ChatMessageMessagePart = string | {
42
50
  type: 'image';
43
- mediaType: SupportedMediaTypes;
51
+ mediaType: SupportedImageMediaTypes;
44
52
  data: Uint8Array;
45
53
  } | {
46
54
  type: 'url';
47
55
  url: string;
56
+ } | {
57
+ type: 'document';
58
+ title: string | undefined;
59
+ context: string | undefined;
60
+ mediaType: SupportedDocumentMediaTypes;
61
+ data: Uint8Array;
62
+ enableCitations: boolean;
48
63
  };
49
- export type SupportedMediaTypes = 'image/jpeg' | 'image/png' | 'image/gif';
64
+ export type SupportedImageMediaTypes = 'image/jpeg' | 'image/png' | 'image/gif';
65
+ export type SupportedDocumentMediaTypes = 'application/pdf' | 'text/plain';
50
66
  export type ChatMessageDataValue = DataValueDef<'chat-message', ChatMessage>;
51
67
  export type DateDataValue = DataValueDef<'date', string>;
52
68
  export type TimeDataValue = DataValueDef<'time', string>;
@@ -56,7 +72,7 @@ export type ObjectDataValue = DataValueDef<'object', Record<string, unknown>>;
56
72
  export type VectorDataValue = DataValueDef<'vector', number[]>;
57
73
  export type BinaryDataValue = DataValueDef<'binary', Uint8Array>;
58
74
  export type ImageDataValue = DataValueDef<'image', {
59
- mediaType: SupportedMediaTypes;
75
+ mediaType: SupportedImageMediaTypes;
60
76
  data: Uint8Array;
61
77
  }>;
62
78
  export type AudioDataValue = DataValueDef<'audio', {
@@ -67,6 +83,13 @@ export type GraphReferenceValue = DataValueDef<'graph-reference', {
67
83
  graphId: GraphId;
68
84
  graphName: string;
69
85
  }>;
86
+ export type DocumentDataValue = DataValueDef<'document', {
87
+ mediaType: SupportedDocumentMediaTypes;
88
+ data: Uint8Array;
89
+ title: string | undefined;
90
+ context: string | undefined;
91
+ enableCitations: boolean;
92
+ }>;
70
93
  /** GPT function definition */
71
94
  export type GptFunction = {
72
95
  name: string;
@@ -77,7 +100,7 @@ export type GptFunction = {
77
100
  };
78
101
  export type GptFunctionDataValue = DataValueDef<'gpt-function', GptFunction>;
79
102
  export type ControlFlowExcludedDataValue = DataValueDef<'control-flow-excluded', undefined | 'loop-not-broken'>;
80
- export type ScalarDataValue = StringDataValue | NumberDataValue | DateDataValue | TimeDataValue | DateTimeDataValue | BoolDataValue | ChatMessageDataValue | ControlFlowExcludedDataValue | AnyDataValue | ObjectDataValue | GptFunctionDataValue | VectorDataValue | ImageDataValue | BinaryDataValue | AudioDataValue | GraphReferenceValue;
103
+ export type ScalarDataValue = StringDataValue | NumberDataValue | DateDataValue | TimeDataValue | DateTimeDataValue | BoolDataValue | ChatMessageDataValue | ControlFlowExcludedDataValue | AnyDataValue | ObjectDataValue | GptFunctionDataValue | VectorDataValue | ImageDataValue | BinaryDataValue | AudioDataValue | GraphReferenceValue | DocumentDataValue;
81
104
  export type ScalarType = ScalarDataValue['type'];
82
105
  export type ArrayDataValue<T extends ScalarDataValue> = DataValueDef<`${T['type']}[]`, T['value'][]>;
83
106
  export type FunctionDataValue<T extends ScalarOrArrayDataValue> = DataValueDef<`fn<${T['type']}>`, () => T['value']>;
@@ -106,8 +129,8 @@ export type GetDataValue<Type extends DataType> = Extract<DataValue, {
106
129
  export type DataRef = {
107
130
  refId: DataId;
108
131
  };
109
- export declare const dataTypes: ["any", "any[]", "boolean", "boolean[]", "string", "string[]", "number", "number[]", "date", "date[]", "time", "time[]", "datetime", "datetime[]", "chat-message", "chat-message[]", "control-flow-excluded", "control-flow-excluded[]", "object", "object[]", "fn<string>", "fn<number>", "fn<boolean>", "fn<date>", "fn<time>", "fn<datetime>", "fn<any>", "fn<object>", "fn<chat-message>", "fn<control-flow-excluded>", "fn<string[]>", "fn<number[]>", "fn<boolean[]>", "fn<date[]>", "fn<time[]>", "fn<datetime[]>", "fn<any[]>", "fn<object[]>", "fn<chat-message[]>", "fn<control-flow-excluded[]>", "gpt-function", "gpt-function[]", "fn<gpt-function[]>", "fn<gpt-function>", "vector", "vector[]", "fn<vector>", "fn<vector[]>", "image", "image[]", "fn<image>", "fn<image[]>", "binary", "binary[]", "fn<binary>", "fn<binary[]>", "audio", "audio[]", "fn<audio>", "fn<audio[]>", "graph-reference", "graph-reference[]", "fn<graph-reference>", "fn<graph-reference[]>"];
110
- export declare const scalarTypes: ["any", "boolean", "string", "number", "date", "time", "datetime", "chat-message", "control-flow-excluded", "object", "gpt-function", "vector", "image", "binary", "audio", "graph-reference"];
132
+ export declare const dataTypes: ["any", "any[]", "boolean", "boolean[]", "string", "string[]", "number", "number[]", "date", "date[]", "time", "time[]", "datetime", "datetime[]", "chat-message", "chat-message[]", "control-flow-excluded", "control-flow-excluded[]", "object", "object[]", "fn<string>", "fn<number>", "fn<boolean>", "fn<date>", "fn<time>", "fn<datetime>", "fn<any>", "fn<object>", "fn<chat-message>", "fn<control-flow-excluded>", "fn<string[]>", "fn<number[]>", "fn<boolean[]>", "fn<date[]>", "fn<time[]>", "fn<datetime[]>", "fn<any[]>", "fn<object[]>", "fn<chat-message[]>", "fn<control-flow-excluded[]>", "gpt-function", "gpt-function[]", "fn<gpt-function[]>", "fn<gpt-function>", "vector", "vector[]", "fn<vector>", "fn<vector[]>", "image", "image[]", "fn<image>", "fn<image[]>", "binary", "binary[]", "fn<binary>", "fn<binary[]>", "audio", "audio[]", "fn<audio>", "fn<audio[]>", "graph-reference", "graph-reference[]", "fn<graph-reference>", "fn<graph-reference[]>", "document", "document[]", "fn<document>", "fn<document[]>"];
133
+ export declare const scalarTypes: ["any", "boolean", "string", "number", "date", "time", "datetime", "chat-message", "control-flow-excluded", "object", "gpt-function", "vector", "image", "binary", "audio", "graph-reference", "document"];
111
134
  export declare const dataTypeDisplayNames: Record<DataType, string>;
112
135
  export declare function isScalarDataValue(value: DataValue | undefined): value is ScalarDataValue;
113
136
  export declare function isScalarDataType(type: DataType): type is ScalarDataType;
@@ -94,6 +94,11 @@ export type FileBrowserEditorDefinition<T extends ChartNode> = SharedEditorDefin
94
94
  useInputToggleDataKey?: DataOfType<T, boolean>;
95
95
  accept?: string;
96
96
  };
97
+ export type DirectoryBrowserEditorDefinition<T extends ChartNode> = SharedEditorDefinitionProps<T> & {
98
+ type: 'directoryBrowser';
99
+ dataKey: DataOfType<T, string>;
100
+ useInputToggleDataKey?: DataOfType<T, boolean>;
101
+ };
97
102
  export type ImageBrowserEditorDefinition<T extends ChartNode> = SharedEditorDefinitionProps<T> & {
98
103
  type: 'imageBrowser';
99
104
  dataKey: DataOfType<T, DataRef>;
@@ -138,5 +143,5 @@ export type DynamicEditorDefinition<T extends ChartNode> = SharedEditorDefinitio
138
143
  dataType: DataType;
139
144
  editor: DynamicEditorEditor;
140
145
  };
141
- export type EditorDefinition<T extends ChartNode> = StringEditorDefinition<T> | ToggleEditorDefinition<T> | DataTypeSelectorEditorDefinition<T> | AnyDataEditorDefinition<T> | DropdownEditorDefinition<T> | NumberEditorDefinition<T> | CodeEditorDefinition<T> | GraphSelectorEditorDefinition<T> | ColorEditorDefinition<T> | GraphSelectorEditorDefinition<T> | FileBrowserEditorDefinition<T> | ImageBrowserEditorDefinition<T> | DatasetSelectorEditorDefinition<T> | KeyValuePairEditorDefinition<T> | EditorDefinitionGroup<T> | StringListEditorDefinition<T> | CustomEditorDefinition<T> | DynamicEditorDefinition<T> | FilePathBrowserEditorDefinition<T>;
146
+ export type EditorDefinition<T extends ChartNode> = StringEditorDefinition<T> | ToggleEditorDefinition<T> | DataTypeSelectorEditorDefinition<T> | AnyDataEditorDefinition<T> | DropdownEditorDefinition<T> | NumberEditorDefinition<T> | CodeEditorDefinition<T> | GraphSelectorEditorDefinition<T> | ColorEditorDefinition<T> | GraphSelectorEditorDefinition<T> | FileBrowserEditorDefinition<T> | ImageBrowserEditorDefinition<T> | DatasetSelectorEditorDefinition<T> | KeyValuePairEditorDefinition<T> | EditorDefinitionGroup<T> | StringListEditorDefinition<T> | CustomEditorDefinition<T> | DynamicEditorDefinition<T> | FilePathBrowserEditorDefinition<T> | DirectoryBrowserEditorDefinition<T>;
142
147
  export {};
@@ -1,12 +1,11 @@
1
1
  import { type DataValue, type StringArrayDataValue, type ScalarOrArrayDataValue } from './DataValue.js';
2
- import type { ChartNode, NodeConnection, NodeId, PortId } from './NodeBase.js';
2
+ import { type ChartNode, type NodeConnection, type NodeId, type PortId } from './NodeBase.js';
3
3
  import type { GraphId, NodeGraph } from './NodeGraph.js';
4
- import type { UserInputNode } from './nodes/UserInputNode.js';
5
4
  import Emittery from 'emittery';
6
- import type { Project } from './Project.js';
5
+ import { type Project } from './Project.js';
7
6
  import type { InternalProcessContext, ProcessContext, ProcessId } from './ProcessContext.js';
8
7
  import type { ExecutionRecorder } from '../recording/ExecutionRecorder.js';
9
- import type { Opaque } from 'type-fest';
8
+ import type { Tagged } from 'type-fest';
10
9
  import type { NodeRegistration } from './NodeRegistration.js';
11
10
  export type ProcessEvents = {
12
11
  /** Called when processing has started. */
@@ -65,10 +64,13 @@ export type ProcessEvents = {
65
64
  };
66
65
  /** Called when a user input node requires user input. Call the callback when finished, or call userInput() on the GraphProcessor with the results. */
67
66
  userInput: {
68
- node: UserInputNode;
67
+ node: ChartNode;
68
+ inputStrings: string[];
69
+ /** @deprecated use inputStrings instead */
69
70
  inputs: Inputs;
70
71
  callback: (values: StringArrayDataValue) => void;
71
72
  processId: ProcessId;
73
+ renderingType: 'text' | 'markdown';
72
74
  };
73
75
  /** Called when a node has partially processed, with the current partial output values for the node. */
74
76
  partialOutput: {
@@ -131,7 +133,7 @@ export type ExternalFunctionProcessContext = Omit<InternalProcessContext, 'setGl
131
133
  export type ExternalFunction = (context: ExternalFunctionProcessContext, ...args: unknown[]) => Promise<DataValue & {
132
134
  cost?: number;
133
135
  }>;
134
- export type RaceId = Opaque<string, 'RaceId'>;
136
+ export type RaceId = Tagged<string, 'RaceId'>;
135
137
  export type LoopInfo = AttachedNodeDataItem & {
136
138
  /** ID of the controller of the loop */
137
139
  loopControllerId: NodeId;
@@ -158,11 +160,13 @@ export declare class GraphProcessor {
158
160
  executor?: 'nodejs' | 'browser';
159
161
  /** If set, specifies the node(s) that the graph will run TO, instead of the nodes without any dependents. */
160
162
  runToNodeIds?: NodeId[];
163
+ /** If set, specifies the node that the graph will run FROM, instead of the start nodes. Requires preloading data. */
164
+ runFromNodeId?: NodeId;
161
165
  /** The interval between nodeFinish events when playing back a recording. I.e. how fast the playback is. */
162
166
  recordingPlaybackChatLatency: number;
163
167
  warnOnInvalidGraph: boolean;
164
168
  get isRunning(): boolean;
165
- constructor(project: Project, graphId?: GraphId, registry?: NodeRegistration);
169
+ constructor(project: Project, graphId?: GraphId, registry?: NodeRegistration, includeTrace?: boolean);
166
170
  on: Emittery<ProcessEvents>["on"];
167
171
  off: Emittery<ProcessEvents>["off"];
168
172
  once: Emittery<ProcessEvents>["once"];
@@ -177,6 +181,9 @@ export declare class GraphProcessor {
177
181
  resume(): void;
178
182
  setSlowMode(slowMode: boolean): void;
179
183
  events(): AsyncGenerator<ProcessEvent>;
184
+ preloadNodeData(nodeId: NodeId, data: Outputs): void;
185
+ /** Gets all node IDs that a given node ID depends on being complete before the given node ID can start. */
186
+ getDependencyNodesDeep(nodeId: NodeId): NodeId[];
180
187
  replayRecording(recorder: ExecutionRecorder): Promise<GraphOutputs>;
181
188
  /** Main function for running a graph. Runs a graph and returns the outputs from the output nodes of the graph. */
182
189
  processGraph(
@@ -41,6 +41,8 @@ export interface NodeBase {
41
41
  tests?: NodeTestGroup[];
42
42
  /** If true, the node is disabled and effectively "not ran" */
43
43
  disabled?: boolean;
44
+ /** If true, the node exposes an `if` port that lets it run conditionally. */
45
+ isConditional?: boolean;
44
46
  }
45
47
  /** Base type for a typed node. */
46
48
  export type ChartNode<Type extends string = string, Data = unknown> = NodeBase & {
@@ -108,3 +110,5 @@ export type NodeConnection = {
108
110
  /** The unique identifier of the input. */
109
111
  inputId: PortId;
110
112
  };
113
+ export declare const IF_PORT: NodeInputDefinition;
114
+ export declare function isBuiltInInputDefinition(input: NodeInputDefinition): boolean;
@@ -1,6 +1,6 @@
1
1
  import type { Inputs, Outputs } from './GraphProcessor.js';
2
- import type { ChartNode, NodeConnection, NodeId, NodeInputDefinition, NodeOutputDefinition } from './NodeBase.js';
3
- import type { Project } from './Project.js';
2
+ import { type ChartNode, type NodeConnection, type NodeId, type NodeInputDefinition, type NodeOutputDefinition } from './NodeBase.js';
3
+ import type { Project, ProjectId } from './Project.js';
4
4
  import type { InternalProcessContext } from './ProcessContext.js';
5
5
  import type { EditorDefinition } from './EditorDefinition.js';
6
6
  import type { NodeBodySpec } from './NodeBodySpec.js';
@@ -25,8 +25,9 @@ export declare abstract class NodeImpl<T extends ChartNode, Type extends T['type
25
25
  y: number;
26
26
  };
27
27
  get data(): T['data'];
28
- abstract getInputDefinitions(connections: NodeConnection[], nodes: Record<NodeId, ChartNode>, project: Project): NodeInputDefinition[];
29
- abstract getOutputDefinitions(connections: NodeConnection[], nodes: Record<NodeId, ChartNode>, project: Project): NodeOutputDefinition[];
28
+ abstract getInputDefinitions(connections: NodeConnection[], nodes: Record<NodeId, ChartNode>, project: Project, referencedProjects: Record<ProjectId, Project>): NodeInputDefinition[];
29
+ getInputDefinitionsIncludingBuiltIn(connections: NodeConnection[], nodes: Record<NodeId, ChartNode>, project: Project, referencedProjects: Record<ProjectId, Project>): NodeInputDefinition[];
30
+ abstract getOutputDefinitions(connections: NodeConnection[], nodes: Record<NodeId, ChartNode>, project: Project, referencedProjects: Record<ProjectId, Project>): NodeOutputDefinition[];
30
31
  abstract process(inputData: Inputs, context: InternalProcessContext): Promise<Outputs>;
31
32
  getEditors(_context: RivetUIContext): EditorDefinition<T>[] | Promise<EditorDefinition<T>[]>;
32
33
  getBody(_context: RivetUIContext): NodeBody | Promise<NodeBody>;
@@ -2,6 +2,7 @@ import { NodeRegistration } from './NodeRegistration.js';
2
2
  export * from './nodes/UserInputNode.js';
3
3
  export * from './nodes/TextNode.js';
4
4
  export * from './nodes/ChatNode.js';
5
+ export * from './nodes/ChatNodeBase.js';
5
6
  export * from './nodes/PromptNode.js';
6
7
  export * from './nodes/ExtractRegexNode.js';
7
8
  export * from './nodes/CodeNode.js';
@@ -9,6 +10,7 @@ export * from './nodes/MatchNode.js';
9
10
  export * from './nodes/IfNode.js';
10
11
  export * from './nodes/ReadDirectoryNode.js';
11
12
  export * from './nodes/ReadFileNode.js';
13
+ export * from './nodes/WriteFileNode.js';
12
14
  export * from './nodes/IfElseNode.js';
13
15
  export * from './nodes/ChunkNode.js';
14
16
  export * from './nodes/GraphInputNode.js';
@@ -30,7 +32,7 @@ export * from './nodes/PopNode.js';
30
32
  export * from './nodes/SetGlobalNode.js';
31
33
  export * from './nodes/GetGlobalNode.js';
32
34
  export * from './nodes/WaitForEventNode.js';
33
- export * from './nodes/GptFunctionNode.js';
35
+ export * from './nodes/ToolNode.js';
34
36
  export * from './nodes/ToYamlNode.js';
35
37
  export * from './nodes/GetEmbeddingNode.js';
36
38
  export * from './nodes/VectorStoreNode.js';
@@ -72,9 +74,16 @@ export * from './nodes/GraphReferenceNode.js';
72
74
  export * from './nodes/CallGraphNode.js';
73
75
  export * from './nodes/DelegateFunctionCallNode.js';
74
76
  export * from './nodes/PlayAudioNode.js';
75
- export * from './nodes/CallGraphNode.js';
76
- export declare const registerBuiltInNodes: (registry: NodeRegistration) => NodeRegistration<"number" | "boolean" | "object" | "pop" | "join" | "slice" | "filter" | "match" | "split" | "image" | "audio" | "code" | "array" | "userInput" | "prompt" | "text" | "chat" | "extractRegex" | "if" | "readDirectory" | "readFile" | "ifElse" | "chunk" | "graphInput" | "graphOutput" | "subGraph" | "extractJson" | "assemblePrompt" | "extractYaml" | "loopController" | "trimChatMessages" | "externalCall" | "setGlobal" | "raiseEvent" | "getGlobal" | "abortGraph" | "extractObjectPath" | "context" | "coalesce" | "passthrough" | "waitForEvent" | "gptFunction" | "toYaml" | "getEmbedding" | "vectorStore" | "vectorNearestNeighbors" | "hash" | "raceInputs" | "toJson" | "compare" | "evaluate" | "randomNumber" | "shuffle" | "comment" | "imagetoMD" | "httpCall" | "delay" | "appendToDataset" | "createDataset" | "loadDataset" | "getAllDatasets" | "datasetNearestNeighbors" | "getDatasetRow" | "extractMarkdownCodeBlocks" | "assembleMessage" | "urlReference" | "destructure" | "replaceDataset" | "listGraphs" | "graphReference" | "callGraph" | "delegateFunctionCall" | "playAudio", import("./nodes/UserInputNode.js").UserInputNode | import("./nodes/TextNode.js").TextNode | import("./nodes/ChatNode.js").ChatNode | import("./nodes/PromptNode.js").PromptNode | import("./nodes/ExtractRegexNode.js").ExtractRegexNode | import("./nodes/CodeNode.js").CodeNode | import("./nodes/MatchNode.js").MatchNode | import("./nodes/IfNode.js").IfNode | import("./nodes/ReadDirectoryNode.js").ReadDirectoryNode | import("./nodes/ReadFileNode.js").ReadFileNode | import("./nodes/IfElseNode.js").IfElseNode | import("./nodes/ChunkNode.js").ChunkNode | import("./nodes/GraphInputNode.js").GraphInputNode | import("./nodes/GraphOutputNode.js").GraphOutputNode | import("./nodes/SubGraphNode.js").SubGraphNode | import("./nodes/ArrayNode.js").ArrayNode | import("./nodes/ExtractJsonNode.js").ExtractJsonNode | import("./nodes/AssemblePromptNode.js").AssemblePromptNode | import("./nodes/ExtractYamlNode.js").ExtractYamlNode | import("./nodes/LoopControllerNode.js").LoopControllerNode | import("./nodes/TrimChatMessagesNode.js").TrimChatMessagesNode | import("./nodes/ExternalCallNode.js").ExternalCallNode | import("./nodes/ExtractObjectPathNode.js").ExtractObjectPathNode | import("./nodes/RaiseEventNode.js").RaiseEventNode | import("./nodes/ContextNode.js").ContextNode | import("./nodes/CoalesceNode.js").CoalesceNode | import("./nodes/PassthroughNode.js").PassthroughNode | import("./nodes/PopNode.js").PopNode | import("./nodes/SetGlobalNode.js").SetGlobalNode | import("./nodes/GetGlobalNode.js").GetGlobalNode | import("./nodes/WaitForEventNode.js").WaitForEventNode | import("./nodes/GptFunctionNode.js").GptFunctionNode | import("./nodes/ToYamlNode.js").ToYamlNode | import("./nodes/GetEmbeddingNode.js").GetEmbeddingNode | import("./nodes/VectorStoreNode.js").VectorStoreNode | import("./nodes/VectorNearestNeighborsNode.js").VectorNearestNeighborsNode | import("./nodes/HashNode.js").HashNode | import("./nodes/AbortGraphNode.js").AbortGraphNode | import("./nodes/RaceInputsNode.js").RaceInputsNode | import("./nodes/ToJsonNode.js").ToJsonNode | import("./nodes/JoinNode.js").JoinNode | import("./nodes/FilterNode.js").FilterNode | import("./nodes/ObjectNode.js").ObjectNode | import("./nodes/BooleanNode.js").BooleanNode | import("./nodes/CompareNode.js").CompareNode | import("./nodes/EvaluateNode.js").EvaluateNode | import("./nodes/NumberNode.js").NumberNode | import("./nodes/RandomNumberNode.js").RandomNumberNode | import("./nodes/ShuffleNode.js").ShuffleNode | import("./nodes/CommentNode.js").CommentNode | import("./nodes/ImageToMDNode.js").ImageToMDNode | import("./nodes/ImageNode.js").ImageNode | import("./nodes/AudioNode.js").AudioNode | import("./nodes/HttpCallNode.js").HttpCallNode | import("./nodes/DelayNode.js").DelayNode | import("./nodes/AppendToDatasetNode.js").AppendToDatasetNode | import("./nodes/CreateDatasetNode.js").CreateDatasetNode | import("./nodes/LoadDatasetNode.js").LoadDatasetNode | import("./nodes/GetAllDatasetsNode.js").GetAllDatasetsNode | import("./nodes/SplitNode.js").SplitNode | import("./nodes/DatasetNearestNeigborsNode.js").DatasetNearestNeighborsNode | import("./nodes/GetDatasetRowNode.js").GetDatasetRowNode | import("./nodes/SliceNode.js").SliceNode | import("./nodes/ExtractMarkdownCodeBlocksNode.js").ExtractMarkdownCodeBlocksNode | import("./nodes/AssembleMessageNode.js").AssembleMessageNode | import("./nodes/URLReferenceNode.js").UrlReferenceNode | import("./nodes/DestructureNode.js").DestructureNode | import("./nodes/ReplaceDatasetNode.js").ReplaceDatasetNode | import("./nodes/ListGraphsNode.js").ListGraphsNode | import("./nodes/GraphReferenceNode.js").GraphReferenceNode | import("./nodes/CallGraphNode.js").CallGraphNode | import("./nodes/DelegateFunctionCallNode.js").DelegateFunctionCallNode | import("./nodes/PlayAudioNode.js").PlayAudioNode>;
77
- declare let globalRivetNodeRegistry: NodeRegistration<"number" | "boolean" | "object" | "pop" | "join" | "slice" | "filter" | "match" | "split" | "image" | "audio" | "code" | "array" | "userInput" | "prompt" | "text" | "chat" | "extractRegex" | "if" | "readDirectory" | "readFile" | "ifElse" | "chunk" | "graphInput" | "graphOutput" | "subGraph" | "extractJson" | "assemblePrompt" | "extractYaml" | "loopController" | "trimChatMessages" | "externalCall" | "setGlobal" | "raiseEvent" | "getGlobal" | "abortGraph" | "extractObjectPath" | "context" | "coalesce" | "passthrough" | "waitForEvent" | "gptFunction" | "toYaml" | "getEmbedding" | "vectorStore" | "vectorNearestNeighbors" | "hash" | "raceInputs" | "toJson" | "compare" | "evaluate" | "randomNumber" | "shuffle" | "comment" | "imagetoMD" | "httpCall" | "delay" | "appendToDataset" | "createDataset" | "loadDataset" | "getAllDatasets" | "datasetNearestNeighbors" | "getDatasetRow" | "extractMarkdownCodeBlocks" | "assembleMessage" | "urlReference" | "destructure" | "replaceDataset" | "listGraphs" | "graphReference" | "callGraph" | "delegateFunctionCall" | "playAudio", import("./nodes/UserInputNode.js").UserInputNode | import("./nodes/TextNode.js").TextNode | import("./nodes/ChatNode.js").ChatNode | import("./nodes/PromptNode.js").PromptNode | import("./nodes/ExtractRegexNode.js").ExtractRegexNode | import("./nodes/CodeNode.js").CodeNode | import("./nodes/MatchNode.js").MatchNode | import("./nodes/IfNode.js").IfNode | import("./nodes/ReadDirectoryNode.js").ReadDirectoryNode | import("./nodes/ReadFileNode.js").ReadFileNode | import("./nodes/IfElseNode.js").IfElseNode | import("./nodes/ChunkNode.js").ChunkNode | import("./nodes/GraphInputNode.js").GraphInputNode | import("./nodes/GraphOutputNode.js").GraphOutputNode | import("./nodes/SubGraphNode.js").SubGraphNode | import("./nodes/ArrayNode.js").ArrayNode | import("./nodes/ExtractJsonNode.js").ExtractJsonNode | import("./nodes/AssemblePromptNode.js").AssemblePromptNode | import("./nodes/ExtractYamlNode.js").ExtractYamlNode | import("./nodes/LoopControllerNode.js").LoopControllerNode | import("./nodes/TrimChatMessagesNode.js").TrimChatMessagesNode | import("./nodes/ExternalCallNode.js").ExternalCallNode | import("./nodes/ExtractObjectPathNode.js").ExtractObjectPathNode | import("./nodes/RaiseEventNode.js").RaiseEventNode | import("./nodes/ContextNode.js").ContextNode | import("./nodes/CoalesceNode.js").CoalesceNode | import("./nodes/PassthroughNode.js").PassthroughNode | import("./nodes/PopNode.js").PopNode | import("./nodes/SetGlobalNode.js").SetGlobalNode | import("./nodes/GetGlobalNode.js").GetGlobalNode | import("./nodes/WaitForEventNode.js").WaitForEventNode | import("./nodes/GptFunctionNode.js").GptFunctionNode | import("./nodes/ToYamlNode.js").ToYamlNode | import("./nodes/GetEmbeddingNode.js").GetEmbeddingNode | import("./nodes/VectorStoreNode.js").VectorStoreNode | import("./nodes/VectorNearestNeighborsNode.js").VectorNearestNeighborsNode | import("./nodes/HashNode.js").HashNode | import("./nodes/AbortGraphNode.js").AbortGraphNode | import("./nodes/RaceInputsNode.js").RaceInputsNode | import("./nodes/ToJsonNode.js").ToJsonNode | import("./nodes/JoinNode.js").JoinNode | import("./nodes/FilterNode.js").FilterNode | import("./nodes/ObjectNode.js").ObjectNode | import("./nodes/BooleanNode.js").BooleanNode | import("./nodes/CompareNode.js").CompareNode | import("./nodes/EvaluateNode.js").EvaluateNode | import("./nodes/NumberNode.js").NumberNode | import("./nodes/RandomNumberNode.js").RandomNumberNode | import("./nodes/ShuffleNode.js").ShuffleNode | import("./nodes/CommentNode.js").CommentNode | import("./nodes/ImageToMDNode.js").ImageToMDNode | import("./nodes/ImageNode.js").ImageNode | import("./nodes/AudioNode.js").AudioNode | import("./nodes/HttpCallNode.js").HttpCallNode | import("./nodes/DelayNode.js").DelayNode | import("./nodes/AppendToDatasetNode.js").AppendToDatasetNode | import("./nodes/CreateDatasetNode.js").CreateDatasetNode | import("./nodes/LoadDatasetNode.js").LoadDatasetNode | import("./nodes/GetAllDatasetsNode.js").GetAllDatasetsNode | import("./nodes/SplitNode.js").SplitNode | import("./nodes/DatasetNearestNeigborsNode.js").DatasetNearestNeighborsNode | import("./nodes/GetDatasetRowNode.js").GetDatasetRowNode | import("./nodes/SliceNode.js").SliceNode | import("./nodes/ExtractMarkdownCodeBlocksNode.js").ExtractMarkdownCodeBlocksNode | import("./nodes/AssembleMessageNode.js").AssembleMessageNode | import("./nodes/URLReferenceNode.js").UrlReferenceNode | import("./nodes/DestructureNode.js").DestructureNode | import("./nodes/ReplaceDatasetNode.js").ReplaceDatasetNode | import("./nodes/ListGraphsNode.js").ListGraphsNode | import("./nodes/GraphReferenceNode.js").GraphReferenceNode | import("./nodes/CallGraphNode.js").CallGraphNode | import("./nodes/DelegateFunctionCallNode.js").DelegateFunctionCallNode | import("./nodes/PlayAudioNode.js").PlayAudioNode>;
77
+ export * from './nodes/DocumentNode.js';
78
+ export * from './nodes/ChatLoopNode.js';
79
+ export * from './nodes/ReadAllFilesNode.js';
80
+ export * from './nodes/ToMarkdownTableNode.js';
81
+ export * from './nodes/CronNode.js';
82
+ export * from './nodes/ToTreeNode.js';
83
+ export * from './nodes/LoopUntilNode.js';
84
+ export * from './nodes/ReferencedGraphAliasNode.js';
85
+ export declare const registerBuiltInNodes: (registry: NodeRegistration) => NodeRegistration<"number" | "boolean" | "object" | "pop" | "join" | "slice" | "filter" | "match" | "split" | "image" | "audio" | "document" | "if" | "code" | "context" | "array" | "text" | "userInput" | "prompt" | "chat" | "extractRegex" | "readDirectory" | "readFile" | "writeFile" | "ifElse" | "chunk" | "graphInput" | "graphOutput" | "subGraph" | "extractJson" | "assemblePrompt" | "extractYaml" | "loopController" | "trimChatMessages" | "externalCall" | "setGlobal" | "raiseEvent" | "getGlobal" | "abortGraph" | "extractObjectPath" | "coalesce" | "passthrough" | "waitForEvent" | "gptFunction" | "toYaml" | "getEmbedding" | "vectorStore" | "vectorNearestNeighbors" | "hash" | "raceInputs" | "toJson" | "compare" | "evaluate" | "randomNumber" | "shuffle" | "comment" | "imagetoMD" | "httpCall" | "delay" | "appendToDataset" | "createDataset" | "loadDataset" | "getAllDatasets" | "datasetNearestNeighbors" | "getDatasetRow" | "extractMarkdownCodeBlocks" | "assembleMessage" | "urlReference" | "destructure" | "replaceDataset" | "listGraphs" | "graphReference" | "callGraph" | "delegateFunctionCall" | "playAudio" | "chatLoop" | "readAllFiles" | "toMarkdownTable" | "cron" | "toTree" | "loopUntil" | "referencedGraphAlias", import("./nodes/UserInputNode.js").UserInputNode | import("./nodes/TextNode.js").TextNode | import("./nodes/ChatNode.js").ChatNode | import("./nodes/PromptNode.js").PromptNode | import("./nodes/ExtractRegexNode.js").ExtractRegexNode | import("./nodes/CodeNode.js").CodeNode | import("./nodes/MatchNode.js").MatchNode | import("./nodes/IfNode.js").IfNode | import("./nodes/ReadDirectoryNode.js").ReadDirectoryNode | import("./nodes/ReadFileNode.js").ReadFileNode | import("./nodes/WriteFileNode.js").WriteFileNode | import("./nodes/IfElseNode.js").IfElseNode | import("./nodes/ChunkNode.js").ChunkNode | import("./nodes/GraphInputNode.js").GraphInputNode | import("./nodes/GraphOutputNode.js").GraphOutputNode | import("./nodes/SubGraphNode.js").SubGraphNode | import("./nodes/ArrayNode.js").ArrayNode | import("./nodes/ExtractJsonNode.js").ExtractJsonNode | import("./nodes/AssemblePromptNode.js").AssemblePromptNode | import("./nodes/ExtractYamlNode.js").ExtractYamlNode | import("./nodes/LoopControllerNode.js").LoopControllerNode | import("./nodes/TrimChatMessagesNode.js").TrimChatMessagesNode | import("./nodes/ExternalCallNode.js").ExternalCallNode | import("./nodes/ExtractObjectPathNode.js").ExtractObjectPathNode | import("./nodes/RaiseEventNode.js").RaiseEventNode | import("./nodes/ContextNode.js").ContextNode | import("./nodes/CoalesceNode.js").CoalesceNode | import("./nodes/PassthroughNode.js").PassthroughNode | import("./nodes/PopNode.js").PopNode | import("./nodes/SetGlobalNode.js").SetGlobalNode | import("./nodes/GetGlobalNode.js").GetGlobalNode | import("./nodes/WaitForEventNode.js").WaitForEventNode | import("./nodes/ToolNode.js").GptFunctionNode | import("./nodes/ToYamlNode.js").ToYamlNode | import("./nodes/GetEmbeddingNode.js").GetEmbeddingNode | import("./nodes/VectorStoreNode.js").VectorStoreNode | import("./nodes/VectorNearestNeighborsNode.js").VectorNearestNeighborsNode | import("./nodes/HashNode.js").HashNode | import("./nodes/AbortGraphNode.js").AbortGraphNode | import("./nodes/RaceInputsNode.js").RaceInputsNode | import("./nodes/ToJsonNode.js").ToJsonNode | import("./nodes/JoinNode.js").JoinNode | import("./nodes/FilterNode.js").FilterNode | import("./nodes/ObjectNode.js").ObjectNode | import("./nodes/BooleanNode.js").BooleanNode | import("./nodes/CompareNode.js").CompareNode | import("./nodes/EvaluateNode.js").EvaluateNode | import("./nodes/NumberNode.js").NumberNode | import("./nodes/RandomNumberNode.js").RandomNumberNode | import("./nodes/ShuffleNode.js").ShuffleNode | import("./nodes/CommentNode.js").CommentNode | import("./nodes/ImageToMDNode.js").ImageToMDNode | import("./nodes/ImageNode.js").ImageNode | import("./nodes/AudioNode.js").AudioNode | import("./nodes/HttpCallNode.js").HttpCallNode | import("./nodes/DelayNode.js").DelayNode | import("./nodes/AppendToDatasetNode.js").AppendToDatasetNode | import("./nodes/CreateDatasetNode.js").CreateDatasetNode | import("./nodes/LoadDatasetNode.js").LoadDatasetNode | import("./nodes/GetAllDatasetsNode.js").GetAllDatasetsNode | import("./nodes/SplitNode.js").SplitNode | import("./nodes/DatasetNearestNeigborsNode.js").DatasetNearestNeighborsNode | import("./nodes/GetDatasetRowNode.js").GetDatasetRowNode | import("./nodes/SliceNode.js").SliceNode | import("./nodes/ExtractMarkdownCodeBlocksNode.js").ExtractMarkdownCodeBlocksNode | import("./nodes/AssembleMessageNode.js").AssembleMessageNode | import("./nodes/URLReferenceNode.js").UrlReferenceNode | import("./nodes/DestructureNode.js").DestructureNode | import("./nodes/ReplaceDatasetNode.js").ReplaceDatasetNode | import("./nodes/ListGraphsNode.js").ListGraphsNode | import("./nodes/GraphReferenceNode.js").GraphReferenceNode | import("./nodes/CallGraphNode.js").CallGraphNode | import("./nodes/DelegateFunctionCallNode.js").DelegateFunctionCallNode | import("./nodes/PlayAudioNode.js").PlayAudioNode | import("./nodes/DocumentNode.js").DocumentNode | import("./nodes/ChatLoopNode.js").ChatLoopNode | import("./nodes/ReadAllFilesNode.js").ReadAllFilesNode | import("./nodes/ToMarkdownTableNode.js").ToMarkdownTableNode | import("./nodes/CronNode.js").CronNode | import("./nodes/ToTreeNode.js").ToTreeNode | import("./nodes/LoopUntilNode.js").LoopUntilNode | import("./nodes/ReferencedGraphAliasNode.js").ReferencedGraphAliasNode>;
86
+ declare let globalRivetNodeRegistry: NodeRegistration<"number" | "boolean" | "object" | "pop" | "join" | "slice" | "filter" | "match" | "split" | "image" | "audio" | "document" | "if" | "code" | "context" | "array" | "text" | "userInput" | "prompt" | "chat" | "extractRegex" | "readDirectory" | "readFile" | "writeFile" | "ifElse" | "chunk" | "graphInput" | "graphOutput" | "subGraph" | "extractJson" | "assemblePrompt" | "extractYaml" | "loopController" | "trimChatMessages" | "externalCall" | "setGlobal" | "raiseEvent" | "getGlobal" | "abortGraph" | "extractObjectPath" | "coalesce" | "passthrough" | "waitForEvent" | "gptFunction" | "toYaml" | "getEmbedding" | "vectorStore" | "vectorNearestNeighbors" | "hash" | "raceInputs" | "toJson" | "compare" | "evaluate" | "randomNumber" | "shuffle" | "comment" | "imagetoMD" | "httpCall" | "delay" | "appendToDataset" | "createDataset" | "loadDataset" | "getAllDatasets" | "datasetNearestNeighbors" | "getDatasetRow" | "extractMarkdownCodeBlocks" | "assembleMessage" | "urlReference" | "destructure" | "replaceDataset" | "listGraphs" | "graphReference" | "callGraph" | "delegateFunctionCall" | "playAudio" | "chatLoop" | "readAllFiles" | "toMarkdownTable" | "cron" | "toTree" | "loopUntil" | "referencedGraphAlias", import("./nodes/UserInputNode.js").UserInputNode | import("./nodes/TextNode.js").TextNode | import("./nodes/ChatNode.js").ChatNode | import("./nodes/PromptNode.js").PromptNode | import("./nodes/ExtractRegexNode.js").ExtractRegexNode | import("./nodes/CodeNode.js").CodeNode | import("./nodes/MatchNode.js").MatchNode | import("./nodes/IfNode.js").IfNode | import("./nodes/ReadDirectoryNode.js").ReadDirectoryNode | import("./nodes/ReadFileNode.js").ReadFileNode | import("./nodes/WriteFileNode.js").WriteFileNode | import("./nodes/IfElseNode.js").IfElseNode | import("./nodes/ChunkNode.js").ChunkNode | import("./nodes/GraphInputNode.js").GraphInputNode | import("./nodes/GraphOutputNode.js").GraphOutputNode | import("./nodes/SubGraphNode.js").SubGraphNode | import("./nodes/ArrayNode.js").ArrayNode | import("./nodes/ExtractJsonNode.js").ExtractJsonNode | import("./nodes/AssemblePromptNode.js").AssemblePromptNode | import("./nodes/ExtractYamlNode.js").ExtractYamlNode | import("./nodes/LoopControllerNode.js").LoopControllerNode | import("./nodes/TrimChatMessagesNode.js").TrimChatMessagesNode | import("./nodes/ExternalCallNode.js").ExternalCallNode | import("./nodes/ExtractObjectPathNode.js").ExtractObjectPathNode | import("./nodes/RaiseEventNode.js").RaiseEventNode | import("./nodes/ContextNode.js").ContextNode | import("./nodes/CoalesceNode.js").CoalesceNode | import("./nodes/PassthroughNode.js").PassthroughNode | import("./nodes/PopNode.js").PopNode | import("./nodes/SetGlobalNode.js").SetGlobalNode | import("./nodes/GetGlobalNode.js").GetGlobalNode | import("./nodes/WaitForEventNode.js").WaitForEventNode | import("./nodes/ToolNode.js").GptFunctionNode | import("./nodes/ToYamlNode.js").ToYamlNode | import("./nodes/GetEmbeddingNode.js").GetEmbeddingNode | import("./nodes/VectorStoreNode.js").VectorStoreNode | import("./nodes/VectorNearestNeighborsNode.js").VectorNearestNeighborsNode | import("./nodes/HashNode.js").HashNode | import("./nodes/AbortGraphNode.js").AbortGraphNode | import("./nodes/RaceInputsNode.js").RaceInputsNode | import("./nodes/ToJsonNode.js").ToJsonNode | import("./nodes/JoinNode.js").JoinNode | import("./nodes/FilterNode.js").FilterNode | import("./nodes/ObjectNode.js").ObjectNode | import("./nodes/BooleanNode.js").BooleanNode | import("./nodes/CompareNode.js").CompareNode | import("./nodes/EvaluateNode.js").EvaluateNode | import("./nodes/NumberNode.js").NumberNode | import("./nodes/RandomNumberNode.js").RandomNumberNode | import("./nodes/ShuffleNode.js").ShuffleNode | import("./nodes/CommentNode.js").CommentNode | import("./nodes/ImageToMDNode.js").ImageToMDNode | import("./nodes/ImageNode.js").ImageNode | import("./nodes/AudioNode.js").AudioNode | import("./nodes/HttpCallNode.js").HttpCallNode | import("./nodes/DelayNode.js").DelayNode | import("./nodes/AppendToDatasetNode.js").AppendToDatasetNode | import("./nodes/CreateDatasetNode.js").CreateDatasetNode | import("./nodes/LoadDatasetNode.js").LoadDatasetNode | import("./nodes/GetAllDatasetsNode.js").GetAllDatasetsNode | import("./nodes/SplitNode.js").SplitNode | import("./nodes/DatasetNearestNeigborsNode.js").DatasetNearestNeighborsNode | import("./nodes/GetDatasetRowNode.js").GetDatasetRowNode | import("./nodes/SliceNode.js").SliceNode | import("./nodes/ExtractMarkdownCodeBlocksNode.js").ExtractMarkdownCodeBlocksNode | import("./nodes/AssembleMessageNode.js").AssembleMessageNode | import("./nodes/URLReferenceNode.js").UrlReferenceNode | import("./nodes/DestructureNode.js").DestructureNode | import("./nodes/ReplaceDatasetNode.js").ReplaceDatasetNode | import("./nodes/ListGraphsNode.js").ListGraphsNode | import("./nodes/GraphReferenceNode.js").GraphReferenceNode | import("./nodes/CallGraphNode.js").CallGraphNode | import("./nodes/DelegateFunctionCallNode.js").DelegateFunctionCallNode | import("./nodes/PlayAudioNode.js").PlayAudioNode | import("./nodes/DocumentNode.js").DocumentNode | import("./nodes/ChatLoopNode.js").ChatLoopNode | import("./nodes/ReadAllFilesNode.js").ReadAllFilesNode | import("./nodes/ToMarkdownTableNode.js").ToMarkdownTableNode | import("./nodes/CronNode.js").CronNode | import("./nodes/ToTreeNode.js").ToTreeNode | import("./nodes/LoopUntilNode.js").LoopUntilNode | import("./nodes/ReferencedGraphAliasNode.js").ReferencedGraphAliasNode>;
78
87
  export { globalRivetNodeRegistry };
79
88
  export type BuiltInNodes = typeof globalRivetNodeRegistry.NodesType;
80
89
  export type BuiltInNodeType = typeof globalRivetNodeRegistry.NodeTypesType;
@@ -1,6 +1,8 @@
1
1
  import type { Opaque } from 'type-fest';
2
- import { type Settings, type NativeApi, type Project, type DataValue, type ExternalFunction, type Outputs, type GraphId, type GraphProcessor, type ScalarOrArrayDataValue, type DatasetProvider, type ChartNode, type AttachedNodeData, type AudioProvider } from '../index.js';
2
+ import { type Settings, type NativeApi, type Project, type DataValue, type ExternalFunction, type Outputs, type GraphId, type GraphProcessor, type ScalarOrArrayDataValue, type DatasetProvider, type ChartNode, type AttachedNodeData, type AudioProvider, type StringArrayDataValue, type ProjectId } from '../index.js';
3
3
  import type { Tokenizer } from '../integrations/Tokenizer.js';
4
+ import type { CodeRunner } from '../integrations/CodeRunner.js';
5
+ import type { ProjectReferenceLoader } from './ProjectReferenceLoader.js';
4
6
  export type ProcessContext = {
5
7
  settings: Settings;
6
8
  nativeApi?: NativeApi;
@@ -10,6 +12,12 @@ export type ProcessContext = {
10
12
  audioProvider?: AudioProvider;
11
13
  /** Sets the tokenizer that will be used for all nodes. If unset, the default GptTokenizerTokenizer will be used. */
12
14
  tokenizer?: Tokenizer;
15
+ /** The provider for running arbitrary code in the Code Node. */
16
+ codeRunner?: CodeRunner;
17
+ /** The loader for loading project references. */
18
+ projectReferenceLoader?: ProjectReferenceLoader;
19
+ /** The path to the current project. Required if project references are being used. */
20
+ projectPath?: string;
13
21
  /**
14
22
  * If implemented, chat nodes will first call this to resolve their configured endpoint to a final endpoint.
15
23
  * You can use this for adding auth headers, or to load balance between multiple endpoints.
@@ -26,6 +34,8 @@ export type InternalProcessContext<T extends ChartNode = ChartNode> = ProcessCon
26
34
  executor: 'nodejs' | 'browser';
27
35
  /** The project being executed. */
28
36
  project: Project;
37
+ /** All referenced (and deep referenced) projects from the current project. */
38
+ referencedProjects: Record<ProjectId, Project>;
29
39
  /** A signal that can be used when abort() is called on the GraphProcessor to abort the node's execution. */
30
40
  signal: AbortSignal;
31
41
  /** A unique ID for this specific execution of the node. */
@@ -54,6 +64,7 @@ export type InternalProcessContext<T extends ChartNode = ChartNode> = ProcessCon
54
64
  /** Creates a subprocessor, for executing subgraphs. */
55
65
  createSubProcessor: (subGraphId: GraphId | undefined, options?: {
56
66
  signal?: AbortSignal;
67
+ project?: Project;
57
68
  }) => GraphProcessor;
58
69
  /** Like context, but variables that are set during the run of the graph and can be read during the graph. Shared among all graphs and subgraphs. */
59
70
  getGlobal: (id: string) => ScalarOrArrayDataValue | undefined;
@@ -66,4 +77,8 @@ export type InternalProcessContext<T extends ChartNode = ChartNode> = ProcessCon
66
77
  abortGraph: (error?: Error | string) => void;
67
78
  /** Gets a string plugin config value from the settings, falling back to a specified environment variable if set. */
68
79
  getPluginConfig(name: string): string | undefined;
80
+ /** Requests that the user input some text in response to the specified prompt. */
81
+ requestUserInput(inputs: string[], renderingType: 'text' | 'markdown'): Promise<StringArrayDataValue>;
82
+ /** The object used for running arbitrary code with the Code Node. */
83
+ codeRunner: CodeRunner;
69
84
  };
@@ -4,14 +4,26 @@ import { type PluginLoadSpec } from './PluginLoadSpec.js';
4
4
  export type ProjectId = Opaque<string, 'ProjectId'>;
5
5
  export type DataId = Opaque<string, 'DataId'>;
6
6
  export type Project = {
7
- metadata: {
8
- id: ProjectId;
9
- title: string;
10
- description: string;
11
- mainGraphId?: GraphId;
12
- path?: string;
13
- };
7
+ metadata: ProjectMetadata;
14
8
  plugins?: PluginLoadSpec[];
15
9
  graphs: Record<GraphId, NodeGraph>;
16
10
  data?: Record<DataId, string>;
11
+ /** References to other projects. */
12
+ references?: ProjectReference[];
13
+ };
14
+ export type ProjectMetadata = {
15
+ id: ProjectId;
16
+ title: string;
17
+ description: string;
18
+ mainGraphId?: GraphId;
19
+ path?: string;
20
+ };
21
+ /** A reference to another project file. Project references cannot be cyclic. */
22
+ export type ProjectReference = {
23
+ /** The ID of the project being referenced. */
24
+ id: ProjectId;
25
+ /** Paths to use to attempt to resolve the reference. */
26
+ hintPaths?: string[];
27
+ /** A human-readable title for the project. */
28
+ title?: string;
17
29
  };
@@ -0,0 +1,5 @@
1
+ import type { Project, ProjectReference } from './Project.js';
2
+ export type ProjectReferenceLoader = {
3
+ /** Loads a project based on the given reference. */
4
+ loadProject: (currentProjectPath: string | undefined, reference: ProjectReference) => Promise<Project>;
5
+ };
@@ -9,6 +9,7 @@ export type RivetPlugin = {
9
9
  register?: (register: <T extends ChartNode>(definition: PluginNodeDefinition<T>) => void) => void;
10
10
  /** The available configuration items and their specification, for configuring a plugin in the UI. */
11
11
  configSpec?: RivetPluginConfigSpecs;
12
+ configPage?: RivetPluginConfigPage;
12
13
  /** Defines additional context menu groups that the plugin adds. */
13
14
  contextMenuGroups?: Array<{
14
15
  id: string;
@@ -16,6 +17,11 @@ export type RivetPlugin = {
16
17
  }>;
17
18
  };
18
19
  export type RivetPluginConfigSpecs = Record<string, PluginConfigurationSpec>;
20
+ export type RivetPluginConfigPage = {
21
+ id: string;
22
+ label: string;
23
+ description?: string;
24
+ };
19
25
  export type PluginConfigurationSpecBase<T> = {
20
26
  /** The type of the config value, how it should show as an editor in the UI. */
21
27
  type: string;
@@ -1,4 +1,4 @@
1
- import { type ChartNode, type DatasetProvider, type NodeGraph, type Project, type Settings } from '../index.js';
1
+ import { type ChartNode, type DatasetProvider, type NativeApi, type NodeGraph, type Project, type ProjectId, type Settings } from '../index.js';
2
2
  /** Context accessible to UI functions such as getEditors() and getBody(). */
3
3
  export type RivetUIContext = {
4
4
  /** The settings configured in the UI. */
@@ -9,10 +9,14 @@ export type RivetUIContext = {
9
9
  datasetProvider: DatasetProvider;
10
10
  /** The current project loaded in the UI. */
11
11
  project: Project;
12
+ /** Other projects referenced by the current project. */
13
+ referencedProjects: Record<ProjectId, Project>;
12
14
  /** The current graph selected in the UI. */
13
15
  graph?: NodeGraph;
14
16
  /** The current node selected in the UI. */
15
17
  node?: ChartNode;
18
+ /** The configured native API. */
19
+ nativeApi: NativeApi;
16
20
  /** Gets a string plugin config value from the settings, falling back to a specified environment variable if set. */
17
21
  getPluginConfig(name: string): string | undefined;
18
22
  };
@@ -12,4 +12,5 @@ export interface Settings<PluginSettings = Record<string, Record<string, unknown
12
12
  /** Timeout in milliseconds before retrying a chat node call. */
13
13
  chatNodeTimeout?: number;
14
14
  chatNodeHeaders?: Record<string, string>;
15
+ throttleChatNode?: number;
15
16
  }
@@ -1,5 +1,5 @@
1
1
  import { type ChartNode, type NodeConnection, type NodeInputDefinition, type NodeOutputDefinition } from '../NodeBase.js';
2
- import { NodeImpl, type NodeUIData } from '../NodeImpl.js';
2
+ import { NodeImpl, type NodeBody, type NodeUIData } from '../NodeImpl.js';
3
3
  import { type Inputs, type Outputs } from '../GraphProcessor.js';
4
4
  import type { EditorDefinition } from '../EditorDefinition.js';
5
5
  import type { RivetUIContext } from '../RivetUIContext.js';
@@ -7,6 +7,8 @@ import type { InternalProcessContext } from '../ProcessContext.js';
7
7
  export type AssemblePromptNode = ChartNode<'assemblePrompt', AssemblePromptNodeData>;
8
8
  export type AssemblePromptNodeData = {
9
9
  computeTokenCount?: boolean;
10
+ isLastMessageCacheBreakpoint?: boolean;
11
+ useIsLastMessageCacheBreakpointInput?: boolean;
10
12
  };
11
13
  export declare class AssemblePromptNodeImpl extends NodeImpl<AssemblePromptNode> {
12
14
  #private;
@@ -15,6 +17,7 @@ export declare class AssemblePromptNodeImpl extends NodeImpl<AssemblePromptNode>
15
17
  getOutputDefinitions(): NodeOutputDefinition[];
16
18
  static getUIData(): NodeUIData;
17
19
  getEditors(_context: RivetUIContext): EditorDefinition<AssemblePromptNode>[];
20
+ getBody(_context: RivetUIContext): NodeBody | Promise<NodeBody>;
18
21
  process(inputs: Inputs, context: InternalProcessContext): Promise<Outputs>;
19
22
  }
20
23
  export declare const assemblePromptNode: import("../NodeDefinition.js").NodeDefinition<AssemblePromptNode>;
@@ -0,0 +1,21 @@
1
+ import { type ChartNode, type NodeInputDefinition, type NodeOutputDefinition } from '../NodeBase.js';
2
+ import { NodeImpl, type NodeUIData } from '../NodeImpl.js';
3
+ import type { Inputs, Outputs } from '../GraphProcessor.js';
4
+ import { type InternalProcessContext } from '../ProcessContext.js';
5
+ import { type EditorDefinition } from '../../index.js';
6
+ import { type ChatNodeData } from './ChatNodeBase.js';
7
+ export type ChatLoopNode = ChartNode<'chatLoop', ChatLoopNodeData>;
8
+ export type ChatLoopNodeData = ChatNodeData & {
9
+ userPrompt: string;
10
+ renderingFormat?: 'text' | 'markdown';
11
+ };
12
+ export declare class ChatLoopNodeImpl extends NodeImpl<ChatLoopNode> {
13
+ static create(): ChatLoopNode;
14
+ getInputDefinitions(): NodeInputDefinition[];
15
+ getOutputDefinitions(): NodeOutputDefinition[];
16
+ static getUIData(): NodeUIData;
17
+ getEditors(): EditorDefinition<ChatLoopNode>[];
18
+ getBody(): string | undefined;
19
+ process(inputs: Inputs, context: InternalProcessContext): Promise<Outputs>;
20
+ }
21
+ export declare const chatLoopNode: import("../NodeDefinition.js").NodeDefinition<ChatLoopNode>;
@@ -1,77 +1,17 @@
1
1
  import { type ChartNode, type NodeInputDefinition, type NodeOutputDefinition } from '../NodeBase.js';
2
2
  import { NodeImpl, type NodeUIData } from '../NodeImpl.js';
3
- import { type ChatMessage } from '../DataValue.js';
4
3
  import type { Inputs, Outputs } from '../GraphProcessor.js';
5
4
  import { type InternalProcessContext } from '../ProcessContext.js';
6
5
  import { type EditorDefinition } from '../../index.js';
6
+ import { type ChatNodeData } from './ChatNodeBase.js';
7
7
  export type ChatNode = ChartNode<'chat', ChatNodeData>;
8
- export type ChatNodeConfigData = {
9
- model: string;
10
- temperature: number;
11
- useTopP: boolean;
12
- top_p?: number;
13
- maxTokens: number;
14
- stop?: string;
15
- presencePenalty?: number;
16
- frequencyPenalty?: number;
17
- enableFunctionUse?: boolean;
18
- user?: string;
19
- numberOfChoices?: number;
20
- endpoint?: string;
21
- overrideModel?: string;
22
- overrideMaxTokens?: number;
23
- headers?: {
24
- key: string;
25
- value: string;
26
- }[];
27
- seed?: number;
28
- toolChoice?: 'none' | 'auto' | 'function';
29
- toolChoiceFunction?: string;
30
- responseFormat?: '' | 'text' | 'json' | 'json_schema';
31
- parallelFunctionCalling?: boolean;
32
- additionalParameters?: {
33
- key: string;
34
- value: string;
35
- }[];
36
- responseSchemaName?: string;
37
- };
38
- export type ChatNodeData = ChatNodeConfigData & {
39
- useModelInput: boolean;
40
- useTemperatureInput: boolean;
41
- useTopPInput: boolean;
42
- useTopP: boolean;
43
- useUseTopPInput: boolean;
44
- useMaxTokensInput: boolean;
45
- useStop: boolean;
46
- useStopInput: boolean;
47
- usePresencePenaltyInput: boolean;
48
- useFrequencyPenaltyInput: boolean;
49
- useUserInput?: boolean;
50
- useNumberOfChoicesInput?: boolean;
51
- useEndpointInput?: boolean;
52
- useHeadersInput?: boolean;
53
- useSeedInput?: boolean;
54
- useToolChoiceInput?: boolean;
55
- useToolChoiceFunctionInput?: boolean;
56
- useResponseFormatInput?: boolean;
57
- useAdditionalParametersInput?: boolean;
58
- useResponseSchemaNameInput?: boolean;
59
- /** Given the same set of inputs, return the same output without hitting GPT */
60
- cache: boolean;
61
- useAsGraphPartialOutput?: boolean;
62
- };
63
8
  export declare class ChatNodeImpl extends NodeImpl<ChatNode> {
64
9
  static create(): ChatNode;
65
10
  getInputDefinitions(): NodeInputDefinition[];
66
11
  getOutputDefinitions(): NodeOutputDefinition[];
67
12
  static getUIData(): NodeUIData;
68
13
  getEditors(): EditorDefinition<ChatNode>[];
69
- getBody(): string;
14
+ getBody(): string | undefined;
70
15
  process(inputs: Inputs, context: InternalProcessContext): Promise<Outputs>;
71
16
  }
72
17
  export declare const chatNode: import("../NodeDefinition.js").NodeDefinition<ChatNode>;
73
- export declare function getChatNodeMessages(inputs: Inputs): {
74
- messages: ChatMessage[];
75
- systemPrompt: import("../DataValue.js").DataValue | undefined;
76
- };
77
- export declare function getCostForTokens(tokenCount: number, type: 'prompt' | 'completion', costPerThousand: number): number;