@dxos/assistant 0.8.4-main.5acf9ea → 0.8.4-main.67995b8

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 (29) hide show
  1. package/dist/lib/browser/chunk-6WRGDEMH.mjs +89 -0
  2. package/dist/lib/browser/chunk-6WRGDEMH.mjs.map +7 -0
  3. package/dist/lib/browser/chunk-SIXTNSGV.mjs +250 -0
  4. package/dist/lib/browser/chunk-SIXTNSGV.mjs.map +7 -0
  5. package/dist/lib/browser/extraction/index.mjs +269 -0
  6. package/dist/lib/browser/extraction/index.mjs.map +7 -0
  7. package/dist/lib/browser/index.mjs +125 -705
  8. package/dist/lib/browser/index.mjs.map +4 -4
  9. package/dist/lib/browser/meta.json +1 -1
  10. package/dist/lib/browser/named-entity-recognition-O46UTCLR.mjs +13 -0
  11. package/dist/lib/browser/named-entity-recognition-O46UTCLR.mjs.map +7 -0
  12. package/dist/lib/node-esm/chunk-3UU5V4FS.mjs +91 -0
  13. package/dist/lib/node-esm/chunk-3UU5V4FS.mjs.map +7 -0
  14. package/dist/lib/node-esm/chunk-FD5NXKDP.mjs +252 -0
  15. package/dist/lib/node-esm/chunk-FD5NXKDP.mjs.map +7 -0
  16. package/dist/lib/node-esm/extraction/index.mjs +270 -0
  17. package/dist/lib/node-esm/extraction/index.mjs.map +7 -0
  18. package/dist/lib/node-esm/index.mjs +124 -705
  19. package/dist/lib/node-esm/index.mjs.map +4 -4
  20. package/dist/lib/node-esm/meta.json +1 -1
  21. package/dist/lib/node-esm/named-entity-recognition-W4VMRCH6.mjs +14 -0
  22. package/dist/lib/node-esm/named-entity-recognition-W4VMRCH6.mjs.map +7 -0
  23. package/dist/types/src/extraction/extraction-ner-function/extraction-ner-function.d.ts.map +1 -1
  24. package/dist/types/src/index.d.ts +0 -1
  25. package/dist/types/src/index.d.ts.map +1 -1
  26. package/dist/types/tsconfig.tsbuildinfo +1 -1
  27. package/package.json +37 -21
  28. package/src/extraction/extraction-ner-function/extraction-ner-function.ts +1 -1
  29. package/src/index.ts +0 -1
@@ -1 +1 @@
1
- {"inputs":{"src/context/binding.ts":{"bytes":3145,"imports":[{"path":"effect","kind":"import-statement","external":true},{"path":"@dxos/blueprints","kind":"import-statement","external":true},{"path":"@dxos/echo","kind":"import-statement","external":true}],"format":"esm"},"src/context/binder.ts":{"bytes":10270,"imports":[{"path":"@preact/signals-core","kind":"import-statement","external":true},{"path":"effect","kind":"import-statement","external":true},{"path":"@dxos/echo","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"src/context/binding.ts","kind":"import-statement","original":"./binding"}],"format":"esm"},"src/context/index.ts":{"bytes":539,"imports":[{"path":"src/context/binder.ts","kind":"import-statement","original":"./binder"},{"path":"src/context/binding.ts","kind":"import-statement","original":"./binding"}],"format":"esm"},"src/errors.ts":{"bytes":939,"imports":[{"path":"@dxos/errors","kind":"import-statement","external":true}],"format":"esm"},"src/session/session.ts":{"bytes":38121,"imports":[{"path":"@effect/ai","kind":"import-statement","external":true},{"path":"effect","kind":"import-statement","external":true},{"path":"effect","kind":"import-statement","external":true},{"path":"@dxos/ai","kind":"import-statement","external":true},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/debug","kind":"import-statement","external":true},{"path":"@dxos/echo","kind":"import-statement","external":true},{"path":"@dxos/echo-db","kind":"import-statement","external":true},{"path":"@dxos/functions","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/schema","kind":"import-statement","external":true},{"path":"src/errors.ts","kind":"import-statement","original":"../errors"}],"format":"esm"},"src/session/version-pin.ts":{"bytes":4197,"imports":[{"path":"effect","kind":"import-statement","external":true},{"path":"@dxos/echo-db","kind":"import-statement","external":true},{"path":"@dxos/echo-schema","kind":"import-statement","external":true}],"format":"esm"},"src/session/index.ts":{"bytes":556,"imports":[{"path":"src/session/session.ts","kind":"import-statement","original":"./session"},{"path":"src/session/version-pin.ts","kind":"import-statement","original":"./version-pin"}],"format":"esm"},"src/conversation/conversation.ts":{"bytes":8811,"imports":[{"path":"effect","kind":"import-statement","external":true},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/echo","kind":"import-statement","external":true},{"path":"@dxos/functions","kind":"import-statement","external":true},{"path":"@dxos/schema","kind":"import-statement","external":true},{"path":"src/context/index.ts","kind":"import-statement","original":"../context"},{"path":"src/session/index.ts","kind":"import-statement","original":"../session"}],"format":"esm"},"src/conversation/index.ts":{"bytes":475,"imports":[{"path":"src/conversation/conversation.ts","kind":"import-statement","original":"./conversation"}],"format":"esm"},"src/extraction/extraction.ts":{"bytes":6822,"imports":[{"path":"effect","kind":"import-statement","external":true},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/echo-schema","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/schema","kind":"import-statement","external":true}],"format":"esm"},"raw-loader:./instructions.tpl?raw":{"bytes":1318,"imports":[]},"src/extraction/quotes.ts":{"bytes":7110,"imports":[{"path":"effect","kind":"import-statement","external":true},{"path":"@dxos/echo","kind":"import-statement","external":true},{"path":"@dxos/echo-schema","kind":"import-statement","external":true},{"path":"@dxos/keys","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true}],"format":"esm"},"src/extraction/extraction-llm-function/extraction-llm-function.ts":{"bytes":8645,"imports":[{"path":"@dxos/ai","kind":"import-statement","external":true},{"path":"@dxos/echo","kind":"import-statement","external":true},{"path":"@dxos/echo-schema","kind":"import-statement","external":true},{"path":"@dxos/functions","kind":"import-statement","external":true},{"path":"@dxos/schema","kind":"import-statement","external":true},{"path":"raw-loader:./instructions.tpl?raw","kind":"import-statement","original":"./instructions.tpl?raw"},{"path":"src/session/index.ts","kind":"import-statement","original":"../../session"},{"path":"src/extraction/extraction.ts","kind":"import-statement","original":"../extraction"},{"path":"src/extraction/quotes.ts","kind":"import-statement","original":"../quotes"}],"format":"esm"},"src/extraction/extraction-llm-function/index.ts":{"bytes":524,"imports":[{"path":"src/extraction/extraction-llm-function/extraction-llm-function.ts","kind":"import-statement","original":"./extraction-llm-function"}],"format":"esm"},"src/extraction/extraction-ner-function/named-entity-recognition.ts":{"bytes":10059,"imports":[{"path":"@xenova/transformers","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true}],"format":"esm"},"src/extraction/extraction-ner-function/extraction-ner-function.ts":{"bytes":9002,"imports":[{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/echo-schema","kind":"import-statement","external":true},{"path":"@dxos/functions","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/schema","kind":"import-statement","external":true},{"path":"src/extraction/extraction-ner-function/named-entity-recognition.ts","kind":"import-statement","original":"./named-entity-recognition"},{"path":"src/extraction/extraction.ts","kind":"import-statement","original":"../extraction"},{"path":"src/extraction/quotes.ts","kind":"import-statement","original":"../quotes"}],"format":"esm"},"src/extraction/extraction-ner-function/index.ts":{"bytes":652,"imports":[{"path":"src/extraction/extraction-ner-function/extraction-ner-function.ts","kind":"import-statement","original":"./extraction-ner-function"},{"path":"src/extraction/extraction-ner-function/named-entity-recognition.ts","kind":"import-statement","original":"./named-entity-recognition"}],"format":"esm"},"src/extraction/index.ts":{"bytes":803,"imports":[{"path":"src/extraction/extraction.ts","kind":"import-statement","original":"./extraction"},{"path":"src/extraction/extraction-llm-function/index.ts","kind":"import-statement","original":"./extraction-llm-function"},{"path":"src/extraction/extraction-ner-function/index.ts","kind":"import-statement","original":"./extraction-ner-function"},{"path":"src/extraction/quotes.ts","kind":"import-statement","original":"./quotes"}],"format":"esm"},"src/functions/services.ts":{"bytes":12439,"imports":[{"path":"@effect/ai","kind":"import-statement","external":true},{"path":"effect","kind":"import-statement","external":true},{"path":"@dxos/ai","kind":"import-statement","external":true},{"path":"@dxos/functions","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true}],"format":"esm"},"src/functions/index.ts":{"bytes":460,"imports":[{"path":"src/functions/services.ts","kind":"import-statement","original":"./services"}],"format":"esm"},"src/testing/exa-search-1748337321991.ts":{"bytes":75508,"imports":[],"format":"esm"},"src/testing/exa-search-1748337331526.ts":{"bytes":90578,"imports":[],"format":"esm"},"src/testing/exa-search-1748337344119.ts":{"bytes":69950,"imports":[],"format":"esm"},"src/testing/index.ts":{"bytes":1205,"imports":[{"path":"src/testing/exa-search-1748337321991.ts","kind":"import-statement","original":"./exa-search-1748337321991"},{"path":"src/testing/exa-search-1748337331526.ts","kind":"import-statement","original":"./exa-search-1748337331526"},{"path":"src/testing/exa-search-1748337344119.ts","kind":"import-statement","original":"./exa-search-1748337344119"}],"format":"esm"},"src/research/exa.ts":{"bytes":10782,"imports":[{"path":"@effect/ai","kind":"import-statement","external":true},{"path":"effect","kind":"import-statement","external":true},{"path":"exa-js","kind":"import-statement","external":true},{"path":"@dxos/functions","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"src/testing/index.ts","kind":"import-statement","original":"../testing"}],"format":"esm"},"src/research/graph.ts":{"bytes":39456,"imports":[{"path":"@effect/ai","kind":"import-statement","external":true},{"path":"effect","kind":"import-statement","external":true},{"path":"@dxos/echo","kind":"import-statement","external":true},{"path":"@dxos/echo-protocol","kind":"import-statement","external":true},{"path":"@dxos/echo-schema","kind":"import-statement","external":true},{"path":"@dxos/effect","kind":"import-statement","external":true},{"path":"@dxos/functions","kind":"import-statement","external":true},{"path":"@dxos/keys","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true}],"format":"esm"},"raw-loader:./instructions-research.tpl?raw":{"bytes":5238,"imports":[]},"src/research/research.ts":{"bytes":10460,"imports":[{"path":"@effect/ai","kind":"import-statement","external":true},{"path":"effect","kind":"import-statement","external":true},{"path":"@dxos/ai","kind":"import-statement","external":true},{"path":"@dxos/functions","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/schema","kind":"import-statement","external":true},{"path":"src/research/exa.ts","kind":"import-statement","original":"./exa"},{"path":"src/research/graph.ts","kind":"import-statement","original":"./graph"},{"path":"raw-loader:./instructions-research.tpl?raw","kind":"import-statement","original":"./instructions-research.tpl?raw"},{"path":"src/session/index.ts","kind":"import-statement","original":"../session"}],"format":"esm"},"src/research/index.ts":{"bytes":619,"imports":[{"path":"src/research/exa.ts","kind":"import-statement","original":"./exa"},{"path":"src/research/research.ts","kind":"import-statement","original":"./research"},{"path":"src/research/graph.ts","kind":"import-statement","original":"./graph"}],"format":"esm"},"raw-loader:./assistant.tpl?raw":{"bytes":5728,"imports":[]},"src/templates/prompt.ts":{"bytes":2143,"imports":[{"path":"@dxos/blueprints","kind":"import-statement","external":true},{"path":"raw-loader:./assistant.tpl?raw","kind":"import-statement","original":"./assistant.tpl?raw"}],"format":"esm"},"src/templates/index.ts":{"bytes":458,"imports":[{"path":"src/templates/prompt.ts","kind":"import-statement","original":"./prompt"}],"format":"esm"},"src/types.ts":{"bytes":6512,"imports":[{"path":"effect","kind":"import-statement","external":true},{"path":"@dxos/keys","kind":"import-statement","external":true}],"format":"esm"},"src/index.ts":{"bytes":1077,"imports":[{"path":"src/context/index.ts","kind":"import-statement","original":"./context"},{"path":"src/conversation/index.ts","kind":"import-statement","original":"./conversation"},{"path":"src/extraction/index.ts","kind":"import-statement","original":"./extraction"},{"path":"src/functions/index.ts","kind":"import-statement","original":"./functions"},{"path":"src/research/index.ts","kind":"import-statement","original":"./research"},{"path":"src/session/index.ts","kind":"import-statement","original":"./session"},{"path":"src/templates/index.ts","kind":"import-statement","original":"./templates"},{"path":"src/types.ts","kind":"import-statement","original":"./types"}],"format":"esm"}},"outputs":{"dist/lib/browser/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":211978},"dist/lib/browser/index.mjs":{"imports":[{"path":"@preact/signals-core","kind":"import-statement","external":true},{"path":"effect","kind":"import-statement","external":true},{"path":"@dxos/echo","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"effect","kind":"import-statement","external":true},{"path":"@dxos/blueprints","kind":"import-statement","external":true},{"path":"@dxos/echo","kind":"import-statement","external":true},{"path":"effect","kind":"import-statement","external":true},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/echo","kind":"import-statement","external":true},{"path":"@dxos/functions","kind":"import-statement","external":true},{"path":"@dxos/schema","kind":"import-statement","external":true},{"path":"@effect/ai","kind":"import-statement","external":true},{"path":"effect","kind":"import-statement","external":true},{"path":"effect","kind":"import-statement","external":true},{"path":"@dxos/ai","kind":"import-statement","external":true},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/debug","kind":"import-statement","external":true},{"path":"@dxos/echo","kind":"import-statement","external":true},{"path":"@dxos/echo-db","kind":"import-statement","external":true},{"path":"@dxos/functions","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/schema","kind":"import-statement","external":true},{"path":"@dxos/errors","kind":"import-statement","external":true},{"path":"effect","kind":"import-statement","external":true},{"path":"@dxos/echo-db","kind":"import-statement","external":true},{"path":"@dxos/echo-schema","kind":"import-statement","external":true},{"path":"effect","kind":"import-statement","external":true},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/echo-schema","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/schema","kind":"import-statement","external":true},{"path":"@dxos/ai","kind":"import-statement","external":true},{"path":"@dxos/echo","kind":"import-statement","external":true},{"path":"@dxos/echo-schema","kind":"import-statement","external":true},{"path":"@dxos/functions","kind":"import-statement","external":true},{"path":"@dxos/schema","kind":"import-statement","external":true},{"path":"effect","kind":"import-statement","external":true},{"path":"@dxos/echo","kind":"import-statement","external":true},{"path":"@dxos/echo-schema","kind":"import-statement","external":true},{"path":"@dxos/keys","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/echo-schema","kind":"import-statement","external":true},{"path":"@dxos/functions","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/schema","kind":"import-statement","external":true},{"path":"@xenova/transformers","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@effect/ai","kind":"import-statement","external":true},{"path":"effect","kind":"import-statement","external":true},{"path":"@dxos/ai","kind":"import-statement","external":true},{"path":"@dxos/functions","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@effect/ai","kind":"import-statement","external":true},{"path":"effect","kind":"import-statement","external":true},{"path":"exa-js","kind":"import-statement","external":true},{"path":"@dxos/functions","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@effect/ai","kind":"import-statement","external":true},{"path":"effect","kind":"import-statement","external":true},{"path":"@dxos/ai","kind":"import-statement","external":true},{"path":"@dxos/functions","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/schema","kind":"import-statement","external":true},{"path":"@effect/ai","kind":"import-statement","external":true},{"path":"effect","kind":"import-statement","external":true},{"path":"@dxos/echo","kind":"import-statement","external":true},{"path":"@dxos/echo-protocol","kind":"import-statement","external":true},{"path":"@dxos/echo-schema","kind":"import-statement","external":true},{"path":"@dxos/effect","kind":"import-statement","external":true},{"path":"@dxos/functions","kind":"import-statement","external":true},{"path":"@dxos/keys","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"@dxos/blueprints","kind":"import-statement","external":true},{"path":"effect","kind":"import-statement","external":true},{"path":"@dxos/keys","kind":"import-statement","external":true}],"exports":["AiSession","ArtifactDiffResolver","ArtifactId","Bindings","ContextBinder","ContextBinding","Conversation","ExaToolkit","ExtractionInput","ExtractionOutput","LiveExaHandler","LocalSearchHandler","LocalSearchToolkit","MockExaHandler","ReferencedQuotes","Subgraph","VersionPin","combineNerTokens","createArtifactElement","createExtractionSchema","createSystemPrompt","createTokenGroups","extractFullEntities","extractionAnthropicFn","extractionNerFn","findQuotes","findRelatedSchema","getNer","getSanitizedSchemaName","insertReferences","makeGraphWriterHandler","makeGraphWriterToolkit","makeToolExecutionServiceFromFunctions","makeToolResolverFromFunctions","processTranscriptMessage","researchFn","sanitizeObjects"],"entryPoint":"src/index.ts","inputs":{"src/context/binder.ts":{"bytesInOutput":2163},"src/context/binding.ts":{"bytesInOutput":576},"src/context/index.ts":{"bytesInOutput":0},"src/index.ts":{"bytesInOutput":0},"src/conversation/conversation.ts":{"bytesInOutput":1651},"src/session/session.ts":{"bytesInOutput":7431},"src/errors.ts":{"bytesInOutput":123},"src/session/index.ts":{"bytesInOutput":0},"src/session/version-pin.ts":{"bytesInOutput":758},"src/conversation/index.ts":{"bytesInOutput":0},"src/extraction/extraction.ts":{"bytesInOutput":1418},"src/extraction/index.ts":{"bytesInOutput":0},"src/extraction/extraction-llm-function/extraction-llm-function.ts":{"bytesInOutput":1818},"raw-loader:./instructions.tpl?raw":{"bytesInOutput":1376},"src/extraction/quotes.ts":{"bytesInOutput":1687},"src/extraction/extraction-llm-function/index.ts":{"bytesInOutput":0},"src/extraction/extraction-ner-function/extraction-ner-function.ts":{"bytesInOutput":2633},"src/extraction/extraction-ner-function/named-entity-recognition.ts":{"bytesInOutput":2276},"src/extraction/extraction-ner-function/index.ts":{"bytesInOutput":0},"src/functions/services.ts":{"bytesInOutput":3000},"src/functions/index.ts":{"bytesInOutput":0},"src/research/exa.ts":{"bytesInOutput":2495},"src/testing/exa-search-1748337321991.ts":{"bytesInOutput":31265},"src/testing/exa-search-1748337331526.ts":{"bytesInOutput":43952},"src/testing/exa-search-1748337344119.ts":{"bytesInOutput":28760},"src/testing/index.ts":{"bytesInOutput":133},"src/research/index.ts":{"bytesInOutput":0},"src/research/research.ts":{"bytesInOutput":2138},"src/research/graph.ts":{"bytesInOutput":9306},"raw-loader:./instructions-research.tpl?raw":{"bytesInOutput":5375},"src/templates/prompt.ts":{"bytesInOutput":148},"raw-loader:./assistant.tpl?raw":{"bytesInOutput":5866},"src/templates/index.ts":{"bytesInOutput":0},"src/types.ts":{"bytesInOutput":1287}},"bytes":159613}}}
1
+ {"inputs":{"src/context/binding.ts":{"bytes":3145,"imports":[{"path":"effect","kind":"import-statement","external":true},{"path":"@dxos/blueprints","kind":"import-statement","external":true},{"path":"@dxos/echo","kind":"import-statement","external":true}],"format":"esm"},"src/context/binder.ts":{"bytes":10270,"imports":[{"path":"@preact/signals-core","kind":"import-statement","external":true},{"path":"effect","kind":"import-statement","external":true},{"path":"@dxos/echo","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"src/context/binding.ts","kind":"import-statement","original":"./binding"}],"format":"esm"},"src/context/index.ts":{"bytes":539,"imports":[{"path":"src/context/binder.ts","kind":"import-statement","original":"./binder"},{"path":"src/context/binding.ts","kind":"import-statement","original":"./binding"}],"format":"esm"},"src/errors.ts":{"bytes":939,"imports":[{"path":"@dxos/errors","kind":"import-statement","external":true}],"format":"esm"},"src/session/session.ts":{"bytes":38121,"imports":[{"path":"@effect/ai","kind":"import-statement","external":true},{"path":"effect","kind":"import-statement","external":true},{"path":"effect","kind":"import-statement","external":true},{"path":"@dxos/ai","kind":"import-statement","external":true},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/debug","kind":"import-statement","external":true},{"path":"@dxos/echo","kind":"import-statement","external":true},{"path":"@dxos/echo-db","kind":"import-statement","external":true},{"path":"@dxos/functions","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/schema","kind":"import-statement","external":true},{"path":"src/errors.ts","kind":"import-statement","original":"../errors"}],"format":"esm"},"src/session/version-pin.ts":{"bytes":4197,"imports":[{"path":"effect","kind":"import-statement","external":true},{"path":"@dxos/echo-db","kind":"import-statement","external":true},{"path":"@dxos/echo-schema","kind":"import-statement","external":true}],"format":"esm"},"src/session/index.ts":{"bytes":556,"imports":[{"path":"src/session/session.ts","kind":"import-statement","original":"./session"},{"path":"src/session/version-pin.ts","kind":"import-statement","original":"./version-pin"}],"format":"esm"},"src/conversation/conversation.ts":{"bytes":8811,"imports":[{"path":"effect","kind":"import-statement","external":true},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/echo","kind":"import-statement","external":true},{"path":"@dxos/functions","kind":"import-statement","external":true},{"path":"@dxos/schema","kind":"import-statement","external":true},{"path":"src/context/index.ts","kind":"import-statement","original":"../context"},{"path":"src/session/index.ts","kind":"import-statement","original":"../session"}],"format":"esm"},"src/conversation/index.ts":{"bytes":475,"imports":[{"path":"src/conversation/conversation.ts","kind":"import-statement","original":"./conversation"}],"format":"esm"},"src/functions/services.ts":{"bytes":12439,"imports":[{"path":"@effect/ai","kind":"import-statement","external":true},{"path":"effect","kind":"import-statement","external":true},{"path":"@dxos/ai","kind":"import-statement","external":true},{"path":"@dxos/functions","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true}],"format":"esm"},"src/functions/index.ts":{"bytes":460,"imports":[{"path":"src/functions/services.ts","kind":"import-statement","original":"./services"}],"format":"esm"},"src/testing/exa-search-1748337321991.ts":{"bytes":75508,"imports":[],"format":"esm"},"src/testing/exa-search-1748337331526.ts":{"bytes":90578,"imports":[],"format":"esm"},"src/testing/exa-search-1748337344119.ts":{"bytes":69950,"imports":[],"format":"esm"},"src/testing/index.ts":{"bytes":1205,"imports":[{"path":"src/testing/exa-search-1748337321991.ts","kind":"import-statement","original":"./exa-search-1748337321991"},{"path":"src/testing/exa-search-1748337331526.ts","kind":"import-statement","original":"./exa-search-1748337331526"},{"path":"src/testing/exa-search-1748337344119.ts","kind":"import-statement","original":"./exa-search-1748337344119"}],"format":"esm"},"src/research/exa.ts":{"bytes":10782,"imports":[{"path":"@effect/ai","kind":"import-statement","external":true},{"path":"effect","kind":"import-statement","external":true},{"path":"exa-js","kind":"import-statement","external":true},{"path":"@dxos/functions","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"src/testing/index.ts","kind":"import-statement","original":"../testing"}],"format":"esm"},"src/research/graph.ts":{"bytes":39456,"imports":[{"path":"@effect/ai","kind":"import-statement","external":true},{"path":"effect","kind":"import-statement","external":true},{"path":"@dxos/echo","kind":"import-statement","external":true},{"path":"@dxos/echo-protocol","kind":"import-statement","external":true},{"path":"@dxos/echo-schema","kind":"import-statement","external":true},{"path":"@dxos/effect","kind":"import-statement","external":true},{"path":"@dxos/functions","kind":"import-statement","external":true},{"path":"@dxos/keys","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true}],"format":"esm"},"raw-loader:./instructions-research.tpl?raw":{"bytes":5238,"imports":[]},"src/research/research.ts":{"bytes":10460,"imports":[{"path":"@effect/ai","kind":"import-statement","external":true},{"path":"effect","kind":"import-statement","external":true},{"path":"@dxos/ai","kind":"import-statement","external":true},{"path":"@dxos/functions","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/schema","kind":"import-statement","external":true},{"path":"src/research/exa.ts","kind":"import-statement","original":"./exa"},{"path":"src/research/graph.ts","kind":"import-statement","original":"./graph"},{"path":"raw-loader:./instructions-research.tpl?raw","kind":"import-statement","original":"./instructions-research.tpl?raw"},{"path":"src/session/index.ts","kind":"import-statement","original":"../session"}],"format":"esm"},"src/research/index.ts":{"bytes":619,"imports":[{"path":"src/research/exa.ts","kind":"import-statement","original":"./exa"},{"path":"src/research/research.ts","kind":"import-statement","original":"./research"},{"path":"src/research/graph.ts","kind":"import-statement","original":"./graph"}],"format":"esm"},"raw-loader:./assistant.tpl?raw":{"bytes":5728,"imports":[]},"src/templates/prompt.ts":{"bytes":2143,"imports":[{"path":"@dxos/blueprints","kind":"import-statement","external":true},{"path":"raw-loader:./assistant.tpl?raw","kind":"import-statement","original":"./assistant.tpl?raw"}],"format":"esm"},"src/templates/index.ts":{"bytes":458,"imports":[{"path":"src/templates/prompt.ts","kind":"import-statement","original":"./prompt"}],"format":"esm"},"src/types.ts":{"bytes":6512,"imports":[{"path":"effect","kind":"import-statement","external":true},{"path":"@dxos/keys","kind":"import-statement","external":true}],"format":"esm"},"src/index.ts":{"bytes":983,"imports":[{"path":"src/context/index.ts","kind":"import-statement","original":"./context"},{"path":"src/conversation/index.ts","kind":"import-statement","original":"./conversation"},{"path":"src/functions/index.ts","kind":"import-statement","original":"./functions"},{"path":"src/research/index.ts","kind":"import-statement","original":"./research"},{"path":"src/session/index.ts","kind":"import-statement","original":"./session"},{"path":"src/templates/index.ts","kind":"import-statement","original":"./templates"},{"path":"src/types.ts","kind":"import-statement","original":"./types"}],"format":"esm"},"src/extraction/extraction.ts":{"bytes":6822,"imports":[{"path":"effect","kind":"import-statement","external":true},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/echo-schema","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/schema","kind":"import-statement","external":true}],"format":"esm"},"raw-loader:./instructions.tpl?raw":{"bytes":1318,"imports":[]},"src/extraction/quotes.ts":{"bytes":7110,"imports":[{"path":"effect","kind":"import-statement","external":true},{"path":"@dxos/echo","kind":"import-statement","external":true},{"path":"@dxos/echo-schema","kind":"import-statement","external":true},{"path":"@dxos/keys","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true}],"format":"esm"},"src/extraction/extraction-llm-function/extraction-llm-function.ts":{"bytes":8645,"imports":[{"path":"@dxos/ai","kind":"import-statement","external":true},{"path":"@dxos/echo","kind":"import-statement","external":true},{"path":"@dxos/echo-schema","kind":"import-statement","external":true},{"path":"@dxos/functions","kind":"import-statement","external":true},{"path":"@dxos/schema","kind":"import-statement","external":true},{"path":"raw-loader:./instructions.tpl?raw","kind":"import-statement","original":"./instructions.tpl?raw"},{"path":"src/session/index.ts","kind":"import-statement","original":"../../session"},{"path":"src/extraction/extraction.ts","kind":"import-statement","original":"../extraction"},{"path":"src/extraction/quotes.ts","kind":"import-statement","original":"../quotes"}],"format":"esm"},"src/extraction/extraction-llm-function/index.ts":{"bytes":524,"imports":[{"path":"src/extraction/extraction-llm-function/extraction-llm-function.ts","kind":"import-statement","original":"./extraction-llm-function"}],"format":"esm"},"src/extraction/extraction-ner-function/named-entity-recognition.ts":{"bytes":10059,"imports":[{"path":"@xenova/transformers","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true}],"format":"esm"},"src/extraction/extraction-ner-function/extraction-ner-function.ts":{"bytes":9056,"imports":[{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/echo-schema","kind":"import-statement","external":true},{"path":"@dxos/functions","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/schema","kind":"import-statement","external":true},{"path":"src/extraction/extraction.ts","kind":"import-statement","original":"../extraction"},{"path":"src/extraction/quotes.ts","kind":"import-statement","original":"../quotes"},{"path":"src/extraction/extraction-ner-function/named-entity-recognition.ts","kind":"dynamic-import","original":"./named-entity-recognition"}],"format":"esm"},"src/extraction/extraction-ner-function/index.ts":{"bytes":652,"imports":[{"path":"src/extraction/extraction-ner-function/extraction-ner-function.ts","kind":"import-statement","original":"./extraction-ner-function"},{"path":"src/extraction/extraction-ner-function/named-entity-recognition.ts","kind":"import-statement","original":"./named-entity-recognition"}],"format":"esm"},"src/extraction/index.ts":{"bytes":803,"imports":[{"path":"src/extraction/extraction.ts","kind":"import-statement","original":"./extraction"},{"path":"src/extraction/extraction-llm-function/index.ts","kind":"import-statement","original":"./extraction-llm-function"},{"path":"src/extraction/extraction-ner-function/index.ts","kind":"import-statement","original":"./extraction-ner-function"},{"path":"src/extraction/quotes.ts","kind":"import-statement","original":"./quotes"}],"format":"esm"}},"outputs":{"dist/lib/browser/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":168464},"dist/lib/browser/index.mjs":{"imports":[{"path":"dist/lib/browser/chunk-SIXTNSGV.mjs","kind":"import-statement"},{"path":"@preact/signals-core","kind":"import-statement","external":true},{"path":"effect","kind":"import-statement","external":true},{"path":"@dxos/echo","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"effect","kind":"import-statement","external":true},{"path":"@dxos/blueprints","kind":"import-statement","external":true},{"path":"@dxos/echo","kind":"import-statement","external":true},{"path":"effect","kind":"import-statement","external":true},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/echo","kind":"import-statement","external":true},{"path":"@dxos/functions","kind":"import-statement","external":true},{"path":"@dxos/schema","kind":"import-statement","external":true},{"path":"@effect/ai","kind":"import-statement","external":true},{"path":"effect","kind":"import-statement","external":true},{"path":"@dxos/ai","kind":"import-statement","external":true},{"path":"@dxos/functions","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@effect/ai","kind":"import-statement","external":true},{"path":"effect","kind":"import-statement","external":true},{"path":"exa-js","kind":"import-statement","external":true},{"path":"@dxos/functions","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@effect/ai","kind":"import-statement","external":true},{"path":"effect","kind":"import-statement","external":true},{"path":"@dxos/ai","kind":"import-statement","external":true},{"path":"@dxos/functions","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/schema","kind":"import-statement","external":true},{"path":"@effect/ai","kind":"import-statement","external":true},{"path":"effect","kind":"import-statement","external":true},{"path":"@dxos/echo","kind":"import-statement","external":true},{"path":"@dxos/echo-protocol","kind":"import-statement","external":true},{"path":"@dxos/echo-schema","kind":"import-statement","external":true},{"path":"@dxos/effect","kind":"import-statement","external":true},{"path":"@dxos/functions","kind":"import-statement","external":true},{"path":"@dxos/keys","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"@dxos/blueprints","kind":"import-statement","external":true},{"path":"effect","kind":"import-statement","external":true},{"path":"@dxos/keys","kind":"import-statement","external":true}],"exports":["AiSession","ArtifactDiffResolver","ArtifactId","Bindings","ContextBinder","ContextBinding","Conversation","ExaToolkit","LiveExaHandler","LocalSearchHandler","LocalSearchToolkit","MockExaHandler","Subgraph","VersionPin","createArtifactElement","createExtractionSchema","createSystemPrompt","findRelatedSchema","getSanitizedSchemaName","makeGraphWriterHandler","makeGraphWriterToolkit","makeToolExecutionServiceFromFunctions","makeToolResolverFromFunctions","researchFn","sanitizeObjects"],"entryPoint":"src/index.ts","inputs":{"src/context/binder.ts":{"bytesInOutput":2163},"src/context/binding.ts":{"bytesInOutput":576},"src/context/index.ts":{"bytesInOutput":0},"src/index.ts":{"bytesInOutput":0},"src/conversation/conversation.ts":{"bytesInOutput":1586},"src/conversation/index.ts":{"bytesInOutput":0},"src/functions/services.ts":{"bytesInOutput":2918},"src/functions/index.ts":{"bytesInOutput":0},"src/research/exa.ts":{"bytesInOutput":2471},"src/testing/exa-search-1748337321991.ts":{"bytesInOutput":31265},"src/testing/exa-search-1748337331526.ts":{"bytesInOutput":43952},"src/testing/exa-search-1748337344119.ts":{"bytesInOutput":28760},"src/testing/index.ts":{"bytesInOutput":133},"src/research/index.ts":{"bytesInOutput":0},"src/research/research.ts":{"bytesInOutput":2103},"src/research/graph.ts":{"bytesInOutput":9226},"raw-loader:./instructions-research.tpl?raw":{"bytesInOutput":5375},"src/templates/prompt.ts":{"bytesInOutput":148},"raw-loader:./assistant.tpl?raw":{"bytesInOutput":5866},"src/templates/index.ts":{"bytesInOutput":0},"src/types.ts":{"bytesInOutput":1287}},"bytes":139068},"dist/lib/browser/extraction/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":17044},"dist/lib/browser/extraction/index.mjs":{"imports":[{"path":"dist/lib/browser/chunk-SIXTNSGV.mjs","kind":"import-statement"},{"path":"dist/lib/browser/chunk-6WRGDEMH.mjs","kind":"import-statement"},{"path":"effect","kind":"import-statement","external":true},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/echo-schema","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/schema","kind":"import-statement","external":true},{"path":"@dxos/ai","kind":"import-statement","external":true},{"path":"@dxos/echo","kind":"import-statement","external":true},{"path":"@dxos/echo-schema","kind":"import-statement","external":true},{"path":"@dxos/functions","kind":"import-statement","external":true},{"path":"@dxos/schema","kind":"import-statement","external":true},{"path":"effect","kind":"import-statement","external":true},{"path":"@dxos/echo","kind":"import-statement","external":true},{"path":"@dxos/echo-schema","kind":"import-statement","external":true},{"path":"@dxos/keys","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/echo-schema","kind":"import-statement","external":true},{"path":"@dxos/functions","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/schema","kind":"import-statement","external":true},{"path":"dist/lib/browser/named-entity-recognition-O46UTCLR.mjs","kind":"dynamic-import"}],"exports":["ExtractionInput","ExtractionOutput","ReferencedQuotes","combineNerTokens","createTokenGroups","extractFullEntities","extractionAnthropicFn","extractionNerFn","findQuotes","getNer","insertReferences","processTranscriptMessage"],"entryPoint":"src/extraction/index.ts","inputs":{"src/extraction/extraction.ts":{"bytesInOutput":1370},"src/extraction/index.ts":{"bytesInOutput":0},"src/extraction/extraction-llm-function/extraction-llm-function.ts":{"bytesInOutput":1809},"raw-loader:./instructions.tpl?raw":{"bytesInOutput":1376},"src/extraction/quotes.ts":{"bytesInOutput":1673},"src/extraction/extraction-llm-function/index.ts":{"bytesInOutput":0},"src/extraction/extraction-ner-function/extraction-ner-function.ts":{"bytesInOutput":2729},"src/extraction/extraction-ner-function/index.ts":{"bytesInOutput":0}},"bytes":9719},"dist/lib/browser/chunk-SIXTNSGV.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":21368},"dist/lib/browser/chunk-SIXTNSGV.mjs":{"imports":[{"path":"@effect/ai","kind":"import-statement","external":true},{"path":"effect","kind":"import-statement","external":true},{"path":"effect","kind":"import-statement","external":true},{"path":"@dxos/ai","kind":"import-statement","external":true},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/debug","kind":"import-statement","external":true},{"path":"@dxos/echo","kind":"import-statement","external":true},{"path":"@dxos/echo-db","kind":"import-statement","external":true},{"path":"@dxos/functions","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/schema","kind":"import-statement","external":true},{"path":"@dxos/errors","kind":"import-statement","external":true},{"path":"effect","kind":"import-statement","external":true},{"path":"@dxos/echo-db","kind":"import-statement","external":true},{"path":"@dxos/echo-schema","kind":"import-statement","external":true}],"exports":["AiSession","ArtifactDiffResolver","VersionPin"],"inputs":{"src/session/session.ts":{"bytesInOutput":7398},"src/errors.ts":{"bytesInOutput":123},"src/session/version-pin.ts":{"bytesInOutput":745},"src/session/index.ts":{"bytesInOutput":0}},"bytes":8475},"dist/lib/browser/named-entity-recognition-O46UTCLR.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":93},"dist/lib/browser/named-entity-recognition-O46UTCLR.mjs":{"imports":[{"path":"dist/lib/browser/chunk-6WRGDEMH.mjs","kind":"import-statement"}],"exports":["combineNerTokens","createTokenGroups","extractFullEntities","getNer"],"entryPoint":"src/extraction/extraction-ner-function/named-entity-recognition.ts","inputs":{},"bytes":261},"dist/lib/browser/chunk-6WRGDEMH.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":5241},"dist/lib/browser/chunk-6WRGDEMH.mjs":{"imports":[{"path":"@xenova/transformers","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true}],"exports":["combineNerTokens","createTokenGroups","extractFullEntities","getNer"],"inputs":{"src/extraction/extraction-ner-function/named-entity-recognition.ts":{"bytesInOutput":2265}},"bytes":2465}}}
@@ -0,0 +1,13 @@
1
+ import {
2
+ combineNerTokens,
3
+ createTokenGroups,
4
+ extractFullEntities,
5
+ getNer
6
+ } from "./chunk-6WRGDEMH.mjs";
7
+ export {
8
+ combineNerTokens,
9
+ createTokenGroups,
10
+ extractFullEntities,
11
+ getNer
12
+ };
13
+ //# sourceMappingURL=named-entity-recognition-O46UTCLR.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": [],
4
+ "sourcesContent": [],
5
+ "mappings": "",
6
+ "names": []
7
+ }
@@ -0,0 +1,91 @@
1
+ import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
2
+
3
+ // src/extraction/extraction-ner-function/named-entity-recognition.ts
4
+ import { pipeline } from "@xenova/transformers";
5
+ import { log } from "@dxos/log";
6
+ var __dxlog_file = "/__w/dxos/dxos/packages/core/assistant/src/extraction/extraction-ner-function/named-entity-recognition.ts";
7
+ var _ner;
8
+ var getNer = () => {
9
+ if (!_ner) {
10
+ _ner = pipeline("ner", "Xenova/bert-base-NER").then((ner) => {
11
+ log.info("NER model is ready", void 0, {
12
+ F: __dxlog_file,
13
+ L: 23,
14
+ S: void 0,
15
+ C: (f, a) => f(...a)
16
+ });
17
+ return ner;
18
+ });
19
+ }
20
+ return _ner;
21
+ };
22
+ var extractFullEntities = async (text) => {
23
+ const ner = await getNer();
24
+ const entities = await ner(text);
25
+ const tokenGroups = createTokenGroups(entities);
26
+ const combinedEntities = tokenGroups.map(combineNerTokens);
27
+ return combinedEntities;
28
+ };
29
+ var createTokenGroups = (tokens) => {
30
+ const tokenGroups = [];
31
+ const canBeCombined = (prevToken, currentToken) => {
32
+ const [currentState, currentEntity] = currentToken.entity.split("-");
33
+ const [prevState, prevEntity] = prevToken.entity.split("-");
34
+ if (prevEntity !== currentEntity) {
35
+ return false;
36
+ }
37
+ if (prevState === "O") {
38
+ return false;
39
+ }
40
+ if (currentState === "I") {
41
+ return true;
42
+ }
43
+ if ((prevState === "B" || prevState === "I") && currentState === "B") {
44
+ return currentToken.word.startsWith("#");
45
+ }
46
+ return false;
47
+ };
48
+ for (const token of tokens) {
49
+ if (tokenGroups.length === 0) {
50
+ tokenGroups.push([
51
+ token
52
+ ]);
53
+ continue;
54
+ }
55
+ const lastTokenGroup = tokenGroups.at(-1);
56
+ if (canBeCombined(lastTokenGroup.at(-1), token)) {
57
+ lastTokenGroup.push(token);
58
+ continue;
59
+ }
60
+ tokenGroups.push([
61
+ token
62
+ ]);
63
+ }
64
+ return tokenGroups;
65
+ };
66
+ var combineNerTokens = (group) => {
67
+ const combinedToken = {
68
+ entity: group.at(0).entity.split("-")[1],
69
+ score: group.reduce((acc, token) => acc + token.score, 0) / group.length,
70
+ index: group.at(0).index,
71
+ word: group.at(0).word,
72
+ start: group.at(0).start,
73
+ end: group.at(-1).end
74
+ };
75
+ for (const token of group.slice(1)) {
76
+ if (token.word.startsWith("#")) {
77
+ combinedToken.word += token.word.replace(/^#+/, "");
78
+ } else {
79
+ combinedToken.word += " " + token.word;
80
+ }
81
+ }
82
+ return combinedToken;
83
+ };
84
+
85
+ export {
86
+ getNer,
87
+ extractFullEntities,
88
+ createTokenGroups,
89
+ combineNerTokens
90
+ };
91
+ //# sourceMappingURL=chunk-3UU5V4FS.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/extraction/extraction-ner-function/named-entity-recognition.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport {\n type TokenClassificationOutput,\n type TokenClassificationPipelineType,\n type TokenClassificationSingle,\n pipeline,\n} from '@xenova/transformers';\n\nimport { log } from '@dxos/log';\n\nlet _ner: Promise<TokenClassificationPipelineType>;\n/**\n * Named Entity Recognition pipeline.\n * Initializes the pipeline on first call.\n * @returns The singleton promise that resolves to a token classification pipeline.\n */\nexport const getNer = () => {\n if (!_ner) {\n _ner = pipeline('ner', 'Xenova/bert-base-NER').then((ner) => {\n log.info('NER model is ready');\n return ner;\n });\n }\n return _ner;\n};\n\n/**\n * Extracts entities from text using the named entity recognition pipeline and does simple grouping of tokens.\n */\nexport const extractFullEntities = async (text: string): Promise<TokenClassificationSingle[]> => {\n const ner = await getNer();\n const entities = (await ner(text)) as TokenClassificationOutput;\n const tokenGroups = createTokenGroups(entities);\n const combinedEntities = tokenGroups.map(combineNerTokens);\n return combinedEntities;\n};\n\nexport const createTokenGroups = (tokens: TokenClassificationSingle[]): TokenClassificationSingle[][] => {\n const tokenGroups: TokenClassificationSingle[][] = [];\n\n const canBeCombined = (prevToken: TokenClassificationSingle, currentToken: TokenClassificationSingle) => {\n const [currentState, currentEntity] = currentToken.entity.split('-'); // B, I, O\n const [prevState, prevEntity] = prevToken.entity.split('-'); // B, I, O\n if (prevEntity !== currentEntity) {\n return false;\n }\n if (prevState === 'O') {\n return false;\n }\n if (currentState === 'I') {\n return true;\n }\n if ((prevState === 'B' || prevState === 'I') && currentState === 'B') {\n return currentToken.word.startsWith('#');\n }\n return false;\n };\n\n for (const token of tokens) {\n if (tokenGroups.length === 0) {\n tokenGroups.push([token]);\n continue;\n }\n const lastTokenGroup = tokenGroups.at(-1)!;\n if (canBeCombined(lastTokenGroup.at(-1)!, token)) {\n lastTokenGroup.push(token);\n continue;\n }\n tokenGroups.push([token]);\n }\n\n return tokenGroups;\n};\n\nexport const combineNerTokens = (group: TokenClassificationSingle[]): TokenClassificationSingle => {\n const combinedToken: TokenClassificationSingle = {\n entity: group.at(0)!.entity.split('-')[1],\n score: group.reduce((acc, token) => acc + token.score, 0) / group.length,\n index: group.at(0)!.index,\n word: group.at(0)!.word,\n start: group.at(0)!.start,\n end: group.at(-1)!.end,\n };\n\n for (const token of group.slice(1)) {\n if (token.word.startsWith('#')) {\n combinedToken.word += token.word.replace(/^#+/, '');\n } else {\n combinedToken.word += ' ' + token.word;\n }\n }\n\n return combinedToken;\n};\n"],
5
+ "mappings": ";;;AAIA,SAIEA,gBACK;AAEP,SAASC,WAAW;;AAEpB,IAAIC;AAMG,IAAMC,SAAS,MAAA;AACpB,MAAI,CAACD,MAAM;AACTA,WAAOF,SAAS,OAAO,sBAAA,EAAwBI,KAAK,CAACC,QAAAA;AACnDJ,UAAIK,KAAK,sBAAA,QAAA;;;;;;AACT,aAAOD;IACT,CAAA;EACF;AACA,SAAOH;AACT;AAKO,IAAMK,sBAAsB,OAAOC,SAAAA;AACxC,QAAMH,MAAM,MAAMF,OAAAA;AAClB,QAAMM,WAAY,MAAMJ,IAAIG,IAAAA;AAC5B,QAAME,cAAcC,kBAAkBF,QAAAA;AACtC,QAAMG,mBAAmBF,YAAYG,IAAIC,gBAAAA;AACzC,SAAOF;AACT;AAEO,IAAMD,oBAAoB,CAACI,WAAAA;AAChC,QAAML,cAA6C,CAAA;AAEnD,QAAMM,gBAAgB,CAACC,WAAsCC,iBAAAA;AAC3D,UAAM,CAACC,cAAcC,aAAAA,IAAiBF,aAAaG,OAAOC,MAAM,GAAA;AAChE,UAAM,CAACC,WAAWC,UAAAA,IAAcP,UAAUI,OAAOC,MAAM,GAAA;AACvD,QAAIE,eAAeJ,eAAe;AAChC,aAAO;IACT;AACA,QAAIG,cAAc,KAAK;AACrB,aAAO;IACT;AACA,QAAIJ,iBAAiB,KAAK;AACxB,aAAO;IACT;AACA,SAAKI,cAAc,OAAOA,cAAc,QAAQJ,iBAAiB,KAAK;AACpE,aAAOD,aAAaO,KAAKC,WAAW,GAAA;IACtC;AACA,WAAO;EACT;AAEA,aAAWC,SAASZ,QAAQ;AAC1B,QAAIL,YAAYkB,WAAW,GAAG;AAC5BlB,kBAAYmB,KAAK;QAACF;OAAM;AACxB;IACF;AACA,UAAMG,iBAAiBpB,YAAYqB,GAAG,EAAC;AACvC,QAAIf,cAAcc,eAAeC,GAAG,EAAC,GAAKJ,KAAAA,GAAQ;AAChDG,qBAAeD,KAAKF,KAAAA;AACpB;IACF;AACAjB,gBAAYmB,KAAK;MAACF;KAAM;EAC1B;AAEA,SAAOjB;AACT;AAEO,IAAMI,mBAAmB,CAACkB,UAAAA;AAC/B,QAAMC,gBAA2C;IAC/CZ,QAAQW,MAAMD,GAAG,CAAA,EAAIV,OAAOC,MAAM,GAAA,EAAK,CAAA;IACvCY,OAAOF,MAAMG,OAAO,CAACC,KAAKT,UAAUS,MAAMT,MAAMO,OAAO,CAAA,IAAKF,MAAMJ;IAClES,OAAOL,MAAMD,GAAG,CAAA,EAAIM;IACpBZ,MAAMO,MAAMD,GAAG,CAAA,EAAIN;IACnBa,OAAON,MAAMD,GAAG,CAAA,EAAIO;IACpBC,KAAKP,MAAMD,GAAG,EAAC,EAAIQ;EACrB;AAEA,aAAWZ,SAASK,MAAMQ,MAAM,CAAA,GAAI;AAClC,QAAIb,MAAMF,KAAKC,WAAW,GAAA,GAAM;AAC9BO,oBAAcR,QAAQE,MAAMF,KAAKgB,QAAQ,OAAO,EAAA;IAClD,OAAO;AACLR,oBAAcR,QAAQ,MAAME,MAAMF;IACpC;EACF;AAEA,SAAOQ;AACT;",
6
+ "names": ["pipeline", "log", "_ner", "getNer", "then", "ner", "info", "extractFullEntities", "text", "entities", "tokenGroups", "createTokenGroups", "combinedEntities", "map", "combineNerTokens", "tokens", "canBeCombined", "prevToken", "currentToken", "currentState", "currentEntity", "entity", "split", "prevState", "prevEntity", "word", "startsWith", "token", "length", "push", "lastTokenGroup", "at", "group", "combinedToken", "score", "reduce", "acc", "index", "start", "end", "slice", "replace"]
7
+ }
@@ -0,0 +1,252 @@
1
+ import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
2
+
3
+ // src/session/session.ts
4
+ import { AiLanguageModel, AiToolkit } from "@effect/ai";
5
+ import { Chunk, Context, Effect, Option, pipe, Stream } from "effect";
6
+ import { Array, String } from "effect";
7
+ import { AiParser, AiPreprocessor, getToolCalls, runTool, ToolExecutionService, ToolResolverService } from "@dxos/ai";
8
+ import { Event } from "@dxos/async";
9
+ import { todo } from "@dxos/debug";
10
+ import { Obj } from "@dxos/echo";
11
+ import { ObjectVersion } from "@dxos/echo-db";
12
+ import { DatabaseService } from "@dxos/functions";
13
+ import { log } from "@dxos/log";
14
+ import { DataType } from "@dxos/schema";
15
+
16
+ // src/errors.ts
17
+ import { BaseError } from "@dxos/errors";
18
+ var AiAssistantError = class extends BaseError.extend("AI_ASSISTANT_ERROR") {
19
+ };
20
+
21
+ // src/session/session.ts
22
+ var __dxlog_file = "/__w/dxos/dxos/packages/core/assistant/src/session/session.ts";
23
+ var AiSession = class {
24
+ constructor(_options = {}) {
25
+ this._options = _options;
26
+ this._semaphore = Effect.runSync(Effect.makeSemaphore(1));
27
+ this._pending = [];
28
+ this._history = [];
29
+ this.message = new Event();
30
+ this.block = new Event();
31
+ this.update = new Event();
32
+ this.streamEvent = new Event();
33
+ this.userMessage = new Event();
34
+ this.statusReport = new Event();
35
+ this.done = new Event();
36
+ this.run = (options) => Effect.gen(this, function* () {
37
+ this._history = [
38
+ ...options.history
39
+ ];
40
+ const promptMessages = yield* this._formatUserPrompt(options.prompt, options.history);
41
+ this._pending = [
42
+ promptMessages
43
+ ];
44
+ this.userMessage.emit(promptMessages);
45
+ do {
46
+ log("request", {
47
+ pending: this._pending.length,
48
+ history: this._history.length,
49
+ tools: Object.values(options.toolkit?.tools ?? {}).map((tool) => tool.name)
50
+ }, {
51
+ F: __dxlog_file,
52
+ L: 126,
53
+ S: this,
54
+ C: (f, a) => f(...a)
55
+ });
56
+ const prompt = yield* AiPreprocessor.preprocessAiInput([
57
+ ...this._history,
58
+ ...this._pending
59
+ ]);
60
+ const blueprints = options.blueprints ?? [];
61
+ const systemPrompt = yield* pipe(blueprints, Effect.forEach((blueprint) => Effect.succeed(blueprint.instructions)), Effect.flatMap(Effect.forEach((template) => DatabaseService.loadRef(template.source))), Effect.map(Array.map((template) => `
62
+
63
+ <blueprint>${template.content}</blueprint>`)), Effect.map(Array.reduce(options.systemPrompt ?? "", String.concat)));
64
+ const blueprintToolkit = yield* ToolResolverService.resolveToolkit(blueprints.flatMap((bp) => bp.tools));
65
+ const blueprintToolkitHandler = yield* blueprintToolkit.toContext(yield* ToolExecutionService.handlersFor(blueprintToolkit));
66
+ const toolkit = options.toolkit != null ? AiToolkit.merge(options.toolkit, blueprintToolkit) : blueprintToolkit;
67
+ const toolkitWithBlueprintHandlers = yield* toolkit.pipe(Effect.provide(blueprintToolkitHandler));
68
+ log.info("run", {
69
+ systemPrompt: [
70
+ systemPrompt.slice(0, 32),
71
+ "...",
72
+ systemPrompt.slice(-32),
73
+ systemPrompt.length
74
+ ].join(" "),
75
+ tools: Object.keys(blueprintToolkit.tools)
76
+ }, {
77
+ F: __dxlog_file,
78
+ L: 155,
79
+ S: this,
80
+ C: (f, a) => f(...a)
81
+ });
82
+ const blocks = yield* AiLanguageModel.streamText({
83
+ prompt,
84
+ system: systemPrompt,
85
+ toolkit: toolkitWithBlueprintHandlers,
86
+ disableToolCallResolution: true
87
+ }).pipe(AiParser.parseGptStream({
88
+ onBlock: (block) => Effect.gen(this, function* () {
89
+ if (block.pending) {
90
+ this.update.emit(block);
91
+ } else {
92
+ this.block.emit(block);
93
+ }
94
+ }),
95
+ onPart: (part) => Effect.gen(this, function* () {
96
+ this.streamEvent.emit(part);
97
+ })
98
+ }), Stream.runCollect, Effect.map(Chunk.toArray));
99
+ const response = Obj.make(DataType.Message, {
100
+ created: (/* @__PURE__ */ new Date()).toISOString(),
101
+ sender: {
102
+ role: "assistant"
103
+ },
104
+ blocks
105
+ });
106
+ this._pending.push(response);
107
+ this.message.emit(response);
108
+ const toolCalls = getToolCalls(response);
109
+ if (toolCalls.length === 0) {
110
+ break;
111
+ }
112
+ const toolResults = yield* runTools(toolCalls, toolkitWithBlueprintHandlers);
113
+ this._pending.push(Obj.make(DataType.Message, {
114
+ created: (/* @__PURE__ */ new Date()).toISOString(),
115
+ sender: {
116
+ role: "user"
117
+ },
118
+ blocks: toolResults
119
+ }));
120
+ } while (true);
121
+ return this._pending;
122
+ }).pipe(this._semaphore.withPermits(1), Effect.withSpan("AiSession.run"));
123
+ this._formatUserPrompt = (prompt, history) => Effect.gen(function* () {
124
+ const prelude = [];
125
+ const artifactDiffResolver = yield* Effect.serviceOption(ArtifactDiffResolver);
126
+ if (Option.isSome(artifactDiffResolver)) {
127
+ const versions = gatherObjectVersions(history);
128
+ const artifactDiff = yield* Effect.tryPromise({
129
+ try: () => artifactDiffResolver.value.resolve([
130
+ ...versions.entries()
131
+ ].map(([id, version]) => ({
132
+ id,
133
+ lastVersion: version
134
+ }))),
135
+ catch: AiAssistantError.wrap("Artifact diff resolution error")
136
+ });
137
+ log.info("vision", {
138
+ artifactDiff,
139
+ versions
140
+ }, {
141
+ F: __dxlog_file,
142
+ L: 240,
143
+ S: this,
144
+ C: (f, a) => f(...a)
145
+ });
146
+ for (const [id, { version }] of [
147
+ ...artifactDiff.entries()
148
+ ]) {
149
+ if (ObjectVersion.equals(version, versions.get(id))) {
150
+ artifactDiff.delete(id);
151
+ continue;
152
+ }
153
+ prelude.push({
154
+ _tag: "anchor",
155
+ objectId: id,
156
+ version
157
+ });
158
+ }
159
+ if (artifactDiff.size > 0) {
160
+ prelude.push(createArtifactUpdateBlock(artifactDiff));
161
+ }
162
+ }
163
+ return Obj.make(DataType.Message, {
164
+ created: (/* @__PURE__ */ new Date()).toISOString(),
165
+ sender: {
166
+ role: "user"
167
+ },
168
+ blocks: [
169
+ ...prelude,
170
+ {
171
+ _tag: "text",
172
+ text: prompt
173
+ }
174
+ ]
175
+ });
176
+ });
177
+ }
178
+ async runStructured(schema, options) {
179
+ return todo();
180
+ }
181
+ abort() {
182
+ this._stream?.abort();
183
+ }
184
+ };
185
+ var gatherObjectVersions = (messages) => {
186
+ const artifactIds = /* @__PURE__ */ new Map();
187
+ for (const message of messages) {
188
+ for (const block of message.blocks) {
189
+ if (block._tag === "anchor") {
190
+ artifactIds.set(block.objectId, block.version);
191
+ }
192
+ }
193
+ }
194
+ return artifactIds;
195
+ };
196
+ var createArtifactUpdateBlock = (artifactDiff) => {
197
+ return {
198
+ _tag: "text",
199
+ // TODO(dmaretskyi): Does this need to be a special content-block?
200
+ disposition: "artifact-update",
201
+ text: `
202
+ The following artifacts have been updated since the last message:
203
+ ${[
204
+ ...artifactDiff.entries()
205
+ ].map(([id, { diff }]) => `<changed-artifact id="${id}">${diff ? `
206
+ ${diff}` : ""}</changed-artifact>`).join("\n")}
207
+ `
208
+ };
209
+ };
210
+ var ArtifactDiffResolver = class extends Context.Tag("@dxos/assistant/ArtifactDiffResolver")() {
211
+ };
212
+ var runTools = Effect.fn("runTools")(function* (toolCalls, toolkit) {
213
+ const toolkitWithHandlers = Effect.isEffect(toolkit) ? yield* toolkit : toolkit;
214
+ return yield* Effect.forEach(toolCalls, (toolCall) => runTool(toolkitWithHandlers, toolCall));
215
+ });
216
+
217
+ // src/session/version-pin.ts
218
+ import { Schema } from "effect";
219
+ import { getVersion } from "@dxos/echo-db";
220
+ import { ObjectId } from "@dxos/echo-schema";
221
+ var ObjectVersionSchema = Schema.Unknown;
222
+ var VersionPinSchema = Schema.Struct({
223
+ // TODO(dmaretskyi): Use Ref when those support encoding.
224
+ objectId: ObjectId,
225
+ // TODO(dmaretskyi): Could be opaque
226
+ version: ObjectVersionSchema
227
+ });
228
+ var VersionPin = class extends VersionPinSchema {
229
+ static {
230
+ this.DISPOSITION = "version-pin";
231
+ }
232
+ static fromObject(object) {
233
+ return VersionPin.make({
234
+ objectId: object.id,
235
+ version: getVersion(object)
236
+ });
237
+ }
238
+ static createBlock(pin) {
239
+ return {
240
+ _tag: "json",
241
+ disposition: VersionPin.DISPOSITION,
242
+ data: JSON.stringify(pin)
243
+ };
244
+ }
245
+ };
246
+
247
+ export {
248
+ AiSession,
249
+ ArtifactDiffResolver,
250
+ VersionPin
251
+ };
252
+ //# sourceMappingURL=chunk-FD5NXKDP.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/session/session.ts", "../../../src/errors.ts", "../../../src/session/version-pin.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { AiLanguageModel, AiToolkit, type AiError, type AiResponse, type AiTool } from '@effect/ai';\nimport { Chunk, Context, Effect, Option, pipe, Stream, type Schema } from 'effect';\nimport { Array, String } from 'effect';\n\nimport {\n AiParser,\n AiPreprocessor,\n getToolCalls,\n runTool,\n ToolExecutionService,\n ToolResolverService,\n type AgentStatus,\n type AiInputPreprocessingError,\n type AiToolNotFoundError,\n type GenerationStream,\n} from '@dxos/ai';\nimport { Event } from '@dxos/async';\nimport { type Blueprint } from '@dxos/blueprints';\nimport { todo } from '@dxos/debug';\nimport { Obj } from '@dxos/echo';\nimport { ObjectVersion } from '@dxos/echo-db';\nimport { type ObjectId } from '@dxos/echo-schema';\nimport { DatabaseService } from '@dxos/functions';\nimport { log } from '@dxos/log';\nimport { DataType, type ContentBlock } from '@dxos/schema';\n\nimport { AiAssistantError } from '../errors';\n\nexport type AiSessionOptions = {};\n\nexport type SessionRunOptions<Tools extends AiTool.Any> = {\n prompt: string;\n history: DataType.Message[];\n systemPrompt?: string;\n toolkit?: AiToolkit.AiToolkit<Tools>;\n blueprints?: Blueprint.Blueprint[];\n};\n\n/**\n * Contains message history, tools, current context.\n * Current context means the state of the app, time of day, and other contextual information.\n * It makes requests to the model, its a state machine.\n * It keeps track of the current goal.\n * It manages the context window.\n * Tracks the success criteria of reaching the goal, exposing metrics (stretch).\n * Could be run locally in the app or remotely.\n * Could be personal or shared.\n */\nexport class AiSession {\n // TODO(burdon): Move to conversation.\n private readonly _semaphore = Effect.runSync(Effect.makeSemaphore(1));\n\n /** Pending messages (incl. the current user request). */\n private _pending: DataType.Message[] = [];\n\n /** Current streaming response. */\n private _stream: GenerationStream | undefined;\n\n /** Prior history from queue. */\n private _history: DataType.Message[] = [];\n\n /**\n * New message.\n */\n public readonly message = new Event<DataType.Message>();\n\n /**\n * Complete block added to Message.\n */\n public readonly block = new Event<ContentBlock.Any>();\n\n /**\n * Update partial block (while streaming).\n */\n public readonly update = new Event<ContentBlock.Any>();\n\n /**\n * Unparsed events from the underlying generation stream.\n */\n public readonly streamEvent = new Event<AiResponse.Part>();\n\n /**\n * User prompt or tool result.\n */\n public readonly userMessage = new Event<DataType.Message>();\n\n /**\n * Agent self-reporting its status.\n * Triggered by the model.\n */\n public readonly statusReport = new Event<AgentStatus>();\n\n /**\n * Emits when the session is done.\n */\n public readonly done = new Event<void>();\n\n constructor(private readonly _options: AiSessionOptions = {}) {}\n\n /**\n * Runs the AI model loop interacting with tools and artifacts.\n * @param options - The session options.\n * @returns The messages generated by the session, including the user's prompt.\n */\n // TODO(dmaretskyi): Toolkit context doesn't get added to the effect type.\n run = <Tools extends AiTool.Any>(\n options: SessionRunOptions<Tools>,\n ): Effect.Effect<\n DataType.Message[],\n AiAssistantError | AiInputPreprocessingError | AiToolNotFoundError | AiError.AiError,\n AiLanguageModel.AiLanguageModel | ToolResolverService | ToolExecutionService | AiTool.ToHandler<Tools>\n > =>\n Effect.gen(this, function* () {\n this._history = [...options.history];\n\n const promptMessages = yield* this._formatUserPrompt(options.prompt, options.history);\n this._pending = [promptMessages];\n this.userMessage.emit(promptMessages);\n\n // Potential tool use loop.\n do {\n log('request', {\n pending: this._pending.length,\n history: this._history.length,\n tools: (Object.values(options.toolkit?.tools ?? {}) as AiTool.Any[]).map((tool: AiTool.Any) => tool.name),\n });\n\n const prompt = yield* AiPreprocessor.preprocessAiInput([...this._history, ...this._pending]);\n\n const blueprints = options.blueprints ?? [];\n\n // Build system prompt from blueprint templates.\n // TODO(dmaretskyi): Loading BP from the Database should be done at the higher level. We need a type for the resolved blueprint.\n const systemPrompt = yield* pipe(\n blueprints,\n Effect.forEach((blueprint) => Effect.succeed(blueprint.instructions)),\n Effect.flatMap(Effect.forEach((template) => DatabaseService.loadRef(template.source))),\n Effect.map(Array.map((template) => `\\n\\n<blueprint>${template.content}</blueprint>`)),\n Effect.map(Array.reduce(options.systemPrompt ?? '', String.concat)),\n );\n\n // Build a combined toolkit from the blueprint tools and the provided toolkit.\n const blueprintToolkit = yield* ToolResolverService.resolveToolkit(blueprints.flatMap((bp) => bp.tools));\n const blueprintToolkitHandler: Context.Context<AiTool.ToHandler<AiTool.Any>> =\n yield* blueprintToolkit.toContext(yield* ToolExecutionService.handlersFor(blueprintToolkit));\n const toolkit = options.toolkit != null ? AiToolkit.merge(options.toolkit, blueprintToolkit) : blueprintToolkit;\n const toolkitWithBlueprintHandlers = yield* toolkit.pipe(\n Effect.provide(blueprintToolkitHandler) as any,\n ) as Effect.Effect<AiToolkit.ToHandler<any>, never, AiTool.ToHandler<Tools>>;\n\n log.info('run', {\n systemPrompt: [systemPrompt.slice(0, 32), '...', systemPrompt.slice(-32), systemPrompt.length].join(' '),\n tools: Object.keys(blueprintToolkit.tools),\n });\n\n const blocks = yield* AiLanguageModel.streamText({\n prompt,\n system: systemPrompt,\n toolkit: toolkitWithBlueprintHandlers,\n disableToolCallResolution: true,\n }).pipe(\n AiParser.parseGptStream({\n onBlock: (block) =>\n Effect.gen(this, function* () {\n if (block.pending) {\n this.update.emit(block);\n } else {\n this.block.emit(block);\n }\n }),\n onPart: (part) =>\n Effect.gen(this, function* () {\n this.streamEvent.emit(part);\n }),\n }),\n Stream.runCollect,\n Effect.map(Chunk.toArray),\n );\n\n const response = Obj.make(DataType.Message, {\n created: new Date().toISOString(),\n sender: { role: 'assistant' },\n blocks,\n });\n this._pending.push(response);\n this.message.emit(response);\n\n const toolCalls = getToolCalls(response);\n if (toolCalls.length === 0) {\n break;\n }\n\n const toolResults = yield* runTools(toolCalls, toolkitWithBlueprintHandlers as any);\n this._pending.push(\n Obj.make(DataType.Message, {\n created: new Date().toISOString(),\n sender: { role: 'user' },\n blocks: toolResults,\n }),\n );\n } while (true);\n\n return this._pending;\n }).pipe(this._semaphore.withPermits(1), Effect.withSpan('AiSession.run'));\n\n async runStructured<S extends Schema.Schema.AnyNoContext>(\n schema: S,\n options: SessionRunOptions<AiTool.Any>,\n ): Promise<Schema.Schema.Type<S>> {\n return todo();\n // const parser = structuredOutputParser(schema);\n // const result = await this.run({\n // ...options,\n // executableTools: [...(options.executableTools ?? []), parser.tool],\n // });\n // return parser.getResult(result);\n }\n\n private _formatUserPrompt = (prompt: string, history: DataType.Message[]) =>\n Effect.gen(function* () {\n const prelude: ContentBlock.Any[] = [];\n\n // TODO(dmaretskyi): Evaluate other approaches as `serviceOption` isn't represented in the type system.\n const artifactDiffResolver = yield* Effect.serviceOption(ArtifactDiffResolver);\n if (Option.isSome(artifactDiffResolver)) {\n const versions = gatherObjectVersions(history);\n\n const artifactDiff = yield* Effect.tryPromise({\n try: () =>\n artifactDiffResolver.value.resolve(\n [...versions.entries()].map(([id, version]) => ({ id, lastVersion: version })),\n ),\n catch: AiAssistantError.wrap('Artifact diff resolution error'),\n });\n\n log.info('vision', {\n artifactDiff,\n versions,\n });\n\n for (const [id, { version }] of [...artifactDiff.entries()]) {\n if (ObjectVersion.equals(version, versions.get(id)!)) {\n artifactDiff.delete(id);\n continue;\n }\n\n prelude.push({ _tag: 'anchor', objectId: id, version });\n }\n if (artifactDiff.size > 0) {\n prelude.push(createArtifactUpdateBlock(artifactDiff));\n }\n }\n\n return Obj.make(DataType.Message, {\n created: new Date().toISOString(),\n sender: { role: 'user' },\n blocks: [...prelude, { _tag: 'text', text: prompt }],\n });\n });\n\n abort(): void {\n this._stream?.abort();\n }\n}\n\nconst gatherObjectVersions = (messages: DataType.Message[]): Map<ObjectId, ObjectVersion> => {\n const artifactIds = new Map<ObjectId, ObjectVersion>();\n for (const message of messages) {\n for (const block of message.blocks) {\n if (block._tag === 'anchor') {\n artifactIds.set(block.objectId, block.version as ObjectVersion);\n }\n }\n }\n\n return artifactIds;\n};\n\nconst createArtifactUpdateBlock = (\n artifactDiff: Map<ObjectId, { version: ObjectVersion; diff?: string }>,\n): ContentBlock.Any => {\n return {\n _tag: 'text',\n // TODO(dmaretskyi): Does this need to be a special content-block?\n disposition: 'artifact-update',\n text: `\n The following artifacts have been updated since the last message:\n ${[...artifactDiff.entries()]\n .map(([id, { diff }]) => `<changed-artifact id=\"${id}\">${diff ? `\\n${diff}` : ''}</changed-artifact>`)\n .join('\\n')}\n `,\n };\n};\n\n/**\n * Resolves artifact ids to their versions.\n * Used to give the model a sense of the changes to the artifacts made by users during the conversation.\n * The artifacts versions are pinned in the history, and whenever the artifact changes in-between assistant's steps,\n * a diff is inserted into the conversation.\n *\n * Can be optionally provided to the session run call.\n */\n// TODO(dmaretskyi): Convert to Context.Reference\nexport class ArtifactDiffResolver extends Context.Tag('@dxos/assistant/ArtifactDiffResolver')<\n ArtifactDiffResolver,\n ArtifactDiffResolver.Service\n>() {}\n\nexport namespace ArtifactDiffResolver {\n export type Service = {\n resolve: (artifacts: { id: ObjectId; lastVersion: ObjectVersion }[]) => Promise<\n Map<\n ObjectId,\n {\n version: ObjectVersion;\n diff?: string;\n }\n >\n >;\n };\n}\n\nconst runTools: <Tools extends AiTool.Any>(\n toolCalls: ContentBlock.ToolCall[],\n toolkit: AiToolkit.AiToolkit<Tools>,\n) => Effect.Effect<ContentBlock.ToolResult[], AiError.AiError, AiTool.ToHandler<Tools>> = Effect.fn('runTools')(\n function* (toolCalls, toolkit) {\n const toolkitWithHandlers = Effect.isEffect(toolkit) ? yield* toolkit : toolkit;\n\n return yield* Effect.forEach(toolCalls, (toolCall) => runTool(toolkitWithHandlers, toolCall));\n },\n);\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { BaseError } from '@dxos/errors';\n\n/**\n * Generic error for AI agent execution.\n */\nexport class AiAssistantError extends BaseError.extend('AI_ASSISTANT_ERROR') {}\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { Schema } from 'effect';\n\nimport { type ObjectVersion } from '@dxos/echo-db';\nimport { getVersion } from '@dxos/echo-db';\nimport { ObjectId, type BaseEchoObject } from '@dxos/echo-schema';\nimport { type ContentBlock } from '@dxos/schema';\n\n// TODO(dmaretskyi): Extract.\nconst ObjectVersionSchema = Schema.Unknown as Schema.Schema<ObjectVersion>;\n\nconst VersionPinSchema = Schema.Struct({\n // TODO(dmaretskyi): Use Ref when those support encoding.\n objectId: ObjectId,\n // TODO(dmaretskyi): Could be opaque\n version: ObjectVersionSchema,\n});\n\n/**\n * Used to pin a specific version of an object during the course of a conversation.\n * This allows us to detect when the object changes during the course of the conversation.\n */\nexport interface VersionPin extends Schema.Schema.Type<typeof VersionPinSchema> {}\n\nexport const VersionPin: typeof VersionPinSchema & {\n DISPOSITION: 'version-pin';\n fromObject: (object: BaseEchoObject) => VersionPin;\n createBlock: (pin: VersionPin) => ContentBlock.Any;\n} = class extends VersionPinSchema {\n static readonly DISPOSITION = 'version-pin';\n static fromObject(object: BaseEchoObject): VersionPin {\n return VersionPin.make({\n objectId: object.id,\n version: getVersion(object),\n });\n }\n\n static createBlock(pin: VersionPin): ContentBlock.Any {\n return {\n _tag: 'json',\n disposition: VersionPin.DISPOSITION,\n data: JSON.stringify(pin),\n };\n }\n};\n"],
5
+ "mappings": "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",
6
+ "names": ["AiLanguageModel", "AiToolkit", "Chunk", "Context", "Effect", "Option", "pipe", "Stream", "Array", "String", "AiParser", "AiPreprocessor", "getToolCalls", "runTool", "ToolExecutionService", "ToolResolverService", "Event", "todo", "Obj", "ObjectVersion", "DatabaseService", "log", "DataType", "BaseError", "AiAssistantError", "BaseError", "extend", "AiSession", "_options", "_semaphore", "Effect", "runSync", "makeSemaphore", "_pending", "_history", "message", "Event", "block", "update", "streamEvent", "userMessage", "statusReport", "done", "run", "options", "gen", "history", "promptMessages", "_formatUserPrompt", "prompt", "emit", "log", "pending", "length", "tools", "Object", "values", "toolkit", "map", "tool", "name", "AiPreprocessor", "preprocessAiInput", "blueprints", "systemPrompt", "pipe", "forEach", "blueprint", "succeed", "instructions", "flatMap", "template", "DatabaseService", "loadRef", "source", "Array", "content", "reduce", "String", "concat", "blueprintToolkit", "ToolResolverService", "resolveToolkit", "bp", "blueprintToolkitHandler", "toContext", "ToolExecutionService", "handlersFor", "AiToolkit", "merge", "toolkitWithBlueprintHandlers", "provide", "info", "slice", "join", "keys", "blocks", "AiLanguageModel", "streamText", "system", "disableToolCallResolution", "AiParser", "parseGptStream", "onBlock", "onPart", "part", "Stream", "runCollect", "Chunk", "toArray", "response", "Obj", "make", "DataType", "Message", "created", "Date", "toISOString", "sender", "role", "push", "toolCalls", "getToolCalls", "toolResults", "runTools", "withPermits", "withSpan", "prelude", "artifactDiffResolver", "serviceOption", "ArtifactDiffResolver", "Option", "isSome", "versions", "gatherObjectVersions", "artifactDiff", "tryPromise", "try", "value", "resolve", "entries", "id", "version", "lastVersion", "catch", "AiAssistantError", "wrap", "ObjectVersion", "equals", "get", "delete", "_tag", "objectId", "size", "createArtifactUpdateBlock", "text", "runStructured", "schema", "todo", "abort", "_stream", "messages", "artifactIds", "Map", "set", "disposition", "diff", "Context", "Tag", "fn", "toolkitWithHandlers", "isEffect", "toolCall", "runTool", "Schema", "getVersion", "ObjectId", "ObjectVersionSchema", "Schema", "Unknown", "VersionPinSchema", "Struct", "objectId", "ObjectId", "version", "VersionPin", "DISPOSITION", "fromObject", "object", "make", "id", "getVersion", "createBlock", "pin", "_tag", "disposition", "data", "JSON", "stringify"]
7
+ }