@dxos/assistant 0.8.4-main.67995b8 → 0.8.4-main.72ec0f3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (176) hide show
  1. package/dist/lib/browser/chunk-J5LGTIGS.mjs +10 -0
  2. package/dist/lib/browser/extraction/index.mjs +121 -165
  3. package/dist/lib/browser/extraction/index.mjs.map +4 -4
  4. package/dist/lib/browser/index.mjs +1110 -1034
  5. package/dist/lib/browser/index.mjs.map +4 -4
  6. package/dist/lib/browser/meta.json +1 -1
  7. package/dist/lib/node-esm/chunk-HSLMI22Q.mjs +11 -0
  8. package/dist/lib/node-esm/extraction/index.mjs +121 -165
  9. package/dist/lib/node-esm/extraction/index.mjs.map +4 -4
  10. package/dist/lib/node-esm/index.mjs +1110 -1034
  11. package/dist/lib/node-esm/index.mjs.map +4 -4
  12. package/dist/lib/node-esm/meta.json +1 -1
  13. package/dist/types/src/{context/binding.d.ts → conversation/context.d.ts} +54 -5
  14. package/dist/types/src/conversation/context.d.ts.map +1 -0
  15. package/dist/types/src/conversation/conversation.d.ts +29 -26
  16. package/dist/types/src/conversation/conversation.d.ts.map +1 -1
  17. package/dist/types/src/conversation/index.d.ts +1 -0
  18. package/dist/types/src/conversation/index.d.ts.map +1 -1
  19. package/dist/types/src/diff.d.ts +15 -0
  20. package/dist/types/src/diff.d.ts.map +1 -0
  21. package/dist/types/src/diff.test.d.ts +2 -0
  22. package/dist/types/src/diff.test.d.ts.map +1 -0
  23. package/dist/types/src/errors.d.ts +46 -13
  24. package/dist/types/src/errors.d.ts.map +1 -1
  25. package/dist/types/src/execution-graph.d.ts +85 -0
  26. package/dist/types/src/execution-graph.d.ts.map +1 -0
  27. package/dist/types/src/execution-graph.test.d.ts +2 -0
  28. package/dist/types/src/execution-graph.test.d.ts.map +1 -0
  29. package/dist/types/src/extraction/extraction-llm-function/extraction-llm-function.d.ts +1 -1
  30. package/dist/types/src/extraction/extraction-llm-function/extraction-llm-function.d.ts.map +1 -1
  31. package/dist/types/src/extraction/extraction-ner-function/extraction-ner-function.d.ts +100 -57
  32. package/dist/types/src/extraction/extraction-ner-function/extraction-ner-function.d.ts.map +1 -1
  33. package/dist/types/src/extraction/extraction-ner-function/named-entity-recognition.d.ts.map +1 -1
  34. package/dist/types/src/extraction/extraction.d.ts +262 -221
  35. package/dist/types/src/extraction/extraction.d.ts.map +1 -1
  36. package/dist/types/src/extraction/quotes.d.ts +1 -1
  37. package/dist/types/src/extraction/quotes.d.ts.map +1 -1
  38. package/dist/types/src/functions/services.d.ts +18 -4
  39. package/dist/types/src/functions/services.d.ts.map +1 -1
  40. package/dist/types/src/index.d.ts +3 -2
  41. package/dist/types/src/index.d.ts.map +1 -1
  42. package/dist/types/src/session/GenericToolkit.d.ts +84 -0
  43. package/dist/types/src/session/GenericToolkit.d.ts.map +1 -0
  44. package/dist/types/src/session/artifact-diff.d.ts +27 -0
  45. package/dist/types/src/session/artifact-diff.d.ts.map +1 -0
  46. package/dist/types/src/session/error-handling.d.ts +4 -0
  47. package/dist/types/src/session/error-handling.d.ts.map +1 -0
  48. package/dist/types/src/session/format.d.ts +12 -0
  49. package/dist/types/src/session/format.d.ts.map +1 -0
  50. package/dist/types/src/session/format.test.d.ts +2 -0
  51. package/dist/types/src/session/format.test.d.ts.map +1 -0
  52. package/dist/types/src/session/index.d.ts +4 -0
  53. package/dist/types/src/session/index.d.ts.map +1 -1
  54. package/dist/types/src/session/observer.d.ts +22 -0
  55. package/dist/types/src/session/observer.d.ts.map +1 -0
  56. package/dist/types/src/session/session.d.ts +28 -237
  57. package/dist/types/src/session/session.d.ts.map +1 -1
  58. package/dist/types/src/session/toolkit.d.ts +15 -0
  59. package/dist/types/src/session/toolkit.d.ts.map +1 -0
  60. package/dist/types/src/session/version-pin.d.ts +4 -4
  61. package/dist/types/src/session/version-pin.d.ts.map +1 -1
  62. package/dist/types/src/templates/index.d.ts +1 -1
  63. package/dist/types/src/templates/system.d.ts +18 -0
  64. package/dist/types/src/templates/system.d.ts.map +1 -0
  65. package/dist/types/src/types/artifact.d.ts +20 -0
  66. package/dist/types/src/types/artifact.d.ts.map +1 -0
  67. package/dist/types/src/types/index.d.ts +2 -0
  68. package/dist/types/src/types/index.d.ts.map +1 -0
  69. package/dist/types/tsconfig.tsbuildinfo +1 -1
  70. package/package.json +33 -36
  71. package/src/conversation/context.ts +186 -0
  72. package/src/conversation/conversation.ts +93 -61
  73. package/src/conversation/index.ts +1 -0
  74. package/src/diff.test.ts +43 -0
  75. package/src/diff.ts +84 -0
  76. package/src/errors.ts +6 -1
  77. package/src/execution-graph.test.ts +740 -0
  78. package/src/execution-graph.ts +509 -0
  79. package/src/extraction/extraction-llm-function/extraction-llm-function.test.ts +10 -9
  80. package/src/extraction/extraction-llm-function/extraction-llm-function.ts +48 -56
  81. package/src/extraction/extraction-ner-function/extraction-ner-function.test.ts +18 -17
  82. package/src/extraction/extraction-ner-function/extraction-ner-function.ts +42 -43
  83. package/src/extraction/extraction-ner-function/named-entity-recognition.test.ts +12 -6
  84. package/src/extraction/extraction-ner-function/named-entity-recognition.ts +2 -0
  85. package/src/extraction/extraction.ts +7 -6
  86. package/src/extraction/quotes.test.ts +3 -3
  87. package/src/extraction/quotes.ts +4 -4
  88. package/src/functions/services.ts +108 -45
  89. package/src/index.ts +3 -2
  90. package/src/session/GenericToolkit.ts +130 -0
  91. package/src/session/artifact-diff.ts +41 -0
  92. package/src/session/error-handling.ts +41 -0
  93. package/src/session/format.test.ts +61 -0
  94. package/src/session/format.ts +144 -0
  95. package/src/session/index.ts +5 -0
  96. package/src/session/observer.ts +59 -0
  97. package/src/session/session.conversations.json +1 -0
  98. package/src/session/session.test.ts +38 -199
  99. package/src/session/session.ts +128 -251
  100. package/src/session/toolkit.ts +48 -0
  101. package/src/session/version-pin.ts +7 -8
  102. package/src/templates/index.ts +1 -1
  103. package/src/templates/instructions/format.tpl +61 -0
  104. package/src/templates/instructions/system.tpl +48 -0
  105. package/src/templates/system.ts +41 -0
  106. package/src/{types.ts → types/artifact.ts} +31 -7
  107. package/src/types/index.ts +5 -0
  108. package/src/typings.d.ts +5 -0
  109. package/dist/lib/browser/chunk-6WRGDEMH.mjs +0 -89
  110. package/dist/lib/browser/chunk-6WRGDEMH.mjs.map +0 -7
  111. package/dist/lib/browser/chunk-SIXTNSGV.mjs +0 -250
  112. package/dist/lib/browser/chunk-SIXTNSGV.mjs.map +0 -7
  113. package/dist/lib/browser/named-entity-recognition-O46UTCLR.mjs +0 -13
  114. package/dist/lib/node-esm/chunk-3UU5V4FS.mjs +0 -91
  115. package/dist/lib/node-esm/chunk-3UU5V4FS.mjs.map +0 -7
  116. package/dist/lib/node-esm/chunk-FD5NXKDP.mjs +0 -252
  117. package/dist/lib/node-esm/chunk-FD5NXKDP.mjs.map +0 -7
  118. package/dist/lib/node-esm/named-entity-recognition-W4VMRCH6.mjs +0 -14
  119. package/dist/types/bin/chat.d.ts +0 -2
  120. package/dist/types/bin/chat.d.ts.map +0 -1
  121. package/dist/types/src/context/binder.d.ts +0 -34
  122. package/dist/types/src/context/binder.d.ts.map +0 -1
  123. package/dist/types/src/context/binding.d.ts.map +0 -1
  124. package/dist/types/src/context/index.d.ts +0 -3
  125. package/dist/types/src/context/index.d.ts.map +0 -1
  126. package/dist/types/src/research/exa.d.ts +0 -12
  127. package/dist/types/src/research/exa.d.ts.map +0 -1
  128. package/dist/types/src/research/graph.d.ts +0 -51
  129. package/dist/types/src/research/graph.d.ts.map +0 -1
  130. package/dist/types/src/research/graph.test.d.ts +0 -2
  131. package/dist/types/src/research/graph.test.d.ts.map +0 -1
  132. package/dist/types/src/research/index.d.ts +0 -4
  133. package/dist/types/src/research/index.d.ts.map +0 -1
  134. package/dist/types/src/research/research.d.ts +0 -10
  135. package/dist/types/src/research/research.d.ts.map +0 -1
  136. package/dist/types/src/research/research.test.d.ts +0 -2
  137. package/dist/types/src/research/research.test.d.ts.map +0 -1
  138. package/dist/types/src/session/version-pin.test.d.ts +0 -2
  139. package/dist/types/src/session/version-pin.test.d.ts.map +0 -1
  140. package/dist/types/src/summarization/summarization.test.d.ts +0 -2
  141. package/dist/types/src/summarization/summarization.test.d.ts.map +0 -1
  142. package/dist/types/src/templates/prompt.d.ts +0 -30
  143. package/dist/types/src/templates/prompt.d.ts.map +0 -1
  144. package/dist/types/src/testing/exa-search-1748337321991.d.ts +0 -38
  145. package/dist/types/src/testing/exa-search-1748337321991.d.ts.map +0 -1
  146. package/dist/types/src/testing/exa-search-1748337331526.d.ts +0 -37
  147. package/dist/types/src/testing/exa-search-1748337331526.d.ts.map +0 -1
  148. package/dist/types/src/testing/exa-search-1748337344119.d.ts +0 -58
  149. package/dist/types/src/testing/exa-search-1748337344119.d.ts.map +0 -1
  150. package/dist/types/src/testing/index.d.ts +0 -3
  151. package/dist/types/src/testing/index.d.ts.map +0 -1
  152. package/dist/types/src/types.d.ts +0 -13
  153. package/dist/types/src/types.d.ts.map +0 -1
  154. package/src/context/binder.ts +0 -103
  155. package/src/context/binding.ts +0 -32
  156. package/src/context/index.ts +0 -6
  157. package/src/research/exa.ts +0 -97
  158. package/src/research/graph.test.ts +0 -64
  159. package/src/research/graph.ts +0 -369
  160. package/src/research/index.ts +0 -7
  161. package/src/research/instructions-research.tpl +0 -98
  162. package/src/research/research.test.ts +0 -190
  163. package/src/research/research.ts +0 -87
  164. package/src/session/__snapshots__/session.test.ts.snap +0 -32
  165. package/src/session/version-pin.test.ts +0 -7
  166. package/src/summarization/summarization.test.ts +0 -199
  167. package/src/templates/assistant.tpl +0 -111
  168. package/src/templates/prompt.ts +0 -45
  169. package/src/testing/exa-search-1748337321991.ts +0 -131
  170. package/src/testing/exa-search-1748337331526.ts +0 -144
  171. package/src/testing/exa-search-1748337344119.ts +0 -133
  172. package/src/testing/index.ts +0 -11
  173. package/src/typedefs.d.ts +0 -8
  174. /package/dist/lib/browser/{named-entity-recognition-O46UTCLR.mjs.map → chunk-J5LGTIGS.mjs.map} +0 -0
  175. /package/dist/lib/node-esm/{named-entity-recognition-W4VMRCH6.mjs.map → chunk-HSLMI22Q.mjs.map} +0 -0
  176. /package/src/extraction/extraction-llm-function/{instructions.tpl → transcription-instructions.tpl} +0 -0
@@ -2,13 +2,18 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
- import { AiTool, AiToolkit } from '@effect/ai';
5
+ import * as Tool from '@effect/ai/Tool';
6
+ import * as Toolkit from '@effect/ai/Toolkit';
6
7
  import { describe, it } from '@effect/vitest';
7
- import { Effect, Layer, Schema } from 'effect';
8
+ import * as Effect from 'effect/Effect';
9
+ import * as Layer from 'effect/Layer';
10
+ import * as Schema from 'effect/Schema';
8
11
 
9
- import { AiService, ToolExecutionService, ToolResolverService } from '@dxos/ai';
12
+ import { AiService, MemoizedAiService, ToolExecutionService, ToolResolverService } from '@dxos/ai';
10
13
  import { AiServiceTestingPreset } from '@dxos/ai/testing';
11
14
  import { Obj, Type } from '@dxos/echo';
15
+ import { TestHelpers } from '@dxos/effect';
16
+ import { TracingService } from '@dxos/functions';
12
17
  import { log } from '@dxos/log';
13
18
 
14
19
  import { AiSession } from './session';
@@ -28,8 +33,8 @@ const CalendarEventSchema = Schema.Struct({
28
33
 
29
34
  type CalendarEvent = Schema.Schema.Type<typeof CalendarEventSchema>;
30
35
 
31
- class TestToolkit extends AiToolkit.make(
32
- AiTool.make('Calculator', {
36
+ const TestToolkit = Toolkit.make(
37
+ Tool.make('Calculator', {
33
38
  description: 'Basic calculator tool',
34
39
  parameters: {
35
40
  input: Schema.String.annotations({
@@ -41,7 +46,7 @@ class TestToolkit extends AiToolkit.make(
41
46
  }),
42
47
  failure: Schema.Never,
43
48
  }),
44
- ) {}
49
+ );
45
50
 
46
51
  // Tool handlers.
47
52
  const toolkitLayer = TestToolkit.toLayer({
@@ -52,7 +57,7 @@ const toolkitLayer = TestToolkit.toLayer({
52
57
  const sanitizedInput = input.replace(/[^0-9+\-*/().\s]/g, '');
53
58
  log.info('calculate', { sanitizedInput });
54
59
 
55
- // eslint-disable-next-line no-new-func, @typescript-eslint/no-implied-eval
60
+ // eslint-disable-next-line @typescript-eslint/no-implied-eval
56
61
  return Function(`"use strict"; return (${sanitizedInput})`)();
57
62
  })();
58
63
 
@@ -60,182 +65,56 @@ const toolkitLayer = TestToolkit.toLayer({
60
65
  }),
61
66
  });
62
67
 
63
- describe.runIf(process.env.DX_RUN_SLOW_TESTS)('AiSession', () => {
68
+ const TestLayer = Layer.mergeAll(
69
+ toolkitLayer,
70
+ AiService.model('@anthropic/claude-3-5-sonnet-20241022'),
71
+ TracingService.layerNoop,
72
+ ToolResolverService.layerEmpty,
73
+ ToolExecutionService.layerEmpty,
74
+ ).pipe(
75
+ //
76
+ Layer.provideMerge(MemoizedAiService.layerTest()),
77
+ Layer.provide(AiServiceTestingPreset('direct')),
78
+ );
79
+
80
+ describe('AiSession', () => {
64
81
  it.effect(
65
82
  'no tools',
66
- Effect.fn(
67
- function* ({ expect }) {
83
+ Effect.fnUntraced(
84
+ function* (_) {
68
85
  const session = new AiSession({ operationModel: 'configured' });
69
-
70
86
  const response = yield* session.run({
71
87
  prompt: 'Hello world!',
72
88
  history: [],
73
89
  });
74
90
  log.info('response', { response });
75
91
  },
76
- Effect.provide(
77
- AiService.model('@anthropic/claude-3-5-sonnet-20241022').pipe(
78
- Layer.provideMerge(ToolResolverService.layerEmpty),
79
- Layer.provideMerge(ToolExecutionService.layerEmpty),
80
- Layer.provideMerge(AiServiceTestingPreset('direct')),
81
- ),
82
- ),
92
+ Effect.provide(TestLayer),
93
+ TestHelpers.provideTestContext,
83
94
  ),
84
95
  );
85
96
 
86
- it.effect.only(
97
+ it.effect(
87
98
  'calculator',
88
- Effect.fn(
89
- function* ({ expect }) {
99
+ Effect.fnUntraced(
100
+ function* (_) {
90
101
  const session = new AiSession({ operationModel: 'configured' });
91
-
102
+ const toolkit = yield* TestToolkit;
92
103
  const response = yield* session.run({
93
- prompt: 'What is 10 + 20?',
104
+ toolkit,
105
+ prompt: 'What is 10 + 30?',
94
106
  history: [],
95
- toolkit: TestToolkit,
96
107
  });
97
108
  log.info('response', { response });
98
109
  },
99
- Effect.provide(
100
- Layer.mergeAll(
101
- toolkitLayer,
102
- ToolResolverService.layerEmpty,
103
- ToolExecutionService.layerEmpty,
104
- AiService.model('@anthropic/claude-3-5-sonnet-20241022').pipe(
105
- Layer.provideMerge(AiServiceTestingPreset('direct')),
106
- ),
107
- ),
108
- ),
110
+ Effect.provide(TestLayer),
111
+ TestHelpers.provideTestContext,
109
112
  ),
110
113
  );
111
-
112
- // TODO(dmaretskyi): Revive test.
113
- /*
114
- it.skip('create calendar itinerary', { timeout: 60_000 }, async () => {
115
-
116
- // overrides: { model: 'llama3.1:8b' },
117
-
118
- const session = new AiSession({ operationModel: 'configured' });
119
-
120
- const objects = new Set<string>();
121
-
122
- // Define calendar artifact.
123
- const calendarArtifact = defineArtifact({
124
- id: 'artifact:dxos.org/plugin/calendar',
125
- name: 'Calendar',
126
- instructions: 'Use this to create and query calendar events.',
127
- schema: CalendarEventSchema,
128
- tools: [
129
- createTool('calendar', {
130
- name: 'query',
131
- description: 'Query the calendar for events',
132
- schema: Schema.Struct({}),
133
- execute: async () => {
134
- return ToolResult.Success(CALENDAR_EVENTS);
135
- },
136
- }),
137
- ],
138
- });
139
-
140
- const tableArtifact = defineArtifact({
141
- id: 'artifact:dxos.org/plugin/table',
142
- name: 'Table',
143
- instructions: 'Use this to create and manage tables. Each table has a unique id.',
144
- schema: Schema.Struct({}),
145
- tools: [
146
- createTool('table', {
147
- name: 'create',
148
- description: 'Create a table',
149
- schema: Schema.Struct({
150
- data: Schema.Array(Schema.Any).annotations({ description: 'Array of data payloads to add as rows' }),
151
- }),
152
- execute: async ({ data }) => {
153
- log('create table', { data });
154
- const id = DXN.fromLocalObjectId(ObjectId.random()).toString();
155
- objects.add(id);
156
- // TODO(dmaretskyi): consider xml for refs instead of @dxn:echo:@:XXXXX
157
- return ToolResult.Success(`table @${id}`);
158
- },
159
- }),
160
- ],
161
- });
162
-
163
- const mapArtifact = defineArtifact({
164
- id: 'artifact:dxos.org/plugin/map',
165
- name: 'Map',
166
- instructions:
167
- 'Use this to create and manage maps. Maps source data from tables. Table id is required to create a map.',
168
- schema: Schema.Struct({}),
169
- tools: [
170
- createTool('map', {
171
- name: 'create',
172
- description: 'Create a map',
173
- schema: Schema.Struct({
174
- source: ArtifactId.annotations({
175
- description: 'The table that will be used as the source of the map',
176
- }),
177
- }),
178
- execute: async ({ source }) => {
179
- // TODO(dmaretskyi): Use effect-schema decode instead of manual parsing.
180
- const sourceId = ArtifactId.toDXN(source);
181
- if (!objects.has(sourceId.toString())) {
182
- return ToolResult.Error(`table id=${source} not found`);
183
- }
184
- log('create map', { sourceId });
185
- const id = DXN.fromLocalObjectId(ObjectId.random()).toString();
186
- objects.add(id);
187
- // TODO(dmaretskyi): consider xml for refs instead of @dxn:echo:@:XXXXX
188
- return ToolResult.Success(`map @${id}`);
189
- },
190
- }),
191
- ],
192
- });
193
-
194
- const scriptArtifact = defineArtifact({
195
- id: 'artifact:dxos.org/plugin/script',
196
- name: 'Script',
197
- instructions: 'Use this to create and manage scripts',
198
- schema: Schema.Struct({}),
199
- tools: [],
200
- });
201
-
202
- // session.streamEvent.on((event) => {
203
- // printStreamEvent(event);
204
- // });
205
-
206
- const printer = new ConsolePrinter();
207
- session.message.on((message) => printer.printMessage(message));
208
- session.userMessage.on((message) => printer.printMessage(message));
209
- session.block.on((block) => printer.printContentBlock(block));
210
-
211
- // session.update.on((update) => {
212
- // log('update', { update });
213
- // });
214
-
215
- // Test creating an itinerary
216
- const response = await session.run({
217
- client: aiClient,
218
- tools: [],
219
- artifacts: [calendarArtifact, tableArtifact, mapArtifact, scriptArtifact],
220
- requiredArtifactIds: [calendarArtifact.id, tableArtifact.id, mapArtifact.id, scriptArtifact.id],
221
- history: [],
222
- generationOptions: {
223
- model: '@anthropic/claude-3-5-haiku-20241022',
224
- },
225
- prompt: 'create a table and map for a travel itinerary based on events in my calendar',
226
- toolResolver: new ToolRegistry([]),
227
- });
228
-
229
- log('result', {
230
- objects,
231
- finalMessage: response.at(-1),
232
- });
233
- });
234
- */
235
114
  });
236
115
 
237
116
  // Travel to rome, florence, livorno, siena, madrid for conferences
238
- // eslint-disable-next-line no-unused-vars
117
+
239
118
  const _CALENDAR_EVENTS: CalendarEvent[] = [
240
119
  Obj.make(CalendarEventSchema, {
241
120
  title: 'Exploring Ancient Ruins in Rome',
@@ -268,43 +147,3 @@ const _CALENDAR_EVENTS: CalendarEvent[] = [
268
147
  description: 'Travel to Madrid',
269
148
  }),
270
149
  ];
271
-
272
- // const printStreamEvent = (event: GenerationStreamEvent) => {
273
- // switch (event.type) {
274
- // case 'message_start': {
275
- // process.stdout.write(`${event.message.role.toUpperCase()}\n\n`);
276
- // for (const content of event.message.content) {
277
- // printContentBlock(content);
278
- // }
279
- // break;
280
- // }
281
- // case 'content_block_start': {
282
- // printContentBlock(event.content);
283
- // break;
284
- // }
285
- // case 'content_block_delta': {
286
- // switch (event.delta.type) {
287
- // case 'text_delta': {
288
- // process.stdout.write(event.delta.text);
289
- // break;
290
- // }
291
- // case 'input_json_delta': {
292
- // process.stdout.write(event.delta.partial_json);
293
- // break;
294
- // }
295
- // }
296
- // break;
297
- // }
298
- // case 'content_block_stop': {
299
- // process.stdout.write('\n');
300
- // break;
301
- // }
302
- // case 'message_delta': {
303
- // break;
304
- // }
305
- // case 'message_stop': {
306
- // process.stdout.write('\n\n');
307
- // break;
308
- // }
309
- // }
310
- // };