@alpic80/rivet-core 1.19.1-aidon.1 → 1.19.1-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.
- package/dist/cjs/bundle.cjs +284 -107
- package/dist/cjs/bundle.cjs.map +4 -4
- package/dist/esm/model/GraphProcessor.js +34 -0
- package/dist/esm/model/Nodes.js +3 -0
- package/dist/esm/model/nodes/ChatNode.js +19 -2
- package/dist/esm/model/nodes/ImageToMDNode.js +116 -0
- package/dist/esm/plugins/aidon/nodes/ChatAidonNode.js +1 -1
- package/dist/esm/utils/openai.js +4 -0
- package/dist/types/model/Nodes.d.ts +3 -2
- package/dist/types/model/nodes/ImageToMDNode.d.ts +20 -0
- package/dist/types/utils/openai.d.ts +6 -0
- package/package.json +1 -1
|
@@ -64,6 +64,8 @@ export class GraphProcessor {
|
|
|
64
64
|
#aborted = false;
|
|
65
65
|
#abortSuccessfully = false;
|
|
66
66
|
#abortError = undefined;
|
|
67
|
+
#totalRequestTokens = 0;
|
|
68
|
+
#totalResponseTokens = 0;
|
|
67
69
|
#totalCost = 0;
|
|
68
70
|
#ignoreNodes = undefined;
|
|
69
71
|
#nodeAbortControllers = new Map();
|
|
@@ -480,6 +482,18 @@ export class GraphProcessor {
|
|
|
480
482
|
}
|
|
481
483
|
throw error;
|
|
482
484
|
}
|
|
485
|
+
if (this.#graphOutputs['requestTokens'] == null) {
|
|
486
|
+
this.#graphOutputs['requestTokens'] = {
|
|
487
|
+
type: 'number',
|
|
488
|
+
value: this.#totalRequestTokens,
|
|
489
|
+
};
|
|
490
|
+
}
|
|
491
|
+
if (this.#graphOutputs['responseTokens'] == null) {
|
|
492
|
+
this.#graphOutputs['responseTokens'] = {
|
|
493
|
+
type: 'number',
|
|
494
|
+
value: this.#totalResponseTokens,
|
|
495
|
+
};
|
|
496
|
+
}
|
|
483
497
|
if (this.#graphOutputs['cost'] == null) {
|
|
484
498
|
this.#graphOutputs['cost'] = {
|
|
485
499
|
type: 'number',
|
|
@@ -811,6 +825,12 @@ export class GraphProcessor {
|
|
|
811
825
|
]));
|
|
812
826
|
try {
|
|
813
827
|
const output = await this.#processNodeWithInputData(node, inputs, i, processId, (node, partialOutputs, index) => this.#emitter.emit('partialOutput', { node, outputs: partialOutputs, index, processId }));
|
|
828
|
+
if (output['requestTokens']?.type === 'number') {
|
|
829
|
+
this.#totalRequestTokens += coerceTypeOptional(output['requestTokens'], 'number') ?? 0;
|
|
830
|
+
}
|
|
831
|
+
if (output['responseTokens']?.type === 'number') {
|
|
832
|
+
this.#totalResponseTokens += coerceTypeOptional(output['responseTokens'], 'number') ?? 0;
|
|
833
|
+
}
|
|
814
834
|
if (output['cost']?.type === 'number') {
|
|
815
835
|
this.#totalCost += coerceTypeOptional(output['cost'], 'number') ?? 0;
|
|
816
836
|
}
|
|
@@ -829,6 +849,12 @@ export class GraphProcessor {
|
|
|
829
849
|
]));
|
|
830
850
|
try {
|
|
831
851
|
const output = await this.#processNodeWithInputData(node, inputs, i, processId, (node, partialOutputs, index) => this.#emitter.emit('partialOutput', { node, outputs: partialOutputs, index, processId }));
|
|
852
|
+
if (output['requestTokens']?.type === 'number') {
|
|
853
|
+
this.#totalRequestTokens += coerceTypeOptional(output['requestTokens'], 'number') ?? 0;
|
|
854
|
+
}
|
|
855
|
+
if (output['responseTokens']?.type === 'number') {
|
|
856
|
+
this.#totalResponseTokens += coerceTypeOptional(output['responseTokens'], 'number') ?? 0;
|
|
857
|
+
}
|
|
832
858
|
if (output['cost']?.type === 'number') {
|
|
833
859
|
this.#totalCost += coerceTypeOptional(output['cost'], 'number') ?? 0;
|
|
834
860
|
}
|
|
@@ -858,6 +884,8 @@ export class GraphProcessor {
|
|
|
858
884
|
}, {});
|
|
859
885
|
this.#nodeResults.set(node.id, aggregateResults);
|
|
860
886
|
this.#visitedNodes.add(node.id);
|
|
887
|
+
this.#totalRequestTokens += sum(results.map((r) => coerceTypeOptional(r.output?.['requestTokens'], 'number') ?? 0));
|
|
888
|
+
this.#totalResponseTokens += sum(results.map((r) => coerceTypeOptional(r.output?.['responseTokens'], 'number') ?? 0));
|
|
861
889
|
this.#totalCost += sum(results.map((r) => coerceTypeOptional(r.output?.['cost'], 'number') ?? 0));
|
|
862
890
|
this.#emitter.emit('nodeFinish', { node, outputs: aggregateResults, processId });
|
|
863
891
|
}
|
|
@@ -875,6 +903,12 @@ export class GraphProcessor {
|
|
|
875
903
|
const outputValues = await this.#processNodeWithInputData(node, inputValues, 0, processId, (node, partialOutputs, index) => this.#emitter.emit('partialOutput', { node, outputs: partialOutputs, index, processId }));
|
|
876
904
|
this.#nodeResults.set(node.id, outputValues);
|
|
877
905
|
this.#visitedNodes.add(node.id);
|
|
906
|
+
if (outputValues['requestTokens']?.type === 'number') {
|
|
907
|
+
this.#totalRequestTokens += coerceTypeOptional(outputValues['requestTokens'], 'number') ?? 0;
|
|
908
|
+
}
|
|
909
|
+
if (outputValues['responseTokens']?.type === 'number') {
|
|
910
|
+
this.#totalResponseTokens += coerceTypeOptional(outputValues['responseTokens'], 'number') ?? 0;
|
|
911
|
+
}
|
|
878
912
|
if (outputValues['cost']?.type === 'number') {
|
|
879
913
|
this.#totalCost += coerceTypeOptional(outputValues['cost'], 'number') ?? 0;
|
|
880
914
|
}
|
package/dist/esm/model/Nodes.js
CHANGED
|
@@ -99,6 +99,8 @@ import { shuffleNode } from './nodes/ShuffleNode.js';
|
|
|
99
99
|
export * from './nodes/ShuffleNode.js';
|
|
100
100
|
import { commentNode } from './nodes/CommentNode.js';
|
|
101
101
|
export * from './nodes/CommentNode.js';
|
|
102
|
+
import { imageToMDNode } from './nodes/ImageToMDNode.js';
|
|
103
|
+
export * from './nodes/ImageToMDNode.js';
|
|
102
104
|
import { imageNode } from './nodes/ImageNode.js';
|
|
103
105
|
export * from './nodes/ImageNode.js';
|
|
104
106
|
import { audioNode } from './nodes/AudioNode.js';
|
|
@@ -196,6 +198,7 @@ export const registerBuiltInNodes = (registry) => {
|
|
|
196
198
|
.register(randomNumberNode)
|
|
197
199
|
.register(shuffleNode)
|
|
198
200
|
.register(commentNode)
|
|
201
|
+
.register(imageToMDNode)
|
|
199
202
|
.register(imageNode)
|
|
200
203
|
.register(audioNode)
|
|
201
204
|
.register(httpCallNode)
|
|
@@ -728,6 +728,8 @@ export class ChatNodeImpl extends NodeImpl {
|
|
|
728
728
|
}
|
|
729
729
|
}
|
|
730
730
|
const startTime = Date.now();
|
|
731
|
+
let usagePromptTokens = -1;
|
|
732
|
+
let usageCompletionTokens = -1;
|
|
731
733
|
const chunks = streamChatCompletions({
|
|
732
734
|
auth: {
|
|
733
735
|
apiKey: context.settings.openAiKey ?? '',
|
|
@@ -746,6 +748,10 @@ export class ChatNodeImpl extends NodeImpl {
|
|
|
746
748
|
// Could be error for some reason 🤷♂️ but ignoring has worked for me so far.
|
|
747
749
|
continue;
|
|
748
750
|
}
|
|
751
|
+
if (chunk.choices.length == 0 && chunk.usage) { //capture the usage info
|
|
752
|
+
usagePromptTokens = chunk.usage.prompt_tokens;
|
|
753
|
+
usageCompletionTokens = chunk.usage.completion_tokens;
|
|
754
|
+
}
|
|
749
755
|
for (const { delta, index } of chunk.choices) {
|
|
750
756
|
if (delta.content != null) {
|
|
751
757
|
responseChoicesParts[index] ??= [];
|
|
@@ -847,11 +853,22 @@ export class ChatNodeImpl extends NodeImpl {
|
|
|
847
853
|
throw new Error('No response from OpenAI');
|
|
848
854
|
}
|
|
849
855
|
output['in-messages'] = { type: 'chat-message[]', value: messages };
|
|
850
|
-
|
|
856
|
+
let finalTokenCount = tokenCount * (numberOfChoices ?? 1);
|
|
851
857
|
let responseTokenCount = 0;
|
|
852
858
|
for (const choiceParts of responseChoicesParts) {
|
|
853
|
-
responseTokenCount += await context.tokenizer.getTokenCountForString(choiceParts.join(), tokenizerInfo);
|
|
859
|
+
responseTokenCount += await context.tokenizer.getTokenCountForString(choiceParts.join(''), tokenizerInfo);
|
|
860
|
+
}
|
|
861
|
+
if (usagePromptTokens != -1 && usageCompletionTokens != -1) {
|
|
862
|
+
if (finalTokenCount != usagePromptTokens) {
|
|
863
|
+
console.log(`calculated token count:${finalTokenCount}, usage:${usagePromptTokens}`);
|
|
864
|
+
finalTokenCount = usagePromptTokens;
|
|
865
|
+
}
|
|
866
|
+
if (responseTokenCount != usageCompletionTokens) {
|
|
867
|
+
console.log(`calculated response token count:${responseTokenCount}, usage:${usageCompletionTokens}`);
|
|
868
|
+
responseTokenCount = usageCompletionTokens;
|
|
869
|
+
}
|
|
854
870
|
}
|
|
871
|
+
output['requestTokens'] = { type: 'number', value: finalTokenCount };
|
|
855
872
|
output['responseTokens'] = { type: 'number', value: responseTokenCount };
|
|
856
873
|
const promptCostPerThousand = model in openaiModels ? openaiModels[model].cost.prompt : 0;
|
|
857
874
|
const completionCostPerThousand = model in openaiModels ? openaiModels[model].cost.completion : 0;
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
import { uint8ArrayToBase64 } from '../../index.js';
|
|
2
|
+
import { nanoid } from 'nanoid/non-secure';
|
|
3
|
+
import { NodeImpl } from '../NodeImpl.js';
|
|
4
|
+
import { nodeDefinition } from '../NodeDefinition.js';
|
|
5
|
+
import {} from '../GraphProcessor.js';
|
|
6
|
+
import { dedent } from 'ts-dedent';
|
|
7
|
+
import { expectType } from '../../utils/expectType.js';
|
|
8
|
+
export class ImageToMDNodeImpl extends NodeImpl {
|
|
9
|
+
static create() {
|
|
10
|
+
const chartNode = {
|
|
11
|
+
type: 'imagetoMD',
|
|
12
|
+
title: 'Image To Markdown',
|
|
13
|
+
id: nanoid(),
|
|
14
|
+
visualData: {
|
|
15
|
+
x: 0,
|
|
16
|
+
y: 0,
|
|
17
|
+
width: 175,
|
|
18
|
+
},
|
|
19
|
+
data: {
|
|
20
|
+
useDataInput: false,
|
|
21
|
+
mediaType: 'image/png',
|
|
22
|
+
useMediaTypeInput: false,
|
|
23
|
+
},
|
|
24
|
+
};
|
|
25
|
+
return chartNode;
|
|
26
|
+
}
|
|
27
|
+
getInputDefinitions() {
|
|
28
|
+
const inputDefinitions = [];
|
|
29
|
+
if (this.chartNode.data.useDataInput) {
|
|
30
|
+
inputDefinitions.push({
|
|
31
|
+
id: 'data',
|
|
32
|
+
title: 'Data',
|
|
33
|
+
dataType: 'image',
|
|
34
|
+
coerced: false,
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
if (this.chartNode.data.useMediaTypeInput) {
|
|
38
|
+
inputDefinitions.push({
|
|
39
|
+
id: 'mediaType',
|
|
40
|
+
title: 'Media Type',
|
|
41
|
+
dataType: 'string',
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
return inputDefinitions;
|
|
45
|
+
}
|
|
46
|
+
getOutputDefinitions() {
|
|
47
|
+
return [
|
|
48
|
+
{
|
|
49
|
+
id: 'imageMarkdown',
|
|
50
|
+
title: 'Image',
|
|
51
|
+
dataType: 'string',
|
|
52
|
+
},
|
|
53
|
+
];
|
|
54
|
+
}
|
|
55
|
+
getEditors() {
|
|
56
|
+
return [
|
|
57
|
+
{
|
|
58
|
+
type: 'dropdown',
|
|
59
|
+
label: 'Media Type',
|
|
60
|
+
dataKey: 'mediaType',
|
|
61
|
+
options: [
|
|
62
|
+
{ value: 'image/png', label: 'PNG' },
|
|
63
|
+
{ value: 'image/jpeg', label: 'JPEG' },
|
|
64
|
+
{ value: 'image/gif', label: 'GIF' },
|
|
65
|
+
],
|
|
66
|
+
useInputToggleDataKey: 'useMediaTypeInput',
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
type: 'imageBrowser',
|
|
70
|
+
label: 'Image',
|
|
71
|
+
dataKey: 'data',
|
|
72
|
+
useInputToggleDataKey: 'useDataInput',
|
|
73
|
+
mediaTypeDataKey: 'mediaType',
|
|
74
|
+
},
|
|
75
|
+
];
|
|
76
|
+
}
|
|
77
|
+
getBody() {
|
|
78
|
+
return this.data.mediaType;
|
|
79
|
+
}
|
|
80
|
+
static getUIData() {
|
|
81
|
+
return {
|
|
82
|
+
infoBoxBody: dedent `
|
|
83
|
+
Turns the input value (image byte array) into its Markdown equivalent.
|
|
84
|
+
`,
|
|
85
|
+
infoBoxTitle: 'Image to Markdown Node',
|
|
86
|
+
contextMenuTitle: 'Image to Markdown',
|
|
87
|
+
group: ['Data'],
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
async process(inputData, context) {
|
|
91
|
+
let data;
|
|
92
|
+
if (this.chartNode.data.useDataInput) {
|
|
93
|
+
const imageData = expectType(inputData['data'], 'image');
|
|
94
|
+
data = (await uint8ArrayToBase64(imageData.data));
|
|
95
|
+
}
|
|
96
|
+
else {
|
|
97
|
+
const dataRef = this.data.data?.refId;
|
|
98
|
+
if (!dataRef) {
|
|
99
|
+
throw new Error('No data ref');
|
|
100
|
+
}
|
|
101
|
+
const encodedData = context.project.data?.[dataRef];
|
|
102
|
+
if (!encodedData) {
|
|
103
|
+
throw new Error(`No data at ref ${dataRef}`);
|
|
104
|
+
}
|
|
105
|
+
data = encodedData;
|
|
106
|
+
}
|
|
107
|
+
data = ``;
|
|
108
|
+
return {
|
|
109
|
+
['imageMarkdown']: {
|
|
110
|
+
type: 'string',
|
|
111
|
+
value: data,
|
|
112
|
+
},
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
export const imageToMDNode = nodeDefinition(ImageToMDNodeImpl, 'Image To Markdown');
|
|
@@ -181,7 +181,7 @@ const createPluginNodeImpl = (chatNode) => {
|
|
|
181
181
|
impl.chartNode.data = data; // Ensure data is set correctly in the base class
|
|
182
182
|
const outputs = impl.getOutputDefinitions();
|
|
183
183
|
return outputs.filter(output => {
|
|
184
|
-
return
|
|
184
|
+
return output.id !== 'function-calls';
|
|
185
185
|
});
|
|
186
186
|
},
|
|
187
187
|
getEditors(data) {
|
package/dist/esm/utils/openai.js
CHANGED
|
@@ -169,6 +169,7 @@ export class OpenAIError extends Error {
|
|
|
169
169
|
this.name = 'OpenAIError';
|
|
170
170
|
}
|
|
171
171
|
}
|
|
172
|
+
;
|
|
172
173
|
export async function* streamChatCompletions({ endpoint, auth, signal, headers, timeout, ...rest }) {
|
|
173
174
|
const abortSignal = signal ?? new AbortController().signal;
|
|
174
175
|
const response = await fetchEventSource(endpoint, {
|
|
@@ -182,6 +183,9 @@ export async function* streamChatCompletions({ endpoint, auth, signal, headers,
|
|
|
182
183
|
body: JSON.stringify({
|
|
183
184
|
...rest,
|
|
184
185
|
stream: true,
|
|
186
|
+
stream_options: {
|
|
187
|
+
"include_usage": true
|
|
188
|
+
},
|
|
185
189
|
}),
|
|
186
190
|
signal: abortSignal,
|
|
187
191
|
}, timeout ?? DEFAULT_CHAT_NODE_TIMEOUT);
|
|
@@ -49,6 +49,7 @@ export * from './nodes/NumberNode.js';
|
|
|
49
49
|
export * from './nodes/RandomNumberNode.js';
|
|
50
50
|
export * from './nodes/ShuffleNode.js';
|
|
51
51
|
export * from './nodes/CommentNode.js';
|
|
52
|
+
export * from './nodes/ImageToMDNode.js';
|
|
52
53
|
export * from './nodes/ImageNode.js';
|
|
53
54
|
export * from './nodes/AudioNode.js';
|
|
54
55
|
export * from './nodes/HttpCallNode.js';
|
|
@@ -72,8 +73,8 @@ export * from './nodes/CallGraphNode.js';
|
|
|
72
73
|
export * from './nodes/DelegateFunctionCallNode.js';
|
|
73
74
|
export * from './nodes/PlayAudioNode.js';
|
|
74
75
|
export * from './nodes/CallGraphNode.js';
|
|
75
|
-
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" | "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/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>;
|
|
76
|
-
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" | "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/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>;
|
|
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
78
|
export { globalRivetNodeRegistry };
|
|
78
79
|
export type BuiltInNodes = typeof globalRivetNodeRegistry.NodesType;
|
|
79
80
|
export type BuiltInNodeType = typeof globalRivetNodeRegistry.NodeTypesType;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { type ChartNode, type NodeInputDefinition, type NodeOutputDefinition, type EditorDefinition, type DataRef, type InternalProcessContext } from '../../index.js';
|
|
2
|
+
import { NodeImpl, type NodeUIData } from '../NodeImpl.js';
|
|
3
|
+
import { type Inputs, type Outputs } from '../GraphProcessor.js';
|
|
4
|
+
export type ImageToMDNode = ChartNode<'imagetoMD', ImageToMDNodeData>;
|
|
5
|
+
export type ImageToMDNodeData = {
|
|
6
|
+
data?: DataRef;
|
|
7
|
+
useDataInput: boolean;
|
|
8
|
+
mediaType: 'image/png' | 'image/jpeg' | 'image/gif';
|
|
9
|
+
useMediaTypeInput: boolean;
|
|
10
|
+
};
|
|
11
|
+
export declare class ImageToMDNodeImpl extends NodeImpl<ImageToMDNode> {
|
|
12
|
+
static create(): ImageToMDNode;
|
|
13
|
+
getInputDefinitions(): NodeInputDefinition[];
|
|
14
|
+
getOutputDefinitions(): NodeOutputDefinition[];
|
|
15
|
+
getEditors(): EditorDefinition<ImageToMDNode>[];
|
|
16
|
+
getBody(): string | undefined;
|
|
17
|
+
static getUIData(): NodeUIData;
|
|
18
|
+
process(inputData: Inputs, context: InternalProcessContext): Promise<Outputs>;
|
|
19
|
+
}
|
|
20
|
+
export declare const imageToMDNode: import("../NodeDefinition.js").NodeDefinition<ImageToMDNode>;
|
|
@@ -311,6 +311,7 @@ export type ChatCompletionChunk = {
|
|
|
311
311
|
created: number;
|
|
312
312
|
model: string;
|
|
313
313
|
choices?: ChatCompletionChunkChoice[];
|
|
314
|
+
usage?: CompletionUsage;
|
|
314
315
|
};
|
|
315
316
|
export type GptFunctionCall = {
|
|
316
317
|
name: string;
|
|
@@ -320,6 +321,11 @@ export type GptFunctionCallDelta = {
|
|
|
320
321
|
name?: string;
|
|
321
322
|
arguments?: string;
|
|
322
323
|
};
|
|
324
|
+
export interface CompletionUsage {
|
|
325
|
+
completion_tokens: number;
|
|
326
|
+
prompt_tokens: number;
|
|
327
|
+
total_tokens: number;
|
|
328
|
+
}
|
|
323
329
|
export type ChatCompletionChunkChoice = {
|
|
324
330
|
index: number;
|
|
325
331
|
message_index: number;
|
package/package.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"name": "@alpic80/rivet-core",
|
|
3
3
|
"license": "MIT",
|
|
4
4
|
"repository": "https://github.com/castortech/rivet",
|
|
5
|
-
"version": "1.19.1-aidon.
|
|
5
|
+
"version": "1.19.1-aidon.3",
|
|
6
6
|
"packageManager": "yarn@3.5.0",
|
|
7
7
|
"main": "dist/cjs/bundle.cjs",
|
|
8
8
|
"module": "dist/esm/index.js",
|