@dxos/plugin-transcription 0.8.4-main.5ea62a8 → 0.8.4-main.ae835ea
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/lib/browser/TranscriptContainer-2GSL2XB5.mjs +11 -0
- package/dist/lib/browser/{blueprint-definition-QQSGTX5F.mjs → blueprint-definition-UAAJYVLZ.mjs} +23 -15
- package/dist/lib/browser/blueprint-definition-UAAJYVLZ.mjs.map +7 -0
- package/dist/lib/browser/{chunk-TNEQFHIU.mjs → chunk-3MKZ2MNQ.mjs} +5 -5
- package/dist/lib/browser/chunk-3MKZ2MNQ.mjs.map +7 -0
- package/dist/lib/browser/{chunk-26XDG6GQ.mjs → chunk-535OJKFO.mjs} +2 -2
- package/dist/lib/browser/{chunk-5I4BMOGE.mjs → chunk-7DR6HZEF.mjs} +119 -170
- package/dist/lib/browser/chunk-7DR6HZEF.mjs.map +7 -0
- package/dist/lib/browser/{chunk-3X7HP44M.mjs → chunk-VBUIO677.mjs} +8 -5
- package/dist/lib/browser/chunk-VBUIO677.mjs.map +7 -0
- package/dist/lib/browser/{chunk-HXVGV7T6.mjs → chunk-W7WKZTM4.mjs} +4 -4
- package/dist/lib/browser/chunk-W7WKZTM4.mjs.map +7 -0
- package/dist/lib/browser/{chunk-BA64VLLR.mjs → chunk-WH36ENNE.mjs} +44 -64
- package/dist/lib/browser/{chunk-BA64VLLR.mjs.map → chunk-WH36ENNE.mjs.map} +2 -2
- package/dist/lib/browser/index.mjs +12 -13
- package/dist/lib/browser/index.mjs.map +3 -3
- package/dist/lib/browser/{intent-resolver-T3EGLS3L.mjs → intent-resolver-ZTKTEAQX.mjs} +5 -5
- package/dist/lib/browser/{intent-resolver-T3EGLS3L.mjs.map → intent-resolver-ZTKTEAQX.mjs.map} +1 -1
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/{react-surface-QYX74JNG.mjs → react-surface-KA32A72I.mjs} +8 -8
- package/dist/lib/browser/{react-surface-QYX74JNG.mjs.map → react-surface-KA32A72I.mjs.map} +1 -1
- package/dist/lib/browser/{transcriber-JOOAQVYV.mjs → transcriber-LWOLYQHC.mjs} +7 -7
- package/dist/lib/browser/{transcriber-JOOAQVYV.mjs.map → transcriber-LWOLYQHC.mjs.map} +1 -1
- package/dist/lib/browser/types/index.mjs +2 -2
- package/dist/lib/node-esm/{TranscriptContainer-BUWK63SI.mjs → TranscriptContainer-GRLDCESB.mjs} +4 -4
- package/dist/lib/node-esm/{blueprint-definition-4PLCTH5Q.mjs → blueprint-definition-Z3LTZ3ID.mjs} +23 -15
- package/dist/lib/node-esm/blueprint-definition-Z3LTZ3ID.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-DT3AOC3E.mjs → chunk-K4AZOB5Y.mjs} +119 -170
- package/dist/lib/node-esm/chunk-K4AZOB5Y.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-W72HVQMD.mjs → chunk-OLMSTF3M.mjs} +4 -4
- package/dist/lib/node-esm/chunk-OLMSTF3M.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-NWD757KH.mjs → chunk-Q6WD7L2J.mjs} +2 -2
- package/dist/lib/node-esm/{chunk-3QAIZGMW.mjs → chunk-SWUVPFKR.mjs} +5 -5
- package/dist/lib/node-esm/chunk-SWUVPFKR.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-J5GQ3KGX.mjs → chunk-YFN4FJFK.mjs} +44 -64
- package/dist/lib/node-esm/{chunk-J5GQ3KGX.mjs.map → chunk-YFN4FJFK.mjs.map} +2 -2
- package/dist/lib/node-esm/{chunk-QARUDLHN.mjs → chunk-YVNQN2J6.mjs} +8 -5
- package/dist/lib/node-esm/chunk-YVNQN2J6.mjs.map +7 -0
- package/dist/lib/node-esm/index.mjs +12 -13
- package/dist/lib/node-esm/index.mjs.map +3 -3
- package/dist/lib/node-esm/{intent-resolver-VDHCUAIO.mjs → intent-resolver-55WH2GY6.mjs} +5 -5
- package/dist/lib/node-esm/{intent-resolver-VDHCUAIO.mjs.map → intent-resolver-55WH2GY6.mjs.map} +1 -1
- package/dist/lib/node-esm/meta.json +1 -1
- package/dist/lib/node-esm/{react-surface-TM7XOQBR.mjs → react-surface-GU7LW2JO.mjs} +8 -8
- package/dist/lib/node-esm/{react-surface-TM7XOQBR.mjs.map → react-surface-GU7LW2JO.mjs.map} +1 -1
- package/dist/lib/node-esm/{transcriber-QPS55YP2.mjs → transcriber-UGB7ECX6.mjs} +7 -7
- package/dist/lib/node-esm/{transcriber-QPS55YP2.mjs.map → transcriber-UGB7ECX6.mjs.map} +1 -1
- package/dist/lib/node-esm/types/index.mjs +2 -2
- package/dist/types/src/TranscriptionPlugin.d.ts +1 -1
- package/dist/types/src/TranscriptionPlugin.d.ts.map +1 -1
- package/dist/types/src/capabilities/capabilities.d.ts.map +1 -1
- package/dist/types/src/components/Transcript/Transcript.d.ts +3 -3
- package/dist/types/src/components/Transcript/Transcript.d.ts.map +1 -1
- package/dist/types/src/components/Transcript/Transcript.stories.d.ts +1 -3
- package/dist/types/src/components/Transcript/Transcript.stories.d.ts.map +1 -1
- package/dist/types/src/components/Transcript/deprecated/OldTranscript.d.ts +1 -1
- package/dist/types/src/components/Transcript/deprecated/OldTranscript.d.ts.map +1 -1
- package/dist/types/src/components/Transcript/transcript-extension.d.ts +1 -5
- package/dist/types/src/components/Transcript/transcript-extension.d.ts.map +1 -1
- package/dist/types/src/components/stories/FileTranscription.stories.d.ts +0 -2
- package/dist/types/src/components/stories/FileTranscription.stories.d.ts.map +1 -1
- package/dist/types/src/components/stories/KeyWordRecognition.stories.d.ts +0 -1
- package/dist/types/src/components/stories/KeyWordRecognition.stories.d.ts.map +1 -1
- package/dist/types/src/components/stories/MicrophoneTranscription.stories.d.ts +0 -2
- package/dist/types/src/components/stories/MicrophoneTranscription.stories.d.ts.map +1 -1
- package/dist/types/src/components/stories/TranscriptionStory.d.ts +1 -1
- package/dist/types/src/components/stories/TranscriptionStory.d.ts.map +1 -1
- package/dist/types/src/functions/open.d.ts.map +1 -1
- package/dist/types/src/functions/summarize.d.ts.map +1 -1
- package/dist/types/src/hooks/useAudioFile.d.ts.map +1 -1
- package/dist/types/src/meta.d.ts +0 -1
- package/dist/types/src/meta.d.ts.map +1 -1
- package/dist/types/src/segments-normalization/normalization.d.ts +31 -16
- package/dist/types/src/segments-normalization/normalization.d.ts.map +1 -1
- package/dist/types/src/testing/testing.d.ts +1 -1
- package/dist/types/src/testing/testing.d.ts.map +1 -1
- package/dist/types/src/types/Transcript.d.ts +3 -3
- package/dist/types/src/types/Transcript.d.ts.map +1 -1
- package/dist/types/src/types/TranscriptAction.d.ts +1 -1
- package/dist/types/src/types/TranscriptAction.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +61 -62
- package/src/TranscriptionPlugin.tsx +56 -56
- package/src/capabilities/capabilities.ts +3 -3
- package/src/components/Transcript/Transcript.stories.tsx +24 -20
- package/src/components/Transcript/Transcript.tsx +15 -23
- package/src/components/Transcript/deprecated/OldTranscript.tsx +5 -5
- package/src/components/Transcript/transcript-extension.ts +2 -39
- package/src/components/TranscriptContainer.tsx +3 -3
- package/src/components/stories/FileTranscription.stories.tsx +25 -24
- package/src/components/stories/KeyWordRecognition.stories.tsx +2 -4
- package/src/components/stories/MicrophoneTranscription.stories.tsx +31 -29
- package/src/components/stories/TranscriptionStory.tsx +2 -2
- package/src/functions/open.ts +6 -4
- package/src/functions/summarize.ts +10 -4
- package/src/hooks/useAudioFile.ts +50 -45
- package/src/meta.ts +7 -4
- package/src/segments-normalization/normalization.test.ts +1 -1
- package/src/segments-normalization/normalization.ts +1 -1
- package/src/testing/testing.ts +5 -5
- package/src/types/Transcript.ts +1 -1
- package/src/types/TranscriptAction.ts +1 -1
- package/dist/lib/browser/TranscriptContainer-OX7OOODC.mjs +0 -11
- package/dist/lib/browser/blueprint-definition-QQSGTX5F.mjs.map +0 -7
- package/dist/lib/browser/chunk-3X7HP44M.mjs.map +0 -7
- package/dist/lib/browser/chunk-5I4BMOGE.mjs.map +0 -7
- package/dist/lib/browser/chunk-HXVGV7T6.mjs.map +0 -7
- package/dist/lib/browser/chunk-TNEQFHIU.mjs.map +0 -7
- package/dist/lib/node-esm/blueprint-definition-4PLCTH5Q.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-3QAIZGMW.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-DT3AOC3E.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-QARUDLHN.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-W72HVQMD.mjs.map +0 -7
- /package/dist/lib/browser/{TranscriptContainer-OX7OOODC.mjs.map → TranscriptContainer-2GSL2XB5.mjs.map} +0 -0
- /package/dist/lib/browser/{chunk-26XDG6GQ.mjs.map → chunk-535OJKFO.mjs.map} +0 -0
- /package/dist/lib/node-esm/{TranscriptContainer-BUWK63SI.mjs.map → TranscriptContainer-GRLDCESB.mjs.map} +0 -0
- /package/dist/lib/node-esm/{chunk-NWD757KH.mjs.map → chunk-Q6WD7L2J.mjs.map} +0 -0
|
@@ -12,7 +12,7 @@ import { type DataType } from '@dxos/schema';
|
|
|
12
12
|
import { useQueueModelAdapter } from '../hooks';
|
|
13
13
|
import { type Transcript } from '../types';
|
|
14
14
|
|
|
15
|
-
import { TranscriptView,
|
|
15
|
+
import { TranscriptView, renderByline } from './Transcript';
|
|
16
16
|
|
|
17
17
|
export type TranscriptionContainerProps = {
|
|
18
18
|
role: string;
|
|
@@ -24,10 +24,10 @@ export const TranscriptionContainer = ({ transcript }: TranscriptionContainerPro
|
|
|
24
24
|
const space = getSpace(transcript);
|
|
25
25
|
const members = useMembers(space?.key).map((member) => member.identity);
|
|
26
26
|
const queue = useQueue<DataType.Message>(transcript.queue.dxn, { pollInterval: 1_000 });
|
|
27
|
-
const model = useQueueModelAdapter(
|
|
27
|
+
const model = useQueueModelAdapter(renderByline(members), queue);
|
|
28
28
|
|
|
29
29
|
return (
|
|
30
|
-
<StackItem.Content
|
|
30
|
+
<StackItem.Content>
|
|
31
31
|
<TranscriptView attendableId={attendableId} space={space} model={model} transcript={transcript} />
|
|
32
32
|
</StackItem.Content>
|
|
33
33
|
);
|
|
@@ -2,8 +2,6 @@
|
|
|
2
2
|
// Copyright 2025 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
-
import '@dxos-theme';
|
|
6
|
-
|
|
7
5
|
import { type Meta, type StoryObj } from '@storybook/react-vite';
|
|
8
6
|
import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';
|
|
9
7
|
|
|
@@ -12,8 +10,8 @@ import { withPluginManager } from '@dxos/app-framework/testing';
|
|
|
12
10
|
import { scheduleTask } from '@dxos/async';
|
|
13
11
|
import { Context } from '@dxos/context';
|
|
14
12
|
import { Obj } from '@dxos/echo';
|
|
13
|
+
import { createQueueDXN } from '@dxos/echo/internal';
|
|
15
14
|
import { MemoryQueue } from '@dxos/echo-db';
|
|
16
|
-
import { createQueueDXN } from '@dxos/echo-schema';
|
|
17
15
|
import { FunctionExecutor, ServiceContainer } from '@dxos/functions';
|
|
18
16
|
import { log } from '@dxos/log';
|
|
19
17
|
import { ClientPlugin } from '@dxos/plugin-client';
|
|
@@ -21,17 +19,17 @@ import { PreviewPlugin } from '@dxos/plugin-preview';
|
|
|
21
19
|
import { SpacePlugin } from '@dxos/plugin-space';
|
|
22
20
|
import { StorybookLayoutPlugin } from '@dxos/plugin-storybook-layout';
|
|
23
21
|
import { ThemePlugin } from '@dxos/plugin-theme';
|
|
22
|
+
import { withLayout, withTheme } from '@dxos/react-ui/testing';
|
|
24
23
|
import { defaultTx } from '@dxos/react-ui-theme';
|
|
25
24
|
import { DataType } from '@dxos/schema';
|
|
26
25
|
import { Testing, seedTestData } from '@dxos/schema/testing';
|
|
27
|
-
import { withLayout, withTheme } from '@dxos/storybook-utils';
|
|
28
26
|
|
|
29
27
|
import { useAudioFile, useQueueModelAdapter, useTranscriber } from '../../hooks';
|
|
30
28
|
import { MessageNormalizer, getActorId } from '../../segments-normalization';
|
|
31
29
|
import { TestItem } from '../../testing';
|
|
32
30
|
import { type MediaStreamRecorderParams, type TranscriberParams } from '../../transcriber';
|
|
33
31
|
import { TranscriptionPlugin } from '../../TranscriptionPlugin';
|
|
34
|
-
import {
|
|
32
|
+
import { renderByline } from '../Transcript';
|
|
35
33
|
|
|
36
34
|
import { TranscriptionStory } from './TranscriptionStory';
|
|
37
35
|
import { useIsSpeaking } from './useIsSpeaking';
|
|
@@ -83,7 +81,7 @@ const AudioFile = ({
|
|
|
83
81
|
const queueDxn = useMemo(() => createQueueDXN(), []);
|
|
84
82
|
const queue = useMemo(() => new MemoryQueue<DataType.Message>(queueDxn), [queueDxn]);
|
|
85
83
|
|
|
86
|
-
const model = useQueueModelAdapter(
|
|
84
|
+
const model = useQueueModelAdapter(renderByline([]), queue);
|
|
87
85
|
const handleSegments = useCallback<TranscriberParams['onSegments']>(
|
|
88
86
|
async (blocks) => {
|
|
89
87
|
void queue?.append([
|
|
@@ -189,10 +187,10 @@ const AudioFile = ({
|
|
|
189
187
|
const meta = {
|
|
190
188
|
title: 'plugins/plugin-transcription/FileTranscription',
|
|
191
189
|
decorators: [
|
|
190
|
+
withTheme,
|
|
191
|
+
withLayout({ container: 'column' }),
|
|
192
192
|
withPluginManager({
|
|
193
193
|
plugins: [
|
|
194
|
-
ThemePlugin({ tx: defaultTx }),
|
|
195
|
-
StorybookLayoutPlugin(),
|
|
196
194
|
ClientPlugin({
|
|
197
195
|
types: [TestItem, DataType.Person, DataType.Organization, Testing.DocumentType],
|
|
198
196
|
onClientInitialized: async ({ client }) => {
|
|
@@ -202,16 +200,18 @@ const meta = {
|
|
|
202
200
|
await seedTestData(client.spaces.default);
|
|
203
201
|
},
|
|
204
202
|
}),
|
|
205
|
-
SpacePlugin(),
|
|
203
|
+
SpacePlugin({}),
|
|
204
|
+
IntentPlugin(),
|
|
205
|
+
|
|
206
|
+
// UI
|
|
207
|
+
ThemePlugin({ tx: defaultTx }),
|
|
206
208
|
SettingsPlugin(),
|
|
207
209
|
PreviewPlugin(),
|
|
208
|
-
IntentPlugin(),
|
|
209
210
|
TranscriptionPlugin(),
|
|
211
|
+
StorybookLayoutPlugin({}),
|
|
210
212
|
],
|
|
211
213
|
fireEvents: [Events.SetupAppGraph],
|
|
212
214
|
}),
|
|
213
|
-
withTheme,
|
|
214
|
-
withLayout({ fullscreen: true, classNames: 'justify-center' }),
|
|
215
215
|
],
|
|
216
216
|
} satisfies Meta;
|
|
217
217
|
|
|
@@ -241,15 +241,16 @@ export const Default: StoryObj<typeof AudioFile> = {
|
|
|
241
241
|
},
|
|
242
242
|
};
|
|
243
243
|
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
}
|
|
244
|
+
// TODO(mykola): Fix sentence normalization.
|
|
245
|
+
// export const WithSentenceNormalization: StoryObj<typeof AudioFile> = {
|
|
246
|
+
// render: AudioFile,
|
|
247
|
+
// args: {
|
|
248
|
+
// detectSpeaking: true,
|
|
249
|
+
// normalizeSentences: true,
|
|
250
|
+
// // https://learnenglish.britishcouncil.org/general-english/audio-zone/living-london
|
|
251
|
+
// audioUrl: 'https://dxos.network/audio-london.m4a',
|
|
252
|
+
// // textUrl: 'https://dxos.network/audio-london.txt',
|
|
253
|
+
// transcriberConfig: TRANSCRIBER_CONFIG,
|
|
254
|
+
// recorderConfig: RECORDER_CONFIG,
|
|
255
|
+
// },
|
|
256
|
+
// };
|
|
@@ -2,15 +2,13 @@
|
|
|
2
2
|
// Copyright 2025 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
-
import '@dxos-theme';
|
|
6
|
-
|
|
7
5
|
import { type Meta, type StoryObj } from '@storybook/react-vite';
|
|
8
6
|
import React, { useEffect, useMemo, useState } from 'react';
|
|
9
7
|
|
|
10
8
|
import { log } from '@dxos/log';
|
|
11
9
|
import { Toolbar } from '@dxos/react-ui';
|
|
10
|
+
import { withLayout, withTheme } from '@dxos/react-ui/testing';
|
|
12
11
|
import { mx } from '@dxos/react-ui-theme';
|
|
13
|
-
import { withLayout, withTheme } from '@dxos/storybook-utils';
|
|
14
12
|
|
|
15
13
|
type Word = {
|
|
16
14
|
text: string;
|
|
@@ -120,7 +118,7 @@ const DefaultStory = ({ keywords }: StoryProps) => {
|
|
|
120
118
|
const meta = {
|
|
121
119
|
title: 'plugins/plugin-transcription/KeyWordDetection',
|
|
122
120
|
render: DefaultStory,
|
|
123
|
-
decorators: [withTheme, withLayout({
|
|
121
|
+
decorators: [withTheme, withLayout({ container: 'column' })],
|
|
124
122
|
} satisfies Meta<typeof DefaultStory>;
|
|
125
123
|
|
|
126
124
|
export default meta;
|
|
@@ -2,8 +2,6 @@
|
|
|
2
2
|
// Copyright 2025 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
-
import '@dxos-theme';
|
|
6
|
-
|
|
7
5
|
import { type Meta, type StoryObj } from '@storybook/react-vite';
|
|
8
6
|
import React, { useCallback, useEffect, useMemo, useState } from 'react';
|
|
9
7
|
|
|
@@ -11,14 +9,14 @@ import { Events, IntentPlugin, SettingsPlugin } from '@dxos/app-framework';
|
|
|
11
9
|
import { withPluginManager } from '@dxos/app-framework/testing';
|
|
12
10
|
import {
|
|
13
11
|
type ExtractionFunction,
|
|
14
|
-
|
|
15
|
-
|
|
12
|
+
extractionAnthropicFunction,
|
|
13
|
+
extractionNerFunction,
|
|
16
14
|
getNer,
|
|
17
15
|
processTranscriptMessage,
|
|
18
16
|
} from '@dxos/assistant/extraction';
|
|
19
17
|
import { Filter, Obj, type Type } from '@dxos/echo';
|
|
18
|
+
import { createQueueDXN } from '@dxos/echo/internal';
|
|
20
19
|
import { MemoryQueue } from '@dxos/echo-db';
|
|
21
|
-
import { createQueueDXN } from '@dxos/echo-schema';
|
|
22
20
|
import { FunctionExecutor, ServiceContainer } from '@dxos/functions';
|
|
23
21
|
import { invariant } from '@dxos/invariant';
|
|
24
22
|
import { log } from '@dxos/log';
|
|
@@ -28,16 +26,16 @@ import { SpacePlugin } from '@dxos/plugin-space';
|
|
|
28
26
|
import { StorybookLayoutPlugin } from '@dxos/plugin-storybook-layout';
|
|
29
27
|
import { ThemePlugin } from '@dxos/plugin-theme';
|
|
30
28
|
import { IndexKind, useSpace } from '@dxos/react-client/echo';
|
|
29
|
+
import { withLayout, withTheme } from '@dxos/react-ui/testing';
|
|
31
30
|
import { defaultTx } from '@dxos/react-ui-theme';
|
|
32
31
|
import { DataType } from '@dxos/schema';
|
|
33
32
|
import { Testing, seedTestData } from '@dxos/schema/testing';
|
|
34
|
-
import { withLayout, withTheme } from '@dxos/storybook-utils';
|
|
35
33
|
|
|
36
34
|
import { useAudioTrack, useQueueModelAdapter, useTranscriber } from '../../hooks';
|
|
37
35
|
import { TestItem } from '../../testing';
|
|
38
36
|
import { type MediaStreamRecorderParams, type TranscriberParams } from '../../transcriber';
|
|
39
37
|
import { TranscriptionPlugin } from '../../TranscriptionPlugin';
|
|
40
|
-
import {
|
|
38
|
+
import { renderByline } from '../Transcript';
|
|
41
39
|
|
|
42
40
|
import { TranscriptionStory } from './TranscriptionStory';
|
|
43
41
|
import { useIsSpeaking } from './useIsSpeaking';
|
|
@@ -78,7 +76,7 @@ const DefaultStory = ({
|
|
|
78
76
|
// TODO(dmaretskyi): Use space.queues.create() instead.
|
|
79
77
|
const queueDxn = useMemo(() => createQueueDXN(), []);
|
|
80
78
|
const queue = useMemo(() => new MemoryQueue<DataType.Message>(queueDxn), [queueDxn]);
|
|
81
|
-
const model = useQueueModelAdapter(
|
|
79
|
+
const model = useQueueModelAdapter(renderByline([]), queue);
|
|
82
80
|
const space = useSpace();
|
|
83
81
|
|
|
84
82
|
useEffect(() => {
|
|
@@ -101,9 +99,9 @@ const DefaultStory = ({
|
|
|
101
99
|
if (entityExtraction === 'ner') {
|
|
102
100
|
// Init model loading. Takes time.
|
|
103
101
|
void getNer();
|
|
104
|
-
extractionFunction =
|
|
102
|
+
extractionFunction = extractionNerFunction;
|
|
105
103
|
} else if (entityExtraction === 'llm') {
|
|
106
|
-
extractionFunction =
|
|
104
|
+
extractionFunction = extractionAnthropicFunction;
|
|
107
105
|
objects = space.db
|
|
108
106
|
.query(
|
|
109
107
|
Filter.or(
|
|
@@ -197,10 +195,10 @@ const meta = {
|
|
|
197
195
|
title: 'plugins/plugin-transcription/MicrophoneTranscription',
|
|
198
196
|
render: DefaultStory,
|
|
199
197
|
decorators: [
|
|
198
|
+
withTheme,
|
|
199
|
+
withLayout({ container: 'column' }),
|
|
200
200
|
withPluginManager({
|
|
201
201
|
plugins: [
|
|
202
|
-
ThemePlugin({ tx: defaultTx }),
|
|
203
|
-
StorybookLayoutPlugin(),
|
|
204
202
|
ClientPlugin({
|
|
205
203
|
types: [TestItem, DataType.Person, DataType.Organization, Testing.DocumentType],
|
|
206
204
|
onClientInitialized: async ({ client }) => {
|
|
@@ -223,16 +221,18 @@ const meta = {
|
|
|
223
221
|
await seedTestData(client.spaces.default);
|
|
224
222
|
},
|
|
225
223
|
}),
|
|
226
|
-
SpacePlugin(),
|
|
224
|
+
SpacePlugin({}),
|
|
225
|
+
IntentPlugin(),
|
|
227
226
|
SettingsPlugin(),
|
|
227
|
+
|
|
228
|
+
// UI
|
|
229
|
+
ThemePlugin({ tx: defaultTx }),
|
|
228
230
|
PreviewPlugin(),
|
|
229
|
-
IntentPlugin(),
|
|
230
231
|
TranscriptionPlugin(),
|
|
232
|
+
StorybookLayoutPlugin({}),
|
|
231
233
|
],
|
|
232
234
|
fireEvents: [Events.SetupAppGraph],
|
|
233
235
|
}),
|
|
234
|
-
withTheme,
|
|
235
|
-
withLayout({ fullscreen: true, classNames: 'justify-center' }),
|
|
236
236
|
],
|
|
237
237
|
} satisfies Meta<typeof DefaultStory>;
|
|
238
238
|
|
|
@@ -254,19 +254,21 @@ export const Default: Story = {
|
|
|
254
254
|
},
|
|
255
255
|
};
|
|
256
256
|
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
}
|
|
257
|
+
// NOTE: We are running out of free quota on hugging face entity extraction.
|
|
258
|
+
// TODO(mykola): Fix hugging face quota issues.
|
|
259
|
+
// export const EntityExtraction: Story = {
|
|
260
|
+
// args: {
|
|
261
|
+
// detectSpeaking: true,
|
|
262
|
+
// entityExtraction: 'ner',
|
|
263
|
+
// transcriberConfig: TRANSCRIBER_CONFIG,
|
|
264
|
+
// recorderConfig: RECORDER_CONFIG,
|
|
265
|
+
// audioConstraints: {
|
|
266
|
+
// echoCancellation: true,
|
|
267
|
+
// noiseSuppression: true,
|
|
268
|
+
// autoGainControl: true,
|
|
269
|
+
// },
|
|
270
|
+
// },
|
|
271
|
+
// };
|
|
270
272
|
|
|
271
273
|
export const SpeechDetection: Story = {
|
|
272
274
|
args: {
|
|
@@ -19,7 +19,7 @@ export const TranscriptionStory: FC<{
|
|
|
19
19
|
disabled?: boolean;
|
|
20
20
|
running: boolean;
|
|
21
21
|
onRunningChange: Dispatch<SetStateAction<boolean>>;
|
|
22
|
-
audioRef?: RefObject<HTMLAudioElement>;
|
|
22
|
+
audioRef?: RefObject<HTMLAudioElement | null>;
|
|
23
23
|
}> = ({ model, running, onRunningChange, audioRef, disabled }) => {
|
|
24
24
|
const space = useSpace();
|
|
25
25
|
|
|
@@ -37,7 +37,7 @@ export const TranscriptionStory: FC<{
|
|
|
37
37
|
</Toolbar.Root>
|
|
38
38
|
<ScrollContainer.Root pin>
|
|
39
39
|
<ScrollContainer.Content>
|
|
40
|
-
<TranscriptView space={space} model={model}
|
|
40
|
+
<TranscriptView space={space} model={model} />
|
|
41
41
|
</ScrollContainer.Content>
|
|
42
42
|
</ScrollContainer.Root>
|
|
43
43
|
</div>
|
package/src/functions/open.ts
CHANGED
|
@@ -2,18 +2,20 @@
|
|
|
2
2
|
// Copyright 2025 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
-
import
|
|
5
|
+
import * as Effect from 'effect/Effect';
|
|
6
|
+
import * as Schema from 'effect/Schema';
|
|
6
7
|
|
|
7
8
|
import { ArtifactId } from '@dxos/assistant';
|
|
8
9
|
import { Obj } from '@dxos/echo';
|
|
9
10
|
import { DatabaseService, QueueService, defineFunction } from '@dxos/functions';
|
|
10
11
|
import { DataType } from '@dxos/schema';
|
|
11
12
|
|
|
12
|
-
import {
|
|
13
|
+
import { renderByline } from '../components';
|
|
13
14
|
import { Transcript } from '../types';
|
|
14
15
|
|
|
15
16
|
export default defineFunction({
|
|
16
|
-
|
|
17
|
+
key: 'dxos.org/function/transcription/open',
|
|
18
|
+
name: 'Open',
|
|
17
19
|
description: 'Opens and reads the contents of a transcription object.',
|
|
18
20
|
inputSchema: Schema.Struct({
|
|
19
21
|
id: ArtifactId.annotations({
|
|
@@ -30,7 +32,7 @@ export default defineFunction({
|
|
|
30
32
|
yield* Effect.promise(() => queue?.queryObjects());
|
|
31
33
|
const content = queue?.objects
|
|
32
34
|
.filter((message) => Obj.instanceOf(DataType.Message, message))
|
|
33
|
-
.flatMap((message, index) =>
|
|
35
|
+
.flatMap((message, index) => renderByline([])(message, index))
|
|
34
36
|
.join('\n\n');
|
|
35
37
|
return { content };
|
|
36
38
|
}),
|
|
@@ -2,7 +2,12 @@
|
|
|
2
2
|
// Copyright 2025 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
-
import
|
|
5
|
+
import * as Array from 'effect/Array';
|
|
6
|
+
import * as Effect from 'effect/Effect';
|
|
7
|
+
import * as Function from 'effect/Function';
|
|
8
|
+
import * as Layer from 'effect/Layer';
|
|
9
|
+
import * as Option from 'effect/Option';
|
|
10
|
+
import * as Schema from 'effect/Schema';
|
|
6
11
|
|
|
7
12
|
import { AiService, ConsolePrinter, ToolExecutionService, ToolResolverService } from '@dxos/ai';
|
|
8
13
|
import { AiSession, GenerationObserver } from '@dxos/assistant';
|
|
@@ -13,7 +18,8 @@ import { trim } from '@dxos/util';
|
|
|
13
18
|
* Summarize a transcript of a meeting.
|
|
14
19
|
*/
|
|
15
20
|
export default defineFunction({
|
|
16
|
-
|
|
21
|
+
key: 'dxos.org/function/transcription/summarize',
|
|
22
|
+
name: 'Summarize',
|
|
17
23
|
description: 'Summarize a transcript of a meeting.',
|
|
18
24
|
inputSchema: Schema.Struct({
|
|
19
25
|
transcript: Schema.String.annotations({
|
|
@@ -37,11 +43,11 @@ export default defineFunction({
|
|
|
37
43
|
observer: GenerationObserver.fromPrinter(new ConsolePrinter({ tag: 'summarize' })),
|
|
38
44
|
});
|
|
39
45
|
|
|
40
|
-
const summary = pipe(
|
|
46
|
+
const summary = Function.pipe(
|
|
41
47
|
result,
|
|
42
48
|
Array.findLast((msg) => msg.sender.role === 'assistant' && msg.blocks.some((block) => block._tag === 'text')),
|
|
43
49
|
Option.flatMap((msg) =>
|
|
44
|
-
pipe(
|
|
50
|
+
Function.pipe(
|
|
45
51
|
msg.blocks,
|
|
46
52
|
Array.findLast((block) => block._tag === 'text'),
|
|
47
53
|
Option.map((block) => block.text),
|
|
@@ -20,58 +20,63 @@ export const useAudioFile = (audioUrl: string, constraints?: MediaTrackConstrain
|
|
|
20
20
|
const ctx = new Context();
|
|
21
21
|
|
|
22
22
|
scheduleTask(ctx, async () => {
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
URL.
|
|
28
|
-
|
|
23
|
+
// TODO(wittjosiah): Fetch to external url fails in headless storybook test.
|
|
24
|
+
try {
|
|
25
|
+
const response = await fetch(audioUrl);
|
|
26
|
+
const blob = await response.blob();
|
|
27
|
+
const objectUrl = URL.createObjectURL(blob);
|
|
28
|
+
ctx.onDispose(() => {
|
|
29
|
+
URL.revokeObjectURL(objectUrl);
|
|
30
|
+
});
|
|
29
31
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
+
const audio = new Audio();
|
|
33
|
+
audio.src = objectUrl;
|
|
32
34
|
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
35
|
+
await new Promise<void>((resolve, reject) => {
|
|
36
|
+
audio.addEventListener(
|
|
37
|
+
'error',
|
|
38
|
+
(err) => {
|
|
39
|
+
log.error('error', { err });
|
|
40
|
+
reject(err);
|
|
41
|
+
},
|
|
42
|
+
{ once: true },
|
|
43
|
+
);
|
|
44
|
+
audio.addEventListener(
|
|
45
|
+
'canplay',
|
|
46
|
+
async () => {
|
|
47
|
+
resolve();
|
|
48
|
+
},
|
|
49
|
+
{ once: true },
|
|
50
|
+
);
|
|
51
|
+
audio.load();
|
|
52
|
+
});
|
|
51
53
|
|
|
52
|
-
|
|
54
|
+
const audioCtx = new AudioContext();
|
|
53
55
|
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
56
|
+
// Resume AudioContext if it's suspended.
|
|
57
|
+
if (audioCtx.state === 'suspended') {
|
|
58
|
+
await audioCtx.resume();
|
|
59
|
+
}
|
|
58
60
|
|
|
59
|
-
|
|
60
|
-
|
|
61
|
+
const destination = audioCtx.createMediaStreamDestination();
|
|
62
|
+
destination.channelCount = 1;
|
|
61
63
|
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
64
|
+
const source = audioCtx.createMediaElementSource(audio);
|
|
65
|
+
source.connect(destination);
|
|
66
|
+
const track = destination.stream.getAudioTracks()[0];
|
|
67
|
+
if (constraints) {
|
|
68
|
+
await track.applyConstraints(constraints).catch((err) => log.catch(err));
|
|
69
|
+
}
|
|
68
70
|
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
71
|
+
// Also connect to speakers so audio is audible.
|
|
72
|
+
setStream({
|
|
73
|
+
audio,
|
|
74
|
+
stream: destination.stream,
|
|
75
|
+
track: destination.stream.getAudioTracks()[0],
|
|
76
|
+
});
|
|
77
|
+
} catch (err) {
|
|
78
|
+
log.catch(err);
|
|
79
|
+
}
|
|
75
80
|
});
|
|
76
81
|
|
|
77
82
|
return () => {
|
package/src/meta.ts
CHANGED
|
@@ -3,14 +3,17 @@
|
|
|
3
3
|
//
|
|
4
4
|
|
|
5
5
|
import { type PluginMeta } from '@dxos/app-framework';
|
|
6
|
-
|
|
7
|
-
export const TRANSCRIPTION_PLUGIN = 'dxos.org/plugin/transcription';
|
|
6
|
+
import { trim } from '@dxos/util';
|
|
8
7
|
|
|
9
8
|
export const meta: PluginMeta = {
|
|
10
|
-
id:
|
|
9
|
+
id: 'dxos.org/plugin/transcription',
|
|
11
10
|
name: 'Transcription',
|
|
12
|
-
description:
|
|
11
|
+
description: trim`
|
|
12
|
+
Real-time voice-to-text transcription service for capturing spoken content.
|
|
13
|
+
Convert audio input into searchable text that integrates seamlessly with notes and documents.
|
|
14
|
+
`,
|
|
13
15
|
icon: 'ph--microphone--regular',
|
|
16
|
+
iconHue: 'sky',
|
|
14
17
|
source: 'https://github.com/dxos/dxos/tree/main/packages/plugins/plugin-transcription',
|
|
15
18
|
tags: ['labs'],
|
|
16
19
|
screenshots: [],
|
|
@@ -8,8 +8,8 @@ import { describe, test } from 'vitest';
|
|
|
8
8
|
import { scheduleTaskInterval } from '@dxos/async';
|
|
9
9
|
import { Context } from '@dxos/context';
|
|
10
10
|
import { Obj } from '@dxos/echo';
|
|
11
|
+
import { createQueueDXN } from '@dxos/echo/internal';
|
|
11
12
|
import { MemoryQueue } from '@dxos/echo-db';
|
|
12
|
-
import { createQueueDXN } from '@dxos/echo-schema';
|
|
13
13
|
import { FunctionExecutor, ServiceContainer } from '@dxos/functions';
|
|
14
14
|
import { log } from '@dxos/log';
|
|
15
15
|
import { DataType } from '@dxos/schema';
|
package/src/testing/testing.ts
CHANGED
|
@@ -2,15 +2,15 @@
|
|
|
2
2
|
// Copyright 2025 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
-
import
|
|
5
|
+
import * as Schema from 'effect/Schema';
|
|
6
6
|
import { useEffect, useMemo, useState } from 'react';
|
|
7
7
|
|
|
8
|
-
import {
|
|
8
|
+
import { extractionAnthropicFunction, processTranscriptMessage } from '@dxos/assistant/extraction';
|
|
9
9
|
import { scheduleTaskInterval } from '@dxos/async';
|
|
10
10
|
import { Filter, type Queue } from '@dxos/client/echo';
|
|
11
11
|
import { Context } from '@dxos/context';
|
|
12
12
|
import { type Key, Obj, Ref, Type } from '@dxos/echo';
|
|
13
|
-
import { createQueueDXN } from '@dxos/echo
|
|
13
|
+
import { createQueueDXN } from '@dxos/echo/internal';
|
|
14
14
|
import { FunctionExecutor, ServiceContainer } from '@dxos/functions';
|
|
15
15
|
import { IdentityDid } from '@dxos/keys';
|
|
16
16
|
import { log } from '@dxos/log';
|
|
@@ -74,7 +74,7 @@ export class MessageBuilder extends AbstractMessageBuilder {
|
|
|
74
74
|
const obj = this._space.db.add(Obj.make(TestItem, { title: label, description: faker.lorem.paragraph() }));
|
|
75
75
|
const dxn = Ref.make(obj).dxn.toString();
|
|
76
76
|
const words = text.split(' ');
|
|
77
|
-
words.splice(Math.floor(Math.random() * words.length), 0, `[${label}]
|
|
77
|
+
words.splice(Math.floor(Math.random() * words.length), 0, `[${label}](${dxn})`);
|
|
78
78
|
text = words.join(' ');
|
|
79
79
|
}
|
|
80
80
|
|
|
@@ -130,7 +130,7 @@ class EntityExtractionMessageBuilder extends AbstractMessageBuilder {
|
|
|
130
130
|
const { message: enhancedMessage } = await processTranscriptMessage({
|
|
131
131
|
input: { message },
|
|
132
132
|
executor: this.executor,
|
|
133
|
-
function:
|
|
133
|
+
function: extractionAnthropicFunction,
|
|
134
134
|
});
|
|
135
135
|
|
|
136
136
|
return enhancedMessage;
|
package/src/types/Transcript.ts
CHANGED
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
TranscriptContainer_default,
|
|
3
|
-
TranscriptionContainer
|
|
4
|
-
} from "./chunk-5I4BMOGE.mjs";
|
|
5
|
-
import "./chunk-TNEQFHIU.mjs";
|
|
6
|
-
import "./chunk-3X7HP44M.mjs";
|
|
7
|
-
export {
|
|
8
|
-
TranscriptionContainer,
|
|
9
|
-
TranscriptContainer_default as default
|
|
10
|
-
};
|
|
11
|
-
//# sourceMappingURL=TranscriptContainer-OX7OOODC.mjs.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../src/capabilities/blueprint-definition.ts", "../../../src/functions/open.ts", "../../../src/functions/summarize.ts"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { Capabilities, contributes } from '@dxos/app-framework';\nimport { Blueprint, Template } from '@dxos/blueprints';\nimport { type FunctionDefinition } from '@dxos/functions';\nimport { trim } from '@dxos/util';\n\nimport { open, summarize } from '../functions';\n\nconst functions: FunctionDefinition[] = [open, summarize];\n\nexport default () => {\n return [\n contributes(Capabilities.Functions, functions),\n contributes(\n Capabilities.BlueprintDefinition,\n Blueprint.make({\n key: 'dxos.org/blueprint/transcription',\n name: 'Transcription',\n tools: Blueprint.toolDefinitions({ functions }),\n instructions: Template.make({\n source: trim`\n You can open and summarize a meeting transcript.\n `,\n }),\n }),\n ),\n ];\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { Effect, Schema } from 'effect';\n\nimport { ArtifactId } from '@dxos/assistant';\nimport { Obj } from '@dxos/echo';\nimport { DatabaseService, QueueService, defineFunction } from '@dxos/functions';\nimport { DataType } from '@dxos/schema';\n\nimport { renderMarkdown } from '../components';\nimport { Transcript } from '../types';\n\nexport default defineFunction({\n name: 'dxos.org/function/transcription/open',\n description: 'Opens and reads the contents of a transcription object.',\n inputSchema: Schema.Struct({\n id: ArtifactId.annotations({\n description: 'The ID of the transcription object.',\n }),\n }),\n outputSchema: Schema.Struct({\n content: Schema.String,\n }),\n handler: Effect.fn(function* ({ data: { id } }) {\n const transcript = yield* DatabaseService.resolve(ArtifactId.toDXN(id), Transcript.Transcript);\n const { dxn } = yield* Effect.promise(() => transcript.queue.load());\n const queue = yield* QueueService.getQueue(dxn);\n yield* Effect.promise(() => queue?.queryObjects());\n const content = queue?.objects\n .filter((message) => Obj.instanceOf(DataType.Message, message))\n .flatMap((message, index) => renderMarkdown([])(message, index))\n .join('\\n\\n');\n return { content };\n }),\n});\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { Array, Effect, Layer, Option, Schema, pipe } from 'effect';\n\nimport { AiService, ConsolePrinter, ToolExecutionService, ToolResolverService } from '@dxos/ai';\nimport { AiSession, GenerationObserver } from '@dxos/assistant';\nimport { TracingService, defineFunction } from '@dxos/functions';\nimport { trim } from '@dxos/util';\n\n/**\n * Summarize a transcript of a meeting.\n */\nexport default defineFunction({\n name: 'dxos.org/function/transcription/summarize',\n description: 'Summarize a transcript of a meeting.',\n inputSchema: 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 outputSchema: Schema.Struct({\n summary: Schema.String.annotations({\n description: 'The summary of the transcript.',\n }),\n }),\n handler: Effect.fnUntraced(\n function* ({ data: { transcript, notes } }) {\n const result = yield* new AiSession().run({\n prompt: `Transcript: ${transcript}\\n\\nNotes: ${notes}`,\n history: [],\n system: systemPrompt,\n observer: GenerationObserver.fromPrinter(new ConsolePrinter({ tag: 'summarize' })),\n });\n\n const summary = pipe(\n result,\n Array.findLast((msg) => msg.sender.role === 'assistant' && msg.blocks.some((block) => block._tag === 'text')),\n Option.flatMap((msg) =>\n pipe(\n msg.blocks,\n Array.findLast((block) => block._tag === 'text'),\n Option.map((block) => block.text),\n ),\n ),\n Option.getOrThrowWith(() => new Error('No summary found')),\n );\n\n return { summary };\n },\n Effect.provide(\n Layer.mergeAll(\n AiService.model('@anthropic/claude-sonnet-4-0'),\n ToolResolverService.layerEmpty,\n ToolExecutionService.layerEmpty,\n TracingService.layerNoop,\n ),\n ),\n ),\n});\n\nconst systemPrompt = trim`\n You are a helpful assistant that summarizes transcripts of meetings.\n\n # Goal\n Create a markdown summary of the meeting transcript with text notes provided.\n Notes are very important so make sure to include them in the summary if they contain meaningful information.\n\n # Formatting\n - Format the summary as a markdown document without extra comments like \"Here is the summary of the transcript:\".\n - Use markdown formatting for headings and bullet points.\n - Format the summary as a list of key points and takeaways.\n - All names of people should be in bold.\n\n # Note Taking\n - Correlate items in the summary with the person of origin to build a coherent narrative.\n - Include short quotes verbatim where appropriate. Especially when concerned with design decisions and problem descriptions.\n\n # Tasks\n At the end of the summary include tasks.\n Extract only the tasks that are:\n - Directly actionable.\n - Clearly assigned to a person or team (or can easily be inferred).\n - Strongly implied by the conversation and/or user note (no speculative tasks).\n - Specific enough that someone reading them would know exactly what to do next.\n\n Format all tasks as markdown checkboxes using the syntax:\n - [ ] Task description.\n\n Additional information can be included (indented).\n\n If no actionable tasks are found, omit this tasks section.\n`;\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["Capabilities", "contributes", "Blueprint", "Template", "trim", "Effect", "Schema", "ArtifactId", "Obj", "DatabaseService", "QueueService", "defineFunction", "DataType", "defineFunction", "name", "description", "inputSchema", "Schema", "Struct", "id", "ArtifactId", "annotations", "outputSchema", "content", "String", "handler", "Effect", "fn", "data", "transcript", "DatabaseService", "resolve", "toDXN", "Transcript", "dxn", "promise", "queue", "load", "QueueService", "getQueue", "queryObjects", "objects", "filter", "message", "Obj", "instanceOf", "DataType", "Message", "flatMap", "index", "renderMarkdown", "join", "Array", "Effect", "Layer", "Option", "Schema", "pipe", "AiService", "ConsolePrinter", "ToolExecutionService", "ToolResolverService", "AiSession", "GenerationObserver", "TracingService", "defineFunction", "trim", "defineFunction", "name", "description", "inputSchema", "Schema", "Struct", "transcript", "String", "annotations", "notes", "optional", "outputSchema", "summary", "handler", "Effect", "fnUntraced", "data", "result", "AiSession", "run", "prompt", "history", "system", "systemPrompt", "observer", "GenerationObserver", "fromPrinter", "ConsolePrinter", "tag", "pipe", "Array", "findLast", "msg", "sender", "role", "blocks", "some", "block", "_tag", "Option", "flatMap", "map", "text", "getOrThrowWith", "Error", "provide", "Layer", "mergeAll", "AiService", "model", "ToolResolverService", "layerEmpty", "ToolExecutionService", "TracingService", "layerNoop", "trim", "functions", "open", "summarize", "contributes", "Capabilities", "Functions", "BlueprintDefinition", "Blueprint", "make", "key", "name", "tools", "toolDefinitions", "instructions", "Template", "source", "trim"]
|
|
7
|
-
}
|