@letta-ai/letta-client 1.0.0-alpha.7 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +248 -0
- package/README.md +282 -319
- package/client.d.mts +61 -36
- package/client.d.mts.map +1 -1
- package/client.d.ts +61 -36
- package/client.d.ts.map +1 -1
- package/client.js +53 -23
- package/client.js.map +1 -1
- package/client.mjs +53 -23
- package/client.mjs.map +1 -1
- package/core/pagination.d.mts +96 -0
- package/core/pagination.d.mts.map +1 -0
- package/core/pagination.d.ts +96 -0
- package/core/pagination.d.ts.map +1 -0
- package/core/pagination.js +199 -0
- package/core/pagination.js.map +1 -0
- package/core/pagination.mjs +191 -0
- package/core/pagination.mjs.map +1 -0
- package/core/streaming.d.mts +33 -0
- package/core/streaming.d.mts.map +1 -0
- package/core/streaming.d.ts +33 -0
- package/core/streaming.d.ts.map +1 -0
- package/core/streaming.js +276 -0
- package/core/streaming.js.map +1 -0
- package/core/streaming.mjs +271 -0
- package/core/streaming.mjs.map +1 -0
- package/index.d.mts +1 -0
- package/index.d.mts.map +1 -1
- package/index.d.ts +1 -0
- package/index.d.ts.map +1 -1
- package/index.js +3 -1
- package/index.js.map +1 -1
- package/index.mjs +1 -0
- package/index.mjs.map +1 -1
- package/internal/decoders/line.d.mts +17 -0
- package/internal/decoders/line.d.mts.map +1 -0
- package/internal/decoders/line.d.ts +17 -0
- package/internal/decoders/line.d.ts.map +1 -0
- package/internal/decoders/line.js +113 -0
- package/internal/decoders/line.js.map +1 -0
- package/internal/decoders/line.mjs +108 -0
- package/internal/decoders/line.mjs.map +1 -0
- package/internal/parse.d.mts.map +1 -1
- package/internal/parse.d.ts.map +1 -1
- package/internal/parse.js +10 -0
- package/internal/parse.js.map +1 -1
- package/internal/parse.mjs +10 -0
- package/internal/parse.mjs.map +1 -1
- package/internal/request-options.d.mts +2 -0
- package/internal/request-options.d.mts.map +1 -1
- package/internal/request-options.d.ts +2 -0
- package/internal/request-options.d.ts.map +1 -1
- package/internal/request-options.js.map +1 -1
- package/internal/request-options.mjs.map +1 -1
- package/internal/tslib.js +17 -17
- package/package.json +21 -1
- package/pagination.d.mts +2 -0
- package/pagination.d.mts.map +1 -0
- package/pagination.d.ts +2 -0
- package/pagination.d.ts.map +1 -0
- package/pagination.js +6 -0
- package/pagination.js.map +1 -0
- package/pagination.mjs +2 -0
- package/pagination.mjs.map +1 -0
- package/resources/access-tokens.d.mts +105 -0
- package/resources/access-tokens.d.mts.map +1 -0
- package/resources/access-tokens.d.ts +105 -0
- package/resources/access-tokens.d.ts.map +1 -0
- package/resources/access-tokens.js +30 -0
- package/resources/access-tokens.js.map +1 -0
- package/resources/access-tokens.mjs +26 -0
- package/resources/access-tokens.mjs.map +1 -0
- package/resources/agents/agents.d.mts +517 -160
- package/resources/agents/agents.d.mts.map +1 -1
- package/resources/agents/agents.d.ts +517 -160
- package/resources/agents/agents.d.ts.map +1 -1
- package/resources/agents/agents.js +16 -21
- package/resources/agents/agents.js.map +1 -1
- package/resources/agents/agents.mjs +17 -22
- package/resources/agents/agents.mjs.map +1 -1
- package/resources/agents/archives.d.mts +31 -0
- package/resources/agents/archives.d.mts.map +1 -0
- package/resources/agents/archives.d.ts +31 -0
- package/resources/agents/archives.d.ts.map +1 -0
- package/resources/agents/archives.js +24 -0
- package/resources/agents/archives.js.map +1 -0
- package/resources/agents/archives.mjs +20 -0
- package/resources/agents/archives.mjs.map +1 -0
- package/resources/agents/blocks.d.mts +33 -55
- package/resources/agents/blocks.d.mts.map +1 -1
- package/resources/agents/blocks.d.ts +33 -55
- package/resources/agents/blocks.d.ts.map +1 -1
- package/resources/agents/blocks.js +2 -1
- package/resources/agents/blocks.js.map +1 -1
- package/resources/agents/blocks.mjs +2 -1
- package/resources/agents/blocks.mjs.map +1 -1
- package/resources/agents/files.d.mts +39 -79
- package/resources/agents/files.d.mts.map +1 -1
- package/resources/agents/files.d.ts +39 -79
- package/resources/agents/files.d.ts.map +1 -1
- package/resources/agents/files.js +5 -1
- package/resources/agents/files.js.map +1 -1
- package/resources/agents/files.mjs +5 -1
- package/resources/agents/files.mjs.map +1 -1
- package/resources/agents/folders.d.mts +50 -79
- package/resources/agents/folders.d.mts.map +1 -1
- package/resources/agents/folders.d.ts +50 -79
- package/resources/agents/folders.d.ts.map +1 -1
- package/resources/agents/folders.js +5 -1
- package/resources/agents/folders.js.map +1 -1
- package/resources/agents/folders.mjs +5 -1
- package/resources/agents/folders.mjs.map +1 -1
- package/resources/agents/groups.d.mts +6 -28
- package/resources/agents/groups.d.mts.map +1 -1
- package/resources/agents/groups.d.ts +6 -28
- package/resources/agents/groups.d.ts.map +1 -1
- package/resources/agents/groups.js +5 -1
- package/resources/agents/groups.js.map +1 -1
- package/resources/agents/groups.mjs +5 -1
- package/resources/agents/groups.mjs.map +1 -1
- package/resources/agents/identities.d.mts +31 -0
- package/resources/agents/identities.d.mts.map +1 -0
- package/resources/agents/identities.d.ts +31 -0
- package/resources/agents/identities.d.ts.map +1 -0
- package/resources/agents/identities.js +24 -0
- package/resources/agents/identities.js.map +1 -0
- package/resources/agents/identities.mjs +20 -0
- package/resources/agents/identities.mjs.map +1 -0
- package/resources/agents/index.d.mts +9 -7
- package/resources/agents/index.d.mts.map +1 -1
- package/resources/agents/index.d.ts +9 -7
- package/resources/agents/index.d.ts.map +1 -1
- package/resources/agents/index.js +5 -1
- package/resources/agents/index.js.map +1 -1
- package/resources/agents/index.mjs +2 -0
- package/resources/agents/index.mjs.map +1 -1
- package/resources/agents/messages.d.mts +668 -422
- package/resources/agents/messages.d.mts.map +1 -1
- package/resources/agents/messages.d.ts +668 -422
- package/resources/agents/messages.d.ts.map +1 -1
- package/resources/agents/messages.js +27 -26
- package/resources/agents/messages.js.map +1 -1
- package/resources/agents/messages.mjs +27 -26
- package/resources/agents/messages.mjs.map +1 -1
- package/resources/agents/tools.d.mts +9 -30
- package/resources/agents/tools.d.mts.map +1 -1
- package/resources/agents/tools.d.ts +9 -30
- package/resources/agents/tools.d.ts.map +1 -1
- package/resources/agents/tools.js +5 -1
- package/resources/agents/tools.js.map +1 -1
- package/resources/agents/tools.mjs +5 -1
- package/resources/agents/tools.mjs.map +1 -1
- package/resources/archives/archives.d.mts +115 -0
- package/resources/archives/archives.d.mts.map +1 -0
- package/resources/archives/archives.d.ts +115 -0
- package/resources/archives/archives.d.ts.map +1 -0
- package/resources/archives/archives.js +50 -0
- package/resources/archives/archives.js.map +1 -0
- package/resources/archives/archives.mjs +45 -0
- package/resources/archives/archives.mjs.map +1 -0
- package/resources/archives/index.d.mts +3 -0
- package/resources/archives/index.d.mts.map +1 -0
- package/resources/archives/index.d.ts +3 -0
- package/resources/archives/index.d.ts.map +1 -0
- package/resources/archives/index.js +9 -0
- package/resources/archives/index.js.map +1 -0
- package/resources/archives/index.mjs +4 -0
- package/resources/archives/index.mjs.map +1 -0
- package/resources/archives/passages.d.mts +113 -0
- package/resources/archives/passages.d.mts.map +1 -0
- package/resources/archives/passages.d.ts +113 -0
- package/resources/archives/passages.d.ts.map +1 -0
- package/resources/archives/passages.js +32 -0
- package/resources/archives/passages.js.map +1 -0
- package/resources/archives/passages.mjs +28 -0
- package/resources/archives/passages.mjs.map +1 -0
- package/resources/archives.d.mts +1 -130
- package/resources/archives.d.mts.map +1 -1
- package/resources/archives.d.ts +1 -130
- package/resources/archives.d.ts.map +1 -1
- package/resources/archives.js +2 -37
- package/resources/archives.js.map +1 -1
- package/resources/archives.mjs +1 -35
- package/resources/archives.mjs.map +1 -1
- package/resources/batches/batches.d.mts +52 -34
- package/resources/batches/batches.d.mts.map +1 -1
- package/resources/batches/batches.d.ts +52 -34
- package/resources/batches/batches.d.ts.map +1 -1
- package/resources/batches/batches.js +2 -1
- package/resources/batches/batches.js.map +1 -1
- package/resources/batches/batches.mjs +2 -1
- package/resources/batches/batches.mjs.map +1 -1
- package/resources/batches/index.d.mts +2 -2
- package/resources/batches/index.d.mts.map +1 -1
- package/resources/batches/index.d.ts +2 -2
- package/resources/batches/index.d.ts.map +1 -1
- package/resources/batches/index.js.map +1 -1
- package/resources/batches/index.mjs.map +1 -1
- package/resources/batches/messages.d.mts +6 -30
- package/resources/batches/messages.d.mts.map +1 -1
- package/resources/batches/messages.d.ts +6 -30
- package/resources/batches/messages.d.ts.map +1 -1
- package/resources/batches/messages.js +2 -1
- package/resources/batches/messages.js.map +1 -1
- package/resources/batches/messages.mjs +2 -1
- package/resources/batches/messages.mjs.map +1 -1
- package/resources/blocks/agents.d.mts +6 -28
- package/resources/blocks/agents.d.mts.map +1 -1
- package/resources/blocks/agents.d.ts +6 -28
- package/resources/blocks/agents.d.ts.map +1 -1
- package/resources/blocks/agents.js +5 -1
- package/resources/blocks/agents.js.map +1 -1
- package/resources/blocks/agents.mjs +5 -1
- package/resources/blocks/agents.mjs.map +1 -1
- package/resources/blocks/blocks.d.mts +108 -48
- package/resources/blocks/blocks.d.mts.map +1 -1
- package/resources/blocks/blocks.d.ts +108 -48
- package/resources/blocks/blocks.d.ts.map +1 -1
- package/resources/blocks/blocks.js +3 -8
- package/resources/blocks/blocks.js.map +1 -1
- package/resources/blocks/blocks.mjs +3 -8
- package/resources/blocks/blocks.mjs.map +1 -1
- package/resources/blocks/index.d.mts +2 -2
- package/resources/blocks/index.d.mts.map +1 -1
- package/resources/blocks/index.d.ts +2 -2
- package/resources/blocks/index.d.ts.map +1 -1
- package/resources/blocks/index.js.map +1 -1
- package/resources/blocks/index.mjs.map +1 -1
- package/resources/folders/files.d.mts +75 -97
- package/resources/folders/files.d.mts.map +1 -1
- package/resources/folders/files.d.ts +75 -97
- package/resources/folders/files.d.ts.map +1 -1
- package/resources/folders/files.js +5 -1
- package/resources/folders/files.js.map +1 -1
- package/resources/folders/files.mjs +5 -1
- package/resources/folders/files.mjs.map +1 -1
- package/resources/folders/folders.d.mts +11 -44
- package/resources/folders/folders.d.mts.map +1 -1
- package/resources/folders/folders.d.ts +11 -44
- package/resources/folders/folders.d.ts.map +1 -1
- package/resources/folders/folders.js +2 -7
- package/resources/folders/folders.js.map +1 -1
- package/resources/folders/folders.mjs +2 -7
- package/resources/folders/folders.mjs.map +1 -1
- package/resources/folders/index.d.mts +2 -2
- package/resources/folders/index.d.mts.map +1 -1
- package/resources/folders/index.d.ts +2 -2
- package/resources/folders/index.d.ts.map +1 -1
- package/resources/folders/index.js.map +1 -1
- package/resources/folders/index.mjs.map +1 -1
- package/resources/groups/groups.d.mts +17 -67
- package/resources/groups/groups.d.mts.map +1 -1
- package/resources/groups/groups.d.ts +17 -67
- package/resources/groups/groups.d.ts.map +1 -1
- package/resources/groups/groups.js +6 -28
- package/resources/groups/groups.js.map +1 -1
- package/resources/groups/groups.mjs +6 -28
- package/resources/groups/groups.mjs.map +1 -1
- package/resources/groups/index.d.mts +2 -2
- package/resources/groups/index.d.mts.map +1 -1
- package/resources/groups/index.d.ts +2 -2
- package/resources/groups/index.d.ts.map +1 -1
- package/resources/groups/index.js.map +1 -1
- package/resources/groups/index.mjs.map +1 -1
- package/resources/groups/messages.d.mts +145 -79
- package/resources/groups/messages.d.mts.map +1 -1
- package/resources/groups/messages.d.ts +145 -79
- package/resources/groups/messages.d.ts.map +1 -1
- package/resources/groups/messages.js +18 -10
- package/resources/groups/messages.js.map +1 -1
- package/resources/groups/messages.mjs +18 -10
- package/resources/groups/messages.mjs.map +1 -1
- package/resources/identities/agents.d.mts +6 -28
- package/resources/identities/agents.d.mts.map +1 -1
- package/resources/identities/agents.d.ts +6 -28
- package/resources/identities/agents.d.ts.map +1 -1
- package/resources/identities/agents.js +2 -1
- package/resources/identities/agents.js.map +1 -1
- package/resources/identities/agents.mjs +2 -1
- package/resources/identities/agents.mjs.map +1 -1
- package/resources/identities/blocks.d.mts +7 -29
- package/resources/identities/blocks.d.mts.map +1 -1
- package/resources/identities/blocks.d.ts +7 -29
- package/resources/identities/blocks.d.ts.map +1 -1
- package/resources/identities/blocks.js +2 -1
- package/resources/identities/blocks.js.map +1 -1
- package/resources/identities/blocks.mjs +2 -1
- package/resources/identities/blocks.mjs.map +1 -1
- package/resources/identities/identities.d.mts +30 -65
- package/resources/identities/identities.d.mts.map +1 -1
- package/resources/identities/identities.d.ts +30 -65
- package/resources/identities/identities.d.ts.map +1 -1
- package/resources/identities/identities.js +7 -29
- package/resources/identities/identities.js.map +1 -1
- package/resources/identities/identities.mjs +7 -29
- package/resources/identities/identities.mjs.map +1 -1
- package/resources/identities/index.d.mts +3 -3
- package/resources/identities/index.d.mts.map +1 -1
- package/resources/identities/index.d.ts +3 -3
- package/resources/identities/index.d.ts.map +1 -1
- package/resources/identities/index.js.map +1 -1
- package/resources/identities/index.mjs.map +1 -1
- package/resources/identities/properties.d.mts +1 -1
- package/resources/identities/properties.d.ts +1 -1
- package/resources/identities/properties.js +1 -1
- package/resources/identities/properties.mjs +1 -1
- package/resources/index.d.mts +13 -11
- package/resources/index.d.mts.map +1 -1
- package/resources/index.d.ts +13 -11
- package/resources/index.d.ts.map +1 -1
- package/resources/index.js +6 -2
- package/resources/index.js.map +1 -1
- package/resources/index.mjs +3 -1
- package/resources/index.mjs.map +1 -1
- package/resources/mcp-servers/index.d.mts +3 -0
- package/resources/mcp-servers/index.d.mts.map +1 -0
- package/resources/mcp-servers/index.d.ts +3 -0
- package/resources/mcp-servers/index.d.ts.map +1 -0
- package/resources/mcp-servers/index.js +9 -0
- package/resources/mcp-servers/index.js.map +1 -0
- package/resources/mcp-servers/index.mjs +4 -0
- package/resources/mcp-servers/index.mjs.map +1 -0
- package/resources/mcp-servers/mcp-servers.d.mts +349 -0
- package/resources/mcp-servers/mcp-servers.d.mts.map +1 -0
- package/resources/mcp-servers/mcp-servers.d.ts +349 -0
- package/resources/mcp-servers/mcp-servers.d.ts.map +1 -0
- package/resources/mcp-servers/mcp-servers.js +69 -0
- package/resources/mcp-servers/mcp-servers.js.map +1 -0
- package/resources/mcp-servers/mcp-servers.mjs +64 -0
- package/resources/mcp-servers/mcp-servers.mjs.map +1 -0
- package/resources/mcp-servers/tools.d.mts +42 -0
- package/resources/mcp-servers/tools.d.mts.map +1 -0
- package/resources/mcp-servers/tools.d.ts +42 -0
- package/resources/mcp-servers/tools.d.ts.map +1 -0
- package/resources/mcp-servers/tools.js +36 -0
- package/resources/mcp-servers/tools.js.map +1 -0
- package/resources/mcp-servers/tools.mjs +32 -0
- package/resources/mcp-servers/tools.mjs.map +1 -0
- package/resources/mcp-servers.d.mts +2 -0
- package/resources/mcp-servers.d.mts.map +1 -0
- package/resources/mcp-servers.d.ts +2 -0
- package/resources/mcp-servers.d.ts.map +1 -0
- package/resources/mcp-servers.js +6 -0
- package/resources/mcp-servers.js.map +1 -0
- package/resources/mcp-servers.mjs +3 -0
- package/resources/mcp-servers.mjs.map +1 -0
- package/resources/models/embeddings.d.mts +6 -2
- package/resources/models/embeddings.d.mts.map +1 -1
- package/resources/models/embeddings.d.ts +6 -2
- package/resources/models/embeddings.d.ts.map +1 -1
- package/resources/models/embeddings.js +5 -1
- package/resources/models/embeddings.js.map +1 -1
- package/resources/models/embeddings.mjs +5 -1
- package/resources/models/embeddings.mjs.map +1 -1
- package/resources/models/index.d.mts +1 -1
- package/resources/models/index.d.mts.map +1 -1
- package/resources/models/index.d.ts +1 -1
- package/resources/models/index.d.ts.map +1 -1
- package/resources/models/index.js.map +1 -1
- package/resources/models/index.mjs.map +1 -1
- package/resources/models/models.d.mts +180 -4
- package/resources/models/models.d.mts.map +1 -1
- package/resources/models/models.d.ts +180 -4
- package/resources/models/models.d.ts.map +1 -1
- package/resources/models/models.js +5 -1
- package/resources/models/models.js.map +1 -1
- package/resources/models/models.mjs +5 -1
- package/resources/models/models.mjs.map +1 -1
- package/resources/runs/index.d.mts +3 -3
- package/resources/runs/index.d.mts.map +1 -1
- package/resources/runs/index.d.ts +3 -3
- package/resources/runs/index.d.ts.map +1 -1
- package/resources/runs/index.js.map +1 -1
- package/resources/runs/index.mjs.map +1 -1
- package/resources/runs/messages.d.mts +8 -28
- package/resources/runs/messages.d.mts.map +1 -1
- package/resources/runs/messages.d.ts +8 -28
- package/resources/runs/messages.d.ts.map +1 -1
- package/resources/runs/messages.js +10 -2
- package/resources/runs/messages.js.map +1 -1
- package/resources/runs/messages.mjs +10 -2
- package/resources/runs/messages.mjs.map +1 -1
- package/resources/runs/runs.d.mts +10 -36
- package/resources/runs/runs.d.mts.map +1 -1
- package/resources/runs/runs.d.ts +10 -36
- package/resources/runs/runs.d.ts.map +1 -1
- package/resources/runs/runs.js +2 -1
- package/resources/runs/runs.js.map +1 -1
- package/resources/runs/runs.mjs +3 -2
- package/resources/runs/runs.mjs.map +1 -1
- package/resources/runs/steps.d.mts +6 -26
- package/resources/runs/steps.d.mts.map +1 -1
- package/resources/runs/steps.d.ts +6 -26
- package/resources/runs/steps.d.ts.map +1 -1
- package/resources/runs/steps.js +5 -1
- package/resources/runs/steps.js.map +1 -1
- package/resources/runs/steps.mjs +5 -1
- package/resources/runs/steps.mjs.map +1 -1
- package/resources/steps/index.d.mts +2 -2
- package/resources/steps/index.d.mts.map +1 -1
- package/resources/steps/index.d.ts +2 -2
- package/resources/steps/index.d.ts.map +1 -1
- package/resources/steps/index.js.map +1 -1
- package/resources/steps/index.mjs +1 -1
- package/resources/steps/index.mjs.map +1 -1
- package/resources/steps/messages.d.mts +14 -28
- package/resources/steps/messages.d.mts.map +1 -1
- package/resources/steps/messages.d.ts +14 -28
- package/resources/steps/messages.d.ts.map +1 -1
- package/resources/steps/messages.js +5 -1
- package/resources/steps/messages.js.map +1 -1
- package/resources/steps/messages.mjs +5 -1
- package/resources/steps/messages.mjs.map +1 -1
- package/resources/steps/steps.d.mts +17 -44
- package/resources/steps/steps.d.mts.map +1 -1
- package/resources/steps/steps.d.ts +17 -44
- package/resources/steps/steps.d.ts.map +1 -1
- package/resources/steps/steps.js +3 -11
- package/resources/steps/steps.js.map +1 -1
- package/resources/steps/steps.mjs +3 -11
- package/resources/steps/steps.mjs.map +1 -1
- package/resources/templates/agents.d.mts +9 -14
- package/resources/templates/agents.d.mts.map +1 -1
- package/resources/templates/agents.d.ts +9 -14
- package/resources/templates/agents.d.ts.map +1 -1
- package/resources/templates/agents.js +2 -3
- package/resources/templates/agents.js.map +1 -1
- package/resources/templates/agents.mjs +2 -3
- package/resources/templates/agents.mjs.map +1 -1
- package/resources/tools.d.mts +6 -68
- package/resources/tools.d.mts.map +1 -1
- package/resources/tools.d.ts +6 -68
- package/resources/tools.d.ts.map +1 -1
- package/resources/tools.js +2 -7
- package/resources/tools.js.map +1 -1
- package/resources/tools.mjs +2 -7
- package/resources/tools.mjs.map +1 -1
- package/src/client.ts +274 -127
- package/src/core/pagination.ts +334 -0
- package/src/core/streaming.ts +331 -0
- package/src/index.ts +1 -0
- package/src/internal/decoders/line.ts +135 -0
- package/src/internal/parse.ts +14 -0
- package/src/internal/request-options.ts +2 -0
- package/src/pagination.ts +2 -0
- package/src/resources/access-tokens.ts +163 -0
- package/src/resources/agents/agents.ts +722 -242
- package/src/resources/agents/archives.ts +51 -0
- package/src/resources/agents/blocks.ts +50 -63
- package/src/resources/agents/files.ts +47 -90
- package/src/resources/agents/folders.ts +58 -88
- package/src/resources/agents/groups.ts +11 -35
- package/src/resources/agents/identities.ts +51 -0
- package/src/resources/agents/index.ts +40 -12
- package/src/resources/agents/messages.ts +941 -550
- package/src/resources/agents/tools.ts +13 -37
- package/src/resources/archives/archives.ts +170 -0
- package/src/resources/archives/index.ts +17 -0
- package/src/resources/archives/passages.ts +150 -0
- package/src/resources/archives.ts +1 -178
- package/src/resources/batches/batches.ts +74 -46
- package/src/resources/batches/index.ts +2 -2
- package/src/resources/batches/messages.ts +12 -37
- package/src/resources/blocks/agents.ts +11 -35
- package/src/resources/blocks/blocks.ts +130 -64
- package/src/resources/blocks/index.ts +3 -3
- package/src/resources/folders/files.ts +90 -113
- package/src/resources/folders/folders.ts +14 -55
- package/src/resources/folders/index.ts +2 -2
- package/src/resources/groups/groups.ts +21 -102
- package/src/resources/groups/index.ts +2 -4
- package/src/resources/groups/messages.ts +215 -103
- package/src/resources/identities/agents.ts +12 -35
- package/src/resources/identities/blocks.ts +13 -36
- package/src/resources/identities/identities.ts +35 -107
- package/src/resources/identities/index.ts +3 -4
- package/src/resources/identities/properties.ts +1 -1
- package/src/resources/index.ts +55 -18
- package/src/resources/mcp-servers/index.ts +25 -0
- package/src/resources/mcp-servers/mcp-servers.ts +460 -0
- package/src/resources/mcp-servers/tools.ts +69 -0
- package/src/resources/mcp-servers.ts +3 -0
- package/src/resources/models/embeddings.ts +6 -2
- package/src/resources/models/index.ts +2 -0
- package/src/resources/models/models.ts +260 -3
- package/src/resources/runs/index.ts +2 -3
- package/src/resources/runs/messages.ts +18 -37
- package/src/resources/runs/runs.ts +14 -54
- package/src/resources/runs/steps.ts +11 -33
- package/src/resources/steps/index.ts +7 -2
- package/src/resources/steps/messages.ts +25 -35
- package/src/resources/steps/steps.ts +20 -61
- package/src/resources/templates/agents.ts +14 -17
- package/src/resources/tools.ts +8 -92
- package/src/streaming.ts +2 -0
- package/src/version.ts +1 -1
- package/streaming.d.mts +2 -0
- package/streaming.d.mts.map +1 -0
- package/streaming.d.ts +2 -0
- package/streaming.d.ts.map +1 -0
- package/streaming.js +6 -0
- package/streaming.js.map +1 -0
- package/streaming.mjs +2 -0
- package/streaming.mjs.map +1 -0
- package/version.d.mts +1 -1
- package/version.d.mts.map +1 -1
- package/version.d.ts +1 -1
- package/version.d.ts.map +1 -1
- package/version.js +1 -1
- package/version.js.map +1 -1
- package/version.mjs +1 -1
- package/version.mjs.map +1 -1
|
@@ -0,0 +1,334 @@
|
|
|
1
|
+
// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
|
|
2
|
+
|
|
3
|
+
import { LettaError } from './error';
|
|
4
|
+
import { FinalRequestOptions } from '../internal/request-options';
|
|
5
|
+
import { defaultParseResponse } from '../internal/parse';
|
|
6
|
+
import { type Letta } from '../client';
|
|
7
|
+
import { APIPromise } from './api-promise';
|
|
8
|
+
import { type APIResponseProps } from '../internal/parse';
|
|
9
|
+
import { maybeObj } from '../internal/utils/values';
|
|
10
|
+
|
|
11
|
+
export type PageRequestOptions = Pick<FinalRequestOptions, 'query' | 'headers' | 'body' | 'path' | 'method'>;
|
|
12
|
+
|
|
13
|
+
export abstract class AbstractPage<Item> implements AsyncIterable<Item> {
|
|
14
|
+
#client: Letta;
|
|
15
|
+
protected options: FinalRequestOptions;
|
|
16
|
+
|
|
17
|
+
protected response: Response;
|
|
18
|
+
protected body: unknown;
|
|
19
|
+
|
|
20
|
+
constructor(client: Letta, response: Response, body: unknown, options: FinalRequestOptions) {
|
|
21
|
+
this.#client = client;
|
|
22
|
+
this.options = options;
|
|
23
|
+
this.response = response;
|
|
24
|
+
this.body = body;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
abstract nextPageRequestOptions(): PageRequestOptions | null;
|
|
28
|
+
|
|
29
|
+
abstract getPaginatedItems(): Item[];
|
|
30
|
+
|
|
31
|
+
hasNextPage(): boolean {
|
|
32
|
+
const items = this.getPaginatedItems();
|
|
33
|
+
if (!items.length) return false;
|
|
34
|
+
return this.nextPageRequestOptions() != null;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
async getNextPage(): Promise<this> {
|
|
38
|
+
const nextOptions = this.nextPageRequestOptions();
|
|
39
|
+
if (!nextOptions) {
|
|
40
|
+
throw new LettaError(
|
|
41
|
+
'No next page expected; please check `.hasNextPage()` before calling `.getNextPage()`.',
|
|
42
|
+
);
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
return await this.#client.requestAPIList(this.constructor as any, nextOptions);
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
async *iterPages(): AsyncGenerator<this> {
|
|
49
|
+
let page: this = this;
|
|
50
|
+
yield page;
|
|
51
|
+
while (page.hasNextPage()) {
|
|
52
|
+
page = await page.getNextPage();
|
|
53
|
+
yield page;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
async *[Symbol.asyncIterator](): AsyncGenerator<Item> {
|
|
58
|
+
for await (const page of this.iterPages()) {
|
|
59
|
+
for (const item of page.getPaginatedItems()) {
|
|
60
|
+
yield item;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* This subclass of Promise will resolve to an instantiated Page once the request completes.
|
|
68
|
+
*
|
|
69
|
+
* It also implements AsyncIterable to allow auto-paginating iteration on an unawaited list call, eg:
|
|
70
|
+
*
|
|
71
|
+
* for await (const item of client.items.list()) {
|
|
72
|
+
* console.log(item)
|
|
73
|
+
* }
|
|
74
|
+
*/
|
|
75
|
+
export class PagePromise<
|
|
76
|
+
PageClass extends AbstractPage<Item>,
|
|
77
|
+
Item = ReturnType<PageClass['getPaginatedItems']>[number],
|
|
78
|
+
>
|
|
79
|
+
extends APIPromise<PageClass>
|
|
80
|
+
implements AsyncIterable<Item>
|
|
81
|
+
{
|
|
82
|
+
constructor(
|
|
83
|
+
client: Letta,
|
|
84
|
+
request: Promise<APIResponseProps>,
|
|
85
|
+
Page: new (...args: ConstructorParameters<typeof AbstractPage>) => PageClass,
|
|
86
|
+
) {
|
|
87
|
+
super(
|
|
88
|
+
client,
|
|
89
|
+
request,
|
|
90
|
+
async (client, props) =>
|
|
91
|
+
new Page(client, props.response, await defaultParseResponse(client, props), props.options),
|
|
92
|
+
);
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
/**
|
|
96
|
+
* Allow auto-paginating iteration on an unawaited list call, eg:
|
|
97
|
+
*
|
|
98
|
+
* for await (const item of client.items.list()) {
|
|
99
|
+
* console.log(item)
|
|
100
|
+
* }
|
|
101
|
+
*/
|
|
102
|
+
async *[Symbol.asyncIterator](): AsyncGenerator<Item> {
|
|
103
|
+
const page = await this;
|
|
104
|
+
for await (const item of page) {
|
|
105
|
+
yield item;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
export type ArrayPageResponse<Item> = Item[];
|
|
111
|
+
|
|
112
|
+
export interface ArrayPageParams {
|
|
113
|
+
before?: string | null;
|
|
114
|
+
|
|
115
|
+
after?: string | null;
|
|
116
|
+
|
|
117
|
+
limit?: number | null;
|
|
118
|
+
|
|
119
|
+
order?: string | null;
|
|
120
|
+
|
|
121
|
+
order_by?: string | null;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
export class ArrayPage<Item extends { id: string }> extends AbstractPage<Item> {
|
|
125
|
+
items: Array<Item>;
|
|
126
|
+
|
|
127
|
+
constructor(
|
|
128
|
+
client: Letta,
|
|
129
|
+
response: Response,
|
|
130
|
+
body: ArrayPageResponse<Item>,
|
|
131
|
+
options: FinalRequestOptions,
|
|
132
|
+
) {
|
|
133
|
+
super(client, response, body, options);
|
|
134
|
+
|
|
135
|
+
this.items = body || [];
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
getPaginatedItems(): Item[] {
|
|
139
|
+
return this.items ?? [];
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
nextPageRequestOptions(): PageRequestOptions | null {
|
|
143
|
+
const items = this.getPaginatedItems();
|
|
144
|
+
|
|
145
|
+
const isForwards = !(typeof this.options.query === 'object' && 'before' in (this.options.query || {}));
|
|
146
|
+
if (isForwards) {
|
|
147
|
+
const id = items[items.length - 1]?.id;
|
|
148
|
+
if (!id) {
|
|
149
|
+
return null;
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
return {
|
|
153
|
+
...this.options,
|
|
154
|
+
query: {
|
|
155
|
+
...maybeObj(this.options.query),
|
|
156
|
+
after: id,
|
|
157
|
+
},
|
|
158
|
+
};
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
const id = items[0]?.id;
|
|
162
|
+
if (!id) {
|
|
163
|
+
return null;
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
return {
|
|
167
|
+
...this.options,
|
|
168
|
+
query: {
|
|
169
|
+
...maybeObj(this.options.query),
|
|
170
|
+
before: id,
|
|
171
|
+
},
|
|
172
|
+
};
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
export interface ObjectPageResponse<Item> {
|
|
177
|
+
messages: Array<Item>;
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
export interface ObjectPageParams {
|
|
181
|
+
before?: string | null;
|
|
182
|
+
|
|
183
|
+
after?: string | null;
|
|
184
|
+
|
|
185
|
+
limit?: number | null;
|
|
186
|
+
|
|
187
|
+
order?: string | null;
|
|
188
|
+
|
|
189
|
+
order_by?: string | null;
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
export class ObjectPage<Item extends { id: string }>
|
|
193
|
+
extends AbstractPage<Item>
|
|
194
|
+
implements ObjectPageResponse<Item>
|
|
195
|
+
{
|
|
196
|
+
messages: Array<Item>;
|
|
197
|
+
|
|
198
|
+
constructor(
|
|
199
|
+
client: Letta,
|
|
200
|
+
response: Response,
|
|
201
|
+
body: ObjectPageResponse<Item>,
|
|
202
|
+
options: FinalRequestOptions,
|
|
203
|
+
) {
|
|
204
|
+
super(client, response, body, options);
|
|
205
|
+
|
|
206
|
+
this.messages = body.messages || [];
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
getPaginatedItems(): Item[] {
|
|
210
|
+
return this.messages ?? [];
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
nextPageRequestOptions(): PageRequestOptions | null {
|
|
214
|
+
const messages = this.getPaginatedItems();
|
|
215
|
+
|
|
216
|
+
const isForwards = !(typeof this.options.query === 'object' && 'before' in (this.options.query || {}));
|
|
217
|
+
if (isForwards) {
|
|
218
|
+
const id = messages[messages.length - 1]?.id;
|
|
219
|
+
if (!id) {
|
|
220
|
+
return null;
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
return {
|
|
224
|
+
...this.options,
|
|
225
|
+
query: {
|
|
226
|
+
...maybeObj(this.options.query),
|
|
227
|
+
after: id,
|
|
228
|
+
},
|
|
229
|
+
};
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
const id = messages[0]?.id;
|
|
233
|
+
if (!id) {
|
|
234
|
+
return null;
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
return {
|
|
238
|
+
...this.options,
|
|
239
|
+
query: {
|
|
240
|
+
...maybeObj(this.options.query),
|
|
241
|
+
before: id,
|
|
242
|
+
},
|
|
243
|
+
};
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
export interface NextFilesPageResponse<Item> {
|
|
248
|
+
files: Array<Item>;
|
|
249
|
+
|
|
250
|
+
next_cursor: string | null;
|
|
251
|
+
|
|
252
|
+
has_more: boolean;
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
export interface NextFilesPageParams {
|
|
256
|
+
before?: string | null;
|
|
257
|
+
|
|
258
|
+
after?: string | null;
|
|
259
|
+
|
|
260
|
+
limit?: number | null;
|
|
261
|
+
|
|
262
|
+
order?: string | null;
|
|
263
|
+
|
|
264
|
+
order_by?: string | null;
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
export class NextFilesPage<Item extends { id: string }>
|
|
268
|
+
extends AbstractPage<Item>
|
|
269
|
+
implements NextFilesPageResponse<Item>
|
|
270
|
+
{
|
|
271
|
+
files: Array<Item>;
|
|
272
|
+
|
|
273
|
+
next_cursor: string | null;
|
|
274
|
+
|
|
275
|
+
has_more: boolean;
|
|
276
|
+
|
|
277
|
+
constructor(
|
|
278
|
+
client: Letta,
|
|
279
|
+
response: Response,
|
|
280
|
+
body: NextFilesPageResponse<Item>,
|
|
281
|
+
options: FinalRequestOptions,
|
|
282
|
+
) {
|
|
283
|
+
super(client, response, body, options);
|
|
284
|
+
|
|
285
|
+
this.files = body.files || [];
|
|
286
|
+
this.next_cursor = body.next_cursor || null;
|
|
287
|
+
this.has_more = body.has_more || false;
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
getPaginatedItems(): Item[] {
|
|
291
|
+
return this.files ?? [];
|
|
292
|
+
}
|
|
293
|
+
|
|
294
|
+
override hasNextPage(): boolean {
|
|
295
|
+
if (this.has_more === false) {
|
|
296
|
+
return false;
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
return super.hasNextPage();
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
nextPageRequestOptions(): PageRequestOptions | null {
|
|
303
|
+
const files = this.getPaginatedItems();
|
|
304
|
+
|
|
305
|
+
const isForwards = !(typeof this.options.query === 'object' && 'before' in (this.options.query || {}));
|
|
306
|
+
if (isForwards) {
|
|
307
|
+
const id = files[files.length - 1]?.id;
|
|
308
|
+
if (!id) {
|
|
309
|
+
return null;
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
return {
|
|
313
|
+
...this.options,
|
|
314
|
+
query: {
|
|
315
|
+
...maybeObj(this.options.query),
|
|
316
|
+
after: id,
|
|
317
|
+
},
|
|
318
|
+
};
|
|
319
|
+
}
|
|
320
|
+
|
|
321
|
+
const id = files[0]?.id;
|
|
322
|
+
if (!id) {
|
|
323
|
+
return null;
|
|
324
|
+
}
|
|
325
|
+
|
|
326
|
+
return {
|
|
327
|
+
...this.options,
|
|
328
|
+
query: {
|
|
329
|
+
...maybeObj(this.options.query),
|
|
330
|
+
before: id,
|
|
331
|
+
},
|
|
332
|
+
};
|
|
333
|
+
}
|
|
334
|
+
}
|
|
@@ -0,0 +1,331 @@
|
|
|
1
|
+
import { LettaError } from './error';
|
|
2
|
+
import { type ReadableStream } from '../internal/shim-types';
|
|
3
|
+
import { makeReadableStream } from '../internal/shims';
|
|
4
|
+
import { findDoubleNewlineIndex, LineDecoder } from '../internal/decoders/line';
|
|
5
|
+
import { ReadableStreamToAsyncIterable } from '../internal/shims';
|
|
6
|
+
import { isAbortError } from '../internal/errors';
|
|
7
|
+
import { safeJSON } from '../internal/utils/values';
|
|
8
|
+
import { encodeUTF8 } from '../internal/utils/bytes';
|
|
9
|
+
import { loggerFor } from '../internal/utils/log';
|
|
10
|
+
import type { Letta } from '../client';
|
|
11
|
+
|
|
12
|
+
import { APIError } from './error';
|
|
13
|
+
|
|
14
|
+
type Bytes = string | ArrayBuffer | Uint8Array | null | undefined;
|
|
15
|
+
|
|
16
|
+
export type ServerSentEvent = {
|
|
17
|
+
event: string | null;
|
|
18
|
+
data: string;
|
|
19
|
+
raw: string[];
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
export class Stream<Item> implements AsyncIterable<Item> {
|
|
23
|
+
controller: AbortController;
|
|
24
|
+
#client: Letta | undefined;
|
|
25
|
+
|
|
26
|
+
constructor(
|
|
27
|
+
private iterator: () => AsyncIterator<Item>,
|
|
28
|
+
controller: AbortController,
|
|
29
|
+
client?: Letta,
|
|
30
|
+
) {
|
|
31
|
+
this.controller = controller;
|
|
32
|
+
this.#client = client;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
static fromSSEResponse<Item>(
|
|
36
|
+
response: Response,
|
|
37
|
+
controller: AbortController,
|
|
38
|
+
client?: Letta,
|
|
39
|
+
): Stream<Item> {
|
|
40
|
+
let consumed = false;
|
|
41
|
+
const logger = client ? loggerFor(client) : console;
|
|
42
|
+
|
|
43
|
+
async function* iterator(): AsyncIterator<Item, any, undefined> {
|
|
44
|
+
if (consumed) {
|
|
45
|
+
throw new LettaError('Cannot iterate over a consumed stream, use `.tee()` to split the stream.');
|
|
46
|
+
}
|
|
47
|
+
consumed = true;
|
|
48
|
+
let done = false;
|
|
49
|
+
try {
|
|
50
|
+
for await (const sse of _iterSSEMessages(response, controller)) {
|
|
51
|
+
if (done) continue;
|
|
52
|
+
|
|
53
|
+
if (sse.data.startsWith('[DONE]')) {
|
|
54
|
+
done = true;
|
|
55
|
+
continue;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
if (sse.event === 'error') {
|
|
59
|
+
throw new APIError(undefined, safeJSON(sse.data) ?? sse.data, undefined, response.headers);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
if (sse.event === null) {
|
|
63
|
+
try {
|
|
64
|
+
yield JSON.parse(sse.data);
|
|
65
|
+
} catch (e) {
|
|
66
|
+
logger.error(`Could not parse message into JSON:`, sse.data);
|
|
67
|
+
logger.error(`From chunk:`, sse.raw);
|
|
68
|
+
throw e;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
done = true;
|
|
73
|
+
} catch (e) {
|
|
74
|
+
// If the user calls `stream.controller.abort()`, we should exit without throwing.
|
|
75
|
+
if (isAbortError(e)) return;
|
|
76
|
+
throw e;
|
|
77
|
+
} finally {
|
|
78
|
+
// If the user `break`s, abort the ongoing request.
|
|
79
|
+
if (!done) controller.abort();
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
return new Stream(iterator, controller, client);
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
/**
|
|
87
|
+
* Generates a Stream from a newline-separated ReadableStream
|
|
88
|
+
* where each item is a JSON value.
|
|
89
|
+
*/
|
|
90
|
+
static fromReadableStream<Item>(
|
|
91
|
+
readableStream: ReadableStream,
|
|
92
|
+
controller: AbortController,
|
|
93
|
+
client?: Letta,
|
|
94
|
+
): Stream<Item> {
|
|
95
|
+
let consumed = false;
|
|
96
|
+
|
|
97
|
+
async function* iterLines(): AsyncGenerator<string, void, unknown> {
|
|
98
|
+
const lineDecoder = new LineDecoder();
|
|
99
|
+
|
|
100
|
+
const iter = ReadableStreamToAsyncIterable<Bytes>(readableStream);
|
|
101
|
+
for await (const chunk of iter) {
|
|
102
|
+
for (const line of lineDecoder.decode(chunk)) {
|
|
103
|
+
yield line;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
for (const line of lineDecoder.flush()) {
|
|
108
|
+
yield line;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
async function* iterator(): AsyncIterator<Item, any, undefined> {
|
|
113
|
+
if (consumed) {
|
|
114
|
+
throw new LettaError('Cannot iterate over a consumed stream, use `.tee()` to split the stream.');
|
|
115
|
+
}
|
|
116
|
+
consumed = true;
|
|
117
|
+
let done = false;
|
|
118
|
+
try {
|
|
119
|
+
for await (const line of iterLines()) {
|
|
120
|
+
if (done) continue;
|
|
121
|
+
if (line) yield JSON.parse(line);
|
|
122
|
+
}
|
|
123
|
+
done = true;
|
|
124
|
+
} catch (e) {
|
|
125
|
+
// If the user calls `stream.controller.abort()`, we should exit without throwing.
|
|
126
|
+
if (isAbortError(e)) return;
|
|
127
|
+
throw e;
|
|
128
|
+
} finally {
|
|
129
|
+
// If the user `break`s, abort the ongoing request.
|
|
130
|
+
if (!done) controller.abort();
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
return new Stream(iterator, controller, client);
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
[Symbol.asyncIterator](): AsyncIterator<Item> {
|
|
138
|
+
return this.iterator();
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
/**
|
|
142
|
+
* Splits the stream into two streams which can be
|
|
143
|
+
* independently read from at different speeds.
|
|
144
|
+
*/
|
|
145
|
+
tee(): [Stream<Item>, Stream<Item>] {
|
|
146
|
+
const left: Array<Promise<IteratorResult<Item>>> = [];
|
|
147
|
+
const right: Array<Promise<IteratorResult<Item>>> = [];
|
|
148
|
+
const iterator = this.iterator();
|
|
149
|
+
|
|
150
|
+
const teeIterator = (queue: Array<Promise<IteratorResult<Item>>>): AsyncIterator<Item> => {
|
|
151
|
+
return {
|
|
152
|
+
next: () => {
|
|
153
|
+
if (queue.length === 0) {
|
|
154
|
+
const result = iterator.next();
|
|
155
|
+
left.push(result);
|
|
156
|
+
right.push(result);
|
|
157
|
+
}
|
|
158
|
+
return queue.shift()!;
|
|
159
|
+
},
|
|
160
|
+
};
|
|
161
|
+
};
|
|
162
|
+
|
|
163
|
+
return [
|
|
164
|
+
new Stream(() => teeIterator(left), this.controller, this.#client),
|
|
165
|
+
new Stream(() => teeIterator(right), this.controller, this.#client),
|
|
166
|
+
];
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
/**
|
|
170
|
+
* Converts this stream to a newline-separated ReadableStream of
|
|
171
|
+
* JSON stringified values in the stream
|
|
172
|
+
* which can be turned back into a Stream with `Stream.fromReadableStream()`.
|
|
173
|
+
*/
|
|
174
|
+
toReadableStream(): ReadableStream {
|
|
175
|
+
const self = this;
|
|
176
|
+
let iter: AsyncIterator<Item>;
|
|
177
|
+
|
|
178
|
+
return makeReadableStream({
|
|
179
|
+
async start() {
|
|
180
|
+
iter = self[Symbol.asyncIterator]();
|
|
181
|
+
},
|
|
182
|
+
async pull(ctrl: any) {
|
|
183
|
+
try {
|
|
184
|
+
const { value, done } = await iter.next();
|
|
185
|
+
if (done) return ctrl.close();
|
|
186
|
+
|
|
187
|
+
const bytes = encodeUTF8(JSON.stringify(value) + '\n');
|
|
188
|
+
|
|
189
|
+
ctrl.enqueue(bytes);
|
|
190
|
+
} catch (err) {
|
|
191
|
+
ctrl.error(err);
|
|
192
|
+
}
|
|
193
|
+
},
|
|
194
|
+
async cancel() {
|
|
195
|
+
await iter.return?.();
|
|
196
|
+
},
|
|
197
|
+
});
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
export async function* _iterSSEMessages(
|
|
202
|
+
response: Response,
|
|
203
|
+
controller: AbortController,
|
|
204
|
+
): AsyncGenerator<ServerSentEvent, void, unknown> {
|
|
205
|
+
if (!response.body) {
|
|
206
|
+
controller.abort();
|
|
207
|
+
if (
|
|
208
|
+
typeof (globalThis as any).navigator !== 'undefined' &&
|
|
209
|
+
(globalThis as any).navigator.product === 'ReactNative'
|
|
210
|
+
) {
|
|
211
|
+
throw new LettaError(
|
|
212
|
+
`The default react-native fetch implementation does not support streaming. Please use expo/fetch: https://docs.expo.dev/versions/latest/sdk/expo/#expofetch-api`,
|
|
213
|
+
);
|
|
214
|
+
}
|
|
215
|
+
throw new LettaError(`Attempted to iterate over a response with no body`);
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
const sseDecoder = new SSEDecoder();
|
|
219
|
+
const lineDecoder = new LineDecoder();
|
|
220
|
+
|
|
221
|
+
const iter = ReadableStreamToAsyncIterable<Bytes>(response.body);
|
|
222
|
+
for await (const sseChunk of iterSSEChunks(iter)) {
|
|
223
|
+
for (const line of lineDecoder.decode(sseChunk)) {
|
|
224
|
+
const sse = sseDecoder.decode(line);
|
|
225
|
+
if (sse) yield sse;
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
for (const line of lineDecoder.flush()) {
|
|
230
|
+
const sse = sseDecoder.decode(line);
|
|
231
|
+
if (sse) yield sse;
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
/**
|
|
236
|
+
* Given an async iterable iterator, iterates over it and yields full
|
|
237
|
+
* SSE chunks, i.e. yields when a double new-line is encountered.
|
|
238
|
+
*/
|
|
239
|
+
async function* iterSSEChunks(iterator: AsyncIterableIterator<Bytes>): AsyncGenerator<Uint8Array> {
|
|
240
|
+
let data = new Uint8Array();
|
|
241
|
+
|
|
242
|
+
for await (const chunk of iterator) {
|
|
243
|
+
if (chunk == null) {
|
|
244
|
+
continue;
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
const binaryChunk =
|
|
248
|
+
chunk instanceof ArrayBuffer ? new Uint8Array(chunk)
|
|
249
|
+
: typeof chunk === 'string' ? encodeUTF8(chunk)
|
|
250
|
+
: chunk;
|
|
251
|
+
|
|
252
|
+
let newData = new Uint8Array(data.length + binaryChunk.length);
|
|
253
|
+
newData.set(data);
|
|
254
|
+
newData.set(binaryChunk, data.length);
|
|
255
|
+
data = newData;
|
|
256
|
+
|
|
257
|
+
let patternIndex;
|
|
258
|
+
while ((patternIndex = findDoubleNewlineIndex(data)) !== -1) {
|
|
259
|
+
yield data.slice(0, patternIndex);
|
|
260
|
+
data = data.slice(patternIndex);
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
if (data.length > 0) {
|
|
265
|
+
yield data;
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
class SSEDecoder {
|
|
270
|
+
private data: string[];
|
|
271
|
+
private event: string | null;
|
|
272
|
+
private chunks: string[];
|
|
273
|
+
|
|
274
|
+
constructor() {
|
|
275
|
+
this.event = null;
|
|
276
|
+
this.data = [];
|
|
277
|
+
this.chunks = [];
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
decode(line: string) {
|
|
281
|
+
if (line.endsWith('\r')) {
|
|
282
|
+
line = line.substring(0, line.length - 1);
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
if (!line) {
|
|
286
|
+
// empty line and we didn't previously encounter any messages
|
|
287
|
+
if (!this.event && !this.data.length) return null;
|
|
288
|
+
|
|
289
|
+
const sse: ServerSentEvent = {
|
|
290
|
+
event: this.event,
|
|
291
|
+
data: this.data.join('\n'),
|
|
292
|
+
raw: this.chunks,
|
|
293
|
+
};
|
|
294
|
+
|
|
295
|
+
this.event = null;
|
|
296
|
+
this.data = [];
|
|
297
|
+
this.chunks = [];
|
|
298
|
+
|
|
299
|
+
return sse;
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
this.chunks.push(line);
|
|
303
|
+
|
|
304
|
+
if (line.startsWith(':')) {
|
|
305
|
+
return null;
|
|
306
|
+
}
|
|
307
|
+
|
|
308
|
+
let [fieldname, _, value] = partition(line, ':');
|
|
309
|
+
|
|
310
|
+
if (value.startsWith(' ')) {
|
|
311
|
+
value = value.substring(1);
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
if (fieldname === 'event') {
|
|
315
|
+
this.event = value;
|
|
316
|
+
} else if (fieldname === 'data') {
|
|
317
|
+
this.data.push(value);
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
return null;
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
|
|
324
|
+
function partition(str: string, delimiter: string): [string, string, string] {
|
|
325
|
+
const index = str.indexOf(delimiter);
|
|
326
|
+
if (index !== -1) {
|
|
327
|
+
return [str.substring(0, index), delimiter, str.substring(index + delimiter.length)];
|
|
328
|
+
}
|
|
329
|
+
|
|
330
|
+
return [str, '', ''];
|
|
331
|
+
}
|
package/src/index.ts
CHANGED
|
@@ -5,6 +5,7 @@ export { Letta as default } from './client';
|
|
|
5
5
|
export { type Uploadable, toFile } from './core/uploads';
|
|
6
6
|
export { APIPromise } from './core/api-promise';
|
|
7
7
|
export { Letta, type ClientOptions } from './client';
|
|
8
|
+
export { PagePromise } from './core/pagination';
|
|
8
9
|
export {
|
|
9
10
|
LettaError,
|
|
10
11
|
APIError,
|