@dxos/plugin-transcription 0.8.4-main.ae835ea → 0.8.4-main.bc2380dfbc
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/LICENSE +102 -5
- package/README.md +1 -1
- package/dist/lib/neutral/TranscriptionArticle-L6XANBH5.mjs +54 -0
- package/dist/lib/neutral/TranscriptionArticle-L6XANBH5.mjs.map +7 -0
- package/dist/lib/neutral/TranscriptionPlugin.mjs +34 -0
- package/dist/lib/neutral/TranscriptionPlugin.mjs.map +7 -0
- package/dist/lib/neutral/TranscriptionPlugin.node.mjs +25 -0
- package/dist/lib/neutral/TranscriptionPlugin.node.mjs.map +7 -0
- package/dist/lib/neutral/TranscriptionPlugin.workerd.mjs +21 -0
- package/dist/lib/neutral/TranscriptionPlugin.workerd.mjs.map +7 -0
- package/dist/lib/neutral/blueprint-definition-HOXDG5QP.mjs +15 -0
- package/dist/lib/neutral/blueprint-definition-HOXDG5QP.mjs.map +7 -0
- package/dist/lib/neutral/blueprints/index.mjs +8 -0
- package/dist/lib/neutral/capabilities/index.mjs +17 -0
- package/dist/lib/neutral/capabilities/index.mjs.map +7 -0
- package/dist/lib/neutral/chunk-2O3ONPRZ.mjs +298 -0
- package/dist/lib/neutral/chunk-2O3ONPRZ.mjs.map +7 -0
- package/dist/lib/neutral/chunk-5FXU36PN.mjs +120 -0
- package/dist/lib/neutral/chunk-5FXU36PN.mjs.map +7 -0
- package/dist/lib/{browser/chunk-VBUIO677.mjs → neutral/chunk-GL4RS533.mjs} +2 -9
- package/dist/lib/neutral/chunk-GL4RS533.mjs.map +7 -0
- package/dist/lib/{browser/chunk-WH36ENNE.mjs → neutral/chunk-ILSA3DU7.mjs} +102 -133
- package/dist/lib/neutral/chunk-ILSA3DU7.mjs.map +7 -0
- package/dist/lib/neutral/chunk-J5LGTIGS.mjs +10 -0
- package/dist/lib/neutral/chunk-KAEXRX3Y.mjs +35 -0
- package/dist/lib/neutral/chunk-KAEXRX3Y.mjs.map +7 -0
- package/dist/lib/neutral/chunk-MLRJWAQH.mjs +179 -0
- package/dist/lib/neutral/chunk-MLRJWAQH.mjs.map +7 -0
- package/dist/lib/neutral/chunk-Y5EQAFFR.mjs +8 -0
- package/dist/lib/neutral/chunk-Y5EQAFFR.mjs.map +7 -0
- package/dist/lib/neutral/chunk-ZR4BH4QQ.mjs +30 -0
- package/dist/lib/neutral/chunk-ZR4BH4QQ.mjs.map +7 -0
- package/dist/lib/neutral/components/index.mjs +272 -0
- package/dist/lib/neutral/components/index.mjs.map +7 -0
- package/dist/lib/neutral/containers/index.mjs +9 -0
- package/dist/lib/neutral/containers/index.mjs.map +7 -0
- package/dist/lib/neutral/create-RRWRIUSR.mjs +21 -0
- package/dist/lib/neutral/create-RRWRIUSR.mjs.map +7 -0
- package/dist/lib/neutral/hooks/index.mjs +19 -0
- package/dist/lib/neutral/index.mjs +44 -0
- package/dist/lib/neutral/meta.json +1 -0
- package/dist/lib/neutral/meta.mjs +8 -0
- package/dist/lib/neutral/meta.mjs.map +7 -0
- package/dist/lib/neutral/open-CVMX5KXZ.mjs +27 -0
- package/dist/lib/neutral/open-CVMX5KXZ.mjs.map +7 -0
- package/dist/lib/neutral/operation-handler-NXMOAXFP.mjs +13 -0
- package/dist/lib/neutral/operation-handler-NXMOAXFP.mjs.map +7 -0
- package/dist/lib/neutral/operations/index.mjs +8 -0
- package/dist/lib/neutral/operations/index.mjs.map +7 -0
- package/dist/lib/neutral/plugin.mjs +16 -0
- package/dist/lib/neutral/plugin.mjs.map +7 -0
- package/dist/lib/neutral/react-surface-YMZRO242.mjs +26 -0
- package/dist/lib/neutral/react-surface-YMZRO242.mjs.map +7 -0
- package/dist/lib/neutral/summarize-LA7TRW7A.mjs +78 -0
- package/dist/lib/neutral/summarize-LA7TRW7A.mjs.map +7 -0
- package/dist/lib/neutral/text-content-F4ASMITB.mjs +30 -0
- package/dist/lib/neutral/text-content-F4ASMITB.mjs.map +7 -0
- package/dist/lib/{node-esm/transcriber-UGB7ECX6.mjs → neutral/transcriber-ABHATBVH.mjs} +20 -18
- package/dist/lib/neutral/transcriber-ABHATBVH.mjs.map +7 -0
- package/dist/lib/neutral/translations.mjs +24 -0
- package/dist/lib/neutral/translations.mjs.map +7 -0
- package/dist/lib/neutral/types/index.mjs +10 -0
- package/dist/lib/neutral/types/index.mjs.map +7 -0
- package/dist/types/src/TranscriptionPlugin.d.ts +3 -1
- package/dist/types/src/TranscriptionPlugin.d.ts.map +1 -1
- package/dist/types/src/TranscriptionPlugin.node.d.ts +4 -0
- package/dist/types/src/TranscriptionPlugin.node.d.ts.map +1 -0
- package/dist/types/src/TranscriptionPlugin.test.d.ts +2 -0
- package/dist/types/src/TranscriptionPlugin.test.d.ts.map +1 -0
- package/dist/types/src/TranscriptionPlugin.workerd.d.ts +4 -0
- package/dist/types/src/TranscriptionPlugin.workerd.d.ts.map +1 -0
- package/dist/types/src/blueprints/index.d.ts +2 -0
- package/dist/types/src/blueprints/index.d.ts.map +1 -0
- package/dist/types/src/blueprints/transcription-blueprint.d.ts +4 -0
- package/dist/types/src/blueprints/transcription-blueprint.d.ts.map +1 -0
- package/dist/types/src/capabilities/blueprint-definition.d.ts +5 -4
- package/dist/types/src/capabilities/blueprint-definition.d.ts.map +1 -1
- package/dist/types/src/capabilities/index.d.ts +10 -5
- package/dist/types/src/capabilities/index.d.ts.map +1 -1
- package/dist/types/src/capabilities/operation-handler.d.ts +6 -0
- package/dist/types/src/capabilities/operation-handler.d.ts.map +1 -0
- package/dist/types/src/capabilities/react-surface.d.ts +3 -2
- package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
- package/dist/types/src/capabilities/text-content.d.ts +8 -0
- package/dist/types/src/capabilities/text-content.d.ts.map +1 -0
- package/dist/types/src/capabilities/transcriber.d.ts +4 -3
- package/dist/types/src/capabilities/transcriber.d.ts.map +1 -1
- package/dist/types/src/components/Oracle/Oracle.d.ts +24 -0
- package/dist/types/src/components/Oracle/Oracle.d.ts.map +1 -0
- package/dist/types/src/components/Oracle/Oracle.stories.d.ts +32 -0
- package/dist/types/src/components/Oracle/Oracle.stories.d.ts.map +1 -0
- package/dist/types/src/components/Oracle/index.d.ts +2 -0
- package/dist/types/src/components/Oracle/index.d.ts.map +1 -0
- package/dist/types/src/components/Transcription/Transcription.d.ts +13 -0
- package/dist/types/src/components/Transcription/Transcription.d.ts.map +1 -0
- package/dist/types/src/components/Transcription/Transcription.stories.d.ts +37 -0
- package/dist/types/src/components/Transcription/Transcription.stories.d.ts.map +1 -0
- package/dist/types/src/components/Transcription/index.d.ts +2 -0
- package/dist/types/src/components/Transcription/index.d.ts.map +1 -0
- package/dist/types/src/components/Transcription/transcription-extension.d.ts +15 -0
- package/dist/types/src/components/Transcription/transcription-extension.d.ts.map +1 -0
- package/dist/types/src/components/index.d.ts +2 -3
- package/dist/types/src/components/index.d.ts.map +1 -1
- package/dist/types/src/containers/TranscriptionArticle/TranscriptionArticle.d.ts +6 -0
- package/dist/types/src/containers/TranscriptionArticle/TranscriptionArticle.d.ts.map +1 -0
- package/dist/types/src/containers/TranscriptionArticle/TranscriptionArticle.stories.d.ts +28 -0
- package/dist/types/src/containers/TranscriptionArticle/TranscriptionArticle.stories.d.ts.map +1 -0
- package/dist/types/src/containers/TranscriptionArticle/index.d.ts +2 -0
- package/dist/types/src/containers/TranscriptionArticle/index.d.ts.map +1 -0
- package/dist/types/src/containers/index.d.ts +3 -0
- package/dist/types/src/containers/index.d.ts.map +1 -0
- package/dist/types/src/enrichment/conversation.test.d.ts +2 -0
- package/dist/types/src/enrichment/conversation.test.d.ts.map +1 -0
- package/dist/types/src/enrichment/operations.d.ts +200 -0
- package/dist/types/src/enrichment/operations.d.ts.map +1 -0
- package/dist/types/src/enrichment/parser.d.ts +26 -0
- package/dist/types/src/enrichment/parser.d.ts.map +1 -0
- package/dist/types/src/enrichment/stream-simulator.d.ts +38 -0
- package/dist/types/src/enrichment/stream-simulator.d.ts.map +1 -0
- package/dist/types/src/hooks/index.d.ts +2 -1
- package/dist/types/src/hooks/index.d.ts.map +1 -1
- package/dist/types/src/hooks/useAudioFile.d.ts.map +1 -1
- package/dist/types/src/hooks/useAudioTrack.d.ts.map +1 -1
- package/dist/types/src/hooks/useFeedModelAdapter.d.ts +12 -0
- package/dist/types/src/hooks/useFeedModelAdapter.d.ts.map +1 -0
- package/dist/types/src/hooks/useTranscriber.d.ts +2 -2
- package/dist/types/src/hooks/useTranscriber.d.ts.map +1 -1
- package/dist/types/src/hooks/useTranscriptionRecording.d.ts +12 -0
- package/dist/types/src/hooks/useTranscriptionRecording.d.ts.map +1 -0
- package/dist/types/src/hooks/useVoiceInput.d.ts.map +1 -1
- package/dist/types/src/index.d.ts +2 -3
- package/dist/types/src/index.d.ts.map +1 -1
- package/dist/types/src/meta.d.ts +2 -2
- package/dist/types/src/meta.d.ts.map +1 -1
- package/dist/types/src/model/model.d.ts +2 -2
- package/dist/types/src/model/model.d.ts.map +1 -1
- package/dist/types/src/{segments-normalization → normalization}/index.d.ts +1 -1
- package/dist/types/src/normalization/index.d.ts.map +1 -0
- package/dist/types/src/{segments-normalization → normalization}/message-normalizer.d.ts +9 -7
- package/dist/types/src/normalization/message-normalizer.d.ts.map +1 -0
- package/dist/types/src/normalization/normalization.d.ts +543 -0
- package/dist/types/src/normalization/normalization.d.ts.map +1 -0
- package/dist/types/src/normalization/normalization.test.d.ts.map +1 -0
- package/dist/types/src/normalization/utils.d.ts +3 -0
- package/dist/types/src/normalization/utils.d.ts.map +1 -0
- package/dist/types/src/operations/create.d.ts +5 -0
- package/dist/types/src/operations/create.d.ts.map +1 -0
- package/dist/types/src/operations/index.d.ts +3 -0
- package/dist/types/src/operations/index.d.ts.map +1 -0
- package/dist/types/src/operations/open.d.ts +5 -0
- package/dist/types/src/operations/open.d.ts.map +1 -0
- package/dist/types/src/operations/summarize.d.ts +8 -0
- package/dist/types/src/operations/summarize.d.ts.map +1 -0
- package/dist/types/src/plugin.d.ts +4 -0
- package/dist/types/src/plugin.d.ts.map +1 -0
- package/dist/types/src/stories/FileTranscription.stories.d.ts +20 -0
- package/dist/types/src/stories/FileTranscription.stories.d.ts.map +1 -0
- package/dist/types/src/{components/stories → stories}/KeyWordRecognition.stories.d.ts +2 -2
- package/dist/types/src/stories/KeyWordRecognition.stories.d.ts.map +1 -0
- package/dist/types/src/{components/stories/MicrophoneTranscription.stories.d.ts → stories/LiveTranscription.stories.d.ts} +7 -7
- package/dist/types/src/stories/LiveTranscription.stories.d.ts.map +1 -0
- package/dist/types/src/stories/TranscriptionStory.d.ts +21 -0
- package/dist/types/src/stories/TranscriptionStory.d.ts.map +1 -0
- package/dist/types/src/stories/common.d.ts +46 -0
- package/dist/types/src/stories/common.d.ts.map +1 -0
- package/dist/types/src/testing/testing.d.ts +13 -14
- package/dist/types/src/testing/testing.d.ts.map +1 -1
- package/dist/types/src/transcriber/index.d.ts +1 -1
- package/dist/types/src/transcriber/index.d.ts.map +1 -1
- package/dist/types/src/transcriber/media-stream-recorder.d.ts +2 -2
- package/dist/types/src/transcriber/media-stream-recorder.d.ts.map +1 -1
- package/dist/types/src/transcriber/transcriber.d.ts +61 -6
- package/dist/types/src/transcriber/transcriber.d.ts.map +1 -1
- package/dist/types/src/transcriber/transcriber.test.d.ts +2 -0
- package/dist/types/src/transcriber/transcriber.test.d.ts.map +1 -0
- package/dist/types/src/transcriber/transcription-manager.d.ts +14 -9
- package/dist/types/src/transcriber/transcription-manager.d.ts.map +1 -1
- package/dist/types/src/translations.d.ts +9 -8
- package/dist/types/src/translations.d.ts.map +1 -1
- package/dist/types/src/types/TranscriptOperation.d.ts +917 -0
- package/dist/types/src/types/TranscriptOperation.d.ts.map +1 -0
- package/dist/types/src/types/TranscriptionCapabilities.d.ts +17 -0
- package/dist/types/src/types/TranscriptionCapabilities.d.ts.map +1 -0
- package/dist/types/src/types/index.d.ts +2 -3
- package/dist/types/src/types/index.d.ts.map +1 -1
- package/dist/types/src/util/array.d.ts.map +1 -1
- package/dist/types/src/util/get-time-str.d.ts.map +1 -1
- package/dist/types/src/util/index.d.ts +1 -0
- package/dist/types/src/util/index.d.ts.map +1 -1
- package/dist/types/src/util/monitor-audio-level.d.ts.map +1 -1
- package/dist/types/src/util/render-byline.d.ts +4 -0
- package/dist/types/src/util/render-byline.d.ts.map +1 -0
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +157 -82
- package/src/TranscriptionPlugin.node.ts +20 -0
- package/src/TranscriptionPlugin.test.ts +31 -0
- package/src/TranscriptionPlugin.tsx +20 -64
- package/src/TranscriptionPlugin.workerd.ts +18 -0
- package/src/blueprints/index.ts +5 -0
- package/src/blueprints/transcription-blueprint.ts +29 -0
- package/src/capabilities/blueprint-definition.ts +12 -24
- package/src/capabilities/index.ts +11 -7
- package/src/capabilities/operation-handler.ts +16 -0
- package/src/capabilities/react-surface.tsx +23 -14
- package/src/capabilities/text-content.ts +33 -0
- package/src/capabilities/transcriber.ts +53 -42
- package/src/components/Oracle/Oracle.stories.tsx +147 -0
- package/src/components/Oracle/Oracle.tsx +141 -0
- package/src/components/Oracle/index.ts +5 -0
- package/src/components/Transcription/Transcription.stories.tsx +213 -0
- package/src/components/Transcription/Transcription.tsx +58 -0
- package/src/components/{Transcript → Transcription}/index.ts +1 -1
- package/src/components/{Transcript/transcript-extension.ts → Transcription/transcription-extension.ts} +13 -9
- package/src/components/index.ts +2 -6
- package/src/containers/TranscriptionArticle/TranscriptionArticle.stories.tsx +61 -0
- package/src/containers/TranscriptionArticle/TranscriptionArticle.tsx +62 -0
- package/src/containers/TranscriptionArticle/index.ts +5 -0
- package/src/containers/index.ts +7 -0
- package/src/enrichment/conversation.test.ts +162 -0
- package/src/enrichment/conversation.txt +23 -0
- package/src/enrichment/operations.ts +268 -0
- package/src/enrichment/parser.ts +101 -0
- package/src/enrichment/stream-simulator.ts +125 -0
- package/src/hooks/index.ts +2 -1
- package/src/hooks/useFeedModelAdapter.ts +46 -0
- package/src/hooks/useTranscriber.ts +12 -4
- package/src/hooks/useTranscriptionRecording.ts +87 -0
- package/src/hooks/useVoiceInput.ts +2 -3
- package/src/index.ts +4 -5
- package/src/meta.ts +3 -3
- package/src/model/model.test.ts +20 -14
- package/src/model/model.ts +3 -3
- package/src/{segments-normalization → normalization}/message-normalizer.ts +37 -24
- package/src/{segments-normalization → normalization}/normalization.test.ts +8 -47
- package/src/normalization/normalization.ts +76 -0
- package/src/{segments-normalization → normalization}/utils.ts +2 -2
- package/src/operations/create.ts +24 -0
- package/src/operations/index.ts +11 -0
- package/src/operations/open.ts +28 -0
- package/src/operations/summarize.ts +101 -0
- package/src/plugin.ts +11 -0
- package/src/stories/FileTranscription.stories.tsx +143 -0
- package/src/{components/stories → stories}/KeyWordRecognition.stories.tsx +40 -40
- package/src/stories/LiveTranscription.stories.tsx +153 -0
- package/src/stories/TranscriptionStory.tsx +101 -0
- package/src/stories/common.ts +233 -0
- package/src/testing/testing.ts +49 -56
- package/src/transcriber/index.ts +1 -1
- package/src/transcriber/media-stream-recorder.ts +3 -3
- package/src/transcriber/transcriber.browser.test.ts +4 -5
- package/src/transcriber/transcriber.test.ts +104 -0
- package/src/transcriber/transcriber.ts +105 -60
- package/src/transcriber/transcription-manager.ts +33 -22
- package/src/translations.ts +10 -7
- package/src/types/TranscriptOperation.ts +103 -0
- package/src/types/TranscriptionCapabilities.ts +39 -0
- package/src/types/index.ts +2 -3
- package/src/util/index.ts +1 -0
- package/src/util/render-byline.ts +33 -0
- package/dist/lib/browser/TranscriptContainer-2GSL2XB5.mjs +0 -11
- package/dist/lib/browser/blueprint-definition-UAAJYVLZ.mjs +0 -150
- package/dist/lib/browser/blueprint-definition-UAAJYVLZ.mjs.map +0 -7
- package/dist/lib/browser/chunk-3MKZ2MNQ.mjs +0 -16
- package/dist/lib/browser/chunk-3MKZ2MNQ.mjs.map +0 -7
- package/dist/lib/browser/chunk-535OJKFO.mjs +0 -8
- package/dist/lib/browser/chunk-535OJKFO.mjs.map +0 -7
- package/dist/lib/browser/chunk-7DR6HZEF.mjs +0 -732
- package/dist/lib/browser/chunk-7DR6HZEF.mjs.map +0 -7
- package/dist/lib/browser/chunk-VBUIO677.mjs.map +0 -7
- package/dist/lib/browser/chunk-W7WKZTM4.mjs +0 -63
- package/dist/lib/browser/chunk-W7WKZTM4.mjs.map +0 -7
- package/dist/lib/browser/chunk-WH36ENNE.mjs.map +0 -7
- package/dist/lib/browser/index.mjs +0 -130
- package/dist/lib/browser/index.mjs.map +0 -7
- package/dist/lib/browser/intent-resolver-ZTKTEAQX.mjs +0 -25
- package/dist/lib/browser/intent-resolver-ZTKTEAQX.mjs.map +0 -7
- package/dist/lib/browser/meta.json +0 -1
- package/dist/lib/browser/react-surface-KA32A72I.mjs +0 -34
- package/dist/lib/browser/react-surface-KA32A72I.mjs.map +0 -7
- package/dist/lib/browser/transcriber-LWOLYQHC.mjs +0 -56
- package/dist/lib/browser/transcriber-LWOLYQHC.mjs.map +0 -7
- package/dist/lib/browser/types/index.mjs +0 -12
- package/dist/lib/node-esm/TranscriptContainer-GRLDCESB.mjs +0 -12
- package/dist/lib/node-esm/blueprint-definition-Z3LTZ3ID.mjs +0 -151
- package/dist/lib/node-esm/blueprint-definition-Z3LTZ3ID.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-K4AZOB5Y.mjs +0 -733
- package/dist/lib/node-esm/chunk-K4AZOB5Y.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-OLMSTF3M.mjs +0 -64
- package/dist/lib/node-esm/chunk-OLMSTF3M.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-Q6WD7L2J.mjs +0 -10
- package/dist/lib/node-esm/chunk-Q6WD7L2J.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-SWUVPFKR.mjs +0 -17
- package/dist/lib/node-esm/chunk-SWUVPFKR.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-YFN4FJFK.mjs +0 -467
- package/dist/lib/node-esm/chunk-YFN4FJFK.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-YVNQN2J6.mjs +0 -30
- package/dist/lib/node-esm/chunk-YVNQN2J6.mjs.map +0 -7
- package/dist/lib/node-esm/index.mjs +0 -131
- package/dist/lib/node-esm/index.mjs.map +0 -7
- package/dist/lib/node-esm/intent-resolver-55WH2GY6.mjs +0 -26
- package/dist/lib/node-esm/intent-resolver-55WH2GY6.mjs.map +0 -7
- package/dist/lib/node-esm/meta.json +0 -1
- package/dist/lib/node-esm/react-surface-GU7LW2JO.mjs +0 -35
- package/dist/lib/node-esm/react-surface-GU7LW2JO.mjs.map +0 -7
- package/dist/lib/node-esm/transcriber-UGB7ECX6.mjs.map +0 -7
- package/dist/lib/node-esm/types/index.mjs +0 -13
- package/dist/types/src/capabilities/capabilities.d.ts +0 -17
- package/dist/types/src/capabilities/capabilities.d.ts.map +0 -1
- package/dist/types/src/capabilities/intent-resolver.d.ts +0 -4
- package/dist/types/src/capabilities/intent-resolver.d.ts.map +0 -1
- package/dist/types/src/components/Transcript/Transcript.d.ts +0 -20
- package/dist/types/src/components/Transcript/Transcript.d.ts.map +0 -1
- package/dist/types/src/components/Transcript/Transcript.stories.d.ts +0 -39
- package/dist/types/src/components/Transcript/Transcript.stories.d.ts.map +0 -1
- package/dist/types/src/components/Transcript/deprecated/OldTranscript.d.ts +0 -28
- package/dist/types/src/components/Transcript/deprecated/OldTranscript.d.ts.map +0 -1
- package/dist/types/src/components/Transcript/index.d.ts +0 -2
- package/dist/types/src/components/Transcript/index.d.ts.map +0 -1
- package/dist/types/src/components/Transcript/transcript-extension.d.ts +0 -15
- package/dist/types/src/components/Transcript/transcript-extension.d.ts.map +0 -1
- package/dist/types/src/components/TranscriptContainer.d.ts +0 -9
- package/dist/types/src/components/TranscriptContainer.d.ts.map +0 -1
- package/dist/types/src/components/stories/FileTranscription.stories.d.ts +0 -18
- package/dist/types/src/components/stories/FileTranscription.stories.d.ts.map +0 -1
- package/dist/types/src/components/stories/KeyWordRecognition.stories.d.ts.map +0 -1
- package/dist/types/src/components/stories/MicrophoneTranscription.stories.d.ts.map +0 -1
- package/dist/types/src/components/stories/TranscriptionStory.d.ts +0 -12
- package/dist/types/src/components/stories/TranscriptionStory.d.ts.map +0 -1
- package/dist/types/src/components/stories/useIsSpeaking.d.ts +0 -3
- package/dist/types/src/components/stories/useIsSpeaking.d.ts.map +0 -1
- package/dist/types/src/functions/index.d.ts +0 -3
- package/dist/types/src/functions/index.d.ts.map +0 -1
- package/dist/types/src/functions/open.d.ts +0 -7
- package/dist/types/src/functions/open.d.ts.map +0 -1
- package/dist/types/src/functions/summarize.d.ts +0 -11
- package/dist/types/src/functions/summarize.d.ts.map +0 -1
- package/dist/types/src/hooks/useQueueModelAdapter.d.ts +0 -8
- package/dist/types/src/hooks/useQueueModelAdapter.d.ts.map +0 -1
- package/dist/types/src/segments-normalization/index.d.ts.map +0 -1
- package/dist/types/src/segments-normalization/message-normalizer.d.ts.map +0 -1
- package/dist/types/src/segments-normalization/normalization.d.ts +0 -476
- package/dist/types/src/segments-normalization/normalization.d.ts.map +0 -1
- package/dist/types/src/segments-normalization/normalization.test.d.ts.map +0 -1
- package/dist/types/src/segments-normalization/utils.d.ts +0 -3
- package/dist/types/src/segments-normalization/utils.d.ts.map +0 -1
- package/dist/types/src/types/Transcript.d.ts +0 -30
- package/dist/types/src/types/Transcript.d.ts.map +0 -1
- package/dist/types/src/types/TranscriptAction.d.ts +0 -23
- package/dist/types/src/types/TranscriptAction.d.ts.map +0 -1
- package/dist/types/src/types/types.d.ts +0 -5
- package/dist/types/src/types/types.d.ts.map +0 -1
- package/src/capabilities/capabilities.ts +0 -33
- package/src/capabilities/intent-resolver.ts +0 -18
- package/src/components/Transcript/Transcript.stories.tsx +0 -245
- package/src/components/Transcript/Transcript.tsx +0 -93
- package/src/components/Transcript/deprecated/OldTranscript.tsx +0 -260
- package/src/components/TranscriptContainer.tsx +0 -36
- package/src/components/stories/FileTranscription.stories.tsx +0 -256
- package/src/components/stories/MicrophoneTranscription.stories.tsx +0 -285
- package/src/components/stories/TranscriptionStory.tsx +0 -45
- package/src/components/stories/useIsSpeaking.tsx +0 -40
- package/src/functions/index.ts +0 -6
- package/src/functions/open.ts +0 -39
- package/src/functions/summarize.ts +0 -103
- package/src/hooks/useQueueModelAdapter.ts +0 -66
- package/src/segments-normalization/normalization.ts +0 -115
- package/src/types/Transcript.ts +0 -44
- package/src/types/TranscriptAction.ts +0 -24
- package/src/types/types.ts +0 -9
- package/dist/lib/{browser/types → neutral/blueprints}/index.mjs.map +0 -0
- package/dist/lib/{browser/TranscriptContainer-2GSL2XB5.mjs.map → neutral/chunk-J5LGTIGS.mjs.map} +0 -0
- package/dist/lib/{node-esm/types → neutral/hooks}/index.mjs.map +0 -0
- package/dist/lib/{node-esm/TranscriptContainer-GRLDCESB.mjs.map → neutral/index.mjs.map} +0 -0
- package/dist/types/src/{segments-normalization → normalization}/normalization.test.d.ts +0 -0
- package/src/{segments-normalization → normalization}/index.ts +1 -1
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/hooks/useAudioFile.ts", "../../../src/hooks/useAudioTrack.ts", "../../../src/hooks/useFeedModelAdapter.ts", "../../../src/hooks/useTranscriber.ts", "../../../src/hooks/useTranscriptionRecording.ts", "../../../src/hooks/useVoiceInput.ts"],
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { useEffect, useState } from 'react';\n\nimport { scheduleTask } from '@dxos/async';\nimport { Context } from '@dxos/context';\nimport { log } from '@dxos/log';\n\nexport type UseAudioState = {\n audio?: HTMLAudioElement;\n stream?: MediaStream;\n track?: MediaStreamTrack;\n};\n\nexport const useAudioFile = (audioUrl: string, constraints?: MediaTrackConstraints): UseAudioState => {\n const [{ audio, stream, track }, setStream] = useState<UseAudioState>({});\n useEffect(() => {\n const ctx = new Context();\n\n scheduleTask(ctx, async () => {\n // TODO(wittjosiah): Fetch to external url fails in headless storybook test.\n try {\n const response = await fetch(audioUrl);\n const blob = await response.blob();\n const objectUrl = URL.createObjectURL(blob);\n ctx.onDispose(() => {\n URL.revokeObjectURL(objectUrl);\n });\n\n const audio = new Audio();\n audio.src = objectUrl;\n\n await new Promise<void>((resolve, reject) => {\n audio.addEventListener(\n 'error',\n (err) => {\n log.error('error', { err });\n reject(err);\n },\n { once: true },\n );\n audio.addEventListener(\n 'canplay',\n async () => {\n resolve();\n },\n { once: true },\n );\n audio.load();\n });\n\n const audioCtx = new AudioContext();\n\n // Resume AudioContext if it's suspended.\n if (audioCtx.state === 'suspended') {\n await audioCtx.resume();\n }\n\n const destination = audioCtx.createMediaStreamDestination();\n destination.channelCount = 1;\n\n const source = audioCtx.createMediaElementSource(audio);\n source.connect(destination);\n const track = destination.stream.getAudioTracks()[0];\n if (constraints) {\n await track.applyConstraints(constraints).catch((err) => log.catch(err));\n }\n\n // Also connect to speakers so audio is audible.\n setStream({\n audio,\n stream: destination.stream,\n track: destination.stream.getAudioTracks()[0],\n });\n } catch (err) {\n log.catch(err);\n }\n });\n\n return () => {\n void ctx.dispose();\n };\n }, [audioUrl]);\n\n return { audio, stream, track };\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { useEffect, useState } from 'react';\n\n/**\n *\n */\n// TODO(burdon): Reconcile with react-ui-sfx and plugin-calls.\nexport const useAudioTrack = (active?: boolean, constraints?: MediaTrackConstraints): MediaStreamTrack | undefined => {\n const [track, setTrack] = useState<MediaStreamTrack>();\n useEffect(() => {\n if (!active) {\n track?.stop();\n setTrack(undefined);\n return;\n }\n\n const initAudio = async () => {\n const audio = new Audio();\n audio.srcObject = await navigator.mediaDevices.getUserMedia({ audio: constraints ?? true });\n const [track] = audio.srcObject.getAudioTracks();\n if (track) {\n setTrack(track);\n }\n };\n\n if (active) {\n void initAudio();\n }\n }, [active]);\n\n return track;\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { useEffect, useMemo } from 'react';\n\nimport type { Obj } from '@dxos/echo';\n\nimport { type ChunkRenderer, SerializationModel } from '../model';\n\n/**\n * Feeds an array of objects (typically from `useQuery(db, Query.from(feed))`) into a\n * `SerializationModel`, appending each new tail item as the array grows.\n *\n * @param renderer - chunk renderer.\n * @param objects - current snapshot of feed items.\n * @param initialChunks - chunks to seed the model with on first render.\n */\nexport const useFeedModelAdapter = <T extends Obj.Unknown>(\n renderer: ChunkRenderer<T>,\n objects: readonly T[],\n initialChunks: T[] = [],\n): SerializationModel<T> => {\n const model = useMemo(() => new SerializationModel<T>(renderer, initialChunks), [renderer]);\n\n // Seed the model with the current snapshot on first render and whenever the\n // identity of `objects` changes (e.g. feed swapped).\n useEffect(() => {\n for (const chunk of objects) {\n model.appendChunk(chunk);\n }\n }, [model, objects]);\n\n // Append new tail items as the array grows.\n useEffect(() => {\n if (model.chunks.length === objects.length) {\n return;\n }\n const chunk = objects.at(-1);\n if (chunk) {\n model.appendChunk(chunk);\n }\n }, [model, objects.length]);\n\n return model;\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { useEffect, useMemo } from 'react';\n\nimport { useCapabilities } from '@dxos/app-framework/ui';\n\nimport { TranscriptionCapabilities } from '#types';\n\nimport { type Transcriber } from '../transcriber';\n\n/**\n * Records audio while user is speaking and transcribes it after user is done speaking.\n */\nexport const useTranscriber = ({\n audioStreamTrack,\n recorderConfig,\n transcriberConfig,\n onSegments,\n transcribe,\n}: Partial<TranscriptionCapabilities.GetTranscriberProps>) => {\n const [getTranscriber] = useCapabilities(TranscriptionCapabilities.Transcriber);\n\n // Initialize audio transcription.\n const transcriber = useMemo<Transcriber | undefined>(() => {\n if (!getTranscriber || !audioStreamTrack || !onSegments) {\n return undefined;\n }\n\n return getTranscriber({\n audioStreamTrack,\n recorderConfig,\n transcriberConfig,\n onSegments,\n transcribe,\n });\n }, [getTranscriber, audioStreamTrack, recorderConfig, transcriberConfig, onSegments, transcribe]);\n\n useEffect(() => {\n return () => {\n void transcriber?.close();\n };\n }, [transcriber]);\n\n return transcriber;\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\nimport { useCallback, useEffect, useState } from 'react';\n\nimport { createFeedServiceLayer } from '@dxos/client/echo';\nimport { Feed, Obj } from '@dxos/echo';\nimport { runAndForwardErrors } from '@dxos/effect';\nimport { log } from '@dxos/log';\nimport { getSpace } from '@dxos/react-client/echo';\nimport { useIdentity } from '@dxos/react-client/halo';\nimport { Message, type Transcript } from '@dxos/types';\n\nimport { useAudioTrack } from './useAudioTrack';\nimport { useTranscriber } from './useTranscriber';\n\nexport type TranscriptionRecording = {\n recording: boolean;\n toggleRecording: () => void;\n};\n\n/**\n * Drives the recording lifecycle for a transcript: opens an audio track, feeds it through the\n * transcriber, and appends transcribed message batches to the transcript's feed. Returns the\n * recording flag and a toggle callback for the caller to wire to UI.\n */\nexport const useTranscriptionRecording = (transcript: Transcript.Transcript): TranscriptionRecording => {\n const space = getSpace(transcript);\n const identity = useIdentity();\n const feed = transcript.feed.target;\n\n const [recording, setRecording] = useState(false);\n const track = useAudioTrack(recording);\n\n // Append a transcribed message batch to the transcript's feed.\n const handleSegments = useCallback(\n async (blocks: Message.Message['blocks']) => {\n if (!space || !feed || blocks.length === 0) {\n return;\n }\n const sender = identity ? { identityDid: identity.did, name: identity.profile?.displayName } : {};\n const message = Obj.make(Message.Message, {\n sender,\n created: new Date().toISOString(),\n blocks,\n });\n const feedServiceLayer = createFeedServiceLayer(space.queues);\n await Feed.append(feed, [message]).pipe(Effect.provide(feedServiceLayer), runAndForwardErrors);\n },\n [space, feed, identity],\n );\n\n // Drive the transcriber lifecycle off the recording flag + audio track.\n const transcriber = useTranscriber({ audioStreamTrack: track, onSegments: handleSegments });\n useEffect(() => {\n if (!transcriber) {\n return;\n }\n let cancelled = false;\n // If `open()` rejects (e.g. mic permission denied, device init failure) we must\n // clear `recording` — otherwise the toolbar button reports \"stop\" forever while\n // nothing is actually being captured.\n void transcriber.open().then(\n () => {\n if (!cancelled && recording) {\n transcriber.startChunksRecording();\n }\n },\n (err) => {\n if (!cancelled) {\n log.catch(err);\n setRecording(false);\n }\n },\n );\n return () => {\n cancelled = true;\n transcriber.stopChunksRecording();\n };\n }, [transcriber, recording]);\n\n const toggleRecording = useCallback(() => setRecording((value) => !value), []);\n\n return { recording, toggleRecording };\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { useCallback, useEffect, useState } from 'react';\n\nimport { scheduleMicroTask } from '@dxos/async';\nimport { Context } from '@dxos/context';\nimport { log } from '@dxos/log';\nimport { useSoundEffect } from '@dxos/react-ui-sfx';\n\nimport { type TranscriberProps } from '../transcriber';\nimport { useAudioTrack } from './useAudioTrack';\nimport { useTranscriber } from './useTranscriber';\n\nexport type UseVoiceInputProps = {\n active?: boolean;\n onUpdate: (text: string) => void;\n};\n\n/**\n * Hook for voice input.\n */\nexport const useVoiceInput = ({ active, onUpdate }: UseVoiceInputProps) => {\n const soundStart = useSoundEffect('StartRecording');\n const soundStop = useSoundEffect('StopRecording');\n\n const handleSegments = useCallback<TranscriberProps['onSegments']>(async (segments) => {\n const text = segments.map((str) => str.text.trim().replace(/[^\\w\\s]/g, '')).join(' ');\n onUpdate(text);\n }, []);\n\n // Audio/transcription.\n const [recording, setRecording] = useState(false);\n const track = useAudioTrack(active);\n const transcriber = useTranscriber({\n audioStreamTrack: track,\n onSegments: handleSegments,\n });\n\n // Start/stop transcription.\n useEffect(() => {\n const ctx = new Context();\n scheduleMicroTask(ctx, async () => {\n if (active && transcriber) {\n await transcriber.open();\n log.info('starting...');\n setRecording(true);\n void soundStart.play();\n transcriber.startChunksRecording();\n } else if (!active && transcriber?.isOpen) {\n transcriber?.stopChunksRecording();\n await transcriber?.close();\n log.info('stopped');\n setRecording(false);\n void soundStop.play();\n }\n });\n\n return () => {\n void ctx.dispose();\n };\n }, [active, transcriber]);\n\n return { recording };\n};\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["useEffect", "useState", "scheduleTask", "Context", "log", "useAudioFile", "objectUrl", "createObjectURL", "ctx", "onDispose", "URL", "revokeObjectURL", "audio", "Audio", "Promise", "resolve", "addEventListener", "err", "reject", "once", "audioCtx", "state", "destination", "source", "createMediaElementSource", "connect", "track", "constraints", "applyConstraints", "catch", "setStream", "stream", "audioUrl", "useEffect", "useState", "useAudioTrack", "active", "constraints", "track", "setTrack", "stop", "undefined", "initAudio", "audio", "Audio", "srcObject", "navigator", "mediaDevices", "getUserMedia", "getAudioTracks", "useEffect", "useMemo", "useFeedModelAdapter", "renderer", "objects", "initialChunks", "model", "useMemo", "SerializationModel", "useEffect", "chunk", "appendChunk", "chunks", "length", "at", "useEffect", "useMemo", "useCapabilities", "TranscriptionCapabilities", "useTranscriber", "audioStreamTrack", "recorderConfig", "transcriberConfig", "onSegments", "transcribe", "getTranscriber", "Transcriber", "transcriber", "undefined", "close", "Effect", "useCallback", "useEffect", "useState", "createFeedServiceLayer", "Feed", "Obj", "runAndForwardErrors", "log", "getSpace", "useIdentity", "Message", "__dxlog_file", "identity", "useIdentity", "feed", "transcript", "target", "recording", "setRecording", "track", "useAudioTrack", "useState", "handleSegments", "useCallback", "name", "message", "Obj", "Message", "sender", "created", "Date", "toISOString", "blocks", "pipe", "Effect", "provide", "feedServiceLayer", "space", "onSegments", "useEffect", "cancelled", "transcriber", "startChunksRecording", "err", "log", "toggleRecording", "useCallback", "useEffect", "useState", "scheduleMicroTask", "Context", "log", "useSoundEffect", "__dxlog_file", "soundStop", "useSoundEffect", "handleSegments", "useCallback", "segments", "str", "trim", "onUpdate", "text", "transcriber", "useTranscriber", "audioStreamTrack", "track", "onSegments", "useEffect", "scheduleMicroTask", "active", "log", "setRecording", "soundStart", "startChunksRecording", "stopChunksRecording", "close"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
import {
|
|
2
|
+
__export
|
|
3
|
+
} from "./chunk-J5LGTIGS.mjs";
|
|
4
|
+
|
|
5
|
+
// src/types/TranscriptionCapabilities.ts
|
|
6
|
+
var TranscriptionCapabilities_exports = {};
|
|
7
|
+
__export(TranscriptionCapabilities_exports, {
|
|
8
|
+
Transcriber: () => Transcriber,
|
|
9
|
+
TranscriptionManager: () => TranscriptionManager
|
|
10
|
+
});
|
|
11
|
+
import { Capability } from "@dxos/app-framework";
|
|
12
|
+
import { meta } from "#meta";
|
|
13
|
+
var Transcriber = Capability.make(`${meta.id}.capability.transcriber`);
|
|
14
|
+
var TranscriptionManager = Capability.make(`${meta.id}.capability.transcription-manager`);
|
|
15
|
+
|
|
16
|
+
// src/types/TranscriptOperation.ts
|
|
17
|
+
var TranscriptOperation_exports = {};
|
|
18
|
+
__export(TranscriptOperation_exports, {
|
|
19
|
+
Create: () => Create,
|
|
20
|
+
MessageWithRangeId: () => MessageWithRangeId,
|
|
21
|
+
Open: () => Open,
|
|
22
|
+
SentenceNormalization: () => SentenceNormalization,
|
|
23
|
+
SentenceNormalizationInput: () => SentenceNormalizationInput,
|
|
24
|
+
SentenceNormalizationOutput: () => SentenceNormalizationOutput,
|
|
25
|
+
Summarize: () => Summarize
|
|
26
|
+
});
|
|
27
|
+
import * as Schema from "effect/Schema";
|
|
28
|
+
import { AiService } from "@dxos/ai";
|
|
29
|
+
import { SpaceSchema } from "@dxos/client/echo";
|
|
30
|
+
import { Operation } from "@dxos/compute";
|
|
31
|
+
import { Database, Feed, Ref } from "@dxos/echo";
|
|
32
|
+
import { Message, Transcript } from "@dxos/types";
|
|
33
|
+
import { meta as meta2 } from "#meta";
|
|
34
|
+
var TRANSCRIPT_OPERATION = `${meta2.id}.operation`;
|
|
35
|
+
var Create = Operation.make({
|
|
36
|
+
meta: {
|
|
37
|
+
key: `${TRANSCRIPT_OPERATION}.create`,
|
|
38
|
+
name: "Create Transcript"
|
|
39
|
+
},
|
|
40
|
+
input: Schema.Struct({
|
|
41
|
+
name: Schema.optional(Schema.String),
|
|
42
|
+
space: SpaceSchema
|
|
43
|
+
}),
|
|
44
|
+
output: Schema.Struct({
|
|
45
|
+
object: Transcript.Transcript
|
|
46
|
+
})
|
|
47
|
+
});
|
|
48
|
+
var MessageWithRangeId = Schema.extend(Message.Message, Schema.Struct({
|
|
49
|
+
rangeId: Schema.optional(Schema.Array(Schema.String)).annotations({
|
|
50
|
+
description: "The IDs of the messages that contain the sentences."
|
|
51
|
+
})
|
|
52
|
+
}));
|
|
53
|
+
var Open = Operation.make({
|
|
54
|
+
meta: {
|
|
55
|
+
key: "org.dxos.function.transcription.open",
|
|
56
|
+
name: "Open",
|
|
57
|
+
description: "Opens and reads the contents of a transcription object."
|
|
58
|
+
},
|
|
59
|
+
input: Schema.Struct({
|
|
60
|
+
transcript: Ref.Ref(Transcript.Transcript).annotations({
|
|
61
|
+
description: "The ID of the transcription object."
|
|
62
|
+
})
|
|
63
|
+
}),
|
|
64
|
+
output: Schema.Struct({
|
|
65
|
+
content: Schema.String
|
|
66
|
+
}),
|
|
67
|
+
services: [
|
|
68
|
+
Database.Service,
|
|
69
|
+
Feed.FeedService
|
|
70
|
+
]
|
|
71
|
+
});
|
|
72
|
+
var Summarize = Operation.make({
|
|
73
|
+
meta: {
|
|
74
|
+
key: "org.dxos.function.transcription.summarize",
|
|
75
|
+
name: "Summarize",
|
|
76
|
+
description: "Summarize a transcript of a meeting."
|
|
77
|
+
},
|
|
78
|
+
input: Schema.Struct({
|
|
79
|
+
transcript: Schema.String.annotations({
|
|
80
|
+
description: "The transcript of the meeting."
|
|
81
|
+
}),
|
|
82
|
+
notes: Schema.optional(Schema.String).annotations({
|
|
83
|
+
description: "Additional notes from the participants."
|
|
84
|
+
})
|
|
85
|
+
}),
|
|
86
|
+
output: Schema.Struct({
|
|
87
|
+
summary: Schema.String.annotations({
|
|
88
|
+
description: "The summary of the transcript."
|
|
89
|
+
})
|
|
90
|
+
}),
|
|
91
|
+
services: [
|
|
92
|
+
AiService.AiService
|
|
93
|
+
]
|
|
94
|
+
});
|
|
95
|
+
var SentenceNormalizationInput = Schema.Struct({
|
|
96
|
+
messages: Schema.Array(MessageWithRangeId).annotations({
|
|
97
|
+
description: "Messages to normalize into sentences."
|
|
98
|
+
})
|
|
99
|
+
});
|
|
100
|
+
var SentenceNormalizationOutput = Schema.Struct({
|
|
101
|
+
sentences: Schema.Array(MessageWithRangeId.pipe(Schema.mutable)).pipe(Schema.mutable).annotations({
|
|
102
|
+
description: "The sentences of the transcript."
|
|
103
|
+
})
|
|
104
|
+
});
|
|
105
|
+
var SentenceNormalization = Operation.make({
|
|
106
|
+
meta: {
|
|
107
|
+
key: "org.dxos.function.transcription.sentence-normalization",
|
|
108
|
+
name: "Sentence Normalization",
|
|
109
|
+
description: "Post process of transcription for sentence normalization"
|
|
110
|
+
},
|
|
111
|
+
input: SentenceNormalizationInput,
|
|
112
|
+
output: SentenceNormalizationOutput,
|
|
113
|
+
services: []
|
|
114
|
+
});
|
|
115
|
+
|
|
116
|
+
export {
|
|
117
|
+
TranscriptionCapabilities_exports,
|
|
118
|
+
TranscriptOperation_exports
|
|
119
|
+
};
|
|
120
|
+
//# sourceMappingURL=chunk-5FXU36PN.mjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/types/TranscriptionCapabilities.ts", "../../../src/types/TranscriptOperation.ts"],
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\n// @import-as-namespace\n\nimport { Capability } from '@dxos/app-framework';\n\nimport { meta } from '#meta';\n\nimport {\n type MediaStreamRecorderProps,\n type Transcriber as TranscriberType,\n type TranscriberProps,\n type TranscriptMessageEnricher,\n type TranscriptionManager as TranscriptionManagerType,\n} from '../transcriber';\n\nexport type GetTranscriberProps = {\n audioStreamTrack: MediaStreamTrack;\n recorderConfig?: Partial<MediaStreamRecorderProps['config']>;\n transcriberConfig?: Partial<TranscriberProps['config']>;\n onSegments: TranscriberProps['onSegments'];\n transcribe?: TranscriberProps['transcribe'];\n};\n\nexport type GetTranscriber = (props: GetTranscriberProps) => TranscriberType;\n\nexport type GetTranscriptionManagerProps = {\n messageEnricher?: TranscriptMessageEnricher;\n};\n\nexport type GetTranscriptionManager = (props: GetTranscriptionManagerProps) => TranscriptionManagerType;\n\nexport const Transcriber = Capability.make<GetTranscriber>(`${meta.id}.capability.transcriber`);\n\nexport const TranscriptionManager = Capability.make<GetTranscriptionManager>(\n `${meta.id}.capability.transcription-manager`,\n);\n", "//\n// Copyright 2025 DXOS.org\n//\n\n// @import-as-namespace\n\nimport * as Schema from 'effect/Schema';\n\nimport { AiService } from '@dxos/ai';\nimport { SpaceSchema } from '@dxos/client/echo';\nimport { Operation } from '@dxos/compute';\nimport { Database, Feed, Ref } from '@dxos/echo';\nimport { Message, Transcript } from '@dxos/types';\n\nimport { meta } from '#meta';\n\nconst TRANSCRIPT_OPERATION = `${meta.id}.operation`;\n\nexport const Create = Operation.make({\n meta: { key: `${TRANSCRIPT_OPERATION}.create`, name: 'Create Transcript' },\n input: Schema.Struct({\n name: Schema.optional(Schema.String),\n space: SpaceSchema,\n }),\n output: Schema.Struct({\n object: Transcript.Transcript,\n }),\n});\n\nexport const MessageWithRangeId = Schema.extend(\n Message.Message,\n Schema.Struct({\n rangeId: Schema.optional(Schema.Array(Schema.String)).annotations({\n description: 'The IDs of the messages that contain the sentences.',\n }),\n }),\n);\n\nexport type MessageWithRangeIdType = Schema.Schema.Type<typeof MessageWithRangeId>;\n\nexport const Open = Operation.make({\n meta: {\n key: 'org.dxos.function.transcription.open',\n name: 'Open',\n description: 'Opens and reads the contents of a transcription object.',\n },\n input: Schema.Struct({\n transcript: Ref.Ref(Transcript.Transcript).annotations({\n description: 'The ID of the transcription object.',\n }),\n }),\n output: Schema.Struct({\n content: Schema.String,\n }),\n services: [Database.Service, Feed.FeedService],\n});\n\nexport const Summarize = Operation.make({\n meta: {\n key: 'org.dxos.function.transcription.summarize',\n name: 'Summarize',\n description: 'Summarize a transcript of a meeting.',\n },\n input: Schema.Struct({\n transcript: Schema.String.annotations({\n description: 'The transcript of the meeting.',\n }),\n notes: Schema.optional(Schema.String).annotations({\n description: 'Additional notes from the participants.',\n }),\n }),\n output: Schema.Struct({\n summary: Schema.String.annotations({\n description: 'The summary of the transcript.',\n }),\n }),\n services: [AiService.AiService],\n});\n\nexport const SentenceNormalizationInput = Schema.Struct({\n messages: Schema.Array(MessageWithRangeId).annotations({\n description: 'Messages to normalize into sentences.',\n }),\n});\n\nexport type SentenceNormalizationInputType = Schema.Schema.Type<typeof SentenceNormalizationInput>;\n\nexport const SentenceNormalizationOutput = Schema.Struct({\n sentences: Schema.Array(MessageWithRangeId.pipe(Schema.mutable)).pipe(Schema.mutable).annotations({\n description: 'The sentences of the transcript.',\n }),\n});\n\nexport const SentenceNormalization = Operation.make({\n meta: {\n key: 'org.dxos.function.transcription.sentence-normalization',\n name: 'Sentence Normalization',\n description: 'Post process of transcription for sentence normalization',\n },\n input: SentenceNormalizationInput,\n output: SentenceNormalizationOutput,\n services: [],\n});\n"],
|
|
5
|
+
"mappings": ";;;;;AAAA;;;;;AAMA,SAASA,kBAAkB;AAE3B,SAASC,YAAY;AA0Bd,IAAMC,cAAcF,WAAWG,KAAqB,GAAGF,KAAKG,EAAE,yBAAyB;AAEvF,IAAMC,uBAAuBL,WAAWG,KAC7C,GAAGF,KAAKG,EAAE,mCAAmC;;;ACrC/C;;;;;;;;;;AAMA,YAAYE,YAAY;AAExB,SAASC,iBAAiB;AAC1B,SAASC,mBAAmB;AAC5B,SAASC,iBAAiB;AAC1B,SAASC,UAAUC,MAAMC,WAAW;AACpC,SAASC,SAASC,kBAAkB;AAEpC,SAASC,QAAAA,aAAY;AAErB,IAAMC,uBAAuB,GAAGD,MAAKE,EAAE;AAEhC,IAAMC,SAAST,UAAUU,KAAK;EACnCJ,MAAM;IAAEK,KAAK,GAAGJ,oBAAAA;IAA+BK,MAAM;EAAoB;EACzEC,OAAcC,cAAO;IACnBF,MAAaG,gBAAgBC,aAAM;IACnCC,OAAOlB;EACT,CAAA;EACAmB,QAAeJ,cAAO;IACpBK,QAAQd,WAAWA;EACrB,CAAA;AACF,CAAA;AAEO,IAAMe,qBAA4BC,cACvCjB,QAAQA,SACDU,cAAO;EACZQ,SAAgBP,gBAAgBQ,aAAaP,aAAM,CAAA,EAAGQ,YAAY;IAChEC,aAAa;EACf,CAAA;AACF,CAAA,CAAA;AAKK,IAAMC,OAAO1B,UAAUU,KAAK;EACjCJ,MAAM;IACJK,KAAK;IACLC,MAAM;IACNa,aAAa;EACf;EACAZ,OAAcC,cAAO;IACnBa,YAAYxB,IAAIA,IAAIE,WAAWA,UAAU,EAAEmB,YAAY;MACrDC,aAAa;IACf,CAAA;EACF,CAAA;EACAP,QAAeJ,cAAO;IACpBc,SAAgBZ;EAClB,CAAA;EACAa,UAAU;IAAC5B,SAAS6B;IAAS5B,KAAK6B;;AACpC,CAAA;AAEO,IAAMC,YAAYhC,UAAUU,KAAK;EACtCJ,MAAM;IACJK,KAAK;IACLC,MAAM;IACNa,aAAa;EACf;EACAZ,OAAcC,cAAO;IACnBa,YAAmBX,cAAOQ,YAAY;MACpCC,aAAa;IACf,CAAA;IACAQ,OAAclB,gBAAgBC,aAAM,EAAEQ,YAAY;MAChDC,aAAa;IACf,CAAA;EACF,CAAA;EACAP,QAAeJ,cAAO;IACpBoB,SAAgBlB,cAAOQ,YAAY;MACjCC,aAAa;IACf,CAAA;EACF,CAAA;EACAI,UAAU;IAAC/B,UAAUA;;AACvB,CAAA;AAEO,IAAMqC,6BAAoCrB,cAAO;EACtDsB,UAAiBb,aAAMH,kBAAAA,EAAoBI,YAAY;IACrDC,aAAa;EACf,CAAA;AACF,CAAA;AAIO,IAAMY,8BAAqCvB,cAAO;EACvDwB,WAAkBf,aAAMH,mBAAmBmB,KAAYC,cAAO,CAAA,EAAGD,KAAYC,cAAO,EAAEhB,YAAY;IAChGC,aAAa;EACf,CAAA;AACF,CAAA;AAEO,IAAMgB,wBAAwBzC,UAAUU,KAAK;EAClDJ,MAAM;IACJK,KAAK;IACLC,MAAM;IACNa,aAAa;EACf;EACAZ,OAAOsB;EACPjB,QAAQmB;EACRR,UAAU,CAAA;AACZ,CAAA;",
|
|
6
|
+
"names": ["Capability", "meta", "Transcriber", "make", "id", "TranscriptionManager", "Schema", "AiService", "SpaceSchema", "Operation", "Database", "Feed", "Ref", "Message", "Transcript", "meta", "TRANSCRIPT_OPERATION", "id", "Create", "make", "key", "name", "input", "Struct", "optional", "String", "space", "output", "object", "MessageWithRangeId", "extend", "rangeId", "Array", "annotations", "description", "Open", "transcript", "content", "services", "Service", "FeedService", "Summarize", "notes", "summary", "SentenceNormalizationInput", "messages", "SentenceNormalizationOutput", "sentences", "pipe", "mutable", "SentenceNormalization"]
|
|
7
|
+
}
|
|
@@ -1,13 +1,7 @@
|
|
|
1
|
-
var __defProp = Object.defineProperty;
|
|
2
|
-
var __export = (target, all) => {
|
|
3
|
-
for (var name in all)
|
|
4
|
-
__defProp(target, name, { get: all[name], enumerable: true });
|
|
5
|
-
};
|
|
6
|
-
|
|
7
1
|
// src/meta.ts
|
|
8
2
|
import { trim } from "@dxos/util";
|
|
9
3
|
var meta = {
|
|
10
|
-
id: "dxos.
|
|
4
|
+
id: "org.dxos.plugin.transcription",
|
|
11
5
|
name: "Transcription",
|
|
12
6
|
description: trim`
|
|
13
7
|
Real-time voice-to-text transcription service for capturing spoken content.
|
|
@@ -23,7 +17,6 @@ var meta = {
|
|
|
23
17
|
};
|
|
24
18
|
|
|
25
19
|
export {
|
|
26
|
-
__export,
|
|
27
20
|
meta
|
|
28
21
|
};
|
|
29
|
-
//# sourceMappingURL=chunk-
|
|
22
|
+
//# sourceMappingURL=chunk-GL4RS533.mjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/meta.ts"],
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { type Plugin } from '@dxos/app-framework';\nimport { trim } from '@dxos/util';\n\nexport const meta: Plugin.Meta = {\n id: 'org.dxos.plugin.transcription',\n name: 'Transcription',\n description: trim`\n Real-time voice-to-text transcription service for capturing spoken content.\n Convert audio input into searchable text that integrates seamlessly with notes and documents.\n `,\n icon: 'ph--microphone--regular',\n iconHue: 'sky',\n source: 'https://github.com/dxos/dxos/tree/main/packages/plugins/plugin-transcription',\n tags: ['labs'],\n screenshots: [],\n};\n"],
|
|
5
|
+
"mappings": ";AAKA,SAASA,YAAY;AAEd,IAAMC,OAAoB;EAC/BC,IAAI;EACJC,MAAM;EACNC,aAAaJ;;;;EAIbK,MAAM;EACNC,SAAS;EACTC,QAAQ;EACRC,MAAM;IAAC;;EACPC,aAAa,CAAA;AACf;",
|
|
6
|
+
"names": ["trim", "meta", "id", "name", "description", "icon", "iconHue", "source", "tags", "screenshots"]
|
|
7
|
+
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
|
-
|
|
3
|
-
} from "./chunk-
|
|
2
|
+
mergeFloat64Arrays
|
|
3
|
+
} from "./chunk-KAEXRX3Y.mjs";
|
|
4
4
|
|
|
5
5
|
// src/transcriber/media-stream-recorder.ts
|
|
6
6
|
import { MediaRecorder, register } from "extendable-media-recorder";
|
|
@@ -9,13 +9,13 @@ import { synchronized } from "@dxos/async";
|
|
|
9
9
|
import { invariant } from "@dxos/invariant";
|
|
10
10
|
import { log } from "@dxos/log";
|
|
11
11
|
import { trace } from "@dxos/tracing";
|
|
12
|
+
var __dxlog_file = "/__w/dxos/dxos/packages/plugins/plugin-transcription/src/transcriber/media-stream-recorder.ts";
|
|
12
13
|
function _ts_decorate(decorators, target, key, desc) {
|
|
13
14
|
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
14
15
|
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
15
16
|
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
16
17
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
17
18
|
}
|
|
18
|
-
var __dxlog_file = "/__w/dxos/dxos/packages/plugins/plugin-transcription/src/transcriber/media-stream-recorder.ts";
|
|
19
19
|
var initializingPromise;
|
|
20
20
|
var initializeExtendableMediaRecorder = async () => {
|
|
21
21
|
const { connect } = await import("extendable-media-recorder-wav-encoder");
|
|
@@ -51,12 +51,7 @@ var MediaStreamRecorder = class {
|
|
|
51
51
|
async start() {
|
|
52
52
|
await (initializingPromise ??= initializeExtendableMediaRecorder()).catch((err) => log.info("initializeExtendableMediaRecorder", {
|
|
53
53
|
err
|
|
54
|
-
}, {
|
|
55
|
-
F: __dxlog_file,
|
|
56
|
-
L: 69,
|
|
57
|
-
S: this,
|
|
58
|
-
C: (f, a) => f(...a)
|
|
59
|
-
}));
|
|
54
|
+
}, { "~LogMeta": "~LogMeta", F: __dxlog_file, L: 48, S: this }));
|
|
60
55
|
if (!this._mediaRecorder) {
|
|
61
56
|
const stream = new MediaStream([
|
|
62
57
|
this._mediaStreamTrack
|
|
@@ -68,15 +63,7 @@ var MediaStreamRecorder = class {
|
|
|
68
63
|
if (this._mediaRecorder.state === "recording") {
|
|
69
64
|
return;
|
|
70
65
|
}
|
|
71
|
-
invariant(this._onChunk, "MediaStreamRecorder: onChunk is not set", {
|
|
72
|
-
F: __dxlog_file,
|
|
73
|
-
L: 80,
|
|
74
|
-
S: this,
|
|
75
|
-
A: [
|
|
76
|
-
"this._onChunk",
|
|
77
|
-
"'MediaStreamRecorder: onChunk is not set'"
|
|
78
|
-
]
|
|
79
|
-
});
|
|
66
|
+
invariant(this._onChunk, "MediaStreamRecorder: onChunk is not set", { "~LogMeta": "~LogMeta", F: __dxlog_file, L: 62, S: this, A: ["this._onChunk", "'MediaStreamRecorder: onChunk is not set'"] });
|
|
80
67
|
this._mediaRecorder.ondataavailable = (event) => this._ondataavailable(event);
|
|
81
68
|
this._mediaRecorder.start(this._config.interval);
|
|
82
69
|
}
|
|
@@ -103,12 +90,7 @@ var MediaStreamRecorder = class {
|
|
|
103
90
|
...uint8Array
|
|
104
91
|
]));
|
|
105
92
|
} else {
|
|
106
|
-
log.warn("MediaStreamRecorder: no header", void 0, {
|
|
107
|
-
F: __dxlog_file,
|
|
108
|
-
L: 111,
|
|
109
|
-
S: this,
|
|
110
|
-
C: (f, a) => f(...a)
|
|
111
|
-
});
|
|
93
|
+
log.warn("MediaStreamRecorder: no header", void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file, L: 90, S: this });
|
|
112
94
|
return;
|
|
113
95
|
}
|
|
114
96
|
this._onChunk({
|
|
@@ -130,73 +112,48 @@ import { DeferredTask, Trigger } from "@dxos/async";
|
|
|
130
112
|
import { LifecycleState, Resource } from "@dxos/context";
|
|
131
113
|
import { log as log2 } from "@dxos/log";
|
|
132
114
|
import { trace as trace2 } from "@dxos/tracing";
|
|
133
|
-
|
|
134
|
-
// src/util/array.ts
|
|
135
|
-
var mergeFloat64Arrays = (arrays) => {
|
|
136
|
-
const newArray = new Float64Array(arrays.reduce((acc, array) => array.length + acc, 0));
|
|
137
|
-
let offset = 0;
|
|
138
|
-
for (const array of arrays) {
|
|
139
|
-
newArray.set(array, offset);
|
|
140
|
-
offset += array.length;
|
|
141
|
-
}
|
|
142
|
-
return newArray;
|
|
143
|
-
};
|
|
144
|
-
|
|
145
|
-
// src/transcriber/transcriber.ts
|
|
115
|
+
var __dxlog_file2 = "/__w/dxos/dxos/packages/plugins/plugin-transcription/src/transcriber/transcriber.ts";
|
|
146
116
|
function _ts_decorate2(decorators, target, key, desc) {
|
|
147
117
|
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
148
118
|
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
149
119
|
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
150
120
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
151
121
|
}
|
|
152
|
-
var
|
|
122
|
+
var DEFAULT_TRANSCRIPTION_URL = "https://calls-service.dxos.workers.dev";
|
|
153
123
|
var Transcriber = class extends Resource {
|
|
154
124
|
_audioChunks = [];
|
|
155
|
-
|
|
125
|
+
_lastTimestamp = 0;
|
|
156
126
|
_openTrigger = new Trigger({
|
|
157
127
|
autoReset: true
|
|
158
128
|
});
|
|
159
129
|
_config;
|
|
160
130
|
_recorder;
|
|
161
131
|
_onSegments;
|
|
132
|
+
_transcribeFn;
|
|
162
133
|
_recording = false;
|
|
163
134
|
_transcribeTask = void 0;
|
|
164
|
-
constructor({ config, recorder, onSegments }) {
|
|
135
|
+
constructor({ config, recorder, onSegments, transcribe }) {
|
|
165
136
|
super();
|
|
166
137
|
this._config = config;
|
|
167
138
|
this._recorder = recorder;
|
|
168
139
|
this._onSegments = onSegments;
|
|
140
|
+
this._transcribeFn = transcribe;
|
|
169
141
|
}
|
|
170
142
|
async _open(ctx) {
|
|
171
|
-
log2.info("opening", void 0, {
|
|
172
|
-
F: __dxlog_file2,
|
|
173
|
-
L: 102,
|
|
174
|
-
S: this,
|
|
175
|
-
C: (f, a) => f(...a)
|
|
176
|
-
});
|
|
143
|
+
log2.info("opening", void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file2, L: 43, S: this });
|
|
177
144
|
this._recorder.setOnChunk((chunk) => this._saveAudioChunk(chunk));
|
|
178
145
|
await this._recorder.start();
|
|
179
146
|
this._transcribeTask = new DeferredTask(ctx, async () => this._transcribe());
|
|
180
147
|
this._openTrigger.wake();
|
|
181
148
|
}
|
|
182
149
|
async _close() {
|
|
183
|
-
log2.info("closing", void 0, {
|
|
184
|
-
F: __dxlog_file2,
|
|
185
|
-
L: 110,
|
|
186
|
-
S: this,
|
|
187
|
-
C: (f, a) => f(...a)
|
|
188
|
-
});
|
|
150
|
+
log2.info("closing", void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file2, L: 50, S: this });
|
|
189
151
|
this._recording = false;
|
|
190
152
|
this._transcribeTask = void 0;
|
|
191
153
|
await this._recorder.stop();
|
|
192
154
|
}
|
|
193
155
|
startChunksRecording() {
|
|
194
|
-
log2.info("starting", void 0, {
|
|
195
|
-
F: __dxlog_file2,
|
|
196
|
-
L: 117,
|
|
197
|
-
S: this,
|
|
198
|
-
C: (f, a) => f(...a)
|
|
199
|
-
});
|
|
156
|
+
log2.info("starting", void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file2, L: 56, S: this });
|
|
200
157
|
if (this._lifecycleState !== LifecycleState.OPEN) {
|
|
201
158
|
return;
|
|
202
159
|
}
|
|
@@ -208,22 +165,12 @@ var Transcriber = class extends Resource {
|
|
|
208
165
|
}
|
|
209
166
|
this._recording = false;
|
|
210
167
|
this._transcribeTask?.schedule();
|
|
211
|
-
log2.info("stopped", void 0, {
|
|
212
|
-
F: __dxlog_file2,
|
|
213
|
-
L: 132,
|
|
214
|
-
S: this,
|
|
215
|
-
C: (f, a) => f(...a)
|
|
216
|
-
});
|
|
168
|
+
log2.info("stopped", void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file2, L: 68, S: this });
|
|
217
169
|
}
|
|
218
170
|
_saveAudioChunk(chunk) {
|
|
219
171
|
log2("saving audio chunk", {
|
|
220
172
|
chunk
|
|
221
|
-
}, {
|
|
222
|
-
F: __dxlog_file2,
|
|
223
|
-
L: 136,
|
|
224
|
-
S: this,
|
|
225
|
-
C: (f, a) => f(...a)
|
|
226
|
-
});
|
|
173
|
+
}, { "~LogMeta": "~LogMeta", F: __dxlog_file2, L: 71, S: this });
|
|
227
174
|
this._audioChunks.push(chunk);
|
|
228
175
|
if (!this._recording && (!this._transcribeTask || !this._transcribeTask.scheduled) && this._audioChunks.length >= this._config.prefixBufferChunksAmount) {
|
|
229
176
|
this._audioChunks = this._dropOldChunks();
|
|
@@ -234,12 +181,7 @@ var Transcriber = class extends Resource {
|
|
|
234
181
|
async _transcribe() {
|
|
235
182
|
log2("transcribing", {
|
|
236
183
|
chunks: this._audioChunks.length
|
|
237
|
-
}, {
|
|
238
|
-
F: __dxlog_file2,
|
|
239
|
-
L: 152,
|
|
240
|
-
S: this,
|
|
241
|
-
C: (f, a) => f(...a)
|
|
242
|
-
});
|
|
184
|
+
}, { "~LogMeta": "~LogMeta", F: __dxlog_file2, L: 83, S: this });
|
|
243
185
|
const chunks = this._audioChunks;
|
|
244
186
|
this._audioChunks = this._dropOldChunks();
|
|
245
187
|
if (chunks.length === 0) {
|
|
@@ -266,54 +208,41 @@ var Transcriber = class extends Resource {
|
|
|
266
208
|
}
|
|
267
209
|
async _fetchTranscription(audio) {
|
|
268
210
|
if (audio.length === 0) {
|
|
269
|
-
this._audioChunks = [];
|
|
270
211
|
throw new Error("No audio to send for transcribing");
|
|
271
212
|
}
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
213
|
+
let segments;
|
|
214
|
+
if (this._transcribeFn) {
|
|
215
|
+
segments = await this._transcribeFn(audio);
|
|
216
|
+
} else {
|
|
217
|
+
const endpoint = this._config.endpoint ?? DEFAULT_TRANSCRIPTION_URL;
|
|
218
|
+
const response = await fetch(`${endpoint}/transcribe`, {
|
|
219
|
+
method: "POST",
|
|
220
|
+
body: JSON.stringify({
|
|
221
|
+
audio
|
|
222
|
+
}),
|
|
223
|
+
headers: {
|
|
224
|
+
"Content-Type": "application/json"
|
|
225
|
+
}
|
|
226
|
+
});
|
|
227
|
+
if (!response.ok) {
|
|
228
|
+
throw new Error(`Transcription failed: ${response.statusText}`);
|
|
279
229
|
}
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
throw new Error(
|
|
230
|
+
({ segments } = await response.json());
|
|
231
|
+
}
|
|
232
|
+
if (!Array.isArray(segments)) {
|
|
233
|
+
throw new Error("Transcription response payload is invalid");
|
|
284
234
|
}
|
|
285
|
-
const { segments } = await response.json();
|
|
286
235
|
log2.info("transcription response", {
|
|
287
|
-
segments: segments.length
|
|
288
|
-
|
|
289
|
-
}, {
|
|
290
|
-
F: __dxlog_file2,
|
|
291
|
-
L: 216,
|
|
292
|
-
S: this,
|
|
293
|
-
C: (f, a) => f(...a)
|
|
294
|
-
});
|
|
236
|
+
segments: segments.length
|
|
237
|
+
}, { "~LogMeta": "~LogMeta", F: __dxlog_file2, L: 137, S: this });
|
|
295
238
|
return segments;
|
|
296
239
|
}
|
|
297
240
|
_alignSegments(segments, originalChunks) {
|
|
298
|
-
const
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
return {
|
|
302
|
-
...segment,
|
|
303
|
-
words,
|
|
304
|
-
text: words.map((word) => word.word).join(""),
|
|
305
|
-
start: words.at(0)?.start ?? segment.end
|
|
306
|
-
};
|
|
307
|
-
}).filter((segment) => segment.words.length > 0);
|
|
308
|
-
if (filteredSegments.length === 0) {
|
|
309
|
-
return [];
|
|
241
|
+
const result = alignWhisperSegments(segments, originalChunks, this._lastTimestamp);
|
|
242
|
+
if (result.lastTimestamp !== void 0) {
|
|
243
|
+
this._lastTimestamp = result.lastTimestamp;
|
|
310
244
|
}
|
|
311
|
-
|
|
312
|
-
return filteredSegments.map((segment) => ({
|
|
313
|
-
_tag: "transcript",
|
|
314
|
-
started: new Date(zeroTimestamp + segment.start * 1e3).toISOString(),
|
|
315
|
-
text: segment.text.trim()
|
|
316
|
-
}));
|
|
245
|
+
return result.transcripts;
|
|
317
246
|
}
|
|
318
247
|
};
|
|
319
248
|
_ts_decorate2([
|
|
@@ -326,13 +255,46 @@ _ts_decorate2([
|
|
|
326
255
|
showInBrowserTimeline: true
|
|
327
256
|
})
|
|
328
257
|
], Transcriber.prototype, "_fetchTranscription", null);
|
|
258
|
+
var alignWhisperSegments = (segments, originalChunks, lastTimestamp) => {
|
|
259
|
+
if (originalChunks.length === 0) {
|
|
260
|
+
return {
|
|
261
|
+
transcripts: []
|
|
262
|
+
};
|
|
263
|
+
}
|
|
264
|
+
const zeroTimestamp = originalChunks[0].timestamp;
|
|
265
|
+
const filteredSegments = segments.filter((segment) => zeroTimestamp + segment.end * 1e3 >= lastTimestamp).map((segment) => {
|
|
266
|
+
const words = segment.words.filter((word) => zeroTimestamp + word.start * 1e3 >= lastTimestamp);
|
|
267
|
+
return {
|
|
268
|
+
...segment,
|
|
269
|
+
words,
|
|
270
|
+
text: words.map((word) => word.word).join(""),
|
|
271
|
+
start: words.at(0)?.start ?? segment.end
|
|
272
|
+
};
|
|
273
|
+
}).filter((segment) => segment.words.length > 0);
|
|
274
|
+
if (filteredSegments.length === 0) {
|
|
275
|
+
return {
|
|
276
|
+
transcripts: []
|
|
277
|
+
};
|
|
278
|
+
}
|
|
279
|
+
return {
|
|
280
|
+
lastTimestamp: zeroTimestamp + filteredSegments.at(-1).end * 1e3,
|
|
281
|
+
transcripts: filteredSegments.map((segment) => ({
|
|
282
|
+
_tag: "transcript",
|
|
283
|
+
started: new Date(zeroTimestamp + segment.start * 1e3).toISOString(),
|
|
284
|
+
text: segment.text.trim()
|
|
285
|
+
}))
|
|
286
|
+
};
|
|
287
|
+
};
|
|
329
288
|
|
|
330
289
|
// src/transcriber/transcription-manager.ts
|
|
331
|
-
import {
|
|
290
|
+
import { Atom } from "@effect-atom/atom-react";
|
|
291
|
+
import * as Effect from "effect/Effect";
|
|
332
292
|
import { synchronized as synchronized2 } from "@dxos/async";
|
|
293
|
+
import { createFeedServiceLayer } from "@dxos/client/echo";
|
|
333
294
|
import { Resource as Resource2 } from "@dxos/context";
|
|
334
|
-
import { Obj } from "@dxos/echo";
|
|
335
|
-
import {
|
|
295
|
+
import { Feed, Obj } from "@dxos/echo";
|
|
296
|
+
import { runAndForwardErrors } from "@dxos/effect";
|
|
297
|
+
import { Message } from "@dxos/types";
|
|
336
298
|
function _ts_decorate3(decorators, target, key, desc) {
|
|
337
299
|
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
338
300
|
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
@@ -345,23 +307,29 @@ var TRANSCRIBE_AFTER_CHUNKS_AMOUNT = 50;
|
|
|
345
307
|
var TranscriptionManager = class extends Resource2 {
|
|
346
308
|
_edgeClient;
|
|
347
309
|
_messageEnricher;
|
|
310
|
+
_registry;
|
|
348
311
|
_audioStreamTrack = void 0;
|
|
349
312
|
_identityDid = void 0;
|
|
350
313
|
_mediaRecorder = void 0;
|
|
351
314
|
_transcriber = void 0;
|
|
352
|
-
|
|
353
|
-
|
|
315
|
+
_feed = void 0;
|
|
316
|
+
_feedServiceLayer = void 0;
|
|
317
|
+
_enabledAtom = Atom.make(false);
|
|
354
318
|
constructor(options) {
|
|
355
319
|
super();
|
|
356
320
|
this._edgeClient = options.edgeClient;
|
|
357
321
|
this._messageEnricher = options.messageEnricher;
|
|
322
|
+
this._registry = options.registry;
|
|
358
323
|
}
|
|
359
|
-
/** @reactive */
|
|
360
324
|
get enabled() {
|
|
361
|
-
return this.
|
|
325
|
+
return this._enabledAtom;
|
|
326
|
+
}
|
|
327
|
+
getEnabled() {
|
|
328
|
+
return this._registry.get(this._enabledAtom);
|
|
362
329
|
}
|
|
363
|
-
|
|
364
|
-
this.
|
|
330
|
+
setFeed(space, feed) {
|
|
331
|
+
this._feed = feed;
|
|
332
|
+
this._feedServiceLayer = createFeedServiceLayer(space.queues);
|
|
365
333
|
return this;
|
|
366
334
|
}
|
|
367
335
|
setIdentityDid(did) {
|
|
@@ -371,7 +339,7 @@ var TranscriptionManager = class extends Resource2 {
|
|
|
371
339
|
return this;
|
|
372
340
|
}
|
|
373
341
|
setRecording(recording) {
|
|
374
|
-
if (!this.isOpen || !this.
|
|
342
|
+
if (!this.isOpen || !this.getEnabled()) {
|
|
375
343
|
return this;
|
|
376
344
|
}
|
|
377
345
|
if (recording) {
|
|
@@ -382,10 +350,10 @@ var TranscriptionManager = class extends Resource2 {
|
|
|
382
350
|
return this;
|
|
383
351
|
}
|
|
384
352
|
async setEnabled(enabled) {
|
|
385
|
-
if (this.
|
|
353
|
+
if (this.getEnabled() === enabled) {
|
|
386
354
|
return;
|
|
387
355
|
}
|
|
388
|
-
this.
|
|
356
|
+
this._registry.set(this._enabledAtom, enabled ?? false);
|
|
389
357
|
if (enabled) {
|
|
390
358
|
await this._maybeRestartTranscriber();
|
|
391
359
|
} else {
|
|
@@ -406,7 +374,7 @@ var TranscriptionManager = class extends Resource2 {
|
|
|
406
374
|
await this._stopTranscriber();
|
|
407
375
|
}
|
|
408
376
|
async _maybeRestartTranscriber() {
|
|
409
|
-
if (!this._audioStreamTrack || !this.
|
|
377
|
+
if (!this._audioStreamTrack || !this.getEnabled() || !this.isOpen) {
|
|
410
378
|
return;
|
|
411
379
|
}
|
|
412
380
|
let needReinit = false;
|
|
@@ -436,10 +404,10 @@ var TranscriptionManager = class extends Resource2 {
|
|
|
436
404
|
await this._transcriber?.close();
|
|
437
405
|
}
|
|
438
406
|
async _onSegments(segments) {
|
|
439
|
-
if (!this.isOpen || !this.
|
|
407
|
+
if (!this.isOpen || !this._feed || !this._feedServiceLayer) {
|
|
440
408
|
return;
|
|
441
409
|
}
|
|
442
|
-
let block = Obj.make(
|
|
410
|
+
let block = Obj.make(Message.Message, {
|
|
443
411
|
created: (/* @__PURE__ */ new Date()).toISOString(),
|
|
444
412
|
blocks: segments,
|
|
445
413
|
sender: {
|
|
@@ -449,9 +417,9 @@ var TranscriptionManager = class extends Resource2 {
|
|
|
449
417
|
if (this._messageEnricher) {
|
|
450
418
|
block = await this._messageEnricher(block);
|
|
451
419
|
}
|
|
452
|
-
await
|
|
420
|
+
await Feed.append(this._feed, [
|
|
453
421
|
block
|
|
454
|
-
]);
|
|
422
|
+
]).pipe(Effect.provide(this._feedServiceLayer), runAndForwardErrors);
|
|
455
423
|
}
|
|
456
424
|
};
|
|
457
425
|
_ts_decorate3([
|
|
@@ -461,6 +429,7 @@ _ts_decorate3([
|
|
|
461
429
|
export {
|
|
462
430
|
MediaStreamRecorder,
|
|
463
431
|
Transcriber,
|
|
432
|
+
alignWhisperSegments,
|
|
464
433
|
TranscriptionManager
|
|
465
434
|
};
|
|
466
|
-
//# sourceMappingURL=chunk-
|
|
435
|
+
//# sourceMappingURL=chunk-ILSA3DU7.mjs.map
|