@dxos/assistant 0.8.0 → 0.8.1-main.81238a8

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 (87) hide show
  1. package/dist/lib/browser/chunk-RFTY3OMK.mjs +2276 -0
  2. package/dist/lib/browser/chunk-RFTY3OMK.mjs.map +7 -0
  3. package/dist/lib/browser/index.mjs +33 -1236
  4. package/dist/lib/browser/index.mjs.map +4 -4
  5. package/dist/lib/browser/meta.json +1 -1
  6. package/dist/lib/browser/testing/index.mjs +17 -3
  7. package/dist/lib/browser/testing/index.mjs.map +4 -4
  8. package/dist/lib/node/chunk-4ZDZUCAS.cjs +2287 -0
  9. package/dist/lib/node/chunk-4ZDZUCAS.cjs.map +7 -0
  10. package/dist/lib/node/index.cjs +40 -1236
  11. package/dist/lib/node/index.cjs.map +4 -4
  12. package/dist/lib/node/meta.json +1 -1
  13. package/dist/lib/node/testing/index.cjs +40 -29
  14. package/dist/lib/node/testing/index.cjs.map +4 -4
  15. package/dist/lib/node-esm/chunk-JUVGBQBL.mjs +2278 -0
  16. package/dist/lib/node-esm/chunk-JUVGBQBL.mjs.map +7 -0
  17. package/dist/lib/node-esm/index.mjs +33 -1236
  18. package/dist/lib/node-esm/index.mjs.map +4 -4
  19. package/dist/lib/node-esm/meta.json +1 -1
  20. package/dist/lib/node-esm/testing/index.mjs +17 -3
  21. package/dist/lib/node-esm/testing/index.mjs.map +4 -4
  22. package/dist/types/src/ai-service/defs.d.ts +8 -2
  23. package/dist/types/src/ai-service/defs.d.ts.map +1 -1
  24. package/dist/types/src/ai-service/edge-client.d.ts +19 -0
  25. package/dist/types/src/ai-service/edge-client.d.ts.map +1 -0
  26. package/dist/types/src/ai-service/index.d.ts +4 -1
  27. package/dist/types/src/ai-service/index.d.ts.map +1 -1
  28. package/dist/types/src/ai-service/message-collector.d.ts +88 -0
  29. package/dist/types/src/ai-service/message-collector.d.ts.map +1 -0
  30. package/dist/types/src/ai-service/ollama-client.d.ts +39 -0
  31. package/dist/types/src/ai-service/ollama-client.d.ts.map +1 -0
  32. package/dist/types/src/ai-service/parser.d.ts +11 -9
  33. package/dist/types/src/ai-service/parser.d.ts.map +1 -1
  34. package/dist/types/src/ai-service/service.d.ts +9 -0
  35. package/dist/types/src/ai-service/service.d.ts.map +1 -0
  36. package/dist/types/src/ai-service/stream.d.ts +2 -1
  37. package/dist/types/src/ai-service/stream.d.ts.map +1 -1
  38. package/dist/types/src/ai-service/testing/mock.d.ts +2 -2
  39. package/dist/types/src/ai-service/testing/mock.d.ts.map +1 -1
  40. package/dist/types/src/ai-service/types.d.ts +91 -157
  41. package/dist/types/src/ai-service/types.d.ts.map +1 -1
  42. package/dist/types/src/conversation/conversation.d.ts +11 -9
  43. package/dist/types/src/conversation/conversation.d.ts.map +1 -1
  44. package/dist/types/src/conversation/types.d.ts +1 -1
  45. package/dist/types/src/conversation/types.d.ts.map +1 -1
  46. package/dist/types/src/testing/index.d.ts +1 -0
  47. package/dist/types/src/testing/index.d.ts.map +1 -1
  48. package/dist/types/src/testing/ollama.d.ts +6 -0
  49. package/dist/types/src/testing/ollama.d.ts.map +1 -0
  50. package/dist/types/src/testing/query-promts.d.ts +1 -1
  51. package/dist/types/src/testing/query-promts.d.ts.map +1 -1
  52. package/dist/types/src/testing/test-data.d.ts +1 -1
  53. package/dist/types/src/testing/test-data.d.ts.map +1 -1
  54. package/dist/types/src/testing/test-schema.d.ts +1 -1
  55. package/dist/types/src/testing/test-schema.d.ts.map +1 -1
  56. package/package.json +17 -14
  57. package/src/ai-service/client.test.ts +100 -13
  58. package/src/ai-service/defs.ts +17 -2
  59. package/src/ai-service/{client.ts → edge-client.ts} +15 -24
  60. package/src/ai-service/index.ts +4 -1
  61. package/src/ai-service/message-collector.ts +84 -0
  62. package/src/ai-service/ollama-client.ts +499 -0
  63. package/src/ai-service/parser.ts +7 -2
  64. package/src/ai-service/service.ts +15 -0
  65. package/src/ai-service/stream.ts +5 -3
  66. package/src/ai-service/testing/mock.ts +7 -2
  67. package/src/ai-service/types.ts +3 -3
  68. package/src/bin/chat.ts +3 -3
  69. package/src/conversation/conversation.test.ts +5 -5
  70. package/src/conversation/conversation.ts +3 -2
  71. package/src/conversation/types.ts +1 -1
  72. package/src/testing/artifacts.test.ts +4 -4
  73. package/src/testing/index.ts +1 -0
  74. package/src/testing/object-extraction.test.ts +1 -1
  75. package/src/testing/ollama.ts +15 -0
  76. package/src/testing/query-promts.ts +1 -1
  77. package/src/testing/query.test.ts +4 -4
  78. package/src/testing/test-data.ts +1 -1
  79. package/src/testing/test-schema.ts +1 -1
  80. package/dist/lib/browser/chunk-AXUUNA7O.mjs +0 -565
  81. package/dist/lib/browser/chunk-AXUUNA7O.mjs.map +0 -7
  82. package/dist/lib/node/chunk-QPHGQINW.cjs +0 -577
  83. package/dist/lib/node/chunk-QPHGQINW.cjs.map +0 -7
  84. package/dist/lib/node-esm/chunk-GOVFOBIB.mjs +0 -567
  85. package/dist/lib/node-esm/chunk-GOVFOBIB.mjs.map +0 -7
  86. package/dist/types/src/ai-service/client.d.ts +0 -25
  87. package/dist/types/src/ai-service/client.d.ts.map +0 -1
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../../../src/ai-service/client.ts", "../../../src/ai-service/stream.ts", "../../../src/ai-service/util/sse.ts", "../../../src/ai-service/defs.ts", "../../../src/ai-service/parser.ts", "../../../src/ai-service/transform.ts", "../../../src/ai-service/types.ts", "../../../src/conversation/conversation.ts"],
4
- "sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport { Schema as S } from '@effect/schema';\n\nimport { Message } from '@dxos/artifact';\nimport { invariant } from '@dxos/invariant';\nimport { log } from '@dxos/log';\n\nimport { createGenerationStream, type GenerationStream } from './stream';\nimport { type GenerateRequest } from './types';\n\nexport interface AIService {\n exec(request: GenerateRequest): Promise<GenerationStream>;\n}\n\nexport interface AIServiceClient extends AIService {\n appendMessages(messages: Message[]): Promise<void>;\n}\n\nexport type AIServiceClientParams = {\n endpoint: string;\n};\n\n/**\n * Edge GPT client.\n */\n// TODO(burdon): Create mock.\nexport class AIServiceClientImpl implements AIServiceClient {\n private readonly _endpoint: string;\n\n constructor({ endpoint }: AIServiceClientParams) {\n invariant(endpoint, 'endpoint is required');\n this._endpoint = endpoint;\n }\n\n async appendMessages(messages: Message[]): Promise<void> {\n const url = `${this._endpoint}/message`;\n const res = await fetch(url, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n messages: await S.encodePromise(S.Array(Message))(messages),\n }),\n });\n\n if (!res.ok) {\n throw new Error(`${await res.text()} [${url}]`);\n }\n }\n\n /**\n * Process request and open message stream.\n */\n async exec(request: GenerateRequest): Promise<GenerationStream> {\n // TODO(dmaretskyi): Errors if tools are not provided.\n request = {\n tools: request.tools ?? [],\n ...request,\n };\n\n log.info('requesting', { endpoint: this._endpoint });\n const controller = new AbortController();\n const response = await fetch(`${this._endpoint}/generate`, {\n signal: controller.signal,\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(request),\n });\n\n invariant(response.body instanceof ReadableStream);\n return createGenerationStream(response, controller);\n }\n}\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { Trigger } from '@dxos/async';\nimport { log } from '@dxos/log';\n\nimport { type GenerationStreamEvent } from './types';\nimport { iterSSEMessages } from './util';\n\n/**\n * Creates a stream from an SSE response.\n */\nexport const createGenerationStream = (response: Response, controller = new AbortController()): GenerationStream => {\n const iterator = async function* () {\n for await (const sse of iterSSEMessages(response, controller)) {\n if (sse.event === 'completion') {\n try {\n yield JSON.parse(sse.data);\n } catch (err) {\n log.error('could not parse message into JSON:', { data: sse.data, raw: sse.raw });\n throw err;\n }\n }\n\n if (\n sse.event === 'message_start' ||\n sse.event === 'message_delta' ||\n sse.event === 'message_stop' ||\n sse.event === 'content_block_start' ||\n sse.event === 'content_block_delta' ||\n sse.event === 'content_block_stop'\n ) {\n try {\n yield JSON.parse(sse.data);\n } catch (err) {\n log.error('could not parse message into JSON:', { data: sse.data, raw: sse.raw });\n throw err;\n }\n }\n\n if (sse.event === 'ping') {\n continue;\n }\n\n if (sse.event === 'error') {\n throw new Error(`Message generation error: ${sse.data}`);\n }\n }\n };\n\n return new GenerationStream(controller, iterator);\n};\n\n/**\n * Server-Sent Events (SSE) stream from the AI service.\n * https://html.spec.whatwg.org/multipage/server-sent-events.html#server-sent-events\n */\nexport class GenerationStream implements AsyncIterable<GenerationStreamEvent> {\n /**\n * Trigger event when the stream is done.\n */\n private readonly _done = new Trigger();\n\n /**\n * Iterator over the stream.\n */\n private _iterator?: AsyncIterator<GenerationStreamEvent> = undefined;\n\n constructor(\n private readonly _controller: AbortController,\n private readonly _getIterator: () => AsyncIterableIterator<GenerationStreamEvent>,\n ) {}\n\n /**\n * Returns an iterator over the stream.\n */\n [Symbol.asyncIterator](): AsyncIterator<GenerationStreamEvent> {\n return this._createIterator();\n }\n\n /**\n * Aborts the stream.\n */\n abort() {\n this._controller.abort();\n }\n\n /**\n * Returns the complete message list generated by the AI service.\n */\n async complete() {\n await this._done.wait();\n }\n\n /**\n * Creates an iterator over the stream.\n */\n private _createIterator(): AsyncIterator<GenerationStreamEvent> {\n const self = this;\n return (this._iterator ??= (() => {\n const generator = async function* (this: GenerationStream) {\n try {\n for await (const event of self._getIterator()) {\n yield event;\n }\n this._done.wake();\n } catch (err: any) {\n this._done.throw(err);\n }\n };\n\n return generator.call(this);\n })());\n }\n}\n", "//\n// Copyright 2024 DXOS.org\n// Copied from anthropic SDK source\n//\n\n/**\n * Server sent events (SSE) iterator.\n * @param response\n * @param controller\n */\nexport async function* iterSSEMessages(\n response: Response,\n controller: AbortController,\n): AsyncGenerator<ServerSentEvent, void, unknown> {\n if (!response.body) {\n controller.abort();\n throw new Error('Attempted to iterate over a response with no body');\n }\n\n const sseDecoder = new SSEDecoder();\n const lineDecoder = new LineDecoder();\n\n const iter = readableStreamAsyncIterable<Bytes>(response.body);\n for await (const sseChunk of iterSSEChunks(iter)) {\n for (const line of lineDecoder.decode(sseChunk)) {\n const sse = sseDecoder.decode(line);\n if (sse) {\n yield sse;\n }\n }\n }\n\n for (const line of lineDecoder.flush()) {\n const sse = sseDecoder.decode(line);\n if (sse) {\n yield sse;\n }\n }\n}\n\nexport type ServerSentEvent = {\n event: string | null;\n data: string;\n raw: string[];\n};\n\n/**\n * Given an async iterable iterator, iterates over it and yields full\n * SSE chunks, i.e. yields when a double new-line is encountered.\n */\nasync function* iterSSEChunks(iterator: AsyncIterableIterator<Bytes>): AsyncGenerator<Uint8Array> {\n let data = new Uint8Array();\n\n for await (const chunk of iterator) {\n if (chunk == null) {\n continue;\n }\n\n const binaryChunk =\n chunk instanceof ArrayBuffer\n ? new Uint8Array(chunk)\n : typeof chunk === 'string'\n ? new TextEncoder().encode(chunk)\n : chunk;\n\n const newData = new Uint8Array(data.length + binaryChunk.length);\n newData.set(data);\n newData.set(binaryChunk, data.length);\n data = newData;\n\n let patternIndex;\n while ((patternIndex = findDoubleNewlineIndex(data)) !== -1) {\n yield data.slice(0, patternIndex);\n data = data.slice(patternIndex);\n }\n }\n\n if (data.length > 0) {\n yield data;\n }\n}\n\nconst findDoubleNewlineIndex = (buffer: Uint8Array): number => {\n // This function searches the buffer for the end patterns (\\r\\r, \\n\\n, \\r\\n\\r\\n)\n // and returns the index right after the first occurrence of any pattern,\n // or -1 if none of the patterns are found.\n const newline = 0x0a; // \\n\n const carriage = 0x0d; // \\r\n\n for (let i = 0; i < buffer.length - 2; i++) {\n if (buffer[i] === newline && buffer[i + 1] === newline) {\n // \\n\\n\n return i + 2;\n }\n if (buffer[i] === carriage && buffer[i + 1] === carriage) {\n // \\r\\r\n return i + 2;\n }\n if (\n buffer[i] === carriage &&\n buffer[i + 1] === newline &&\n i + 3 < buffer.length &&\n buffer[i + 2] === carriage &&\n buffer[i + 3] === newline\n ) {\n // \\r\\n\\r\\n\n return i + 4;\n }\n }\n\n return -1;\n};\n\nclass SSEDecoder {\n private data: string[];\n private event: string | null;\n private chunks: string[];\n\n constructor() {\n this.event = null;\n this.data = [];\n this.chunks = [];\n }\n\n decode(line: string) {\n if (line.endsWith('\\r')) {\n line = line.substring(0, line.length - 1);\n }\n\n if (!line) {\n // empty line and we didn't previously encounter any messages\n if (!this.event && !this.data.length) {\n return null;\n }\n\n const sse: ServerSentEvent = {\n event: this.event,\n data: this.data.join('\\n'),\n raw: this.chunks,\n };\n\n this.event = null;\n this.data = [];\n this.chunks = [];\n\n return sse;\n }\n\n this.chunks.push(line);\n\n if (line.startsWith(':')) {\n return null;\n }\n\n let [fieldname, _, value] = partition(line, ':');\n\n if (value.startsWith(' ')) {\n value = value.substring(1);\n }\n\n if (fieldname === 'event') {\n this.event = value;\n } else if (fieldname === 'data') {\n this.data.push(value);\n }\n\n return null;\n }\n}\n\n/** This is an internal helper function that's just used for testing */\nexport const _decodeChunks = (chunks: string[]): string[] => {\n const decoder = new LineDecoder();\n const lines: string[] = [];\n for (const chunk of chunks) {\n lines.push(...decoder.decode(chunk));\n }\n\n return lines;\n};\n\nconst partition = (str: string, delimiter: string): [string, string, string] => {\n const index = str.indexOf(delimiter);\n if (index !== -1) {\n return [str.substring(0, index), delimiter, str.substring(index + delimiter.length)];\n }\n\n return [str, '', ''];\n};\n\n/**\n * Most browsers don't yet have async iterable support for ReadableStream,\n * and Node has a very different way of reading bytes from its \"ReadableStream\".\n *\n * This polyfill was pulled from https://github.com/MattiasBuelens/web-streams-polyfill/pull/122#issuecomment-1627354490\n */\nexport function readableStreamAsyncIterable<T>(stream: any): AsyncIterableIterator<T> {\n if (stream[Symbol.asyncIterator]) {\n return stream;\n }\n\n const reader = stream.getReader();\n return {\n next: async () => {\n try {\n const result = await reader.read();\n if (result?.done) {\n reader.releaseLock();\n } // release lock when stream becomes closed\n return result;\n } catch (e) {\n reader.releaseLock(); // release lock when stream becomes errored\n throw e;\n }\n },\n return: async () => {\n const cancelPromise = reader.cancel();\n reader.releaseLock();\n await cancelPromise;\n return { done: true, value: undefined };\n },\n [Symbol.asyncIterator]() {\n return this;\n },\n };\n}\n\nexport type Bytes = string | ArrayBuffer | Uint8Array | Buffer | null | undefined;\n\n/**\n * A re-implementation of httpx's `LineDecoder` in Python that handles incrementally\n * reading lines from text.\n *\n * https://github.com/encode/httpx/blob/920333ea98118e9cf617f246905d7b202510941c/httpx/_decoders.py#L258\n */\nexport class LineDecoder {\n // prettier-ignore\n static NEWLINE_CHARS = new Set(['\\n', '\\r']);\n static NEWLINE_REGEXP = /\\r\\n|[\\n\\r]/g;\n\n buffer: string[];\n trailingCR: boolean;\n textDecoder: any; // TextDecoder found in browsers; not typed to avoid pulling in either \"dom\" or \"node\" types.\n\n constructor() {\n this.buffer = [];\n this.trailingCR = false;\n }\n\n decode(chunk: Bytes): string[] {\n let text = this.decodeText(chunk);\n\n if (this.trailingCR) {\n text = '\\r' + text;\n this.trailingCR = false;\n }\n if (text.endsWith('\\r')) {\n this.trailingCR = true;\n text = text.slice(0, -1);\n }\n\n if (!text) {\n return [];\n }\n\n const trailingNewline = LineDecoder.NEWLINE_CHARS.has(text[text.length - 1] || '');\n let lines = text.split(LineDecoder.NEWLINE_REGEXP);\n\n // if there is a trailing new line then the last entry will be an empty\n // string which we don't care about\n if (trailingNewline) {\n lines.pop();\n }\n\n if (lines.length === 1 && !trailingNewline) {\n this.buffer.push(lines[0]!);\n return [];\n }\n\n if (this.buffer.length > 0) {\n lines = [this.buffer.join('') + lines[0], ...lines.slice(1)];\n this.buffer = [];\n }\n\n if (!trailingNewline) {\n this.buffer = [lines.pop() || ''];\n }\n\n return lines;\n }\n\n decodeText(bytes: Bytes): string {\n if (bytes == null) {\n return '';\n }\n if (typeof bytes === 'string') {\n return bytes;\n }\n\n // Node:\n if (typeof Buffer !== 'undefined') {\n if (bytes instanceof Buffer) {\n return bytes.toString();\n }\n if (bytes instanceof Uint8Array) {\n return Buffer.from(bytes).toString();\n }\n\n throw new Error(\n `Unexpected: received non-Uint8Array (${bytes.constructor.name}) stream chunk in an environment with a global \"Buffer\" defined, which this library assumes to be Node. Please report this error.`,\n );\n }\n\n // Browser\n if (typeof TextDecoder !== 'undefined') {\n if (bytes instanceof Uint8Array || bytes instanceof ArrayBuffer) {\n this.textDecoder ??= new TextDecoder('utf8');\n return this.textDecoder.decode(bytes);\n }\n\n throw new Error(\n `Unexpected: received non-Uint8Array/ArrayBuffer (${\n (bytes as any).constructor.name\n }) in a web platform. Please report this error.`,\n );\n }\n\n throw new Error('Unexpected: neither Buffer nor TextDecoder are available as globals. Please report this error.');\n }\n\n flush(): string[] {\n if (!this.buffer.length && !this.trailingCR) {\n return [];\n }\n\n const lines = [this.buffer.join('')];\n this.buffer = [];\n this.trailingCR = false;\n return lines;\n }\n}\n", "//\n// Copyright 2025 DXOS.org\n//\n\n// TODO(burdon): Share with Edge.\n// TODO(burdon): Move to service config retrieved by HTTP?\n\nexport const DEFAULT_LLM_MODEL = '@anthropic/claude-3-5-sonnet-20241022';\n\nexport const DEFAULT_LLM_MODELS = [\n // AI Gateway.\n // https://developers.cloudflare.com/ai-gateway\n '@anthropic/claude-3-5-haiku-20241022',\n '@anthropic/claude-3-5-sonnet-20241022',\n '@anthropic/claude-3-7-sonnet-20250219',\n\n // Workers AI.\n // https://developers.cloudflare.com/workers-ai/models\n '@cf/deepseek-ai/deepseek-r1-distill-qwen-32b',\n '@hf/nousresearch/hermes-2-pro-mistral-7b',\n '@ollama/llama-3-1-nemotron-70b-instruct',\n '@ollama/llama-3-1-nemotron-mini-4b-instruct',\n '@ollama/llama-3-2-3b',\n];\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { Message, type MessageContentBlock } from '@dxos/artifact';\nimport { Event } from '@dxos/async';\nimport { createStatic } from '@dxos/echo-schema';\nimport { invariant } from '@dxos/invariant';\nimport { log } from '@dxos/log';\nimport { isNotFalsy, safeParseJson } from '@dxos/util';\n\nimport { type GenerationStream } from './stream';\nimport { StreamTransform, type StreamBlock } from './transform';\n\n/**\n * Parse mixed content of plain text, XML fragments, and JSON blocks.\n */\nexport class MixedStreamParser {\n /**\n * New message.\n */\n public message = new Event<Message>();\n\n /**\n * Complete block added to Message.\n */\n public block = new Event<MessageContentBlock>();\n\n /**\n * Update partial block (while streaming).\n */\n public update = new Event<MessageContentBlock>();\n\n /**\n * Current message.\n */\n private _message?: Message | undefined;\n\n private _emitBlock(contentBlock: MessageContentBlock, streamBlock?: StreamBlock) {\n const messageBlock = streamBlock ? mergeMessageBlock(contentBlock, streamBlock) : contentBlock;\n if (messageBlock) {\n if (messageBlock.type === 'text' && messageBlock.text.length === 0) {\n return;\n }\n\n invariant(this._message);\n this._message.content.push(messageBlock);\n this.block.emit(messageBlock);\n }\n }\n\n private _emitUpdate(contentBlock: MessageContentBlock, streamBlock: StreamBlock) {\n const messageBlock = mergeMessageBlock(contentBlock, streamBlock);\n if (messageBlock) {\n messageBlock.pending = true;\n this.update.emit(messageBlock);\n }\n }\n\n /**\n * Parse stream until end.\n */\n async parse(stream: GenerationStream): Promise<Message[]> {\n const transformer = new StreamTransform();\n\n /**\n * Current content message block.\n */\n let contentBlock: MessageContentBlock | undefined;\n\n /**\n * Current partial block used to accumulate content.\n */\n let streamBlock: StreamBlock | undefined;\n const stack: StreamBlock[] = [];\n\n const messagesCollected: Message[] = [];\n\n for await (const event of stream) {\n // log.info('event', { type: event.type, event });\n switch (event.type) {\n //\n // Messages.\n //\n\n case 'message_start': {\n if (this._message) {\n log.warn('unexpected message_start');\n }\n\n this._message = createStatic(Message, { role: 'assistant', content: [] });\n this.message.emit(this._message);\n break;\n }\n\n case 'message_delta': {\n if (!this._message) {\n log.warn('unexpected message_delta');\n }\n\n break;\n }\n\n case 'message_stop': {\n if (!this._message) {\n log.warn('unexpected message_stop');\n } else {\n messagesCollected.push(this._message);\n this._message = undefined;\n }\n break;\n }\n\n //\n // Content blocks.\n //\n\n case 'content_block_start': {\n if (contentBlock) {\n log.warn('unexpected content_block_start', { content: contentBlock });\n }\n\n // TODO(burdon): Parse initial content (factor out from content_block_delta).\n contentBlock = event.content;\n break;\n }\n\n case 'content_block_delta': {\n if (!contentBlock) {\n log.warn('unexpected content_block_delta');\n break;\n }\n\n switch (event.delta.type) {\n //\n // Text\n //\n case 'text_delta': {\n const chunks = transformer.transform(event.delta.text);\n for (const chunk of chunks) {\n // log.info('text_delta', { chunk, current });\n\n switch (streamBlock?.type) {\n //\n // XML Fragment.\n //\n case 'tag': {\n if (chunk.type === 'tag') {\n if (chunk.selfClosing) {\n streamBlock.content.push(chunk);\n } else if (chunk.closing) {\n if (stack.length > 0) {\n const top = stack.pop();\n invariant(top && top.type === 'tag');\n top.content.push(streamBlock);\n streamBlock = top;\n } else {\n this._emitBlock(contentBlock, streamBlock);\n streamBlock = undefined;\n }\n } else {\n stack.push(streamBlock);\n streamBlock = chunk;\n }\n } else {\n // Append text.\n if (streamBlock.content.length === 0) {\n streamBlock.content.push(chunk);\n } else {\n const last = streamBlock.content.at(-1);\n invariant(last);\n if (last.type === 'text') {\n last.content += chunk.content;\n } else {\n streamBlock.content.push(chunk);\n }\n }\n }\n break;\n }\n\n //\n // Text Fragment.\n //\n case 'text': {\n if (chunk.type === 'tag') {\n this._emitBlock(contentBlock, streamBlock);\n if (chunk.selfClosing) {\n this._emitBlock(contentBlock, chunk);\n streamBlock = undefined;\n } else {\n streamBlock = chunk;\n }\n } else {\n // Append text.\n streamBlock.content += chunk.content;\n }\n break;\n }\n\n //\n // No current chunk.\n //\n default: {\n if (chunk.type === 'tag' && chunk.selfClosing) {\n this._emitBlock(contentBlock, chunk);\n } else {\n streamBlock = chunk;\n }\n }\n }\n }\n break;\n }\n\n //\n // JSON\n //\n case 'input_json_delta': {\n if (!contentBlock) {\n log.warn('unexpected input_json_delta', { contentBlock });\n break;\n }\n\n if (streamBlock?.type === 'json') {\n streamBlock.content += event.delta.partial_json;\n } else {\n streamBlock = { type: 'json', content: event.delta.partial_json };\n }\n break;\n }\n }\n break;\n }\n\n case 'content_block_stop': {\n if (!contentBlock) {\n log.warn('unexpected content_block_stop');\n break;\n }\n\n this._emitBlock(contentBlock, streamBlock);\n contentBlock = undefined;\n streamBlock = undefined;\n break;\n }\n }\n\n if (contentBlock && streamBlock) {\n this._emitUpdate(contentBlock, streamBlock);\n }\n } // for.\n\n return messagesCollected;\n }\n}\n\n/**\n * Convert stream block to message content block.\n */\nexport const mergeMessageBlock = (\n contentBlock: MessageContentBlock,\n streamBlock: StreamBlock,\n): MessageContentBlock | undefined => {\n log('mergeMessageBlock', { contentBlock, streamBlock });\n\n switch (streamBlock.type) {\n //\n // Text\n //\n case 'text': {\n return { ...contentBlock, type: 'text', text: streamBlock.content };\n }\n\n //\n // XML\n //\n case 'tag': {\n switch (streamBlock.tag) {\n case 'cot': {\n const content = streamBlock.content\n .map((block) => {\n switch (block.type) {\n case 'text':\n return block.content;\n default:\n return null;\n }\n })\n .filter(isNotFalsy)\n .join('\\n');\n\n return { ...contentBlock, type: 'text', disposition: 'cot', text: content };\n }\n\n case 'artifact': {\n const { attributes } = streamBlock;\n return { type: 'json', disposition: 'artifact', json: JSON.stringify(attributes) };\n }\n\n case 'suggest': {\n if (streamBlock.content.length === 1 && streamBlock.content[0].type === 'text') {\n return {\n type: 'json',\n disposition: 'suggest',\n json: JSON.stringify({ text: streamBlock.content[0].content }),\n };\n }\n break;\n }\n\n case 'select': {\n return {\n type: 'json',\n disposition: 'select',\n json: JSON.stringify({\n options: streamBlock.content.flatMap((content) =>\n content.type === 'tag' && content.content.length === 1 && content.content[0].type === 'text'\n ? [content.content[0].content]\n : [],\n ),\n }),\n };\n }\n\n case 'tool-list': {\n return {\n type: 'json',\n disposition: 'tool_list',\n json: JSON.stringify({}),\n };\n }\n }\n\n break;\n }\n\n //\n // JSON\n //\n case 'json': {\n switch (contentBlock.type) {\n case 'tool_use': {\n return { ...contentBlock, input: safeParseJson(streamBlock.content) ?? {} };\n }\n }\n\n return { ...contentBlock, type: 'json', disposition: 'artifact', json: streamBlock.content };\n }\n }\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as P from 'parsimmon';\n\n/**\n * Parsed block.\n */\nexport type StreamBlock =\n | {\n type: 'tag';\n tag: string;\n attributes?: Record<string, string>;\n content: StreamBlock[];\n closing?: boolean;\n selfClosing?: boolean;\n }\n | { type: 'text'; content: string }\n | { type: 'json'; disposition?: string; content: string };\n\nconst textChunk: P.Parser<StreamBlock> = P.regexp(/[^<]+/).map((content) => ({\n type: 'text',\n content,\n}));\n\nconst attribute: P.Parser<[string, string]> = P.seq(\n P.regexp(/[a-zA-Z_][a-zA-Z0-9_-]*/),\n P.string('=').trim(P.optWhitespace),\n P.alt(\n P.regexp(/\"[^\"]*\"/).map((s) => s.slice(1, -1)),\n P.regexp(/'[^']*'/).map((s) => s.slice(1, -1)),\n ),\n).map(([name, _, value]) => [name, value]);\n\nconst tagName = P.regexp(/[a-zA-Z_][a-zA-Z0-9_-]*/);\n\nconst selfClosingTag: P.Parser<StreamBlock> = P.seqMap(\n //\n P.string('<'),\n tagName,\n P.optWhitespace.then(attribute).many(),\n P.optWhitespace.then(P.string('/>')),\n P.optWhitespace,\n (_, tag, attributes, __) => ({\n type: 'tag',\n tag,\n attributes: Object.fromEntries(attributes),\n content: [],\n selfClosing: true,\n }),\n);\n\nconst openTag: P.Parser<StreamBlock> = P.seqMap(\n //\n P.string('<'),\n tagName,\n P.optWhitespace.then(attribute).many(),\n P.string('>'),\n P.regexp(/[^<]*/),\n (_, tag, attributes, __, content) => ({\n type: 'tag',\n tag,\n attributes: Object.fromEntries(attributes),\n content: content.length ? [{ type: 'text', content }] : [],\n }),\n);\n\nconst closeTag: P.Parser<StreamBlock> = P.seqMap(\n //\n P.string('</'),\n tagName,\n P.string('>'),\n P.optWhitespace,\n (_, tag) => ({\n type: 'tag',\n tag,\n content: [],\n closing: true,\n }),\n);\n\nconst mixedChunk: P.Parser<StreamBlock> = P.alt(selfClosingTag, openTag, closeTag, textChunk);\n\n/**\n * Permissive streaming transformer that processes mixed content (plain text and XML fragments) from the AI service.\n */\nexport class StreamTransform {\n private _buffer = '';\n\n transform(chunk: string): StreamBlock[] {\n this._buffer += chunk;\n\n const results: StreamBlock[] = [];\n const parser = mixedChunk.many().skip(P.optWhitespace);\n const result = parser.parse(this._buffer);\n if (result.status) {\n for (const chunk of result.value) {\n results.push(chunk);\n }\n\n this._buffer = '';\n }\n\n return results;\n }\n\n // TODO(burdon): Process remaining buffer?\n flush(): StreamBlock[] {\n const remaining = this._buffer;\n this._buffer = '';\n return remaining.length > 0\n ? [\n {\n type: 'text',\n content: remaining,\n },\n ]\n : [];\n }\n}\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { Schema as S } from '@effect/schema';\n\nimport { Tool, Message, type MessageContentBlock, SpaceIdSchema } from '@dxos/artifact';\nimport { ObjectId } from '@dxos/echo-schema';\n\nimport { DEFAULT_LLM_MODELS } from './defs';\n\nexport const createArtifactElement = (id: ObjectId) => `<artifact id=${id} />`;\n\nexport const LLMModel = S.Literal(...DEFAULT_LLM_MODELS);\n\nexport type LLMModel = S.Schema.Type<typeof LLMModel>;\n\nexport const ToolTypes = Object.freeze({\n // TODO(dmaretskyi): Not implemented yet.\n // DatabaseQuery: 'database_query',\n TextToImage: 'text_to_image',\n});\n\n/**\n * Client GPT request.\n */\nexport const GenerateRequest = S.Struct({\n spaceId: S.optional(SpaceIdSchema),\n threadId: S.optional(ObjectId),\n\n /**\n * Preferred model or system default.\n */\n model: S.optional(LLMModel),\n\n /**\n * Tools available for the LLM.\n */\n tools: S.optional(S.Array(Tool).pipe(S.mutable)),\n\n /**\n * System instructions to the LLM.\n */\n systemPrompt: S.optional(S.String),\n\n /**\n * History of messages to include in the context window.\n */\n // TODO(burdon): Rename messages.\n history: S.optional(S.Array(Message)),\n\n /**\n * Current request.\n */\n prompt: S.optional(Message),\n});\n\nexport type GenerateRequest = S.Schema.Type<typeof GenerateRequest>;\n\n/**\n * Server-Sent Events (SSE) stream from the AI service.\n * https://docs.anthropic.com/en/api/streaming\n * https://platform.openai.com/docs/api-reference/streaming\n * https://html.spec.whatwg.org/multipage/server-sent-events.html#server-sent-events\n */\n// TODO(dmaretskyi): Effect schema.\nexport type GenerationStreamEvent =\n | {\n // TODO(dmaretskyi): Normalize types to our schema.\n type: 'message_start';\n message: Omit<Message, 'spaceId' | 'threadId'>;\n }\n | {\n type: 'message_delta';\n delta: {\n stopReason: 'tool_use' | 'end_turn';\n };\n }\n | {\n type: 'message_stop';\n }\n | {\n type: 'content_block_start';\n index: number;\n content: MessageContentBlock;\n }\n | {\n type: 'content_block_delta';\n index: number;\n delta:\n | {\n type: 'text_delta';\n text: string;\n }\n | {\n type: 'input_json_delta';\n partial_json: string;\n };\n }\n | {\n type: 'content_block_stop';\n index: number;\n };\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { type Tool, ToolResult, Message } from '@dxos/artifact';\nimport { createStatic, ObjectId } from '@dxos/echo-schema';\nimport { invariant } from '@dxos/invariant';\nimport { type SpaceId } from '@dxos/keys';\nimport { log } from '@dxos/log';\n\nimport { type AIServiceClient, type GenerationStreamEvent, type LLMModel } from '../ai-service';\n\nexport type CreateLLMConversationParams = {\n model: LLMModel;\n\n spaceId?: SpaceId;\n threadId?: ObjectId;\n\n /**\n * System prompt that specifies instructions for the LLM.\n */\n system?: string;\n\n tools: Tool[];\n history?: Message[];\n client: AIServiceClient;\n\n logger?: (event: ConversationEvent) => void;\n};\n\nexport type ConversationEvent =\n | {\n type: 'message';\n message: Message;\n }\n | GenerationStreamEvent;\n\n// TODO(burdon): Replace with processor from plugin-automation?\nexport const runLLM = async (params: CreateLLMConversationParams) => {\n let conversationResult: any = null;\n const history = params.history ?? [];\n\n const generate = async () => {\n log('llm generate', { tools: params.tools });\n const beginTs = Date.now();\n const stream = await params.client.exec({\n model: params.model,\n spaceId: params.spaceId,\n threadId: params.threadId,\n history,\n systemPrompt: params.system,\n tools: params.tools as any,\n });\n\n for await (const event of stream) {\n params.logger?.(event);\n }\n\n // TODO(burdon): !!!\n await stream.complete();\n const messages: Message[] = [];\n const message = messages.at(-1);\n invariant(message);\n\n log('llm result', { time: Date.now() - beginTs, message });\n invariant(message);\n params.logger?.({ type: 'message', message });\n history.push(\n ...messages.map(\n (message): Message => ({ ...message, content: message.content.filter((block) => block.type !== 'image') }),\n ),\n );\n\n const isToolUse = message.content.at(-1)?.type === 'tool_use';\n if (isToolUse) {\n const toolCalls = message.content.filter((block) => block.type === 'tool_use');\n invariant(toolCalls.length === 1);\n const toolCall = toolCalls[0];\n const tool = params.tools.find((tool) => tool.name === toolCall.name);\n if (!tool) {\n throw new Error(`Tool not found: ${toolCall.name}`);\n }\n\n invariant(tool.execute);\n const toolResult = await tool.execute(toolCall.input);\n switch (toolResult.kind) {\n case 'error': {\n log.warn('tool error', { message: toolResult.message });\n const resultMessage: Message = {\n id: ObjectId.random(),\n spaceId: params.spaceId,\n threadId: params.threadId,\n role: 'user',\n content: [\n {\n type: 'tool_result',\n toolUseId: toolCall.id,\n content: toolResult.message,\n isError: true,\n },\n ],\n };\n params.logger?.({ type: 'message', message: resultMessage });\n history.push(resultMessage);\n\n return true;\n }\n\n case 'success': {\n log('tool success', { result: toolResult.result });\n const resultMessage: Message = {\n id: ObjectId.random(),\n spaceId: params.spaceId,\n threadId: params.threadId,\n role: 'user',\n content: [\n {\n type: 'tool_result',\n toolUseId: toolCall.id,\n content: JSON.stringify(toolResult.result),\n },\n ],\n };\n params.logger?.({ type: 'message', message: resultMessage });\n history.push(resultMessage);\n\n return true;\n }\n\n case 'break': {\n log('tool break', { result: toolResult.result });\n conversationResult = toolResult.result;\n return false;\n }\n }\n }\n\n return false;\n };\n\n // eslint-disable-next-line no-empty\n while (await generate()) {}\n\n return {\n result: conversationResult,\n history,\n };\n};\n\nexport const isToolUse = (message: Message) => {\n const block = message.content.at(-1);\n invariant(block);\n return block.type === 'tool_use';\n};\n\nexport type RunToolsOptions = {\n message: Message;\n tools: Tool[];\n extensions?: ToolContextExtensions;\n};\n\nexport type RunToolsResult =\n | {\n type: 'continue';\n message: Message;\n }\n | {\n type: 'break';\n result: unknown;\n };\n\nexport const runTools = async ({ message, tools, extensions }: RunToolsOptions): Promise<RunToolsResult> => {\n const toolCalls = message.content.filter((block) => block.type === 'tool_use');\n invariant(toolCalls.length === 1);\n const toolCall = toolCalls[0];\n const tool = tools.find((tool) => tool.name === toolCall.name);\n if (!tool) {\n throw new Error(`Tool not found: ${toolCall.name}`);\n }\n\n let toolResult: ToolResult;\n try {\n invariant(tool.execute);\n toolResult = await tool.execute(toolCall.input, { extensions });\n } catch (error: any) {\n log('tool error', { error });\n toolResult = ToolResult.Error(error.message);\n }\n\n switch (toolResult.kind) {\n case 'error': {\n log('tool error', { message: toolResult.message });\n const resultMessage = createStatic(Message, {\n role: 'user',\n content: [\n {\n type: 'tool_result',\n toolUseId: toolCall.id,\n content: toolResult.message,\n isError: true,\n },\n ],\n });\n\n // TODO(burdon): Retry count?\n return {\n type: 'continue',\n message: resultMessage,\n };\n }\n\n case 'success': {\n log('tool success', { result: toolResult.result });\n const resultMessage = createStatic(Message, {\n role: 'user',\n content: [\n {\n type: 'tool_result',\n toolUseId: toolCall.id,\n content:\n typeof toolResult.result === 'string' ? toolResult.result : JSON.stringify(toolResult.result) ?? '',\n },\n ],\n });\n\n return {\n type: 'continue',\n message: resultMessage,\n };\n }\n\n case 'break': {\n log('tool break', { result: toolResult.result });\n return {\n type: 'break',\n result: toolResult.result,\n };\n }\n }\n};\n"],
5
- "mappings": "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",
6
- "names": ["import_log", "import_artifact", "import_async", "import_invariant", "import_schema", "import_echo_schema", "iterSSEMessages", "response", "controller", "body", "abort", "Error", "sseDecoder", "SSEDecoder", "lineDecoder", "LineDecoder", "iter", "readableStreamAsyncIterable", "sseChunk", "iterSSEChunks", "line", "decode", "sse", "flush", "iterator", "data", "Uint8Array", "chunk", "binaryChunk", "ArrayBuffer", "TextEncoder", "encode", "newData", "length", "set", "patternIndex", "findDoubleNewlineIndex", "slice", "buffer", "newline", "carriage", "i", "constructor", "event", "chunks", "endsWith", "substring", "join", "raw", "push", "startsWith", "fieldname", "_", "value", "partition", "str", "delimiter", "index", "indexOf", "stream", "Symbol", "asyncIterator", "reader", "getReader", "next", "result", "read", "done", "releaseLock", "e", "return", "cancelPromise", "cancel", "undefined", "NEWLINE_CHARS", "Set", "NEWLINE_REGEXP", "trailingCR", "text", "decodeText", "trailingNewline", "has", "lines", "split", "pop", "bytes", "Buffer", "toString", "from", "name", "TextDecoder", "textDecoder", "createGenerationStream", "AbortController", "JSON", "parse", "err", "log", "error", "GenerationStream", "_controller", "_getIterator", "_done", "Trigger", "_iterator", "_createIterator", "complete", "wait", "self", "generator", "wake", "throw", "call", "AIServiceClientImpl", "endpoint", "invariant", "_endpoint", "appendMessages", "messages", "url", "res", "fetch", "method", "headers", "stringify", "S", "encodePromise", "Array", "Message", "ok", "exec", "request", "tools", "info", "signal", "ReadableStream", "DEFAULT_LLM_MODEL", "DEFAULT_LLM_MODELS", "textChunk", "regexp", "map", "content", "type", "attribute", "seq", "string", "trim", "optWhitespace", "alt", "s", "tagName", "selfClosingTag", "seqMap", "then", "many", "tag", "attributes", "__", "Object", "fromEntries", "selfClosing", "openTag", "closeTag", "closing", "mixedChunk", "StreamTransform", "_buffer", "transform", "results", "parser", "skip", "status", "remaining", "MixedStreamParser", "Event", "_emitBlock", "contentBlock", "streamBlock", "messageBlock", "mergeMessageBlock", "_message", "block", "emit", "_emitUpdate", "pending", "update", "transformer", "stack", "messagesCollected", "warn", "createStatic", "role", "message", "delta", "top", "last", "at", "partial_json", "filter", "isNotFalsy", "disposition", "json", "options", "flatMap", "input", "safeParseJson", "createArtifactElement", "id", "LLMModel", "Literal", "ToolTypes", "freeze", "TextToImage", "GenerateRequest", "Struct", "spaceId", "optional", "SpaceIdSchema", "threadId", "ObjectId", "model", "Tool", "pipe", "mutable", "systemPrompt", "String", "history", "prompt", "runLLM", "params", "conversationResult", "generate", "beginTs", "Date", "now", "client", "system", "logger", "time", "isToolUse", "toolCalls", "toolCall", "tool", "find", "execute", "toolResult", "kind", "resultMessage", "random", "toolUseId", "isError", "runTools", "extensions", "ToolResult"]
3
+ "sources": ["index.cjs"],
4
+ "sourcesContent": ["import {\n AIServiceEdgeClient,\n DEFAULT_EDGE_MODEL,\n DEFAULT_EDGE_MODELS,\n DEFAULT_OLLAMA_ENDPOINT,\n DEFAULT_OLLAMA_MODEL,\n DEFAULT_OLLAMA_MODELS,\n EchoDataSource,\n GenerateRequest,\n GenerationStreamImpl,\n LLMModel,\n MessageCollector,\n MixedStreamParser,\n OllamaClient,\n StreamTransform,\n ToolTypes,\n createArtifactElement,\n createGenerationStream,\n emitMessageAsEvents,\n executeQuery,\n executeQueryPlan,\n formatInferredRelationshipLabel,\n formatJsonSchemaForLLM,\n formatNodeLabel,\n isReference,\n isToolUse,\n mergeMessageBlock,\n parseCypherQuery,\n runLLM,\n runTools\n} from \"./chunk-4ZDZUCAS.cjs\";\nexport {\n AIServiceEdgeClient,\n DEFAULT_EDGE_MODEL,\n DEFAULT_EDGE_MODELS,\n DEFAULT_OLLAMA_ENDPOINT,\n DEFAULT_OLLAMA_MODEL,\n DEFAULT_OLLAMA_MODELS,\n EchoDataSource,\n GenerateRequest,\n GenerationStreamImpl,\n LLMModel,\n MessageCollector,\n MixedStreamParser,\n OllamaClient,\n StreamTransform,\n ToolTypes,\n createArtifactElement,\n createGenerationStream,\n emitMessageAsEvents,\n executeQuery,\n executeQueryPlan,\n formatInferredRelationshipLabel,\n formatJsonSchemaForLLM,\n formatNodeLabel,\n isReference,\n isToolUse,\n mergeMessageBlock,\n parseCypherQuery,\n runLLM,\n runTools\n};\n//# sourceMappingURL=index.cjs.map\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,4BA8BO;",
6
+ "names": []
7
7
  }
@@ -1 +1 @@
1
- {"inputs":{"packages/experimental/assistant/src/ai-service/util/sse.ts":{"bytes":30181,"imports":[],"format":"esm"},"packages/experimental/assistant/src/ai-service/util/index.ts":{"bytes":506,"imports":[{"path":"packages/experimental/assistant/src/ai-service/util/sse.ts","kind":"import-statement","original":"./sse"}],"format":"esm"},"packages/experimental/assistant/src/ai-service/stream.ts":{"bytes":10804,"imports":[{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"packages/experimental/assistant/src/ai-service/util/index.ts","kind":"import-statement","original":"./util"}],"format":"esm"},"packages/experimental/assistant/src/ai-service/client.ts":{"bytes":7482,"imports":[{"path":"@effect/schema","kind":"import-statement","external":true},{"path":"@dxos/artifact","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"packages/experimental/assistant/src/ai-service/stream.ts","kind":"import-statement","original":"./stream"}],"format":"esm"},"packages/experimental/assistant/src/ai-service/defs.ts":{"bytes":2403,"imports":[],"format":"esm"},"packages/experimental/assistant/src/ai-service/transform.ts":{"bytes":9707,"imports":[{"path":"parsimmon","kind":"import-statement","external":true}],"format":"esm"},"packages/experimental/assistant/src/ai-service/parser.ts":{"bytes":41461,"imports":[{"path":"@dxos/artifact","kind":"import-statement","external":true},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/echo-schema","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"packages/experimental/assistant/src/ai-service/transform.ts","kind":"import-statement","original":"./transform"}],"format":"esm"},"packages/experimental/assistant/src/ai-service/types.ts":{"bytes":6335,"imports":[{"path":"@effect/schema","kind":"import-statement","external":true},{"path":"@dxos/artifact","kind":"import-statement","external":true},{"path":"@dxos/echo-schema","kind":"import-statement","external":true},{"path":"packages/experimental/assistant/src/ai-service/defs.ts","kind":"import-statement","original":"./defs"}],"format":"esm"},"packages/experimental/assistant/src/ai-service/index.ts":{"bytes":934,"imports":[{"path":"packages/experimental/assistant/src/ai-service/client.ts","kind":"import-statement","original":"./client"},{"path":"packages/experimental/assistant/src/ai-service/defs.ts","kind":"import-statement","original":"./defs"},{"path":"packages/experimental/assistant/src/ai-service/parser.ts","kind":"import-statement","original":"./parser"},{"path":"packages/experimental/assistant/src/ai-service/stream.ts","kind":"import-statement","original":"./stream"},{"path":"packages/experimental/assistant/src/ai-service/transform.ts","kind":"import-statement","original":"./transform"},{"path":"packages/experimental/assistant/src/ai-service/types.ts","kind":"import-statement","original":"./types"}],"format":"esm"},"packages/experimental/assistant/src/cypher/parjs.ts":{"bytes":1016,"imports":[{"path":"#parjs","kind":"import-statement","external":true}],"format":"esm"},"packages/experimental/assistant/src/cypher/combinators.ts":{"bytes":17930,"imports":[{"path":"packages/experimental/assistant/src/cypher/parjs.ts","kind":"import-statement","original":"./parjs"}],"format":"esm"},"packages/experimental/assistant/src/cypher/parser.ts":{"bytes":1744,"imports":[{"path":"packages/experimental/assistant/src/cypher/combinators.ts","kind":"import-statement","original":"./combinators"}],"format":"esm"},"packages/experimental/assistant/src/cypher/execution-plan.ts":{"bytes":20257,"imports":[{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true}],"format":"esm"},"packages/experimental/assistant/src/cypher/query-executor.ts":{"bytes":16864,"imports":[{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"packages/experimental/assistant/src/cypher/execution-plan.ts","kind":"import-statement","original":"./execution-plan"},{"path":"packages/experimental/assistant/src/cypher/parser.ts","kind":"import-statement","original":"./parser"}],"format":"esm"},"packages/experimental/assistant/src/util/trim.ts":{"bytes":1569,"imports":[],"format":"esm"},"packages/experimental/assistant/src/util/index.ts":{"bytes":500,"imports":[{"path":"packages/experimental/assistant/src/util/trim.ts","kind":"import-statement","original":"./trim"}],"format":"esm"},"packages/experimental/assistant/src/cypher/schema.ts":{"bytes":9981,"imports":[{"path":"@dxos/debug","kind":"import-statement","external":true},{"path":"@dxos/echo-schema","kind":"import-statement","external":true},{"path":"packages/experimental/assistant/src/util/index.ts","kind":"import-statement","original":"../util"}],"format":"esm"},"packages/experimental/assistant/src/cypher/echo-data-source.ts":{"bytes":14379,"imports":[{"path":"@dxos/debug","kind":"import-statement","external":true},{"path":"@dxos/echo-db","kind":"import-statement","external":true},{"path":"@dxos/echo-schema","kind":"import-statement","external":true},{"path":"@dxos/live-object","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"packages/experimental/assistant/src/cypher/schema.ts","kind":"import-statement","original":"./schema"}],"format":"esm"},"packages/experimental/assistant/src/cypher/index.ts":{"bytes":808,"imports":[{"path":"packages/experimental/assistant/src/cypher/parser.ts","kind":"import-statement","original":"./parser"},{"path":"packages/experimental/assistant/src/cypher/query-executor.ts","kind":"import-statement","original":"./query-executor"},{"path":"packages/experimental/assistant/src/cypher/schema.ts","kind":"import-statement","original":"./schema"},{"path":"packages/experimental/assistant/src/cypher/echo-data-source.ts","kind":"import-statement","original":"./echo-data-source"}],"format":"esm"},"packages/experimental/assistant/src/conversation/conversation.ts":{"bytes":25711,"imports":[{"path":"@dxos/artifact","kind":"import-statement","external":true},{"path":"@dxos/echo-schema","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true}],"format":"esm"},"packages/experimental/assistant/src/conversation/index.ts":{"bytes":528,"imports":[{"path":"packages/experimental/assistant/src/conversation/conversation.ts","kind":"import-statement","original":"./conversation"}],"format":"esm"},"packages/experimental/assistant/src/index.ts":{"bytes":695,"imports":[{"path":"packages/experimental/assistant/src/ai-service/index.ts","kind":"import-statement","original":"./ai-service"},{"path":"packages/experimental/assistant/src/cypher/index.ts","kind":"import-statement","original":"./cypher"},{"path":"packages/experimental/assistant/src/conversation/index.ts","kind":"import-statement","original":"./conversation"}],"format":"esm"},"packages/experimental/assistant/src/testing/defs.ts":{"bytes":1016,"imports":[],"format":"esm"},"packages/experimental/assistant/src/testing/logger.ts":{"bytes":14680,"imports":[],"format":"esm"},"packages/experimental/assistant/src/testing/query-promts.ts":{"bytes":8956,"imports":[{"path":"@effect/schema","kind":"import-statement","external":true},{"path":"@dxos/artifact","kind":"import-statement","external":true},{"path":"@dxos/echo-schema","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"packages/experimental/assistant/src/cypher/index.ts","kind":"import-statement","original":"../cypher"},{"path":"packages/experimental/assistant/src/util/index.ts","kind":"import-statement","original":"../util"}],"format":"esm"},"packages/experimental/assistant/src/testing/test-data.ts":{"bytes":35152,"imports":[{"path":"@dxos/debug","kind":"import-statement","external":true},{"path":"@dxos/echo-schema","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/live-object","kind":"import-statement","external":true},{"path":"packages/experimental/assistant/src/cypher/index.ts","kind":"import-statement","original":"../cypher"},{"path":"packages/experimental/assistant/src/testing/index.ts","kind":"import-statement","original":"../testing"}],"format":"esm"},"packages/experimental/assistant/src/testing/test-schema.ts":{"bytes":8446,"imports":[{"path":"@effect/schema","kind":"import-statement","external":true},{"path":"@dxos/echo-schema","kind":"import-statement","external":true}],"format":"esm"},"packages/experimental/assistant/src/testing/index.ts":{"bytes":877,"imports":[{"path":"packages/experimental/assistant/src/testing/defs.ts","kind":"import-statement","original":"./defs"},{"path":"packages/experimental/assistant/src/testing/logger.ts","kind":"import-statement","original":"./logger"},{"path":"packages/experimental/assistant/src/testing/query-promts.ts","kind":"import-statement","original":"./query-promts"},{"path":"packages/experimental/assistant/src/testing/test-data.ts","kind":"import-statement","original":"./test-data"},{"path":"packages/experimental/assistant/src/testing/test-schema.ts","kind":"import-statement","original":"./test-schema"}],"format":"esm"}},"outputs":{"packages/experimental/assistant/dist/lib/node/index.cjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":59429},"packages/experimental/assistant/dist/lib/node/index.cjs":{"imports":[{"path":"packages/experimental/assistant/dist/lib/node/chunk-QPHGQINW.cjs","kind":"import-statement"},{"path":"@effect/schema","kind":"import-statement","external":true},{"path":"@dxos/artifact","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/artifact","kind":"import-statement","external":true},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/echo-schema","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"parsimmon","kind":"import-statement","external":true},{"path":"@effect/schema","kind":"import-statement","external":true},{"path":"@dxos/artifact","kind":"import-statement","external":true},{"path":"@dxos/echo-schema","kind":"import-statement","external":true},{"path":"@dxos/artifact","kind":"import-statement","external":true},{"path":"@dxos/echo-schema","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true}],"exports":["AIServiceClientImpl","DEFAULT_LLM_MODEL","DEFAULT_LLM_MODELS","EchoDataSource","GenerateRequest","GenerationStream","LLMModel","MixedStreamParser","StreamTransform","ToolTypes","createArtifactElement","createGenerationStream","executeQuery","executeQueryPlan","formatInferredRelationshipLabel","formatJsonSchemaForLLM","formatNodeLabel","isReference","isToolUse","mergeMessageBlock","parseCypherQuery","runLLM","runTools"],"entryPoint":"packages/experimental/assistant/src/index.ts","inputs":{"packages/experimental/assistant/src/ai-service/client.ts":{"bytesInOutput":1827},"packages/experimental/assistant/src/ai-service/stream.ts":{"bytesInOutput":2580},"packages/experimental/assistant/src/ai-service/util/sse.ts":{"bytesInOutput":6115},"packages/experimental/assistant/src/ai-service/util/index.ts":{"bytesInOutput":0},"packages/experimental/assistant/src/ai-service/index.ts":{"bytesInOutput":0},"packages/experimental/assistant/src/ai-service/defs.ts":{"bytesInOutput":579},"packages/experimental/assistant/src/ai-service/parser.ts":{"bytesInOutput":10964},"packages/experimental/assistant/src/ai-service/transform.ts":{"bytesInOutput":1994},"packages/experimental/assistant/src/ai-service/types.ts":{"bytesInOutput":1021},"packages/experimental/assistant/src/index.ts":{"bytesInOutput":0},"packages/experimental/assistant/src/conversation/conversation.ts":{"bytesInOutput":7330},"packages/experimental/assistant/src/conversation/index.ts":{"bytesInOutput":0}},"bytes":33791},"packages/experimental/assistant/dist/lib/node/testing/index.cjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":33095},"packages/experimental/assistant/dist/lib/node/testing/index.cjs":{"imports":[{"path":"packages/experimental/assistant/dist/lib/node/chunk-QPHGQINW.cjs","kind":"import-statement"},{"path":"@effect/schema","kind":"import-statement","external":true},{"path":"@dxos/artifact","kind":"import-statement","external":true},{"path":"@dxos/echo-schema","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/debug","kind":"import-statement","external":true},{"path":"@dxos/echo-schema","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/live-object","kind":"import-statement","external":true},{"path":"@effect/schema","kind":"import-statement","external":true},{"path":"@dxos/echo-schema","kind":"import-statement","external":true}],"exports":["AI_SERVICE_ENDPOINT","Contact","MockDataSource","ObjectId","Org","Project","Task","createCypherTool","createLogger","createSystemPrompt","createTestData","seedTestData"],"entryPoint":"packages/experimental/assistant/src/testing/index.ts","inputs":{"packages/experimental/assistant/src/testing/defs.ts":{"bytesInOutput":113},"packages/experimental/assistant/src/testing/index.ts":{"bytesInOutput":0},"packages/experimental/assistant/src/testing/logger.ts":{"bytesInOutput":3408},"packages/experimental/assistant/src/testing/query-promts.ts":{"bytesInOutput":2802},"packages/experimental/assistant/src/testing/test-data.ts":{"bytesInOutput":9031},"packages/experimental/assistant/src/testing/test-schema.ts":{"bytesInOutput":1915}},"bytes":17956},"packages/experimental/assistant/dist/lib/node/chunk-QPHGQINW.cjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":41496},"packages/experimental/assistant/dist/lib/node/chunk-QPHGQINW.cjs":{"imports":[{"path":"#parjs","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/debug","kind":"import-statement","external":true},{"path":"@dxos/echo-schema","kind":"import-statement","external":true},{"path":"@dxos/debug","kind":"import-statement","external":true},{"path":"@dxos/echo-db","kind":"import-statement","external":true},{"path":"@dxos/echo-schema","kind":"import-statement","external":true},{"path":"@dxos/live-object","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true}],"exports":["EchoDataSource","executeQuery","executeQueryPlan","formatInferredRelationshipLabel","formatJsonSchemaForLLM","formatNodeLabel","isReference","parseCypherQuery","trim"],"inputs":{"packages/experimental/assistant/src/cypher/parjs.ts":{"bytesInOutput":50},"packages/experimental/assistant/src/cypher/combinators.ts":{"bytesInOutput":3853},"packages/experimental/assistant/src/cypher/parser.ts":{"bytesInOutput":239},"packages/experimental/assistant/src/cypher/query-executor.ts":{"bytesInOutput":3917},"packages/experimental/assistant/src/cypher/execution-plan.ts":{"bytesInOutput":5010},"packages/experimental/assistant/src/cypher/schema.ts":{"bytesInOutput":2270},"packages/experimental/assistant/src/util/trim.ts":{"bytesInOutput":204},"packages/experimental/assistant/src/util/index.ts":{"bytesInOutput":0},"packages/experimental/assistant/src/cypher/echo-data-source.ts":{"bytesInOutput":3981},"packages/experimental/assistant/src/cypher/index.ts":{"bytesInOutput":0}},"bytes":20360}}}
1
+ {"inputs":{"packages/experimental/assistant/src/ai-service/defs.ts":{"bytes":3403,"imports":[],"format":"esm"},"packages/experimental/assistant/src/ai-service/util/sse.ts":{"bytes":30181,"imports":[],"format":"esm"},"packages/experimental/assistant/src/ai-service/util/index.ts":{"bytes":506,"imports":[{"path":"packages/experimental/assistant/src/ai-service/util/sse.ts","kind":"import-statement","original":"./sse"}],"format":"esm"},"packages/experimental/assistant/src/ai-service/stream.ts":{"bytes":10951,"imports":[{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"packages/experimental/assistant/src/ai-service/util/index.ts","kind":"import-statement","original":"./util"}],"format":"esm"},"packages/experimental/assistant/src/ai-service/edge-client.ts":{"bytes":7218,"imports":[{"path":"effect","kind":"import-statement","external":true},{"path":"@dxos/artifact","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"packages/experimental/assistant/src/ai-service/stream.ts","kind":"import-statement","original":"./stream"}],"format":"esm"},"packages/experimental/assistant/src/ai-service/message-collector.ts":{"bytes":8239,"imports":[],"format":"esm"},"packages/experimental/assistant/src/ai-service/types.ts":{"bytes":6321,"imports":[{"path":"effect","kind":"import-statement","external":true},{"path":"@dxos/artifact","kind":"import-statement","external":true},{"path":"@dxos/echo-schema","kind":"import-statement","external":true},{"path":"packages/experimental/assistant/src/ai-service/defs.ts","kind":"import-statement","original":"./defs"}],"format":"esm"},"packages/experimental/assistant/src/conversation/conversation.ts":{"bytes":26327,"imports":[{"path":"@dxos/artifact","kind":"import-statement","external":true},{"path":"@dxos/echo-schema","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true}],"format":"esm"},"packages/experimental/assistant/src/conversation/index.ts":{"bytes":528,"imports":[{"path":"packages/experimental/assistant/src/conversation/conversation.ts","kind":"import-statement","original":"./conversation"}],"format":"esm"},"packages/experimental/assistant/src/ai-service/ollama-client.ts":{"bytes":48922,"imports":[{"path":"effect","kind":"import-statement","external":true},{"path":"@dxos/artifact","kind":"import-statement","external":true},{"path":"@dxos/echo-schema","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"packages/experimental/assistant/src/ai-service/defs.ts","kind":"import-statement","original":"./defs"},{"path":"packages/experimental/assistant/src/ai-service/message-collector.ts","kind":"import-statement","original":"./message-collector"},{"path":"packages/experimental/assistant/src/ai-service/stream.ts","kind":"import-statement","original":"./stream"},{"path":"packages/experimental/assistant/src/ai-service/types.ts","kind":"import-statement","original":"./types"},{"path":"packages/experimental/assistant/src/conversation/index.ts","kind":"import-statement","original":"../conversation"}],"format":"esm"},"packages/experimental/assistant/src/ai-service/transform.ts":{"bytes":9707,"imports":[{"path":"parsimmon","kind":"import-statement","external":true}],"format":"esm"},"packages/experimental/assistant/src/ai-service/parser.ts":{"bytes":42064,"imports":[{"path":"@dxos/artifact","kind":"import-statement","external":true},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/echo-schema","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"packages/experimental/assistant/src/ai-service/transform.ts","kind":"import-statement","original":"./transform"}],"format":"esm"},"packages/experimental/assistant/src/ai-service/service.ts":{"bytes":964,"imports":[],"format":"esm"},"packages/experimental/assistant/src/ai-service/index.ts":{"bytes":1252,"imports":[{"path":"packages/experimental/assistant/src/ai-service/defs.ts","kind":"import-statement","original":"./defs"},{"path":"packages/experimental/assistant/src/ai-service/edge-client.ts","kind":"import-statement","original":"./edge-client"},{"path":"packages/experimental/assistant/src/ai-service/message-collector.ts","kind":"import-statement","original":"./message-collector"},{"path":"packages/experimental/assistant/src/ai-service/ollama-client.ts","kind":"import-statement","original":"./ollama-client"},{"path":"packages/experimental/assistant/src/ai-service/parser.ts","kind":"import-statement","original":"./parser"},{"path":"packages/experimental/assistant/src/ai-service/service.ts","kind":"import-statement","original":"./service"},{"path":"packages/experimental/assistant/src/ai-service/stream.ts","kind":"import-statement","original":"./stream"},{"path":"packages/experimental/assistant/src/ai-service/transform.ts","kind":"import-statement","original":"./transform"},{"path":"packages/experimental/assistant/src/ai-service/types.ts","kind":"import-statement","original":"./types"}],"format":"esm"},"packages/experimental/assistant/src/cypher/parjs.ts":{"bytes":1016,"imports":[{"path":"#parjs","kind":"import-statement","external":true}],"format":"esm"},"packages/experimental/assistant/src/cypher/combinators.ts":{"bytes":17930,"imports":[{"path":"packages/experimental/assistant/src/cypher/parjs.ts","kind":"import-statement","original":"./parjs"}],"format":"esm"},"packages/experimental/assistant/src/cypher/parser.ts":{"bytes":1744,"imports":[{"path":"packages/experimental/assistant/src/cypher/combinators.ts","kind":"import-statement","original":"./combinators"}],"format":"esm"},"packages/experimental/assistant/src/cypher/execution-plan.ts":{"bytes":20257,"imports":[{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true}],"format":"esm"},"packages/experimental/assistant/src/cypher/query-executor.ts":{"bytes":16864,"imports":[{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"packages/experimental/assistant/src/cypher/execution-plan.ts","kind":"import-statement","original":"./execution-plan"},{"path":"packages/experimental/assistant/src/cypher/parser.ts","kind":"import-statement","original":"./parser"}],"format":"esm"},"packages/experimental/assistant/src/util/trim.ts":{"bytes":1569,"imports":[],"format":"esm"},"packages/experimental/assistant/src/util/index.ts":{"bytes":500,"imports":[{"path":"packages/experimental/assistant/src/util/trim.ts","kind":"import-statement","original":"./trim"}],"format":"esm"},"packages/experimental/assistant/src/cypher/schema.ts":{"bytes":9981,"imports":[{"path":"@dxos/debug","kind":"import-statement","external":true},{"path":"@dxos/echo-schema","kind":"import-statement","external":true},{"path":"packages/experimental/assistant/src/util/index.ts","kind":"import-statement","original":"../util"}],"format":"esm"},"packages/experimental/assistant/src/cypher/echo-data-source.ts":{"bytes":14379,"imports":[{"path":"@dxos/debug","kind":"import-statement","external":true},{"path":"@dxos/echo-db","kind":"import-statement","external":true},{"path":"@dxos/echo-schema","kind":"import-statement","external":true},{"path":"@dxos/live-object","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"packages/experimental/assistant/src/cypher/schema.ts","kind":"import-statement","original":"./schema"}],"format":"esm"},"packages/experimental/assistant/src/cypher/index.ts":{"bytes":808,"imports":[{"path":"packages/experimental/assistant/src/cypher/parser.ts","kind":"import-statement","original":"./parser"},{"path":"packages/experimental/assistant/src/cypher/query-executor.ts","kind":"import-statement","original":"./query-executor"},{"path":"packages/experimental/assistant/src/cypher/schema.ts","kind":"import-statement","original":"./schema"},{"path":"packages/experimental/assistant/src/cypher/echo-data-source.ts","kind":"import-statement","original":"./echo-data-source"}],"format":"esm"},"packages/experimental/assistant/src/index.ts":{"bytes":695,"imports":[{"path":"packages/experimental/assistant/src/ai-service/index.ts","kind":"import-statement","original":"./ai-service"},{"path":"packages/experimental/assistant/src/cypher/index.ts","kind":"import-statement","original":"./cypher"},{"path":"packages/experimental/assistant/src/conversation/index.ts","kind":"import-statement","original":"./conversation"}],"format":"esm"},"packages/experimental/assistant/src/testing/defs.ts":{"bytes":1016,"imports":[],"format":"esm"},"packages/experimental/assistant/src/testing/logger.ts":{"bytes":14680,"imports":[],"format":"esm"},"packages/experimental/assistant/src/testing/ollama.ts":{"bytes":1785,"imports":[{"path":"packages/experimental/assistant/src/ai-service/index.ts","kind":"import-statement","original":"../ai-service"}],"format":"esm"},"packages/experimental/assistant/src/testing/query-promts.ts":{"bytes":8932,"imports":[{"path":"effect","kind":"import-statement","external":true},{"path":"@dxos/artifact","kind":"import-statement","external":true},{"path":"@dxos/echo-schema","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"packages/experimental/assistant/src/cypher/index.ts","kind":"import-statement","original":"../cypher"},{"path":"packages/experimental/assistant/src/util/index.ts","kind":"import-statement","original":"../util"}],"format":"esm"},"packages/experimental/assistant/src/testing/test-data.ts":{"bytes":35140,"imports":[{"path":"@dxos/debug","kind":"import-statement","external":true},{"path":"@dxos/echo-schema","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/live-object","kind":"import-statement","external":true},{"path":"packages/experimental/assistant/src/cypher/index.ts","kind":"import-statement","original":"../cypher"},{"path":"packages/experimental/assistant/src/testing/index.ts","kind":"import-statement","original":"../testing"}],"format":"esm"},"packages/experimental/assistant/src/testing/test-schema.ts":{"bytes":8426,"imports":[{"path":"effect","kind":"import-statement","external":true},{"path":"@dxos/echo-schema","kind":"import-statement","external":true}],"format":"esm"},"packages/experimental/assistant/src/testing/index.ts":{"bytes":963,"imports":[{"path":"packages/experimental/assistant/src/testing/defs.ts","kind":"import-statement","original":"./defs"},{"path":"packages/experimental/assistant/src/testing/logger.ts","kind":"import-statement","original":"./logger"},{"path":"packages/experimental/assistant/src/testing/ollama.ts","kind":"import-statement","original":"./ollama"},{"path":"packages/experimental/assistant/src/testing/query-promts.ts","kind":"import-statement","original":"./query-promts"},{"path":"packages/experimental/assistant/src/testing/test-data.ts","kind":"import-statement","original":"./test-data"},{"path":"packages/experimental/assistant/src/testing/test-schema.ts","kind":"import-statement","original":"./test-schema"}],"format":"esm"}},"outputs":{"packages/experimental/assistant/dist/lib/node/index.cjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":93},"packages/experimental/assistant/dist/lib/node/index.cjs":{"imports":[{"path":"packages/experimental/assistant/dist/lib/node/chunk-4ZDZUCAS.cjs","kind":"import-statement"}],"exports":["AIServiceEdgeClient","DEFAULT_EDGE_MODEL","DEFAULT_EDGE_MODELS","DEFAULT_OLLAMA_ENDPOINT","DEFAULT_OLLAMA_MODEL","DEFAULT_OLLAMA_MODELS","EchoDataSource","GenerateRequest","GenerationStreamImpl","LLMModel","MessageCollector","MixedStreamParser","OllamaClient","StreamTransform","ToolTypes","createArtifactElement","createGenerationStream","emitMessageAsEvents","executeQuery","executeQueryPlan","formatInferredRelationshipLabel","formatJsonSchemaForLLM","formatNodeLabel","isReference","isToolUse","mergeMessageBlock","parseCypherQuery","runLLM","runTools"],"entryPoint":"packages/experimental/assistant/src/index.ts","inputs":{"packages/experimental/assistant/src/index.ts":{"bytesInOutput":0}},"bytes":1259},"packages/experimental/assistant/dist/lib/node/testing/index.cjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":33826},"packages/experimental/assistant/dist/lib/node/testing/index.cjs":{"imports":[{"path":"packages/experimental/assistant/dist/lib/node/chunk-4ZDZUCAS.cjs","kind":"import-statement"},{"path":"effect","kind":"import-statement","external":true},{"path":"@dxos/artifact","kind":"import-statement","external":true},{"path":"@dxos/echo-schema","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/debug","kind":"import-statement","external":true},{"path":"@dxos/echo-schema","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/live-object","kind":"import-statement","external":true},{"path":"effect","kind":"import-statement","external":true},{"path":"@dxos/echo-schema","kind":"import-statement","external":true}],"exports":["AI_SERVICE_ENDPOINT","Contact","MockDataSource","ObjectId","Org","Project","Task","createCypherTool","createLogger","createSystemPrompt","createTestData","createTestOllamaClient","seedTestData"],"entryPoint":"packages/experimental/assistant/src/testing/index.ts","inputs":{"packages/experimental/assistant/src/testing/defs.ts":{"bytesInOutput":113},"packages/experimental/assistant/src/testing/index.ts":{"bytesInOutput":0},"packages/experimental/assistant/src/testing/logger.ts":{"bytesInOutput":3408},"packages/experimental/assistant/src/testing/ollama.ts":{"bytesInOutput":187},"packages/experimental/assistant/src/testing/query-promts.ts":{"bytesInOutput":2794},"packages/experimental/assistant/src/testing/test-data.ts":{"bytesInOutput":9031},"packages/experimental/assistant/src/testing/test-schema.ts":{"bytesInOutput":1907}},"bytes":18251},"packages/experimental/assistant/dist/lib/node/chunk-4ZDZUCAS.cjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":128822},"packages/experimental/assistant/dist/lib/node/chunk-4ZDZUCAS.cjs":{"imports":[{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"effect","kind":"import-statement","external":true},{"path":"@dxos/artifact","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"effect","kind":"import-statement","external":true},{"path":"@dxos/artifact","kind":"import-statement","external":true},{"path":"@dxos/echo-schema","kind":"import-statement","external":true},{"path":"@dxos/artifact","kind":"import-statement","external":true},{"path":"@dxos/echo-schema","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"effect","kind":"import-statement","external":true},{"path":"@dxos/artifact","kind":"import-statement","external":true},{"path":"@dxos/echo-schema","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"parsimmon","kind":"import-statement","external":true},{"path":"@dxos/artifact","kind":"import-statement","external":true},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/echo-schema","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"#parjs","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/debug","kind":"import-statement","external":true},{"path":"@dxos/echo-schema","kind":"import-statement","external":true},{"path":"@dxos/debug","kind":"import-statement","external":true},{"path":"@dxos/echo-db","kind":"import-statement","external":true},{"path":"@dxos/echo-schema","kind":"import-statement","external":true},{"path":"@dxos/live-object","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true}],"exports":["AIServiceEdgeClient","DEFAULT_EDGE_MODEL","DEFAULT_EDGE_MODELS","DEFAULT_OLLAMA_ENDPOINT","DEFAULT_OLLAMA_MODEL","DEFAULT_OLLAMA_MODELS","EchoDataSource","GenerateRequest","GenerationStreamImpl","LLMModel","MessageCollector","MixedStreamParser","OllamaClient","StreamTransform","ToolTypes","createArtifactElement","createGenerationStream","emitMessageAsEvents","executeQuery","executeQueryPlan","formatInferredRelationshipLabel","formatJsonSchemaForLLM","formatNodeLabel","isReference","isToolUse","mergeMessageBlock","parseCypherQuery","runLLM","runTools","trim"],"inputs":{"packages/experimental/assistant/src/ai-service/defs.ts":{"bytesInOutput":773},"packages/experimental/assistant/src/ai-service/stream.ts":{"bytesInOutput":2609},"packages/experimental/assistant/src/ai-service/util/sse.ts":{"bytesInOutput":6115},"packages/experimental/assistant/src/ai-service/util/index.ts":{"bytesInOutput":0},"packages/experimental/assistant/src/ai-service/edge-client.ts":{"bytesInOutput":1924},"packages/experimental/assistant/src/ai-service/message-collector.ts":{"bytesInOutput":1774},"packages/experimental/assistant/src/ai-service/types.ts":{"bytesInOutput":1014},"packages/experimental/assistant/src/conversation/conversation.ts":{"bytesInOutput":7445},"packages/experimental/assistant/src/conversation/index.ts":{"bytesInOutput":0},"packages/experimental/assistant/src/ai-service/ollama-client.ts":{"bytesInOutput":11469},"packages/experimental/assistant/src/ai-service/transform.ts":{"bytesInOutput":1994},"packages/experimental/assistant/src/ai-service/parser.ts":{"bytesInOutput":11114},"packages/experimental/assistant/src/ai-service/index.ts":{"bytesInOutput":0},"packages/experimental/assistant/src/cypher/parjs.ts":{"bytesInOutput":50},"packages/experimental/assistant/src/cypher/combinators.ts":{"bytesInOutput":3853},"packages/experimental/assistant/src/cypher/parser.ts":{"bytesInOutput":239},"packages/experimental/assistant/src/cypher/query-executor.ts":{"bytesInOutput":3917},"packages/experimental/assistant/src/cypher/execution-plan.ts":{"bytesInOutput":5043},"packages/experimental/assistant/src/cypher/schema.ts":{"bytesInOutput":2270},"packages/experimental/assistant/src/util/trim.ts":{"bytesInOutput":204},"packages/experimental/assistant/src/util/index.ts":{"bytesInOutput":0},"packages/experimental/assistant/src/cypher/echo-data-source.ts":{"bytesInOutput":3981},"packages/experimental/assistant/src/cypher/index.ts":{"bytesInOutput":0}},"bytes":67746}}}
@@ -29,11 +29,12 @@ __export(testing_exports, {
29
29
  createLogger: () => createLogger,
30
30
  createSystemPrompt: () => createSystemPrompt,
31
31
  createTestData: () => createTestData,
32
+ createTestOllamaClient: () => createTestOllamaClient,
32
33
  seedTestData: () => seedTestData
33
34
  });
34
35
  module.exports = __toCommonJS(testing_exports);
35
- var import_chunk_QPHGQINW = require("../chunk-QPHGQINW.cjs");
36
- var import_schema = require("@effect/schema");
36
+ var import_chunk_4ZDZUCAS = require("../chunk-4ZDZUCAS.cjs");
37
+ var import_effect = require("effect");
37
38
  var import_artifact = require("@dxos/artifact");
38
39
  var import_echo_schema = require("@dxos/echo-schema");
39
40
  var import_log = require("@dxos/log");
@@ -41,7 +42,7 @@ var import_debug = require("@dxos/debug");
41
42
  var import_echo_schema2 = require("@dxos/echo-schema");
42
43
  var import_invariant = require("@dxos/invariant");
43
44
  var import_live_object = require("@dxos/live-object");
44
- var import_schema2 = require("@effect/schema");
45
+ var import_effect2 = require("effect");
45
46
  var import_echo_schema3 = require("@dxos/echo-schema");
46
47
  var AI_SERVICE_ENDPOINT = {
47
48
  LOCAL: "http://localhost:8788",
@@ -162,14 +163,23 @@ var createLogger = ({ stream, filter, onImage } = {}) => {
162
163
  }
163
164
  };
164
165
  };
166
+ var createTestOllamaClient = (options) => {
167
+ return new import_chunk_4ZDZUCAS.OllamaClient({
168
+ tools: options?.tools,
169
+ overrides: {
170
+ model: import_chunk_4ZDZUCAS.DEFAULT_OLLAMA_MODEL,
171
+ temperature: 0
172
+ }
173
+ });
174
+ };
165
175
  var __dxlog_file = "/home/runner/work/dxos/dxos/packages/experimental/assistant/src/testing/query-promts.ts";
166
176
  var createCypherTool = (dataSource, schemaTypes = []) => (0, import_artifact.defineTool)("dxos.org/echo", {
167
177
  name: "query",
168
178
  description: "Query the ECHO graph database in cypher query language. Returns data from the database." + (schemaTypes.length > 0 ? `
169
179
 
170
180
  ${createSystemPrompt(schemaTypes)}` : ""),
171
- schema: import_schema.Schema.Struct({
172
- query: import_schema.Schema.String.annotations({
181
+ schema: import_effect.Schema.Struct({
182
+ query: import_effect.Schema.String.annotations({
173
183
  description: `
174
184
  A valid cypher query string to execute.
175
185
  Query must have one MATCH clause.
@@ -203,7 +213,7 @@ ${createSystemPrompt(schemaTypes)}` : ""),
203
213
  S: void 0,
204
214
  C: (f, a) => f(...a)
205
215
  });
206
- const results = await (0, import_chunk_QPHGQINW.executeQuery)(dataSource, query);
216
+ const results = await (0, import_chunk_4ZDZUCAS.executeQuery)(dataSource, query);
207
217
  (0, import_log.log)("query complete", {
208
218
  results
209
219
  }, {
@@ -224,13 +234,13 @@ ${createSystemPrompt(schemaTypes)}` : ""),
224
234
  }
225
235
  }
226
236
  });
227
- var createSystemPrompt = (schemaTypes) => import_chunk_QPHGQINW.trim`
237
+ var createSystemPrompt = (schemaTypes) => import_chunk_4ZDZUCAS.trim`
228
238
  You have access to ECHO graph database. You can query the database to get data to satisfy user prompts.
229
239
 
230
240
  Database schema is defined in pseud-cypher syntax. The schema is:
231
241
 
232
242
  <schema>
233
- ${(0, import_chunk_QPHGQINW.formatJsonSchemaForLLM)(schemaTypes.map((schema) => (0, import_echo_schema.toJsonSchema)(schema)))}
243
+ ${(0, import_chunk_4ZDZUCAS.formatJsonSchemaForLLM)(schemaTypes.map((schema) => (0, import_echo_schema.toJsonSchema)(schema)))}
234
244
  <schema>
235
245
 
236
246
  Before replying always think step-by-step on how to proceed.
@@ -488,7 +498,7 @@ var MockDataSource = class {
488
498
  this.nodes.push({
489
499
  kind: "node",
490
500
  id: object.id,
491
- label: (0, import_chunk_QPHGQINW.formatNodeLabel)(object.typeDxn),
501
+ label: (0, import_chunk_4ZDZUCAS.formatNodeLabel)(object.typeDxn),
492
502
  properties: object.data
493
503
  });
494
504
  }
@@ -497,7 +507,7 @@ var MockDataSource = class {
497
507
  const typenameDxn = schema.$id ?? (0, import_debug.raise)(new Error("Schema must have $id"));
498
508
  for (const [name, propSchema] of Object.entries(schema.properties)) {
499
509
  if (propSchema.$id === import_echo_schema2.JSON_SCHEMA_ECHO_REF_ID) {
500
- const label = (0, import_chunk_QPHGQINW.formatInferredRelationshipLabel)(typenameDxn, name);
510
+ const label = (0, import_chunk_4ZDZUCAS.formatInferredRelationshipLabel)(typenameDxn, name);
501
511
  const source = this.nodes.find((node) => node.id === object.id);
502
512
  if (!source) {
503
513
  continue;
@@ -516,7 +526,7 @@ var MockDataSource = class {
516
526
  target
517
527
  });
518
528
  } else if (propSchema.type === "array" && propSchema.items && typeof propSchema.items === "object" && "$id" in propSchema.items && propSchema.items.$id === import_echo_schema2.JSON_SCHEMA_ECHO_REF_ID) {
519
- const label = (0, import_chunk_QPHGQINW.formatInferredRelationshipLabel)(typenameDxn, name);
529
+ const label = (0, import_chunk_4ZDZUCAS.formatInferredRelationshipLabel)(typenameDxn, name);
520
530
  const source = this.nodes.find((node) => node.id === object.id);
521
531
  if (!source) {
522
532
  continue;
@@ -540,18 +550,18 @@ var MockDataSource = class {
540
550
  }
541
551
  }
542
552
  };
543
- var ObjectId2 = import_schema2.Schema.String.annotations({
553
+ var ObjectId2 = import_effect2.Schema.String.annotations({
544
554
  description: "The unique object identifier."
545
555
  });
546
- var Contact = import_schema2.Schema.Struct({
556
+ var Contact = import_effect2.Schema.Struct({
547
557
  id: ObjectId2,
548
- name: import_schema2.Schema.String.annotations({
558
+ name: import_effect2.Schema.String.annotations({
549
559
  description: "The name of the person."
550
560
  }),
551
- email: import_schema2.Schema.optional(import_schema2.Schema.String).annotations({
561
+ email: import_effect2.Schema.optional(import_effect2.Schema.String).annotations({
552
562
  description: "Email address."
553
563
  })
554
- }).pipe(import_schema2.Schema.mutable).annotations({
564
+ }).pipe(import_effect2.Schema.mutable).annotations({
555
565
  [import_echo_schema3.ObjectAnnotationId]: {
556
566
  kind: import_echo_schema3.EntityKind.Object,
557
567
  typename: "example.com/type/Contact",
@@ -559,15 +569,15 @@ var Contact = import_schema2.Schema.Struct({
559
569
  },
560
570
  description: "Contact information."
561
571
  });
562
- var Project = import_schema2.Schema.Struct({
572
+ var Project = import_effect2.Schema.Struct({
563
573
  id: ObjectId2,
564
- name: import_schema2.Schema.String.annotations({
574
+ name: import_effect2.Schema.String.annotations({
565
575
  description: "The name of the project."
566
576
  }),
567
- description: import_schema2.Schema.optional(import_schema2.Schema.String).annotations({
577
+ description: import_effect2.Schema.optional(import_effect2.Schema.String).annotations({
568
578
  description: "The description of the project."
569
579
  })
570
- }).pipe(import_schema2.Schema.mutable).annotations({
580
+ }).pipe(import_effect2.Schema.mutable).annotations({
571
581
  [import_echo_schema3.ObjectAnnotationId]: {
572
582
  kind: import_echo_schema3.EntityKind.Object,
573
583
  typename: "example.com/type/Project",
@@ -575,17 +585,17 @@ var Project = import_schema2.Schema.Struct({
575
585
  },
576
586
  description: "Contact information."
577
587
  });
578
- var Task = import_schema2.Schema.Struct({
588
+ var Task = import_effect2.Schema.Struct({
579
589
  id: ObjectId2,
580
- name: import_schema2.Schema.String.annotations({
590
+ name: import_effect2.Schema.String.annotations({
581
591
  description: "The name of the task."
582
592
  }),
583
- description: import_schema2.Schema.optional(import_schema2.Schema.String).annotations({
593
+ description: import_effect2.Schema.optional(import_effect2.Schema.String).annotations({
584
594
  description: "The description of the task."
585
595
  }),
586
596
  project: (0, import_echo_schema3.Ref)(Project),
587
597
  assignee: (0, import_echo_schema3.Ref)(Contact)
588
- }).pipe(import_schema2.Schema.mutable).annotations({
598
+ }).pipe(import_effect2.Schema.mutable).annotations({
589
599
  [import_echo_schema3.ObjectAnnotationId]: {
590
600
  kind: import_echo_schema3.EntityKind.Object,
591
601
  typename: "example.com/type/Task",
@@ -593,14 +603,14 @@ var Task = import_schema2.Schema.Struct({
593
603
  },
594
604
  description: "Contact information."
595
605
  });
596
- var Org = import_schema2.Schema.Struct({
606
+ var Org = import_effect2.Schema.Struct({
597
607
  id: ObjectId2,
598
- name: import_schema2.Schema.String.annotations({
608
+ name: import_effect2.Schema.String.annotations({
599
609
  description: "The name of the organization."
600
610
  }),
601
- projects: import_schema2.Schema.Array((0, import_echo_schema3.Ref)(Project)),
602
- employees: import_schema2.Schema.Array((0, import_echo_schema3.Ref)(Contact))
603
- }).pipe(import_schema2.Schema.mutable).annotations({
611
+ projects: import_effect2.Schema.Array((0, import_echo_schema3.Ref)(Project)),
612
+ employees: import_effect2.Schema.Array((0, import_echo_schema3.Ref)(Contact))
613
+ }).pipe(import_effect2.Schema.mutable).annotations({
604
614
  [import_echo_schema3.ObjectAnnotationId]: {
605
615
  kind: import_echo_schema3.EntityKind.Object,
606
616
  typename: "example.com/type/Org",
@@ -621,6 +631,7 @@ var Org = import_schema2.Schema.Struct({
621
631
  createLogger,
622
632
  createSystemPrompt,
623
633
  createTestData,
634
+ createTestOllamaClient,
624
635
  seedTestData
625
636
  });
626
637
  //# sourceMappingURL=index.cjs.map