From 3a2ab695ef22aec2a78d7d79e58944fe35fe6f14 Mon Sep 17 00:00:00 2001 From: Andy Brenneke Date: Fri, 2 Aug 2024 14:55:51 -0700 Subject: [PATCH] Play Audio node, and refactor how large blobs are stored in memory for the app, improve performance --- .pnp.cjs | 16 ++++ ...cache-npm-11.0.0-92d560d9d6-41f36fbff8.zip | Bin 0 -> 194671 bytes .../mime-npm-4.0.4-03acf1c40a-28e41053ae.zip | Bin 0 -> 38526 bytes packages/app/package.json | 2 + packages/app/src/components/ChatViewer.tsx | 20 ++-- packages/app/src/components/NodeOutput.tsx | 17 ++-- .../app/src/components/PromptDesigner.tsx | 11 ++- .../app/src/components/RenderDataValue.tsx | 88 +++++++++++++----- .../components/editors/FileBrowserEditor.tsx | 4 +- .../components/editors/ImageBrowserEditor.tsx | 2 + .../app/src/components/nodes/AudioNode.tsx | 13 ++- .../app/src/components/nodes/ChatNode.tsx | 45 +++++---- .../components/nodes/LoopControllerNode.tsx | 7 +- .../components/nodes/ReadDirectoryNode.tsx | 14 ++- .../app/src/components/nodes/SubGraphNode.tsx | 16 ++-- .../src/components/nodes/UserInputNode.tsx | 7 +- packages/app/src/hooks/useCurrentExecution.ts | 55 ++++++++++- .../useGetAdHocInternalProcessContext.ts | 3 +- packages/app/src/hooks/useLocalExecutor.ts | 4 +- packages/app/src/hooks/useNodeTypes.ts | 9 +- packages/app/src/io/BrowserIOProvider.ts | 8 +- packages/app/src/io/IOProvider.ts | 4 +- .../app/src/io/LegacyBrowserIOProvider.ts | 8 +- .../app/src/io/TauriBrowserAudioProvider.ts | 23 +++++ packages/app/src/io/TauriIOProvider.ts | 12 ++- packages/app/src/state/dataFlow.ts | 41 +++++++- packages/app/src/utils/globals.ts | 4 + .../app/src/utils/globals/audioProvider.ts | 5 + .../app/src/utils/globals/globalDataRefs.ts | 25 +++++ packages/core/src/api/createProcessor.ts | 3 + packages/core/src/exports.ts | 1 + .../core/src/integrations/AudioProvider.ts | 5 + packages/core/src/model/DataValue.ts | 2 +- packages/core/src/model/EditorDefinition.ts | 1 + packages/core/src/model/Nodes.ts | 10 +- packages/core/src/model/ProcessContext.ts | 4 + packages/core/src/model/nodes/AudioNode.ts | 25 ++++- .../core/src/model/nodes/PlayAudioNode.ts | 83 +++++++++++++++++ packages/node/src/api.ts | 1 + yarn.lock | 18 ++++ 40 files changed, 508 insertions(+), 108 deletions(-) create mode 100644 .yarn/cache/lru-cache-npm-11.0.0-92d560d9d6-41f36fbff8.zip create mode 100644 .yarn/cache/mime-npm-4.0.4-03acf1c40a-28e41053ae.zip create mode 100644 packages/app/src/io/TauriBrowserAudioProvider.ts create mode 100644 packages/app/src/utils/globals/audioProvider.ts create mode 100644 packages/app/src/utils/globals/globalDataRefs.ts create mode 100644 packages/core/src/integrations/AudioProvider.ts create mode 100644 packages/core/src/model/nodes/PlayAudioNode.ts diff --git a/.pnp.cjs b/.pnp.cjs index 1179779d7..d431cf37d 100755 --- a/.pnp.cjs +++ b/.pnp.cjs @@ -6635,8 +6635,10 @@ const RAW_RUNTIME_STATE = ["immer", "npm:10.0.3"],\ ["jsonpath-plus", "npm:7.2.0"],\ ["lodash-es", "npm:4.17.21"],\ + ["lru-cache", "npm:11.0.0"],\ ["majesticons", "npm:2.1.2"],\ ["marked", "npm:9.1.2"],\ + ["mime", "npm:4.0.4"],\ ["minimatch", "npm:9.0.3"],\ ["monaco-editor", "npm:0.44.0"],\ ["nanoid", "npm:3.3.7"],\ @@ -19184,6 +19186,13 @@ const RAW_RUNTIME_STATE = ],\ "linkType": "HARD"\ }],\ + ["npm:11.0.0", {\ + "packageLocation": "./.yarn/cache/lru-cache-npm-11.0.0-92d560d9d6-41f36fbff8.zip/node_modules/lru-cache/",\ + "packageDependencies": [\ + ["lru-cache", "npm:11.0.0"]\ + ],\ + "linkType": "HARD"\ + }],\ ["npm:5.1.1", {\ "packageLocation": "./.yarn/cache/lru-cache-npm-5.1.1-f475882a51-951d2673dc.zip/node_modules/lru-cache/",\ "packageDependencies": [\ @@ -19463,6 +19472,13 @@ const RAW_RUNTIME_STATE = ["mime", "npm:1.6.0"]\ ],\ "linkType": "HARD"\ + }],\ + ["npm:4.0.4", {\ + "packageLocation": "./.yarn/cache/mime-npm-4.0.4-03acf1c40a-28e41053ae.zip/node_modules/mime/",\ + "packageDependencies": [\ + ["mime", "npm:4.0.4"]\ + ],\ + "linkType": "HARD"\ }]\ ]],\ ["mime-db", [\ diff --git a/.yarn/cache/lru-cache-npm-11.0.0-92d560d9d6-41f36fbff8.zip b/.yarn/cache/lru-cache-npm-11.0.0-92d560d9d6-41f36fbff8.zip new file mode 100644 index 0000000000000000000000000000000000000000..4061931970d1e9d268a5d158a483b47722d6f38d GIT binary patch literal 194671 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

2Fo|`5k)`h3gn^EJXyCGr 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

  • |sHzQaBtOZQJbr@jk7FMnOkNVecV39r}HC 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�oHBFZnidi-T*t0L-K8hwjox0UV?a?6) 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 literal 0 HcmV?d00001 diff --git a/.yarn/cache/mime-npm-4.0.4-03acf1c40a-28e41053ae.zip b/.yarn/cache/mime-npm-4.0.4-03acf1c40a-28e41053ae.zip new file mode 100644 index 0000000000000000000000000000000000000000..1f2f40b8ca15560026e5630bc56fb2c1d4d20176 GIT binary patch literal 38526 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 Z#YIklxKO=uc+f2HGacMJU$F=O>p#_Vczpl> literal 0 HcmV?d00001 diff --git a/packages/app/package.json b/packages/app/package.json index 5e617d115..2a92af6e2 100644 --- a/packages/app/package.json +++ b/packages/app/package.json @@ -88,8 +88,10 @@ "immer": "^10.0.3", "jsonpath-plus": "^7.2.0", "lodash-es": "^4.17.21", + "lru-cache": "^11.0.0", "majesticons": "^2.1.2", "marked": "^9.1.2", + "mime": "^4.0.4", "minimatch": "^9.0.3", "monaco-editor": "^0.44.0", "nanoid": "^3.3.6", diff --git a/packages/app/src/components/ChatViewer.tsx b/packages/app/src/components/ChatViewer.tsx index ba6671b45..f7fa0819a 100644 --- a/packages/app/src/components/ChatViewer.tsx +++ b/packages/app/src/components/ChatViewer.tsx @@ -15,7 +15,13 @@ import { arrayizeDataValue, coerceTypeOptional, } from '@ironclad/rivet-core'; -import { type NodeRunData, lastRunDataByNodeState, graphRunningState } from '../state/dataFlow'; +import { + type NodeRunData, + lastRunDataByNodeState, + graphRunningState, + type NodeRunDataWithRefs, + type DataValueWithRefs, +} from '../state/dataFlow'; import { projectState } from '../state/savedGraphs'; import { ErrorBoundary } from 'react-error-boundary'; import TextField from '@atlaskit/textfield'; @@ -324,7 +330,7 @@ const ChatBubble: FC<{ nodeId: NodeId; nodeTitle: string; processId: ProcessId; - data: NodeRunData; + data: NodeRunDataWithRefs; splitIndex: number; style?: CSSProperties; onGoToNode?: (nodeId: NodeId) => void; @@ -333,16 +339,16 @@ const ChatBubble: FC<{ const responseRef = useRef(null); const [expanded, toggleExpanded] = useToggle(); - let prompt: DataValue; + let prompt: DataValueWithRefs; if (splitIndex === -1) { prompt = data.inputData?.['prompt' as PortId]!; } else { const values = arrayizeDataValue(data.inputData?.['prompt' as PortId] as ScalarOrArrayDataValue); if (values.length === 1) { - prompt = values[0]!; + prompt = values[0]! as DataValueWithRefs; } else { - prompt = values[splitIndex]!; + prompt = values[splitIndex]! as DataValueWithRefs; } } @@ -351,8 +357,8 @@ const ChatBubble: FC<{ ? data.outputData?.['response' as PortId] : data.splitOutputData![splitIndex]!['response' as PortId]; - const promptText = coerceTypeOptional(prompt, 'string'); - const responseText = coerceTypeOptional(chatOutput, 'string'); + const promptText = coerceTypeOptional(prompt as DataValue, 'string'); + const responseText = coerceTypeOptional(chatOutput as DataValue, 'string'); useLayoutEffect(() => { if (promptRef.current) { diff --git a/packages/app/src/components/NodeOutput.tsx b/packages/app/src/components/NodeOutput.tsx index fefd63997..80f5d0af3 100644 --- a/packages/app/src/components/NodeOutput.tsx +++ b/packages/app/src/components/NodeOutput.tsx @@ -1,10 +1,16 @@ import { useRecoilState, useRecoilValue, useSetRecoilState } from 'recoil'; -import { type NodeRunData, type ProcessDataForNode, lastRunData, selectedProcessPage } from '../state/dataFlow.js'; +import { + type NodeRunData, + type ProcessDataForNode, + lastRunData, + selectedProcessPage, + type NodeRunDataWithRefs, +} from '../state/dataFlow.js'; import { type FC, type ReactNode, memo, useMemo, useState, type MouseEvent } from 'react'; import { useUnknownNodeComponentDescriptorFor } from '../hooks/useNodeTypes.js'; import { useStableCallback } from '../hooks/useStableCallback.js'; import { copyToClipboard } from '../utils/copyToClipboard.js'; -import { type ChartNode, type PortId, type ProcessId, getWarnings } from '@ironclad/rivet-core'; +import { type ChartNode, type PortId, type ProcessId, getWarnings, type Outputs } from '@ironclad/rivet-core'; import { css } from '@emotion/react'; import CopyIcon from 'majesticons/line/clipboard-line.svg?react'; import ExpandIcon from 'majesticons/line/maximize-line.svg?react'; @@ -350,7 +356,6 @@ const NodeOutputBase: FC<{ node: ChartNode; children?: ReactNode; onOpenFullscre onOpenFullscreenModal, }) => { const output = useRecoilValue(lastRunData(node.id)); - if (!output?.length) { return null; } @@ -377,7 +382,7 @@ const NodeOutputBase: FC<{ node: ChartNode; children?: ReactNode; onOpenFullscre const NodeOutputSingleProcess: FC<{ node: ChartNode; - data: NodeRunData; + data: NodeRunDataWithRefs; processId: ProcessId; onOpenFullscreenModal?: () => void; }> = ({ node, data, processId, onOpenFullscreenModal }) => { @@ -482,9 +487,9 @@ const NodeOutputSingleProcess: FC<{ {body} - {getWarnings(data.outputData) && ( + {getWarnings(data.outputData as Outputs) && (
    - {getWarnings(data.outputData)!.map((warning) => ( + {getWarnings(data.outputData as Outputs)!.map((warning) => (
    {warning}
    diff --git a/packages/app/src/components/PromptDesigner.tsx b/packages/app/src/components/PromptDesigner.tsx index f141ac167..abcd15b40 100644 --- a/packages/app/src/components/PromptDesigner.tsx +++ b/packages/app/src/components/PromptDesigner.tsx @@ -12,7 +12,7 @@ import { promptDesignerTestGroupResultsByNodeIdState, } from '../state/promptDesigner'; import { nodesByIdState, nodesState } from '../state/graph.js'; -import { lastRunDataByNodeState } from '../state/dataFlow.js'; +import { type InputsOrOutputsWithRefs, lastRunDataByNodeState } from '../state/dataFlow.js'; import { type ChatMessage, type ChatNode, @@ -31,6 +31,9 @@ import { getError, isArrayDataValue, openai, + type DataValue, + type ScalarDataValue, + type Inputs, } from '@ironclad/rivet-core'; import TextField from '@atlaskit/textfield'; import { Field } from '@atlaskit/form'; @@ -354,9 +357,11 @@ export const PromptDesigner: FC = ({ onClose }) => { let inputData = nodeDataForAttachedNodeProcess.inputData; // If node is a split run, just grab the first input data. if (attachedNode.isSplitRun) { - inputData = mapValues(inputData, (val) => (isArrayDataValue(val) ? arrayizeDataValue(val)[0] : val)); + inputData = mapValues(inputData, (val) => + isArrayDataValue(val as DataValue) ? arrayizeDataValue(val as ScalarDataValue)[0] : val, + ) as InputsOrOutputsWithRefs; } - const { messages } = getChatNodeMessages(inputData); + const { messages } = getChatNodeMessages(inputData as Inputs); setMessages({ messages, }); diff --git a/packages/app/src/components/RenderDataValue.tsx b/packages/app/src/components/RenderDataValue.tsx index 4aee6fec4..d16a5d4cb 100644 --- a/packages/app/src/components/RenderDataValue.tsx +++ b/packages/app/src/components/RenderDataValue.tsx @@ -1,18 +1,19 @@ -import { type FC } from 'react'; +import { useMemo, type FC } from 'react'; import { type DataValue, - type Outputs, type ScalarDataType, - type ScalarDataValue, arrayizeDataValue, getScalarTypeOf, inferType, - isArrayDataValue, isFunctionDataValue, - coerceTypeOptional, type NodeOutputDefinition, type ChatMessageMessagePart, type DataType, + type ImageDataValue, + type BinaryDataValue, + type AudioDataValue, + isArrayDataType, + type ScalarOrArrayDataValue, } from '@ironclad/rivet-core'; import { css } from '@emotion/react'; import { keys } from '../../../core/src/utils/typeSafety'; @@ -20,6 +21,8 @@ import { useMarkdown } from '../hooks/useMarkdown'; import ColorizedPreformattedText from './ColorizedPreformattedText'; import { P, match } from 'ts-pattern'; import clsx from 'clsx'; +import { type InputsOrOutputsWithRefs, type DataValueWithRefs, type ScalarDataValueWithRefs } from '../state/dataFlow'; +import { getGlobalDataRef } from '../utils/globals'; const styles = css` .chat-message.user header em { @@ -81,7 +84,7 @@ const multiOutput = css` `; type ScalarRendererProps = { - value: Extract; + value: Extract; depth?: number; renderMarkdown?: boolean; truncateLength?: number; @@ -148,7 +151,7 @@ const scalarRenderers: {
    {message.function_calls.map((fc, i) => (
    - +
    ))}
    @@ -158,7 +161,7 @@ const scalarRenderers: {

    Function Call:

    - +
    ) @@ -191,7 +194,9 @@ const scalarRenderers: { if (inferred.type === 'any') { return <>{JSON.stringify(inferred.value)}; } - return ; + return ( + + ); }, object: ({ value }) => (
    @@ -205,12 +210,19 @@ const scalarRenderers: { ), vector: ({ value }) => <>Vector (length {value.value.length}), image: ({ value }) => { + const resolved = getGlobalDataRef(value.value.ref); + if (!resolved) { + return
    Could not find data.
    ; + } + const { value: { data, mediaType }, - } = value; + } = resolved as ImageDataValue; - const blob = new Blob([data], { type: mediaType }); - const imageUrl = URL.createObjectURL(blob); + const imageUrl = useMemo(() => { + const blob = new Blob([data], { type: mediaType }); + return URL.createObjectURL(blob); + }, [data, mediaType]); return (
    @@ -219,19 +231,39 @@ const scalarRenderers: { ); }, binary: ({ value }) => { + const resolved = getGlobalDataRef(value.value.ref); + if (!resolved) { + return
    Could not find data.
    ; + } + // FIXME: Coercing `value.value` into a `Uint8Array` here because `Uint8Array` gets parsed as an // object of shape `{ [index: number]: number }` when stringified via `JSON.stringify()`. // Consider coercing it back to `Uint8Array` at the entrypoints of the boundaries between // browser and node.js instead. - const coercedValue = new Uint8Array(Object.values(value.value)); + const coercedValue = useMemo(() => { + const resolved = getGlobalDataRef(value.value.ref); + if (resolved!.value instanceof Uint8Array) { + return resolved!.value; + } + return new Uint8Array(Object.values((resolved as BinaryDataValue).value)); + }, [value.value.ref]); + return <>Binary (length {coercedValue.length.toLocaleString()}); }, audio: ({ value }) => { + const resolved = getGlobalDataRef(value.value.ref); + if (!resolved) { + return
    Could not find data.
    ; + } + const { - value: { data }, - } = value; + value: { data, mediaType }, + } = resolved as AudioDataValue; - const dataUri = `data:audio/mp4;base64,${data}`; + const dataUri = useMemo(() => { + const blob = new Blob([data], { type: mediaType }); + return URL.createObjectURL(blob); + }, [data, mediaType]); return (
    @@ -257,8 +289,14 @@ const RenderChatMessagePart: FC<{ part: ChatMessageMessagePart; renderMarkdown?: return ; }) .with({ type: 'image' }, (part) => { - const Renderer = scalarRenderers.image; - return ; + const blob = new Blob([part.data], { type: part.mediaType }); + const imageUrl = URL.createObjectURL(blob); + + return ( +
    + +
    + ); }) .with({ type: 'url' }, (part) => { return {part.url}; @@ -267,7 +305,7 @@ const RenderChatMessagePart: FC<{ part: ChatMessageMessagePart; renderMarkdown?: }; export const RenderDataValue: FC<{ - value: DataValue | undefined; + value: DataValueWithRefs | undefined; depth?: number; renderMarkdown?: boolean; truncateLength?: number; @@ -280,8 +318,8 @@ export const RenderDataValue: FC<{ } const keys = Object.keys(value?.value ?? {}); - if (isArrayDataValue(value)) { - const items = arrayizeDataValue(value); + if (isArrayDataType(value.type)) { + const items = arrayizeDataValue(value as ScalarOrArrayDataValue); return (
    @@ -325,7 +363,7 @@ export const RenderDataValue: FC<{ return (
    = ({ definitions, outputs, renderMarkdown }) => { const outputPorts = keys(outputs); diff --git a/packages/app/src/components/editors/FileBrowserEditor.tsx b/packages/app/src/components/editors/FileBrowserEditor.tsx index 3d2b89629..43903f20d 100644 --- a/packages/app/src/components/editors/FileBrowserEditor.tsx +++ b/packages/app/src/components/editors/FileBrowserEditor.tsx @@ -16,6 +16,7 @@ import { projectDataState } from '../../state/savedGraphs'; import { ioProvider } from '../../utils/globals'; import { type SharedEditorProps } from './SharedEditorProps'; import { getHelperMessage } from './editorUtils'; +import mime from 'mime'; export const DefaultFileBrowserEditor: FC< SharedEditorProps & { @@ -27,7 +28,7 @@ export const DefaultFileBrowserEditor: FC< const helperMessage = getHelperMessage(editor, node.data); const pickFile = async () => { - await ioProvider.readFileAsBinary(async (binaryData) => { + await ioProvider.readFileAsBinary(async (binaryData, fileName) => { const dataId = nanoid() as DataId; onChange( { @@ -37,6 +38,7 @@ export const DefaultFileBrowserEditor: FC< [editor.dataKey]: { refId: dataId, } satisfies DataRef, + [editor.mediaTypeDataKey]: mime.getType(fileName) ?? 'application/octet-stream', }, }, { diff --git a/packages/app/src/components/editors/ImageBrowserEditor.tsx b/packages/app/src/components/editors/ImageBrowserEditor.tsx index d0e206fc3..18ae4acbf 100644 --- a/packages/app/src/components/editors/ImageBrowserEditor.tsx +++ b/packages/app/src/components/editors/ImageBrowserEditor.tsx @@ -14,6 +14,7 @@ import { projectDataState } from '../../state/savedGraphs'; import { ioProvider } from '../../utils/globals'; import { type SharedEditorProps } from './SharedEditorProps'; import { getHelperMessage } from './editorUtils'; +import mime from 'mime'; export const DefaultImageBrowserEditor: FC< SharedEditorProps & { @@ -36,6 +37,7 @@ export const DefaultImageBrowserEditor: FC< [editor.dataKey]: { refId: dataId, } satisfies DataRef, + [editor.mediaTypeDataKey]: mime.getType(editor.dataKey) ?? 'image/png', }, }, { diff --git a/packages/app/src/components/nodes/AudioNode.tsx b/packages/app/src/components/nodes/AudioNode.tsx index f8b1e82f1..a8802ba0d 100644 --- a/packages/app/src/components/nodes/AudioNode.tsx +++ b/packages/app/src/components/nodes/AudioNode.tsx @@ -1,4 +1,4 @@ -import { type FC, useLayoutEffect, useRef } from 'react'; +import { type FC, useLayoutEffect, useRef, useMemo } from 'react'; import { type NodeComponentDescriptor } from '../../hooks/useNodeTypes'; import { type AudioNode } from '@ironclad/rivet-core'; import { css } from '@emotion/react'; @@ -16,11 +16,20 @@ type AudioNodeBodyProps = { }; export const AudioNodeBody: FC = ({ node }) => { + if (node.data.useDataInput) { + return
    Audio data from input
    ; + } + const projectData = useRecoilValue(projectDataState); const dataRef = node.data.data; + const b64Data = dataRef ? projectData?.[dataRef.refId] : undefined; - const dataUri = b64Data ? `data:audio/mp4;base64,${b64Data}` : undefined; + + const dataUri = useMemo( + () => `data:${node.data.mediaType ?? 'audio/wav'};base64,${b64Data}`, + [b64Data, node.data.mediaType], + ); const audioSourceRef = useRef(null); diff --git a/packages/app/src/components/nodes/ChatNode.tsx b/packages/app/src/components/nodes/ChatNode.tsx index 35585de5a..30d4998ae 100644 --- a/packages/app/src/components/nodes/ChatNode.tsx +++ b/packages/app/src/components/nodes/ChatNode.tsx @@ -8,11 +8,13 @@ import { coerceTypeOptional, inferType, isArrayDataValue, + type DataValue, } from '@ironclad/rivet-core'; import { type NodeComponentDescriptor } from '../../hooks/useNodeTypes.js'; import styled from '@emotion/styled'; import clsx from 'clsx'; import { useMarkdown } from '../../hooks/useMarkdown.js'; +import { type InputsOrOutputsWithRefs, type DataValueWithRefs } from '../../state/dataFlow'; const bodyStyles = css` display: flex; @@ -28,19 +30,23 @@ const bodyStyles = css` `; export const ChatNodeOutput: FC<{ - outputs: Outputs; + outputs: InputsOrOutputsWithRefs; fullscreen?: boolean; renderMarkdown?: boolean; }> = ({ outputs, fullscreen, renderMarkdown }) => { - if (isArrayDataValue(outputs['response' as PortId]) || isArrayDataValue(outputs['requestTokens' as PortId])) { - const outputTextAll = coerceTypeOptional(outputs['response' as PortId], 'string[]') ?? []; - - const requestTokensAll = coerceTypeOptional(outputs['requestTokens' as PortId], 'number[]') ?? []; - const responseTokensAll = coerceTypeOptional(outputs['responseTokens' as PortId], 'number[]') ?? []; - const costAll = coerceTypeOptional(outputs['cost' as PortId], 'number[]') ?? []; - const durationAll = coerceTypeOptional(outputs['duration' as PortId], 'number[]') ?? []; - - const functionCallOutput = outputs['function-call' as PortId] ?? outputs['function-calls' as PortId]; + if ( + isArrayDataValue(outputs['response' as PortId] as DataValue) || + isArrayDataValue(outputs['requestTokens' as PortId] as DataValue) + ) { + const outputTextAll = coerceTypeOptional(outputs['response' as PortId] as DataValue, 'string[]') ?? []; + + const requestTokensAll = coerceTypeOptional(outputs['requestTokens' as PortId] as DataValue, 'number[]') ?? []; + const responseTokensAll = coerceTypeOptional(outputs['responseTokens' as PortId] as DataValue, 'number[]') ?? []; + const costAll = coerceTypeOptional(outputs['cost' as PortId] as DataValue, 'number[]') ?? []; + const durationAll = coerceTypeOptional(outputs['duration' as PortId] as DataValue, 'number[]') ?? []; + + const functionCallOutput = + (outputs['function-call' as PortId] as DataValue) ?? (outputs['function-calls' as PortId] as DataValue); const functionCallAll = functionCallOutput?.type === 'object[]' ? functionCallOutput.value @@ -72,14 +78,15 @@ export const ChatNodeOutput: FC<{
    ); } else { - const outputText = coerceTypeOptional(outputs['response' as PortId], 'string'); + const outputText = coerceTypeOptional(outputs['response' as PortId] as DataValue, 'string'); - const requestTokens = coerceTypeOptional(outputs['requestTokens' as PortId], 'number'); - const responseTokens = coerceTypeOptional(outputs['responseTokens' as PortId], 'number'); - const cost = coerceTypeOptional(outputs['cost' as PortId], 'number'); - const duration = coerceTypeOptional(outputs['duration' as PortId], 'number'); + const requestTokens = coerceTypeOptional(outputs['requestTokens' as PortId] as DataValue, 'number'); + const responseTokens = coerceTypeOptional(outputs['responseTokens' as PortId] as DataValue, 'number'); + const cost = coerceTypeOptional(outputs['cost' as PortId] as DataValue, 'number'); + const duration = coerceTypeOptional(outputs['duration' as PortId] as DataValue, 'number'); - const functionCallOutput = outputs['function-call' as PortId] ?? outputs['function-calls' as PortId]; + const functionCallOutput = + (outputs['function-call' as PortId] as DataValue) ?? (outputs['function-calls' as PortId] as DataValue); return ( ) : (
    - +
    )}
    @@ -180,7 +187,7 @@ export const ChatNodeOutputSingle: FC<{

    {Array.isArray(functionCall) ? 'Function Calls' : 'Function Call'}:

    - +
    )} @@ -189,7 +196,7 @@ export const ChatNodeOutputSingle: FC<{ }; const ChatNodeFullscreenOutput: FC<{ - outputs: Outputs; + outputs: InputsOrOutputsWithRefs; renderMarkdown: boolean; }> = ({ outputs, renderMarkdown }) => { return ; diff --git a/packages/app/src/components/nodes/LoopControllerNode.tsx b/packages/app/src/components/nodes/LoopControllerNode.tsx index d92e15e4c..6cd2ca595 100644 --- a/packages/app/src/components/nodes/LoopControllerNode.tsx +++ b/packages/app/src/components/nodes/LoopControllerNode.tsx @@ -2,8 +2,11 @@ import { type FC } from 'react'; import { type Outputs, type PortId } from '@ironclad/rivet-core'; import { RenderDataValue } from '../RenderDataValue.js'; import { type NodeComponentDescriptor } from '../../hooks/useNodeTypes.js'; +import { type InputsOrOutputsWithRefs, type DataValueWithRefs } from '../../state/dataFlow'; -export const LoopControllerNodeOutput: FC<{ outputs: Outputs; renderMarkdown?: boolean }> = ({ outputs }) => { +export const LoopControllerNodeOutput: FC<{ outputs: InputsOrOutputsWithRefs; renderMarkdown?: boolean }> = ({ + outputs, +}) => { const outputKeys = Object.keys(outputs).filter((key) => key.startsWith('output')); const breakLoop = outputs['break' as PortId] != null && outputs['break' as PortId]!.type !== 'control-flow-excluded'; @@ -19,7 +22,7 @@ export const LoopControllerNodeOutput: FC<{ outputs: Outputs; renderMarkdown?: b
    Output {i + 1}
    - +
    ))}
    diff --git a/packages/app/src/components/nodes/ReadDirectoryNode.tsx b/packages/app/src/components/nodes/ReadDirectoryNode.tsx index 566358646..1d0471655 100644 --- a/packages/app/src/components/nodes/ReadDirectoryNode.tsx +++ b/packages/app/src/components/nodes/ReadDirectoryNode.tsx @@ -2,12 +2,20 @@ import { type FC } from 'react'; import { css } from '@emotion/react'; import Toggle from '@atlaskit/toggle'; import Button from '@atlaskit/button'; -import { type ChartNode, type Outputs, type PortId, type ReadDirectoryNode, expectType } from '@ironclad/rivet-core'; +import { + type ChartNode, + type Outputs, + type PortId, + type ReadDirectoryNode, + expectType, + type DataValue, +} from '@ironclad/rivet-core'; import { type NodeComponentDescriptor } from '../../hooks/useNodeTypes.js'; import { ioProvider } from '../../utils/globals.js'; +import { type InputsOrOutputsWithRefs } from '../../state/dataFlow'; -export const ReadDirectoryNodeOutput: FC<{ outputs: Outputs }> = ({ outputs }) => { - const outputPaths = expectType(outputs['paths' as PortId], 'string[]'); +export const ReadDirectoryNodeOutput: FC<{ outputs: InputsOrOutputsWithRefs }> = ({ outputs }) => { + const outputPaths = expectType(outputs['paths' as PortId] as DataValue, 'string[]'); return (
    {outputPaths.length === 0 ? ( diff --git a/packages/app/src/components/nodes/SubGraphNode.tsx b/packages/app/src/components/nodes/SubGraphNode.tsx index c440efcc0..7ca47fb79 100644 --- a/packages/app/src/components/nodes/SubGraphNode.tsx +++ b/packages/app/src/components/nodes/SubGraphNode.tsx @@ -1,10 +1,11 @@ import { type FC } from 'react'; import { useRecoilValue } from 'recoil'; import { projectState } from '../../state/savedGraphs.js'; -import { type Outputs, type PortId, type SubGraphNode, coerceTypeOptional } from '@ironclad/rivet-core'; +import { type Outputs, type PortId, type SubGraphNode, coerceTypeOptional, type DataValue } from '@ironclad/rivet-core'; import { type NodeComponentDescriptor } from '../../hooks/useNodeTypes.js'; import { RenderDataOutputs } from '../RenderDataValue.js'; import { omit } from 'lodash-es'; +import { type InputsOrOutputsWithRefs } from '../../state/dataFlow'; export const SubGraphNodeBody: FC<{ node: SubGraphNode; @@ -21,11 +22,11 @@ export const SubGraphNodeBody: FC<{ }; export const SubGraphNodeOutputSimple: FC<{ - outputs: Outputs; + outputs: InputsOrOutputsWithRefs; renderMarkdown?: boolean; }> = ({ outputs, renderMarkdown }) => { - const cost = coerceTypeOptional(outputs['cost' as PortId], 'number'); - const duration = coerceTypeOptional(outputs['duration' as PortId], 'number'); + const cost = coerceTypeOptional(outputs['cost' as PortId] as DataValue, 'number'); + const duration = coerceTypeOptional(outputs['duration' as PortId] as DataValue, 'number'); return (
    @@ -42,14 +43,17 @@ export const SubGraphNodeOutputSimple: FC<{ )}
    - +
    ); }; export const FullscreenSubGraphNodeOutputSimple: FC<{ - outputs: Outputs; + outputs: InputsOrOutputsWithRefs; renderMarkdown: boolean; }> = ({ outputs, renderMarkdown }) => { return ; diff --git a/packages/app/src/components/nodes/UserInputNode.tsx b/packages/app/src/components/nodes/UserInputNode.tsx index e95675018..474defcb2 100644 --- a/packages/app/src/components/nodes/UserInputNode.tsx +++ b/packages/app/src/components/nodes/UserInputNode.tsx @@ -1,7 +1,8 @@ import { type FC } from 'react'; import { css } from '@emotion/react'; -import { type Outputs, type PortId, expectType, getScalarTypeOf } from '@ironclad/rivet-core'; +import { type Outputs, type PortId, expectType, getScalarTypeOf, type DataValue } from '@ironclad/rivet-core'; import { type NodeComponentDescriptor } from '../../hooks/useNodeTypes.js'; +import { type InputsOrOutputsWithRefs } from '../../state/dataFlow'; const questionsAndAnswersStyles = css` display: flex; @@ -13,14 +14,14 @@ const questionsAndAnswersStyles = css` } `; -export const UserInputNodeOutput: FC<{ outputs: Outputs }> = ({ outputs }) => { +export const UserInputNodeOutput: FC<{ outputs: InputsOrOutputsWithRefs }> = ({ outputs }) => { const questionsAndAnswers = outputs['questionsAndAnswers' as PortId]; if (!questionsAndAnswers || getScalarTypeOf(questionsAndAnswers.type) === 'control-flow-excluded') { return null; } - const qa = expectType(questionsAndAnswers, 'string[]'); + const qa = expectType(questionsAndAnswers as DataValue, 'string[]'); return (
    diff --git a/packages/app/src/hooks/useCurrentExecution.ts b/packages/app/src/hooks/useCurrentExecution.ts index d6d3df2db..11fd5faf6 100644 --- a/packages/app/src/hooks/useCurrentExecution.ts +++ b/packages/app/src/hooks/useCurrentExecution.ts @@ -7,9 +7,11 @@ import { type ProcessEvents, type ProcessId, coerceTypeOptional, + getScalarTypeOf, + isArrayDataValue, } from '@ironclad/rivet-core'; import { produce } from 'immer'; -import { cloneDeep } from 'lodash-es'; +import { cloneDeep, mapValues } from 'lodash-es'; import { useRecoilValue, useSetRecoilState } from 'recoil'; import { type NodeRunData, @@ -20,6 +22,9 @@ import { runningGraphsState, selectedProcessPageNodesState, graphStartTimeState, + type InputsOrOutputsWithRefs, + type DataValueWithRefs, + type NodeRunDataWithRefs, } from '../state/dataFlow'; import { type ProcessQuestions, userInputModalQuestionsState } from '../state/userInput'; import { lastRecordingState } from '../state/execution'; @@ -28,6 +33,8 @@ import { useLatest } from 'ahooks'; import { entries, keys } from '../../../core/src/utils/typeSafety'; import { match } from 'ts-pattern'; import { previousDataPerNodeToKeepState } from '../state/settings'; +import { nanoid } from 'nanoid'; +import { setGlobalDataRef } from '../utils/globals'; function sanitizeDataValueForLength(value: DataValue | undefined) { return match(value) @@ -84,6 +91,44 @@ function sanitizeDataValueForLength(value: DataValue | undefined) { .otherwise((value): DataValue | undefined => value); } +function cloneNodeDataForHistory(data: Partial): Partial { + return { + ...data, + inputData: cloneNodeInputOrOutputDataForHistory(data.inputData), + outputData: cloneNodeInputOrOutputDataForHistory(data.outputData), + splitOutputData: data.splitOutputData + ? (mapValues(data.splitOutputData, (val) => cloneNodeInputOrOutputDataForHistory(val)) as { + [index: number]: InputsOrOutputsWithRefs; + }) + : undefined, + }; +} + +function cloneNodeInputOrOutputDataForHistory(data: Inputs | Outputs | undefined): InputsOrOutputsWithRefs | undefined { + if (data == null) { + return undefined; + } + + return mapValues(data as Record, (val) => { + if (!val) { + return cloneDeep(val); + } + + return convertToRef(val); + }) as InputsOrOutputsWithRefs; +} + +function convertToRef(value: DataValue): DataValueWithRefs { + const scalarType = getScalarTypeOf(value.type); + if (scalarType !== 'audio' && scalarType !== 'binary' && scalarType !== 'image') { + return cloneDeep(value) as DataValueWithRefs; + } + + const refId = nanoid(); + setGlobalDataRef(refId, value); + return { type: value.type, value: { ref: refId } } as DataValueWithRefs; +} + export function useCurrentExecution() { const setLastRunData = useSetRecoilState(lastRunDataByNodeState); const setSelectedPage = useSetRecoilState(selectedProcessPageNodesState); @@ -108,7 +153,7 @@ export function useCurrentExecution() { if (existingProcess) { existingProcess.data = { ...existingProcess.data, - ...cloneDeep(data), + ...cloneNodeDataForHistory(data), }; } else { if (previousDataPerNodeToKeep > -1) { @@ -131,7 +176,7 @@ export function useCurrentExecution() { draft[nodeId]!.push({ processId, - data: cloneDeep(data), + data: cloneNodeDataForHistory(data)!, }); } }), @@ -314,14 +359,14 @@ export function useCurrentExecution() { if (existingProcess) { existingProcess.data.splitOutputData = { ...existingProcess.data.splitOutputData, - [index]: cloneDeep(outputs), + [index]: cloneNodeInputOrOutputDataForHistory(outputs)!, }; } else { draft[node.id]!.push({ processId, data: { splitOutputData: { - [index]: cloneDeep(outputs), + [index]: cloneNodeInputOrOutputDataForHistory(outputs)!, }, }, }); diff --git a/packages/app/src/hooks/useGetAdHocInternalProcessContext.ts b/packages/app/src/hooks/useGetAdHocInternalProcessContext.ts index 211fcbee0..3ce7a0ad9 100644 --- a/packages/app/src/hooks/useGetAdHocInternalProcessContext.ts +++ b/packages/app/src/hooks/useGetAdHocInternalProcessContext.ts @@ -13,7 +13,7 @@ import { nanoid } from 'nanoid/non-secure'; import { useRecoilValue } from 'recoil'; import { settingsState } from '../state/settings'; import { useDependsOnPlugins } from './useDependsOnPlugins'; -import { datasetProvider } from '../utils/globals'; +import { audioProvider, datasetProvider } from '../utils/globals'; export function useGetAdHocInternalProcessContext() { const settings = useRecoilValue(settingsState); @@ -33,6 +33,7 @@ export function useGetAdHocInternalProcessContext() { settings: await fillMissingSettingsFromEnvironmentVariables(settings, plugins), nativeApi: new TauriNativeApi(), datasetProvider, + audioProvider, processId: nanoid() as ProcessId, executionCache: new Map(), externalFunctions: {}, diff --git a/packages/app/src/hooks/useLocalExecutor.ts b/packages/app/src/hooks/useLocalExecutor.ts index 1762c32df..fffadad60 100644 --- a/packages/app/src/hooks/useLocalExecutor.ts +++ b/packages/app/src/hooks/useLocalExecutor.ts @@ -25,7 +25,7 @@ import { lastRecordingState, loadedRecordingState } from '../state/execution'; import { fillMissingSettingsFromEnvironmentVariables } from '../utils/tauri'; import { trivetState } from '../state/trivet'; import { runTrivet } from '@ironclad/trivet'; -import { datasetProvider } from '../utils/globals'; +import { audioProvider, datasetProvider } from '../utils/globals'; import { entries } from '../../../core/src/utils/typeSafety'; export function useLocalExecutor() { @@ -147,6 +147,7 @@ export function useLocalExecutor() { ), nativeApi: new TauriNativeApi(), datasetProvider, + audioProvider, }, {}, contextValues, @@ -208,6 +209,7 @@ export function useLocalExecutor() { ), nativeApi: new TauriNativeApi(), datasetProvider, + audioProvider, }, inputs, ); diff --git a/packages/app/src/hooks/useNodeTypes.ts b/packages/app/src/hooks/useNodeTypes.ts index 89cd72c24..9a4e800fb 100644 --- a/packages/app/src/hooks/useNodeTypes.ts +++ b/packages/app/src/hooks/useNodeTypes.ts @@ -22,14 +22,15 @@ import { loadDatasetNodeDescriptor } from '../components/nodes/LoadDatasetNode'; import { datasetNearestNeighborsNodeDescriptor } from '../components/nodes/DatasetNearestNeighborsNode'; import { getDatasetRowNodeDescriptor } from '../components/nodes/GetDatasetRowNode'; import { replaceDatasetNodeDescriptor } from '../components/nodes/ReplaceDatasetNode'; +import { type InputsOrOutputsWithRefs } from '../state/dataFlow'; export type UnknownNodeComponentDescriptor = { Body?: FC<{ node: ChartNode }>; Output?: FC<{ node: ChartNode }>; Editor?: FC<{ node: ChartNode; onChange?: (node: ChartNode) => void }>; FullscreenOutput?: FC<{ node: ChartNode }>; - OutputSimple?: FC<{ outputs: Outputs }>; - FullscreenOutputSimple?: FC<{ outputs: Outputs; renderMarkdown: boolean }>; + OutputSimple?: FC<{ outputs: InputsOrOutputsWithRefs }>; + FullscreenOutputSimple?: FC<{ outputs: InputsOrOutputsWithRefs; renderMarkdown: boolean }>; defaultRenderMarkdown?: boolean; }; @@ -38,8 +39,8 @@ export type NodeComponentDescriptor = { Output?: FC<{ node: NodeOfType }>; Editor?: FC<{ node: NodeOfType; onChange?: (node: NodeOfType) => void }>; FullscreenOutput?: FC<{ node: NodeOfType }>; - OutputSimple?: FC<{ outputs: Outputs }>; - FullscreenOutputSimple?: FC<{ outputs: Outputs; renderMarkdown: boolean }>; + OutputSimple?: FC<{ outputs: InputsOrOutputsWithRefs }>; + FullscreenOutputSimple?: FC<{ outputs: InputsOrOutputsWithRefs; renderMarkdown: boolean }>; defaultRenderMarkdown?: boolean; }; diff --git a/packages/app/src/io/BrowserIOProvider.ts b/packages/app/src/io/BrowserIOProvider.ts index 16a3eb43a..04c003533 100644 --- a/packages/app/src/io/BrowserIOProvider.ts +++ b/packages/app/src/io/BrowserIOProvider.ts @@ -90,18 +90,18 @@ export class BrowserIOProvider implements IOProvider { await writable.close(); } - async readFileAsString(callback: (data: string) => void): Promise { + async readFileAsString(callback: (data: string, fileName: string) => void): Promise { const [fileHandle] = await window.showOpenFilePicker(); const file = await fileHandle.getFile(); const text = await file.text(); - callback(text); + callback(text, file.name); } - async readFileAsBinary(callback: (data: Uint8Array) => void): Promise { + async readFileAsBinary(callback: (data: Uint8Array, fileName: string) => void): Promise { const [fileHandle] = await window.showOpenFilePicker(); const file = await fileHandle.getFile(); const arrayBuffer = await file.arrayBuffer(); - callback(new Uint8Array(arrayBuffer)); + callback(new Uint8Array(arrayBuffer), file.name); } async readPathAsString(path: string): Promise { diff --git a/packages/app/src/io/IOProvider.ts b/packages/app/src/io/IOProvider.ts index 425d2c27a..13397325a 100644 --- a/packages/app/src/io/IOProvider.ts +++ b/packages/app/src/io/IOProvider.ts @@ -22,9 +22,9 @@ export interface IOProvider { saveString(content: string, defaultFileName: string): Promise; - readFileAsString(callback: (data: string) => void): Promise; + readFileAsString(callback: (data: string, fileName: string) => void): Promise; - readFileAsBinary(callback: (data: Uint8Array) => void): Promise; + readFileAsBinary(callback: (data: Uint8Array, fileName: string) => void): Promise; readPathAsString(path: string): Promise; diff --git a/packages/app/src/io/LegacyBrowserIOProvider.ts b/packages/app/src/io/LegacyBrowserIOProvider.ts index 3a9b8074c..f9430256c 100644 --- a/packages/app/src/io/LegacyBrowserIOProvider.ts +++ b/packages/app/src/io/LegacyBrowserIOProvider.ts @@ -116,25 +116,25 @@ export class LegacyBrowserIOProvider implements IOProvider { link.click(); } - async readFileAsString(callback: (data: string) => void): Promise { + async readFileAsString(callback: (data: string, fileName: string) => void): Promise { const input = document.createElement('input'); input.type = 'file'; input.onchange = async (event) => { const file = (event.target as HTMLInputElement)!.files![0]!; const text = await file.text(); - callback(text); + callback(text, file.name); }; input.click(); } - async readFileAsBinary(callback: (data: Uint8Array) => void): Promise { + async readFileAsBinary(callback: (data: Uint8Array, fileName: string) => void): Promise { const input = document.createElement('input'); input.type = 'file'; input.onchange = async (event) => { const file = (event.target as HTMLInputElement)!.files![0]!; const reader = new FileReader(); reader.onload = () => { - callback(new Uint8Array(reader.result as ArrayBuffer)); + callback(new Uint8Array(reader.result as ArrayBuffer), file.name); }; reader.readAsArrayBuffer(file); }; diff --git a/packages/app/src/io/TauriBrowserAudioProvider.ts b/packages/app/src/io/TauriBrowserAudioProvider.ts new file mode 100644 index 000000000..ac4e00f68 --- /dev/null +++ b/packages/app/src/io/TauriBrowserAudioProvider.ts @@ -0,0 +1,23 @@ +import { type AudioDataValue, type AudioProvider } from '@ironclad/rivet-core'; + +export class TauriBrowserAudioProvider implements AudioProvider { + async playAudio(audio: AudioDataValue, abort: AbortSignal): Promise { + const blob = new Blob([audio.value.data], { type: audio.value.mediaType ?? 'audio/wav' }); + const audioNode = new Audio(URL.createObjectURL(blob)); + + const finished = new Promise((resolve, reject) => { + audioNode.onended = () => { + resolve(); + }; + + abort.onabort = () => { + audioNode.pause(); + reject(new Error('Audio playback aborted')); + }; + }); + + await audioNode.play(); + + return finished; + } +} diff --git a/packages/app/src/io/TauriIOProvider.ts b/packages/app/src/io/TauriIOProvider.ts index 55feaf30d..b4ebd0a62 100644 --- a/packages/app/src/io/TauriIOProvider.ts +++ b/packages/app/src/io/TauriIOProvider.ts @@ -203,25 +203,29 @@ export class TauriIOProvider implements IOProvider { } } - async readFileAsString(callback: (data: string) => void): Promise { + async readFileAsString(callback: (data: string, fileName: string) => void): Promise { const path = await open({ multiple: false, }); if (path) { + const fileName = (path as string).split('/').pop() as string; + const contents = await readTextFile(path as string); - callback(contents); + callback(contents, fileName); } } - async readFileAsBinary(callback: (data: Uint8Array) => void): Promise { + async readFileAsBinary(callback: (data: Uint8Array, fileName: string) => void): Promise { const path = await open({ multiple: false, }); if (path) { + const fileName = (path as string).split('/').pop() as string; + const contents = await readBinaryFile(path as string); - callback(contents); + callback(contents, fileName); } } diff --git a/packages/app/src/state/dataFlow.ts b/packages/app/src/state/dataFlow.ts index 79a145e13..1c3d92127 100644 --- a/packages/app/src/state/dataFlow.ts +++ b/packages/app/src/state/dataFlow.ts @@ -1,16 +1,26 @@ import { atom, selectorFamily } from 'recoil'; -import { type GraphId, type Inputs, type NodeId, type Outputs, type ProcessId } from '@ironclad/rivet-core'; +import { + type PortId, + type GraphId, + type Inputs, + type NodeId, + type Outputs, + type ProcessId, + type DataType, + type DataValue, + type ScalarDataType, +} from '@ironclad/rivet-core'; export type ProcessDataForNode = { processId: ProcessId; - data: NodeRunData; + data: NodeRunDataWithRefs; }; export type RunDataByNodeId = { [nodeId: NodeId]: ProcessDataForNode[]; }; -export type NodeRunData = { +export type NodeRunDataBase = { startedAt?: number; finishedAt?: number; @@ -20,7 +30,9 @@ export type NodeRunData = { | { type: 'running' } | { type: 'interrupted' } | { type: 'notRan'; reason: string }; +}; +export type NodeRunData = NodeRunDataBase & { inputData?: Inputs; outputData?: Outputs; @@ -30,6 +42,29 @@ export type NodeRunData = { }; }; +export type NodeRunDataWithRefs = NodeRunDataBase & { + inputData?: InputsOrOutputsWithRefs; + + outputData?: InputsOrOutputsWithRefs; + + splitOutputData?: { + [index: number]: InputsOrOutputsWithRefs; + }; +}; + +export type InputsOrOutputsWithRefs = { + [portId: PortId]: DataValueWithRefs; +}; + +export type DataValueWithRefs = { + [P in DataType]: { + type: P; + value: P extends 'binary' | 'audio' | 'image' ? { ref: string } : Extract['value']; + }; +}[DataType]; + +export type ScalarDataValueWithRefs = Extract; + export const lastRunDataByNodeState = atom({ key: 'lastData', default: {}, diff --git a/packages/app/src/utils/globals.ts b/packages/app/src/utils/globals.ts index 6779a916a..8161f565c 100644 --- a/packages/app/src/utils/globals.ts +++ b/packages/app/src/utils/globals.ts @@ -1,2 +1,6 @@ +import { type DataValue } from '@ironclad/rivet-core'; + export * from './globals/datasetProvider.js'; export * from './globals/ioProvider.js'; +export * from './globals/audioProvider.js'; +export * from './globals/globalDataRefs.js'; diff --git a/packages/app/src/utils/globals/audioProvider.ts b/packages/app/src/utils/globals/audioProvider.ts new file mode 100644 index 000000000..945020706 --- /dev/null +++ b/packages/app/src/utils/globals/audioProvider.ts @@ -0,0 +1,5 @@ +import { TauriBrowserAudioProvider } from '../../io/TauriBrowserAudioProvider'; + +const audioProvider = new TauriBrowserAudioProvider(); + +export { audioProvider }; diff --git a/packages/app/src/utils/globals/globalDataRefs.ts b/packages/app/src/utils/globals/globalDataRefs.ts new file mode 100644 index 000000000..c482c00da --- /dev/null +++ b/packages/app/src/utils/globals/globalDataRefs.ts @@ -0,0 +1,25 @@ +import { type DataValue } from '@ironclad/rivet-core'; +import { LRUCache } from 'lru-cache'; +import { match } from 'ts-pattern'; + +const globalDataRefs = new LRUCache({ + maxSize: 500 * 1024 * 1024, // 500MB + sizeCalculation: (value) => { + return match(value) + .with({ type: 'image' }, (v) => v.value.data.byteLength) + .with({ type: 'binary' }, (v) => v.value.byteLength) + .with({ type: 'audio' }, (v) => v.value.data.byteLength) + .with({ type: 'image[]' }, (v) => v.value.reduce((acc, img) => acc + img.data.byteLength, 0)) + .with({ type: 'binary[]' }, (v) => v.value.reduce((acc, bin) => acc + bin.byteLength, 0)) + .with({ type: 'audio[]' }, (v) => v.value.reduce((acc, audio) => acc + audio.data.byteLength, 0)) + .otherwise((v) => JSON.stringify(v).length); + }, +}); + +export function getGlobalDataRef(key: string): DataValue | undefined { + return globalDataRefs.get(key); +} + +export function setGlobalDataRef(key: string, value: DataValue): void { + globalDataRefs.set(key, value); +} diff --git a/packages/core/src/api/createProcessor.ts b/packages/core/src/api/createProcessor.ts index bb2b519da..b44ce2d18 100644 --- a/packages/core/src/api/createProcessor.ts +++ b/packages/core/src/api/createProcessor.ts @@ -1,6 +1,7 @@ import type { PascalCase } from 'type-fest'; import { type AttachedData, + type AudioProvider, type DataValue, type DatasetProvider, type ExternalFunction, @@ -27,6 +28,7 @@ export type RunGraphOptions = { context?: Record; nativeApi?: NativeApi; datasetProvider?: DatasetProvider; + audioProvider?: AudioProvider; externalFunctions?: { [key: string]: ExternalFunction; }; @@ -166,6 +168,7 @@ export function coreCreateProcessor(project: Project, options: RunGraphOptions) { nativeApi: options.nativeApi, datasetProvider: options.datasetProvider, + audioProvider: options.audioProvider, settings: { openAiKey: options.openAiKey ?? '', openAiOrganization: options.openAiOrganization ?? '', diff --git a/packages/core/src/exports.ts b/packages/core/src/exports.ts index 995c02637..7738bd8de 100644 --- a/packages/core/src/exports.ts +++ b/packages/core/src/exports.ts @@ -28,6 +28,7 @@ export * from './integrations/DatasetProvider.js'; export * from './model/Dataset.js'; export * from './api/streaming.js'; export * from './api/createProcessor.js'; +export * from './integrations/AudioProvider.js'; import * as openai from './utils/openai.js'; export { openai }; diff --git a/packages/core/src/integrations/AudioProvider.ts b/packages/core/src/integrations/AudioProvider.ts new file mode 100644 index 000000000..3163869a4 --- /dev/null +++ b/packages/core/src/integrations/AudioProvider.ts @@ -0,0 +1,5 @@ +import type { AudioDataValue } from '../model/DataValue.js'; + +export interface AudioProvider { + playAudio(audio: AudioDataValue, abort: AbortSignal): Promise; +} diff --git a/packages/core/src/model/DataValue.ts b/packages/core/src/model/DataValue.ts index 7bbb2db4f..b7222887e 100644 --- a/packages/core/src/model/DataValue.ts +++ b/packages/core/src/model/DataValue.ts @@ -68,7 +68,7 @@ export type ObjectDataValue = DataValueDef<'object', Record>; export type VectorDataValue = DataValueDef<'vector', number[]>; export type BinaryDataValue = DataValueDef<'binary', Uint8Array>; export type ImageDataValue = DataValueDef<'image', { mediaType: SupportedMediaTypes; data: Uint8Array }>; -export type AudioDataValue = DataValueDef<'audio', { data: Uint8Array }>; +export type AudioDataValue = DataValueDef<'audio', { mediaType?: string; data: Uint8Array }>; export type GraphReferenceValue = DataValueDef<'graph-reference', { graphId: GraphId; graphName: string }>; /** GPT function definition */ diff --git a/packages/core/src/model/EditorDefinition.ts b/packages/core/src/model/EditorDefinition.ts index 9873e94c3..fb2f0abc0 100644 --- a/packages/core/src/model/EditorDefinition.ts +++ b/packages/core/src/model/EditorDefinition.ts @@ -132,6 +132,7 @@ export type FileBrowserEditorDefinition = SharedEditorDefin type: 'fileBrowser'; dataKey: DataOfType; + mediaTypeDataKey: DataOfType; useInputToggleDataKey?: DataOfType; accept?: string; diff --git a/packages/core/src/model/Nodes.ts b/packages/core/src/model/Nodes.ts index 12ce3b07d..4e2993b66 100644 --- a/packages/core/src/model/Nodes.ts +++ b/packages/core/src/model/Nodes.ts @@ -210,7 +210,14 @@ import { graphReferenceNode } from './nodes/GraphReferenceNode.js'; export * from './nodes/GraphReferenceNode.js'; import { callGraphNode } from './nodes/CallGraphNode.js'; +export * from './nodes/CallGraphNode.js'; + import { delegateFunctionCallNode } from './nodes/DelegateFunctionCallNode.js'; +export * from './nodes/DelegateFunctionCallNode.js'; + +import { playAudioNode } from './nodes/PlayAudioNode.js'; +export * from './nodes/PlayAudioNode.js'; + export * from './nodes/CallGraphNode.js'; export const registerBuiltInNodes = (registry: NodeRegistration) => { @@ -285,7 +292,8 @@ export const registerBuiltInNodes = (registry: NodeRegistration) => { .register(listGraphsNode) .register(graphReferenceNode) .register(callGraphNode) - .register(delegateFunctionCallNode); + .register(delegateFunctionCallNode) + .register(playAudioNode); }; let globalRivetNodeRegistry = registerBuiltInNodes(new NodeRegistration()); diff --git a/packages/core/src/model/ProcessContext.ts b/packages/core/src/model/ProcessContext.ts index 75d3cda28..8dd27e0d6 100644 --- a/packages/core/src/model/ProcessContext.ts +++ b/packages/core/src/model/ProcessContext.ts @@ -12,6 +12,7 @@ import { type DatasetProvider, type ChartNode, type AttachedNodeData, + type AudioProvider, } from '../index.js'; import type { Tokenizer } from '../integrations/Tokenizer.js'; @@ -22,6 +23,9 @@ export type ProcessContext = { /** Sets the dataset provider to be used for all dataset node calls. */ datasetProvider?: DatasetProvider; + /** The provider responsible for being able to play audio. Undefined if unsupported in this context. */ + audioProvider?: AudioProvider; + /** Sets the tokenizer that will be used for all nodes. If unset, the default GptTokenizerTokenizer will be used. */ tokenizer?: Tokenizer; diff --git a/packages/core/src/model/nodes/AudioNode.ts b/packages/core/src/model/nodes/AudioNode.ts index 17f7883dd..9d0193d05 100644 --- a/packages/core/src/model/nodes/AudioNode.ts +++ b/packages/core/src/model/nodes/AudioNode.ts @@ -16,12 +16,16 @@ import { } from '../../index.js'; import { base64ToUint8Array, expectType } from '../../utils/index.js'; import { nodeDefinition } from '../NodeDefinition.js'; +import { getInputOrData } from '../../utils/inputs.js'; export type AudioNode = ChartNode<'audio', AudioNodeData>; type AudioNodeData = { data?: DataRef; useDataInput: boolean; + + mediaType?: 'audio/wav' | 'audio/mp3' | 'audio/ogg'; + useMediaTypeInput: boolean; }; export class AudioNodeImpl extends NodeImpl { @@ -33,6 +37,7 @@ export class AudioNodeImpl extends NodeImpl { visualData: { x: 0, y: 0, width: 300 }, data: { useDataInput: false, + useMediaTypeInput: false, }, }; } @@ -49,6 +54,15 @@ export class AudioNodeImpl extends NodeImpl { }); } + if (this.chartNode.data.useMediaTypeInput) { + inputDefinitions.push({ + id: 'mediaType' as PortId, + title: 'Media Type', + dataType: 'string', + coerced: false, + }); + } + return inputDefinitions; } @@ -68,9 +82,16 @@ export class AudioNodeImpl extends NodeImpl { type: 'fileBrowser', label: 'Audio File', dataKey: 'data', + mediaTypeDataKey: 'mediaType', useInputToggleDataKey: 'useDataInput', accept: 'audio/*', }, + { + type: 'string', + label: 'Media Type', + dataKey: 'mediaType', + useInputToggleDataKey: 'useMediaTypeInput', + }, ]; } @@ -86,6 +107,8 @@ export class AudioNodeImpl extends NodeImpl { async process(inputData: Inputs, context: InternalProcessContext): Promise { let data: Uint8Array; + const mediaType = getInputOrData(this.data, inputData, 'mediaType', 'string') || 'audio/wav'; + if (this.chartNode.data.useDataInput) { data = expectType(inputData['data' as PortId], 'binary'); } else { @@ -106,7 +129,7 @@ export class AudioNodeImpl extends NodeImpl { return { ['data' as PortId]: { type: 'audio', - value: { data }, + value: { data, mediaType }, }, }; } diff --git a/packages/core/src/model/nodes/PlayAudioNode.ts b/packages/core/src/model/nodes/PlayAudioNode.ts new file mode 100644 index 000000000..4834497e4 --- /dev/null +++ b/packages/core/src/model/nodes/PlayAudioNode.ts @@ -0,0 +1,83 @@ +import { + type ChartNode, + type NodeId, + type PortId, + type NodeInputDefinition, + type NodeOutputDefinition, +} from '../NodeBase.js'; +import { NodeImpl, type NodeUIData } from '../NodeImpl.js'; +import { nanoid } from 'nanoid/non-secure'; +import { type EditorDefinition, type Inputs, type InternalProcessContext, type Outputs } from '../../index.js'; +import { expectType } from '../../utils/index.js'; +import { nodeDefinition } from '../NodeDefinition.js'; + +export type PlayAudioNode = ChartNode<'playAudio', PlayAudioNodeData>; + +type PlayAudioNodeData = {}; + +export class PlayAudioNodeImpl extends NodeImpl { + static create(): PlayAudioNode { + return { + id: nanoid() as NodeId, + type: 'playAudio', + title: 'Play Audio', + visualData: { x: 0, y: 0, width: 200 }, + data: {}, + }; + } + + getInputDefinitions(): NodeInputDefinition[] { + const inputDefinitions: NodeInputDefinition[] = []; + + inputDefinitions.push({ + id: 'data' as PortId, + title: 'Data', + dataType: 'audio', + coerced: false, + }); + + return inputDefinitions; + } + + getOutputDefinitions(): NodeOutputDefinition[] { + return [ + { + id: 'data' as PortId, + title: 'Audio Data', + dataType: 'audio', + }, + ]; + } + + getEditors(): EditorDefinition[] { + return []; + } + + static getUIData(): NodeUIData { + return { + contextMenuTitle: 'Play Audio', + group: 'Input/Output', + infoBoxTitle: 'Play Audio Node', + infoBoxBody: 'Plays audio data to the speakers.', + }; + } + + async process(inputData: Inputs, context: InternalProcessContext): Promise { + if (!context.audioProvider) { + throw new Error('Playing audio is not supported in this context'); + } + + const data = expectType(inputData['data' as PortId], 'audio'); + + await context.audioProvider.playAudio({ type: 'audio', value: data }, context.signal); + + return { + ['data' as PortId]: { + type: 'audio', + value: data, + }, + }; + } +} + +export const playAudioNode = nodeDefinition(PlayAudioNodeImpl, 'Play Audio'); diff --git a/packages/node/src/api.ts b/packages/node/src/api.ts index ebd8bbad7..63e090ea6 100644 --- a/packages/node/src/api.ts +++ b/packages/node/src/api.ts @@ -65,6 +65,7 @@ export function createProcessor( { nativeApi: options.nativeApi ?? new NodeNativeApi(), datasetProvider: options.datasetProvider, + audioProvider: options.audioProvider, settings: { openAiKey: options.openAiKey ?? process.env.OPENAI_API_KEY ?? '', openAiOrganization: options.openAiOrganization ?? process.env.OPENAI_ORG_ID ?? '', diff --git a/yarn.lock b/yarn.lock index ec7c59a1e..eed91eb84 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3821,8 +3821,10 @@ __metadata: immer: "npm:^10.0.3" jsonpath-plus: "npm:^7.2.0" lodash-es: "npm:^4.17.21" + lru-cache: "npm:^11.0.0" majesticons: "npm:^2.1.2" marked: "npm:^9.1.2" + mime: "npm:^4.0.4" minimatch: "npm:^9.0.3" monaco-editor: "npm:^0.44.0" nanoid: "npm:^3.3.6" @@ -13263,6 +13265,13 @@ __metadata: languageName: node linkType: hard +"lru-cache@npm:^11.0.0": + version: 11.0.0 + resolution: "lru-cache@npm:11.0.0" + checksum: 41f36fbff8b6f199cce3e9cb2b625714f97a535dfd7f16d0988c2627f9ed4c38b6dc8f9ea7fdba19262a7c917ba41c89cad15ca3e3791fc9a2068af472b5bc8d + languageName: node + linkType: hard + "lru-cache@npm:^5.1.1": version: 5.1.1 resolution: "lru-cache@npm:5.1.1" @@ -13538,6 +13547,15 @@ __metadata: languageName: node linkType: hard +"mime@npm:^4.0.4": + version: 4.0.4 + resolution: "mime@npm:4.0.4" + bin: + mime: bin/cli.js + checksum: 28e41053ae09cbf4186c551d7cc3cdda10c04fdf447cfdb66db096d83279889a0e0589805b15e36c37ca8b0eedfa6317f25d0514462525271f0cffa5cb0514b4 + languageName: node + linkType: hard + "mimic-fn@npm:^2.1.0": version: 2.1.0 resolution: "mimic-fn@npm:2.1.0"