Compare commits

...

53 Commits

Author SHA1 Message Date
github-actions[bot] c1c58feed2 Release 0.11.19 (#2105)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: marcusschiesser <17126+marcusschiesser@users.noreply.github.com>
2025-07-17 15:44:22 +08:00
Marcus Schiesser 7ad3411766 feat: add llm.exec (#2078) 2025-07-17 15:36:56 +08:00
Neha Prasad a1fdb07b96 feat: multi-turn image generation support (#2106)
Co-authored-by: Marcus Schiesser <marcus.schiesser@googlemail.com>
2025-07-17 10:30:39 +08:00
Jeremy B. Merrill 5da5b3c89c feat: add progress callback to embeddings (#2098)
Co-authored-by: Marcus Schiesser <mail@marcusschiesser.de>
2025-07-16 13:49:49 +08:00
r3rer3 ddc0eafbaa feat(anthropic): stream partial tool calls (#2100) 2025-07-15 10:06:17 -07:00
github-actions[bot] 1782554488 Release 0.11.18 (#2103)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2025-07-14 15:53:20 -07:00
Adrian Lyjak a1b1598bc6 fix(cloud): add generic types into agent data responses (#2102)
Co-authored-by: Alex Yang <himself65@outlook.com>
2025-07-14 12:01:56 -07:00
Terry Zhao b02847ae91 fix(notion): resolve @notionhq/client dependency conflict (#2097) 2025-07-12 11:04:06 -07:00
Alex Yang 50acb4821e feat(cloud): use camelCase (#2096) 2025-07-12 10:59:46 -07:00
github-actions[bot] 47a5b94b0c Release 0.11.17 (#2095)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2025-07-11 21:57:02 -07:00
Alex Yang d2be868b93 feat(cloud): missing agent api (#2094) 2025-07-11 20:45:22 -07:00
github-actions[bot] 50d42c4129 Release 0.11.16 (#2093)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2025-07-11 20:13:37 -07:00
github-actions[bot] 848b97d4d0 Release 0.11.16 (#2092)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2025-07-11 18:19:17 -07:00
Alex Yang c5796b8d2d fix: only allow pnpm (#2091) 2025-07-11 18:17:47 -07:00
Alex Yang 579ca0cf60 chore: bump sdk version (#2090) 2025-07-11 18:10:15 -07:00
Alex Yang f7e670c8d9 fix: sdk type improvement (#2089) 2025-07-11 17:56:41 -07:00
Alex Yang 9ff971435c fix(cloud): agent sdk (#2088) 2025-07-11 17:41:25 -07:00
github-actions[bot] 7c9d0e24c4 Release (#2086)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: marcusschiesser <17126+marcusschiesser@users.noreply.github.com>
2025-07-11 12:30:04 -07:00
NIEDASEN af3f86694b feat: add supportToolCall getter to DeepSeekLLM class (#2085)
Co-authored-by: Marcus Schiesser <marcus.schiesser@googlemail.com>
2025-07-11 16:11:22 +08:00
github-actions[bot] 5cce681f62 Release 0.11.15 (#2084)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2025-07-10 19:08:05 -07:00
Alex Yang 48b0d88941 chore: bump dev deps (#2082) 2025-07-10 19:00:37 -07:00
Alex Yang f18577263a fix(cloud): missing file (#2083) 2025-07-10 18:33:41 -07:00
github-actions[bot] 214e133e92 Release 0.11.14 (#2068)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: himself65 <14026360+himself65@users.noreply.github.com>
2025-07-10 17:10:02 -07:00
Alex Yang ae58862669 fix: missing agent entry (#2081) 2025-07-10 11:39:07 -07:00
Alex Yang 5a0ed1f990 feat: init agent api on cloud sdk (#2069) 2025-07-10 10:00:53 -07:00
Logan 36773a82b6 fix examples scripts (#2077) 2025-07-09 11:24:07 +08:00
Logan 891562d598 remove workspace from examples package.json (#2075) 2025-07-08 16:36:33 -07:00
Alex Yang 93852e15fd chore: bump zod (#2074) 2025-07-08 13:58:52 -07:00
Clelia (Astra) Bertelli e1320b08a8 fix: adding more details in the contribution guidelines about changesets (#2073) 2025-07-08 13:58:36 -07:00
Logan 8eeac3310f fix memory factory (#2066) 2025-07-08 10:01:19 +07:00
Logan 984a573068 docs: update contributing instructions (#2067) 2025-07-07 16:38:26 -07:00
github-actions[bot] f0160d9646 Release (#2065)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2025-07-07 12:15:33 -06:00
Logan 39758ab018 add title to root layout (#2064) 2025-07-07 12:06:13 -06:00
dependabot[bot] f631d4f7d6 chore(deps): bump next from 15.3.0 to 15.3.3 (#2063) 2025-07-07 12:40:42 +07:00
github-actions[bot] d68c2a4be8 Release 0.11.13 (#2060) 2025-07-07 11:24:21 +07:00
Alex Yang 47a7555c07 chore: bump sdk version (#2062) 2025-07-03 12:05:16 -07:00
Marcus Schiesser 363bfa778e chore: re-add lib folder from docs and rename it to libs (so pnpm clean doesn't delete it) 2025-07-03 11:03:05 +07:00
Jan Z 229cdeb0ff feat: add agent update to groq models (#2054)
Co-authored-by: Marcus Schiesser <marcus.schiesser@googlemail.com>
Co-authored-by: Marcus Schiesser <mail@marcusschiesser.de>
2025-07-01 22:53:47 -07:00
github-actions[bot] 7a2485cca2 Release 0.11.12 (#2050)
Co-authored-by: marcusschiesser <17126+marcusschiesser@users.noreply.github.com>
2025-07-02 11:41:55 +07:00
Marcus Schiesser 1329186a23 docs: clarify how to run docs 2025-07-02 11:33:48 +07:00
dependabot[bot] 5d6e7384f5 chore(deps-dev): bump @modelcontextprotocol/server-filesystem from 2025.3.28 to 2025.7.1 (#2055) 2025-07-02 11:26:18 +07:00
allen f2dfd305fb implement bm25 retriever (#2045)
Co-authored-by: Marcus Schiesser <mail@marcusschiesser.de>
2025-07-02 11:22:47 +07:00
Huu Le 3cd8a573df feat: update interpreter to always upload all files in the configured directory (#2057) 2025-07-02 10:57:04 +07:00
Laurie Voss 09c6077f6e Import path for llamaparsereader (#2056) 2025-07-01 16:51:25 -07:00
Logan 14cc65b4e3 add google analytics (#2053)
Co-authored-by: Alex Yang <himself65@outlook.com>
2025-07-01 11:18:14 -07:00
Marcus Schiesser c544d8f67c docs: review and update memory doc 2025-07-01 15:10:43 +07:00
Huu Le d578889e21 feat: new memory api (#2028)
Co-authored-by: Marcus Schiesser <mail@marcusschiesser.de>
2025-07-01 09:30:49 +07:00
Marcus Schiesser 9f745d1941 chore: revert to wrong opus change 2025-07-01 09:07:46 +07:00
Alex Yang f292e94dcd fix: change default claude model (#2052) 2025-06-30 15:19:40 -07:00
Marcus Schiesser 0fcc92f632 fix: sentence splitter must not trim whitespaces (#2046) 2025-06-30 17:32:04 +07:00
Marcus Schiesser 515a8b9111 fix: error logging for fromPersistPath (#2049) 2025-06-30 13:41:13 +07:00
github-actions[bot] 7e8efc6284 Release @llamaindex/tools@0.1.2 (#2048) 2025-06-30 11:40:54 +07:00
Wassim Chegham 0fcf65126d chore: export type MCPClientOptions (#2047)
Co-authored-by: Marcus Schiesser <marcus.schiesser@googlemail.com>
2025-06-28 10:55:07 +07:00
271 changed files with 12961 additions and 4080 deletions
+55 -2
View File
@@ -25,7 +25,7 @@ Make sure you have Node.js LTS (Long-term Support) installed. You can check your
```shell
node -v
# v20.x.x
# v22.x.x
```
### Use pnpm
@@ -38,6 +38,7 @@ npm install -g pnpm
```shell
pnpm install
pnpm install -g tsx
```
### Build the packages
@@ -48,6 +49,56 @@ To build all packages, run:
pnpm build
```
### Start Developing
You can launch the package in dev-mode by running:
```shell
pnpm dev
```
This will use turbo to run all packages in watch-mode. This means you can make changes and have them automatically built.
If you want to customize what packages are built/watched, you can run turbo directly and adjust the filter:
```shell
pnpm turbo run dev --filter="./packages/core" --concurrency=100
```
In another terminal, you can write and run any script needed to quickly test your changes. For example:
```typescript
import { createMemory, staticBlock } from "@llamaindex/core/memory";
// Create memory with predefined context
const memory = createMemory({
memoryBlocks: [
staticBlock({
content:
"The user is a software engineer who loves TypeScript and LlamaIndex.",
messageRole: "system",
}),
],
});
async function main() {
const result = await memory.getLLM();
console.log(result);
}
void main().catch(console.error);
```
And run it with:
```shell
pnpm exec tsx my_script.ts
```
This flow allows you to easily test your changes without having to build the entire project.
Once you are happy with your changes, be sure to add tests (and confirm existing tests are passing!).
### Run tests
#### Unit tests
@@ -92,7 +143,7 @@ Before sending a PR, make sure of the following:
3. If you have a new feature, add a new example in the `examples` folder.
4. You have a descriptive changeset for each PR:
### Changesets
### Bumping the versions of packages you've modified
We use [changesets](https://github.com/changesets/changesets) for managing versions and changelogs. To create a new
changeset, run in the root folder:
@@ -101,6 +152,8 @@ changeset, run in the root folder:
pnpm changeset
```
You will be prompted to choose what packages need their versions bumped, and what kind of bump (major, minor or patch) is needed. Once you carry out this operation, the bumping will be automatic after the PR is merged.
## Publishing (maintainers only)
The [Release Github Action](.github/workflows/release.yml) is automatically generating and updating a
+92
View File
@@ -1,5 +1,97 @@
# @llamaindex/doc
## 0.2.40
### Patch Changes
- Updated dependencies [7ad3411]
- Updated dependencies [5da5b3c]
- Updated dependencies [a1fdb07]
- @llamaindex/core@0.6.15
- @llamaindex/workflow@1.1.15
- @llamaindex/openai@0.4.9
- @llamaindex/cloud@4.0.24
- llamaindex@0.11.19
- @llamaindex/node-parser@2.0.15
- @llamaindex/readers@3.1.14
## 0.2.39
### Patch Changes
- Updated dependencies [a1b1598]
- @llamaindex/cloud@4.0.23
- llamaindex@0.11.18
## 0.2.38
### Patch Changes
- Updated dependencies [d2be868]
- @llamaindex/cloud@4.0.22
- llamaindex@0.11.17
## 0.2.37
### Patch Changes
- Updated dependencies [579ca0c]
- @llamaindex/cloud@4.0.21
- llamaindex@0.11.16
## 0.2.36
### Patch Changes
- Updated dependencies [48b0d88]
- Updated dependencies [f185772]
- @llamaindex/cloud@4.0.20
- llamaindex@0.11.15
## 0.2.35
### Patch Changes
- Updated dependencies [5a0ed1f]
- Updated dependencies [5a0ed1f]
- Updated dependencies [8eeac33]
- @llamaindex/cloud@4.0.19
- @llamaindex/core@0.6.14
- llamaindex@0.11.14
- @llamaindex/node-parser@2.0.14
- @llamaindex/openai@0.4.8
- @llamaindex/readers@3.1.13
- @llamaindex/workflow@1.1.14
## 0.2.34
### Patch Changes
- 39758ab: Add title to homepage header
## 0.2.33
### Patch Changes
- Updated dependencies [47a7555]
- @llamaindex/cloud@4.0.18
- llamaindex@0.11.13
## 0.2.32
### Patch Changes
- Updated dependencies [d578889]
- Updated dependencies [0fcc92f]
- Updated dependencies [515a8b9]
- @llamaindex/core@0.6.13
- llamaindex@0.11.12
- @llamaindex/cloud@4.0.17
- @llamaindex/node-parser@2.0.13
- @llamaindex/openai@0.4.7
- @llamaindex/readers@3.1.12
- @llamaindex/workflow@1.1.13
## 0.2.31
### Patch Changes
+2
View File
@@ -3,6 +3,8 @@
This is a Next.js application generated with
[Create Fumadocs](https://github.com/fuma-nama/fumadocs).
> Note: Before running the development server, make sure to build the whole project first, see [CONTRIBUTING.md](../../CONTRIBUTING.md) for more details.
Run development server:
```bash
+2 -2
View File
@@ -12,9 +12,9 @@
},
"aliases": {
"components": "@/components",
"utils": "@/lib/utils",
"utils": "@/libs/utils",
"ui": "@/components/ui",
"lib": "@/lib",
"lib": "@/libs",
"hooks": "@/hooks"
}
}
+13 -12
View File
@@ -1,6 +1,6 @@
{
"name": "@llamaindex/doc",
"version": "0.2.31",
"version": "0.2.40",
"private": true,
"scripts": {
"postinstall": "fumadocs-mdx",
@@ -15,7 +15,6 @@
"dependencies": {
"@huggingface/transformers": "^3.5.0",
"@icons-pack/react-simple-icons": "^10.1.0",
"@llamaindex/workflow-docs": "0.1.1",
"@llamaindex/chat-ui-docs": "^0.0.5",
"@llamaindex/cloud": "workspace:*",
"@llamaindex/core": "workspace:*",
@@ -23,8 +22,10 @@
"@llamaindex/openai": "workspace:*",
"@llamaindex/readers": "workspace:*",
"@llamaindex/workflow": "workspace:*",
"@llamaindex/workflow-docs": "0.1.1",
"@mdx-js/mdx": "^3.1.0",
"@monaco-editor/react": "^4.7.0",
"@next/third-parties": "^15.3.4",
"@number-flow/react": "^0.3.4",
"@radix-ui/react-dialog": "^1.1.2",
"@radix-ui/react-icons": "^1.3.2",
@@ -34,7 +35,7 @@
"@radix-ui/react-tooltip": "^1.1.4",
"@scalar/api-client-react": "^1.1.25",
"@vercel/functions": "^1.5.0",
"ai": "^3.4.33",
"ai": "^4.3.17",
"class-variance-authority": "^0.7.0",
"clsx": "2.1.1",
"foxact": "^0.2.41",
@@ -49,7 +50,7 @@
"hast-util-to-jsx-runtime": "^2.3.2",
"llamaindex": "workspace:*",
"lucide-react": "^0.460.0",
"next": "^15.3.0",
"next": "^15.3.3",
"next-themes": "^0.4.3",
"react": "^19.1.0",
"react-dom": "^19.1.0",
@@ -69,30 +70,30 @@
"twoslash": "^0.3.1",
"use-stick-to-bottom": "^1.0.42",
"web-tree-sitter": "^0.24.4",
"zod": "^3.25.67"
"zod": "^3.25.76"
},
"devDependencies": {
"@next/env": "^15.3.0",
"@tailwindcss/postcss": "^4.0.9",
"@types/mdx": "^2.0.13",
"@types/node": "22.9.0",
"@types/react": "^19.0.10",
"@types/react-dom": "^19.0.4",
"@types/node": "24.0.13",
"@types/react": "^19.1.8",
"@types/react-dom": "^19.1.6",
"autoprefixer": "^10.4.20",
"cross-env": "^7.0.3",
"fast-glob": "^3.3.2",
"gray-matter": "^4.0.3",
"postcss": "^8.5.3",
"postcss": "^8.5.6",
"raw-loader": "^4.0.2",
"remark": "^15.0.1",
"remark-gfm": "^4.0.0",
"remark-mdx": "^3.1.0",
"remark-stringify": "^11.0.0",
"tailwindcss": "^4.0.9",
"tsx": "^4.19.3",
"tailwindcss": "^4.1.11",
"tsx": "^4.20.3",
"typedoc": "0.28.3",
"typedoc-plugin-markdown": "^4.6.2",
"typedoc-plugin-merge-modules": " ^7.0.0",
"typescript": "^5.7.3"
"typescript": "^5.8.3"
}
}
+1 -1
View File
@@ -10,7 +10,7 @@ import { MagicMove } from "@/components/magic-move";
import { NpmInstall } from "@/components/npm-install";
import { Supports } from "@/components/supports";
import { Button } from "@/components/ui/button";
import { DOCUMENT_URL } from "@/lib/const";
import { DOCUMENT_URL } from "@/libs/const";
import { SiStackblitz } from "@icons-pack/react-simple-icons";
import { Blocks, Bot, Footprints, Terminal } from "lucide-react";
import Link from "next/link";
+1 -1
View File
@@ -1,4 +1,4 @@
import { MockLLM } from "@llamaindex/core/utils";
import { MockLLM } from "@llamaindex/core/llms/mock";
import { LlamaIndexAdapter, type Message } from "ai";
import { Settings, SimpleChatEngine, type ChatMessage } from "llamaindex";
import { NextResponse, type NextRequest } from "next/server";
+1 -1
View File
@@ -1,4 +1,4 @@
import { source } from "@/lib/source";
import { source } from "@/libs/source";
import { structure } from "fumadocs-core/mdx-plugins";
import { createFromSource } from "fumadocs-core/search/server";
+2 -2
View File
@@ -1,6 +1,6 @@
import * as demos from "@/components/demo/lazy";
import { createMetadata, metadataImage } from "@/lib/metadata";
import { openapi, source } from "@/lib/source";
import { createMetadata, metadataImage } from "@/libs/metadata";
import { openapi, source } from "@/libs/source";
import * as Icons from "@icons-pack/react-simple-icons";
import { APIPage } from "fumadocs-openapi/ui";
import { Popup, PopupContent, PopupTrigger } from "fumadocs-twoslash/ui";
+1 -1
View File
@@ -1,5 +1,5 @@
import { baseOptions } from "@/app/layout.config";
import { source } from "@/lib/source";
import { source } from "@/libs/source";
import "fumadocs-twoslash/twoslash.css";
import { DocsLayout } from "fumadocs-ui/layouts/docs";
import type { ReactNode } from "react";
+1 -1
View File
@@ -1,4 +1,4 @@
import { DOCUMENT_URL } from "@/lib/const";
import { DOCUMENT_URL } from "@/libs/const";
import type { BaseLayoutProps } from "fumadocs-ui/layouts/shared";
import Image from "next/image";
+5
View File
@@ -1,5 +1,6 @@
import { AIProvider } from "@/actions";
import { TooltipProvider } from "@/components/ui/tooltip";
import { GoogleAnalytics } from "@next/third-parties/google";
import { RootProvider } from "fumadocs-ui/provider";
import { Inter } from "next/font/google";
import type { ReactNode } from "react";
@@ -31,6 +32,9 @@ export default function Layout({ children }: { children: ReactNode }) {
sizes="16x16"
href="/favicon-16x16.png"
/>
<title>
LlamaIndex.TS - Build LLM-powered document agents and workflows
</title>
</head>
<body className="flex min-h-screen flex-col">
<TooltipProvider>
@@ -39,6 +43,7 @@ export default function Layout({ children }: { children: ReactNode }) {
</AIProvider>
</TooltipProvider>
</body>
<GoogleAnalytics gaId="G-NB9B8LW9W5" />
</html>
);
}
+1 -1
View File
@@ -1,5 +1,5 @@
import { generateOGImage } from "@/app/og/[...slug]/og";
import { metadataImage } from "@/lib/metadata";
import { metadataImage } from "@/libs/metadata";
import { type ImageResponse } from "next/og";
import { readFileSync } from "node:fs";
+1 -1
View File
@@ -1,6 +1,6 @@
import ContributorCounter from "@/components/contributor-count";
import { buttonVariants } from "@/components/ui/button";
import { cn } from "@/lib/utils";
import { cn } from "@/libs/utils";
import { Heart } from "lucide-react";
import { ReactElement } from "react";
@@ -1,5 +1,5 @@
import { fetchContributors } from "@/lib/get-contributors";
import { cn } from "@/lib/utils";
import { fetchContributors } from "@/libs/get-contributors";
import { cn } from "@/libs/utils";
import Image from "next/image";
import type { HTMLAttributes, ReactElement } from "react";
@@ -1,5 +1,5 @@
"use client";
import { cn } from "@/lib/utils";
import { cn } from "@/libs/utils";
import { TerminalIcon } from "lucide-react";
import {
Fragment,
+1 -1
View File
@@ -1,4 +1,4 @@
import { cn } from "@/lib/utils";
import { cn } from "@/libs/utils";
import { LucideIcon } from "lucide-react";
import { HTMLAttributes, ReactElement, ReactNode } from "react";
+1 -1
View File
@@ -1,6 +1,6 @@
"use client";
import { Button } from "@/components/ui/button";
import { cn } from "@/lib/utils";
import { cn } from "@/libs/utils";
import { CodeBlock } from "fumadocs-ui/components/codeblock";
import { RotateCcw } from "lucide-react";
import { useTheme } from "next-themes";
+1 -1
View File
@@ -1,6 +1,6 @@
"use client";
import { cn } from "@/lib/utils";
import { cn } from "@/libs/utils";
import Image from "next/image";
import { ReactNode } from "react";
import { IconAI, IconUser } from "./ui/icons";
@@ -1,4 +1,4 @@
import { cn } from "@/lib/utils";
import { cn } from "@/libs/utils";
import {
AnimatePresence,
motion,
+1 -1
View File
@@ -1,7 +1,7 @@
import { cva, type VariantProps } from "class-variance-authority";
import * as React from "react";
import { cn } from "@/lib/utils";
import { cn } from "@/libs/utils";
const alertVariants = cva(
"relative w-full rounded-lg border px-4 py-3 text-sm [&>svg+div]:translate-y-[-3px] [&>svg]:absolute [&>svg]:left-4 [&>svg]:top-4 [&>svg]:text-foreground [&>svg~*]:pl-7",
+1 -1
View File
@@ -1,7 +1,7 @@
import { cva, type VariantProps } from "class-variance-authority";
import * as React from "react";
import { cn } from "@/lib/utils";
import { cn } from "@/libs/utils";
const badgeVariants = cva(
"inline-flex items-center rounded-md border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2",
+1 -1
View File
@@ -2,7 +2,7 @@ import { Slot } from "@radix-ui/react-slot";
import { cva, type VariantProps } from "class-variance-authority";
import * as React from "react";
import { cn } from "@/lib/utils";
import { cn } from "@/libs/utils";
const buttonVariants = cva(
"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0",
+1 -1
View File
@@ -4,7 +4,7 @@ import * as DialogPrimitive from "@radix-ui/react-dialog";
import { Cross2Icon } from "@radix-ui/react-icons";
import * as React from "react";
import { cn } from "@/lib/utils";
import { cn } from "@/libs/utils";
const Dialog = DialogPrimitive.Root;
+1 -1
View File
@@ -1,4 +1,4 @@
import { cn } from "@/lib/utils";
import { cn } from "@/libs/utils";
export function IconAI({ className, ...props }: React.ComponentProps<"svg">) {
return (
@@ -1,5 +1,5 @@
"use client";
import { cn } from "@/lib/utils";
import { cn } from "@/libs/utils";
import { animate, motion, useMotionValue } from "framer-motion";
import { useEffect, useState } from "react";
import useMeasure from "react-use-measure";
+1 -1
View File
@@ -1,6 +1,6 @@
import * as React from "react";
import { cn } from "@/lib/utils";
import { cn } from "@/libs/utils";
export type InputProps = React.InputHTMLAttributes<HTMLInputElement>;
+1 -1
View File
@@ -4,7 +4,7 @@ import * as LabelPrimitive from "@radix-ui/react-label";
import { cva, type VariantProps } from "class-variance-authority";
import * as React from "react";
import { cn } from "@/lib/utils";
import { cn } from "@/libs/utils";
const labelVariants = cva(
"text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70",
+1 -1
View File
@@ -1,4 +1,4 @@
import { cn } from "@/lib/utils";
import { cn } from "@/libs/utils";
function Skeleton({
className,
+1 -1
View File
@@ -3,7 +3,7 @@
import * as SliderPrimitive from "@radix-ui/react-slider";
import * as React from "react";
import { cn } from "@/lib/utils";
import { cn } from "@/libs/utils";
const Slider = React.forwardRef<
React.ElementRef<typeof SliderPrimitive.Root>,
+1 -1
View File
@@ -1,6 +1,6 @@
import * as React from "react";
import { cn } from "@/lib/utils";
import { cn } from "@/libs/utils";
export type TextareaProps = React.TextareaHTMLAttributes<HTMLTextAreaElement>;
+1 -1
View File
@@ -3,7 +3,7 @@
import * as TooltipPrimitive from "@radix-ui/react-tooltip";
import * as React from "react";
import { cn } from "@/lib/utils";
import { cn } from "@/libs/utils";
const TooltipProvider = TooltipPrimitive.Provider;
@@ -0,0 +1,182 @@
---
title: Memory
description: Manage conversation history and context with agents
---
## Concept
Memory is a core component of agentic systems. It allows you to store and retrieve information from the past.
In LlamaIndexTS, you can create memory by using the `createMemory` function. This function will return a `Memory` object, which you can then use to store and retrieve information.
As the agent runs, it will make calls to `add()` to store information, and `get()` to retrieve information.
## Usage
A `Memory` object has both short-term memory (i.e. a FIFO queue of messages) and optionally long-term memory (i.e. extracting information over time).
`get()` always returns all messages stored in the memory. The longer the agent runs, this will exceed the context window of the agent. To avoid this, the agent is using the `getLLM` method to get the last X messages that fit into the context window.
### Configuring Memory for an Agent
Here we're creating a memory with a static block (read more about [memory blocks](#long-term-memory)) that contains some information about the user.
```ts twoslash
import { openai } from "@llamaindex/openai";
import { agent } from "@llamaindex/workflow";
import { createMemory, staticBlock } from "llamaindex";
const llm = openai({ model: "gpt-4.1-mini" });
// Create memory with predefined context
const memory = createMemory({
memoryBlocks: [
staticBlock({
content:
"The user is a software engineer who loves TypeScript and LlamaIndex.",
}),
],
});
// Create an agent with the memory
const workflow = agent({
name: "assistant",
llm,
memory,
});
const result = await workflow.run("What is my name?");
console.log("Response:", result.data.result);
```
### Using Vercel format
You can also put messages in Vercel format directly to the memory:
```ts
await memory.add({
id: "1",
createdAt: new Date(),
role: "user",
content: "Hello!",
options: {
parts: [
{
type: "file",
data: "base64...",
mimeType: "image/png",
},
],
},
});
```
If you call `get`, messages are usually retrieved in the LlamaIndexTS format (type `ChatMessage`). If you specify the `type` parameter using `get`, you can return the messages in different formats. E.g.: using `type: "vercel"`, you can return the messages in Vercel format:
```ts
const messages = await memory.get({ type: "vercel" });
console.log(messages);
```
## Customizing Memory
### Short-Term Memory
The `Memory` object will store all the messages that are added to the `Memory` object. Unless you call `clear()`, no messages are removed from the memory. This is the short-term memory (usually you will store the memory of one user session there) which is augmented by the long-term memory.
Calling `getLLM` will retrieve messages from long-term memory and ensure that the given `tokenLimit` is not reached. These are the messages that you will sent to the LLM.
For initialization, you call `createMemory` with the following options:
- `tokenLimit`: Maximum tokens for memory retrieval using `getLLM` (default: 30000).
- `shortTermTokenLimitRatio`: Ratio of tokens for short-term vs long-term memory (default: 0.7)
- `customAdapters`: Custom message adapters for different message formats. LlamaIndex (`ChatMessageAdapter`) and Vercel (`VercelMessageAdapter`) are built-in adapters.
- `memoryBlocks`: Memory blocks for long-term storage, see [Long-Term Memory](#long-term-memory)
Example:
```ts
const memory = createMemory({
tokenLimit=40000,
shortTermTokenLimitRatio=0.5,
});
```
### Long-Term Memory
Long-term memory is represented as `Memory Block` objects. These objects contain information that are from previous user sessions or from the beginning of the current conversation. When memory is retrieved (by calling `getLLM`), the short-term and long-term memories are merged together within the given `tokenLimit`.
Currently, there are two predefined memory blocks:
- `staticBlock`: A memory block that stores a static piece of information.
- `factExtractionBlock`: A memory block that extracts facts from the chat history.
This sounds a bit complicated, but it's actually quite simple. Let's look at an example:
```ts
import { createMemory, factExtractionBlock, staticBlock } from "llamaindex";
const memoryBlocks= [
staticBlock({
id: "core_info",
content: "My name is Logan, and I live in Saskatoon. I work at LlamaIndex.",
}),
factExtractionBlock({
id: "user-extracted_info",
priority: 1,
llm: llm,
maxFacts: 50,
}),
];
```
Here, we've setup two memory blocks:
- `core_info`: A static memory block that stores some core information about the user. This information will always be inserted into the memory. The type used is `MessageContent` to support multi-modal content.
- `extracted_info`: An extracted memory block that will extract information from the chat history. Here we've passed in the `llm` to use to extract facts from the chat history, and set the `maxFacts` to 50. If the number of extracted facts exceeds this limit, the `maxFacts` will be automatically summarized and reduced to leave room for new information.
You'll also notice that we've set the `priority` for the `factExtractionBlock` block. This is used to determine the handling when the memory blocks content (i.e. long-term memory) + short-term memory exceeds the token limit on the `Memory` object.
- `priority=0`: This block will always be kept in memory (`staticBlocks` always have priority 0.)
- `priority=1, 2, 3, etc`: This determines the order in which memory blocks are truncated when the memory exceeds the token limit, to help the overall short-term memory + long-term memory content be less than or equal to the `tokenLimit`.
Now, let's pass these blocks into the `createMemory` function:
```ts
const memory = createMemory({
tokenLimit: 40000,
memoryBlocks: memoryBlocks,
)
```
When memory is retrieved (using `getLLM`), the short-term and long-term memories are merged together. The `Memory` object will ensure that the short-term memory + long-term memory content is less than or equal to the `tokenLimit`. If it is longer, messages are retrieved in the following order:
1. StaticMemoryBlock (information always included)
2. LongTermMemoryBlock (depending on priority)
3. ShortTermMemoryBlock
4. Transient messages
The amount of short-term memory included is specified by the `shortTermTokenLimitRatio`. If it's set to `0.7`, 70% of the `tokenLimit` is used for short-term memory (not including the static memory block).
## Persistence with Snapshots
Save and restore memory state:
```ts twoslash
import { createMemory, loadMemory } from "llamaindex";
const memory = createMemory();
// Add some messages
await memory.add({ role: "user", content: "Hello!" });
// Create snapshot
const snapshot = memory.snapshot();
// Later, restore from the snapshot
const restoredMemory = loadMemory(snapshot);
```
## Examples
Want to learn more about the Memory class? Check out our example codes in [Github](https://github.com/run-llama/LlamaIndexTS/tree/main/examples/agents/memory).
@@ -1,4 +1,11 @@
{
"title": "Data",
"pages": ["index", "readers", "data_index", "ingestion_pipeline", "stores"]
"pages": [
"index",
"memory",
"readers",
"data_index",
"ingestion_pipeline",
"stores"
]
}
@@ -11,6 +11,7 @@ A retriever in LlamaIndex is what is used to fetch `Node`s from an index using a
- [KeywordTableLLMRetriever](/docs/api/classes/KeywordTableLLMRetriever) uses an LLM to extract keywords from the query and retrieve relevant nodes based on keyword matches.
- [KeywordTableSimpleRetriever](/docs/api/classes/KeywordTableSimpleRetriever) uses a basic frequency-based approach to extract keywords and retrieve nodes.
- [KeywordTableRAKERetriever](/docs/api/classes/KeywordTableRAKERetriever) uses the RAKE (Rapid Automatic Keyword Extraction) algorithm to extract keywords from the query, focusing on co-occurrence and context for keyword-based retrieval.
- [Bm25Retriever](/docs/api/classes/Bm25Retriever) uses the BM25 algorithm to extract keywords from the query and retrieve relevant nodes based on keyword matches.
```typescript
const retriever = vectorIndex.asRetriever({
-30
View File
@@ -1,30 +0,0 @@
import { createMetadataImage } from 'fumadocs-core/server';
import { source } from '@/lib/source';
import { Metadata } from 'next';
export const metadataImage = createMetadataImage({
source,
imageRoute: 'og',
});
export function createMetadata(override: Metadata): Metadata {
return {
...override,
openGraph: {
title: override.title ?? undefined,
description: override.description ?? undefined,
url: 'https://ts.llamaindex.ai/',
images: '/og.png',
siteName: 'LlamaIndex.TS',
...override.openGraph,
},
twitter: {
card: 'summary_large_image',
creator: '@llama_index',
title: override.title ?? undefined,
description: override.description ?? undefined,
images: '/og.png',
...override.twitter,
},
};
}
-6
View File
@@ -1,6 +0,0 @@
import { clsx, type ClassValue } from "clsx"
import { twMerge } from "tailwind-merge"
export function cn(...inputs: ClassValue[]) {
return twMerge(clsx(inputs))
}
@@ -1,2 +1,2 @@
// when we are ready, change to /docs/llamaindex
export const DOCUMENT_URL = '/docs/llamaindex'
export const DOCUMENT_URL = "/docs/llamaindex";
@@ -10,7 +10,7 @@ export async function fetchContributors(
): Promise<Contributor[]> {
const headers = new Headers();
if (process.env.GITHUB_TOKEN)
headers.set('Authorization', `Bearer ${process.env.GITHUB_TOKEN}`);
headers.set("Authorization", `Bearer ${process.env.GITHUB_TOKEN}`);
const response = await fetch(
`https://api.github.com/repos/${repoOwner}/${repoName}/contributors?per_page=50`,
@@ -26,6 +26,6 @@ export async function fetchContributors(
const contributors = (await response.json()) as Contributor[];
return contributors
.filter((contributor) => !contributor.login.endsWith('[bot]'))
.filter((contributor) => !contributor.login.endsWith("[bot]"))
.sort((a, b) => b.contributions - a.contributions);
}
+30
View File
@@ -0,0 +1,30 @@
import { source } from "@/libs/source";
import { createMetadataImage } from "fumadocs-core/server";
import { Metadata } from "next";
export const metadataImage = createMetadataImage({
source,
imageRoute: "og",
});
export function createMetadata(override: Metadata): Metadata {
return {
...override,
openGraph: {
title: override.title ?? undefined,
description: override.description ?? undefined,
url: "https://ts.llamaindex.ai/",
images: "/og.png",
siteName: "LlamaIndex.TS",
...override.openGraph,
},
twitter: {
card: "summary_large_image",
creator: "@llama_index",
title: override.title ?? undefined,
description: override.description ?? undefined,
images: "/og.png",
...override.twitter,
},
};
}
@@ -1,9 +1,9 @@
import { docs } from '@/.source';
import { loader } from 'fumadocs-core/source';
import { docs } from "@/.source";
import { loader } from "fumadocs-core/source";
import { createOpenAPI } from "fumadocs-openapi/server";
export const source = loader({
baseUrl: '/docs',
baseUrl: "/docs",
source: docs.toFumadocsSource(),
});
+6
View File
@@ -0,0 +1,6 @@
import { clsx, type ClassValue } from "clsx";
import { twMerge } from "tailwind-merge";
export function cn(...inputs: ClassValue[]) {
return twMerge(clsx(inputs));
}
+1 -1
View File
@@ -11,7 +11,7 @@
},
"devDependencies": {
"@cloudflare/workers-types": "^4.20241112.0",
"typescript": "^5.7.3",
"typescript": "^5.8.3",
"wrangler": "^3.89.0"
},
"dependencies": {
@@ -1,5 +1,54 @@
# @llamaindex/cloudflare-worker-agent-test
## 0.0.180
### Patch Changes
- llamaindex@0.11.19
## 0.0.179
### Patch Changes
- llamaindex@0.11.18
## 0.0.178
### Patch Changes
- llamaindex@0.11.17
## 0.0.177
### Patch Changes
- llamaindex@0.11.16
## 0.0.176
### Patch Changes
- llamaindex@0.11.15
## 0.0.175
### Patch Changes
- llamaindex@0.11.14
## 0.0.174
### Patch Changes
- llamaindex@0.11.13
## 0.0.173
### Patch Changes
- Updated dependencies [515a8b9]
- llamaindex@0.11.12
## 0.0.172
### Patch Changes
@@ -1,6 +1,6 @@
{
"name": "@llamaindex/cloudflare-worker-agent-test",
"version": "0.0.172",
"version": "0.0.180",
"type": "module",
"private": true,
"scripts": {
@@ -16,7 +16,7 @@
"@cloudflare/workers-types": "^4.20241112.0",
"@vitest/runner": "2.1.5",
"@vitest/snapshot": "2.1.5",
"typescript": "^5.7.3",
"typescript": "^5.8.3",
"vitest": "2.1.5",
"wrangler": "^3.87.0"
},
@@ -1,5 +1,61 @@
# @llamaindex/llama-parse-browser-test
## 0.0.79
### Patch Changes
- @llamaindex/cloud@4.0.24
## 0.0.78
### Patch Changes
- Updated dependencies [a1b1598]
- @llamaindex/cloud@4.0.23
## 0.0.77
### Patch Changes
- Updated dependencies [d2be868]
- @llamaindex/cloud@4.0.22
## 0.0.76
### Patch Changes
- Updated dependencies [579ca0c]
- @llamaindex/cloud@4.0.21
## 0.0.75
### Patch Changes
- Updated dependencies [48b0d88]
- Updated dependencies [f185772]
- @llamaindex/cloud@4.0.20
## 0.0.74
### Patch Changes
- Updated dependencies [5a0ed1f]
- Updated dependencies [5a0ed1f]
- @llamaindex/cloud@4.0.19
## 0.0.73
### Patch Changes
- Updated dependencies [47a7555]
- @llamaindex/cloud@4.0.18
## 0.0.72
### Patch Changes
- @llamaindex/cloud@4.0.17
## 0.0.71
### Patch Changes
@@ -1,7 +1,7 @@
{
"name": "@llamaindex/llama-parse-browser-test",
"private": true,
"version": "0.0.71",
"version": "0.0.79",
"type": "module",
"scripts": {
"dev": "vite",
@@ -9,7 +9,7 @@
"preview": "vite preview"
},
"devDependencies": {
"typescript": "^5.7.3",
"typescript": "^5.8.3",
"vite": "^6.3.3",
"vite-plugin-wasm": "^3.4.1"
},
+49
View File
@@ -1,5 +1,54 @@
# @llamaindex/next-agent-test
## 0.1.180
### Patch Changes
- llamaindex@0.11.19
## 0.1.179
### Patch Changes
- llamaindex@0.11.18
## 0.1.178
### Patch Changes
- llamaindex@0.11.17
## 0.1.177
### Patch Changes
- llamaindex@0.11.16
## 0.1.176
### Patch Changes
- llamaindex@0.11.15
## 0.1.175
### Patch Changes
- llamaindex@0.11.14
## 0.1.174
### Patch Changes
- llamaindex@0.11.13
## 0.1.173
### Patch Changes
- Updated dependencies [515a8b9]
- llamaindex@0.11.12
## 0.1.172
### Patch Changes
+9 -9
View File
@@ -1,6 +1,6 @@
{
"name": "@llamaindex/next-agent-test",
"version": "0.1.172",
"version": "0.1.180",
"private": true,
"scripts": {
"dev": "next dev",
@@ -8,18 +8,18 @@
"start": "next start"
},
"dependencies": {
"ai": "^4.0.0",
"ai": "^4.3.17",
"llamaindex": "workspace:*",
"next": "^15.3.0",
"next": "^15.3.3",
"react": "19.0.0",
"react-dom": "19.0.0"
},
"devDependencies": {
"@types/node": "^22.9.0",
"@types/react": "^19.0.10",
"@types/react-dom": "^19.0.4",
"eslint": "9.16.0",
"eslint-config-next": "15.1.0",
"typescript": "^5.7.3"
"@types/node": "^24.0.13",
"@types/react": "^19.1.8",
"@types/react-dom": "^19.1.6",
"eslint": "9.30.1",
"eslint-config-next": "15.3.5",
"typescript": "^5.8.3"
}
}
@@ -1,5 +1,54 @@
# test-edge-runtime
## 0.1.179
### Patch Changes
- llamaindex@0.11.19
## 0.1.178
### Patch Changes
- llamaindex@0.11.18
## 0.1.177
### Patch Changes
- llamaindex@0.11.17
## 0.1.176
### Patch Changes
- llamaindex@0.11.16
## 0.1.175
### Patch Changes
- llamaindex@0.11.15
## 0.1.174
### Patch Changes
- llamaindex@0.11.14
## 0.1.173
### Patch Changes
- llamaindex@0.11.13
## 0.1.172
### Patch Changes
- Updated dependencies [515a8b9]
- llamaindex@0.11.12
## 0.1.171
### Patch Changes
@@ -1,6 +1,6 @@
{
"name": "@llamaindex/nextjs-edge-runtime-test",
"version": "0.1.171",
"version": "0.1.179",
"private": true,
"scripts": {
"dev": "next dev",
@@ -9,14 +9,14 @@
},
"dependencies": {
"llamaindex": "workspace:*",
"next": "^15.3.0",
"next": "^15.3.3",
"react": "^19.1.0",
"react-dom": "^19.1.0"
},
"devDependencies": {
"@types/node": "^22.9.0",
"@types/react": "^19.0.10",
"@types/react-dom": "^19.0.4",
"typescript": "^5.7.3"
"@types/node": "^24.0.13",
"@types/react": "^19.1.8",
"@types/react-dom": "^19.1.6",
"typescript": "^5.8.3"
}
}
@@ -1,5 +1,60 @@
# @llamaindex/next-node-runtime
## 0.1.48
### Patch Changes
- llamaindex@0.11.19
- @llamaindex/huggingface@0.1.19
- @llamaindex/readers@3.1.14
## 0.1.47
### Patch Changes
- llamaindex@0.11.18
## 0.1.46
### Patch Changes
- llamaindex@0.11.17
## 0.1.45
### Patch Changes
- llamaindex@0.11.16
## 0.1.44
### Patch Changes
- llamaindex@0.11.15
## 0.1.43
### Patch Changes
- llamaindex@0.11.14
- @llamaindex/huggingface@0.1.18
- @llamaindex/readers@3.1.13
## 0.1.42
### Patch Changes
- llamaindex@0.11.13
## 0.1.41
### Patch Changes
- Updated dependencies [515a8b9]
- llamaindex@0.11.12
- @llamaindex/huggingface@0.1.17
- @llamaindex/readers@3.1.12
## 0.1.40
### Patch Changes
@@ -1,6 +1,6 @@
{
"name": "@llamaindex/next-node-runtime-test",
"version": "0.1.40",
"version": "0.1.48",
"private": true,
"scripts": {
"dev": "next dev",
@@ -11,16 +11,16 @@
"@llamaindex/huggingface": "workspace:*",
"@llamaindex/readers": "workspace:*",
"llamaindex": "workspace:*",
"next": "^15.3.0",
"next": "^15.3.3",
"react": "19.0.0",
"react-dom": "19.0.0"
},
"devDependencies": {
"@types/node": "^22.9.0",
"@types/react": "^19.0.10",
"@types/react-dom": "^19.0.4",
"eslint": "9.16.0",
"eslint-config-next": "15.1.0",
"typescript": "^5.7.3"
"@types/node": "^24.0.13",
"@types/react": "^19.1.8",
"@types/react-dom": "^19.1.6",
"eslint": "9.30.1",
"eslint-config-next": "15.3.5",
"typescript": "^5.8.3"
}
}
@@ -1,5 +1,54 @@
# vite-import-llamaindex
## 0.0.46
### Patch Changes
- llamaindex@0.11.19
## 0.0.45
### Patch Changes
- llamaindex@0.11.18
## 0.0.44
### Patch Changes
- llamaindex@0.11.17
## 0.0.43
### Patch Changes
- llamaindex@0.11.16
## 0.0.42
### Patch Changes
- llamaindex@0.11.15
## 0.0.41
### Patch Changes
- llamaindex@0.11.14
## 0.0.40
### Patch Changes
- llamaindex@0.11.13
## 0.0.39
### Patch Changes
- Updated dependencies [515a8b9]
- llamaindex@0.11.12
## 0.0.38
### Patch Changes
@@ -1,7 +1,7 @@
{
"name": "vite-import-llamaindex",
"private": true,
"version": "0.0.38",
"version": "0.0.46",
"type": "module",
"scripts": {
"build": "vite build",
@@ -15,7 +15,7 @@
"devDependencies": {
"@size-limit/preset-big-lib": "^11.1.6",
"size-limit": "^11.1.6",
"typescript": "^5.7.3",
"typescript": "^5.8.3",
"vite": "^6.3.3"
},
"dependencies": {
@@ -1,9 +1 @@
{
"root": [
"./src/main.ts",
"./vite.config.ts",
"./tsconfig.json"
],
"errors": true,
"version": "5.7.3"
}
{"root":["./src/main.ts","./vite.config.ts"],"version":"5.7.3"}
@@ -1,5 +1,54 @@
# @llamaindex/waku-query-engine-test
## 0.0.180
### Patch Changes
- llamaindex@0.11.19
## 0.0.179
### Patch Changes
- llamaindex@0.11.18
## 0.0.178
### Patch Changes
- llamaindex@0.11.17
## 0.0.177
### Patch Changes
- llamaindex@0.11.16
## 0.0.176
### Patch Changes
- llamaindex@0.11.15
## 0.0.175
### Patch Changes
- llamaindex@0.11.14
## 0.0.174
### Patch Changes
- llamaindex@0.11.13
## 0.0.173
### Patch Changes
- Updated dependencies [515a8b9]
- llamaindex@0.11.12
## 0.0.172
### Patch Changes
+5 -5
View File
@@ -1,6 +1,6 @@
{
"name": "@llamaindex/waku-query-engine-test",
"version": "0.0.172",
"version": "0.0.180",
"type": "module",
"private": true,
"scripts": {
@@ -18,10 +18,10 @@
},
"devDependencies": {
"@tailwindcss/postcss": "^4.1.4",
"@types/react": "19.0.10",
"@types/react-dom": "19.0.4",
"@types/react": "19.1.8",
"@types/react-dom": "19.1.6",
"rollup": "4.38.0",
"tailwindcss": "^4.1.4",
"typescript": "5.7.3"
"tailwindcss": "^4.1.11",
"typescript": "5.8.3"
}
}
+1 -1
View File
@@ -10,7 +10,7 @@ import { mockLLMEvent } from "./utils.js";
let llm: LLM;
beforeEach(async () => {
Settings.llm = new Anthropic({
model: "claude-3-opus",
model: "claude-3.5-sonnet",
});
llm = Settings.llm;
});
+4 -4
View File
@@ -19,14 +19,14 @@
"@llamaindex/openai": "workspace:*",
"@llamaindex/pinecone": "workspace:*",
"@llamaindex/postgres": "workspace:*",
"@types/node": "^22.9.0",
"@types/node": "^24.0.13",
"@types/pg": "^8.11.8",
"consola": "^3.2.3",
"dotenv": "^16.4.5",
"dotenv": "^17.2.0",
"llamaindex": "workspace:*",
"pg": "^8.12.0",
"pgvector": "0.2.0",
"tsx": "^4.19.3",
"zod": "^3.25.67"
"tsx": "^4.20.3",
"zod": "^3.25.76"
}
}
+184
View File
@@ -1,5 +1,189 @@
# examples
## 0.3.30
### Patch Changes
- Updated dependencies [7ad3411]
- Updated dependencies [5da5b3c]
- Updated dependencies [a1fdb07]
- Updated dependencies [ddc0eaf]
- @llamaindex/core@0.6.15
- @llamaindex/tools@0.1.5
- @llamaindex/workflow@1.1.15
- @llamaindex/openai@0.4.9
- @llamaindex/anthropic@0.3.17
- @llamaindex/cloud@4.0.24
- llamaindex@0.11.19
- @llamaindex/node-parser@2.0.15
- @llamaindex/assemblyai@0.1.14
- @llamaindex/clip@0.0.65
- @llamaindex/cohere@0.0.29
- @llamaindex/deepinfra@0.0.65
- @llamaindex/discord@0.1.14
- @llamaindex/google@0.3.14
- @llamaindex/huggingface@0.1.19
- @llamaindex/jinaai@0.0.25
- @llamaindex/mistral@0.1.15
- @llamaindex/mixedbread@0.0.29
- @llamaindex/notion@0.1.14
- @llamaindex/ollama@0.1.15
- @llamaindex/perplexity@0.0.22
- @llamaindex/portkey-ai@0.0.57
- @llamaindex/replicate@0.0.57
- @llamaindex/bm25-retriever@0.0.4
- @llamaindex/astra@0.0.29
- @llamaindex/azure@0.1.26
- @llamaindex/chroma@0.0.29
- @llamaindex/elastic-search@0.1.15
- @llamaindex/firestore@1.0.22
- @llamaindex/milvus@0.1.24
- @llamaindex/mongodb@0.0.30
- @llamaindex/pinecone@0.1.15
- @llamaindex/postgres@0.0.58
- @llamaindex/qdrant@0.1.25
- @llamaindex/supabase@0.1.15
- @llamaindex/upstash@0.0.29
- @llamaindex/weaviate@0.0.30
- @llamaindex/vercel@0.1.15
- @llamaindex/voyage-ai@1.0.21
- @llamaindex/readers@3.1.14
- @llamaindex/deepseek@0.0.26
- @llamaindex/fireworks@0.0.25
- @llamaindex/groq@0.0.81
- @llamaindex/together@0.0.25
- @llamaindex/vllm@0.0.51
- @llamaindex/xai@0.0.12
## 0.3.29
### Patch Changes
- Updated dependencies [af3f866]
- @llamaindex/deepseek@0.0.25
## 0.3.28
### Patch Changes
- 36773a8: Fixed start script, reverted some changes to imports
- 891562d: Fix xai dependency in the examples
- Updated dependencies [5a0ed1f]
- Updated dependencies [5a0ed1f]
- Updated dependencies [8eeac33]
- @llamaindex/cloud@4.0.19
- @llamaindex/core@0.6.14
- llamaindex@0.11.14
- @llamaindex/node-parser@2.0.14
- @llamaindex/anthropic@0.3.16
- @llamaindex/assemblyai@0.1.13
- @llamaindex/clip@0.0.64
- @llamaindex/cohere@0.0.28
- @llamaindex/deepinfra@0.0.64
- @llamaindex/discord@0.1.13
- @llamaindex/google@0.3.13
- @llamaindex/huggingface@0.1.18
- @llamaindex/jinaai@0.0.24
- @llamaindex/mistral@0.1.14
- @llamaindex/mixedbread@0.0.28
- @llamaindex/notion@0.1.13
- @llamaindex/ollama@0.1.14
- @llamaindex/openai@0.4.8
- @llamaindex/perplexity@0.0.21
- @llamaindex/portkey-ai@0.0.56
- @llamaindex/replicate@0.0.56
- @llamaindex/bm25-retriever@0.0.3
- @llamaindex/astra@0.0.28
- @llamaindex/azure@0.1.25
- @llamaindex/chroma@0.0.28
- @llamaindex/elastic-search@0.1.14
- @llamaindex/firestore@1.0.21
- @llamaindex/milvus@0.1.23
- @llamaindex/mongodb@0.0.29
- @llamaindex/pinecone@0.1.14
- @llamaindex/postgres@0.0.57
- @llamaindex/qdrant@0.1.24
- @llamaindex/supabase@0.1.14
- @llamaindex/upstash@0.0.28
- @llamaindex/weaviate@0.0.29
- @llamaindex/vercel@0.1.14
- @llamaindex/voyage-ai@1.0.20
- @llamaindex/readers@3.1.13
- @llamaindex/tools@0.1.4
- @llamaindex/workflow@1.1.14
- @llamaindex/deepseek@0.0.24
- @llamaindex/fireworks@0.0.24
- @llamaindex/groq@0.0.80
- @llamaindex/together@0.0.24
- @llamaindex/vllm@0.0.50
- @llamaindex/xai@0.0.11
## 0.3.27
### Patch Changes
- Updated dependencies [229cdeb]
- Updated dependencies [47a7555]
- @llamaindex/groq@0.0.79
- @llamaindex/cloud@4.0.18
- llamaindex@0.11.13
## 0.3.26
### Patch Changes
- Updated dependencies [d578889]
- Updated dependencies [0fcc92f]
- Updated dependencies [515a8b9]
- Updated dependencies [3cd8a57]
- Updated dependencies [f2dfd30]
- @llamaindex/core@0.6.13
- llamaindex@0.11.12
- @llamaindex/tools@0.1.3
- @llamaindex/bm25-retriever@0.0.2
- @llamaindex/cloud@4.0.17
- @llamaindex/node-parser@2.0.13
- @llamaindex/anthropic@0.3.15
- @llamaindex/assemblyai@0.1.12
- @llamaindex/clip@0.0.63
- @llamaindex/cohere@0.0.27
- @llamaindex/deepinfra@0.0.63
- @llamaindex/discord@0.1.12
- @llamaindex/google@0.3.12
- @llamaindex/huggingface@0.1.17
- @llamaindex/jinaai@0.0.23
- @llamaindex/mistral@0.1.13
- @llamaindex/mixedbread@0.0.27
- @llamaindex/notion@0.1.12
- @llamaindex/ollama@0.1.13
- @llamaindex/openai@0.4.7
- @llamaindex/perplexity@0.0.20
- @llamaindex/portkey-ai@0.0.55
- @llamaindex/replicate@0.0.55
- @llamaindex/astra@0.0.27
- @llamaindex/azure@0.1.24
- @llamaindex/chroma@0.0.27
- @llamaindex/elastic-search@0.1.13
- @llamaindex/firestore@1.0.20
- @llamaindex/milvus@0.1.22
- @llamaindex/mongodb@0.0.28
- @llamaindex/pinecone@0.1.13
- @llamaindex/postgres@0.0.56
- @llamaindex/qdrant@0.1.23
- @llamaindex/supabase@0.1.13
- @llamaindex/upstash@0.0.27
- @llamaindex/weaviate@0.0.28
- @llamaindex/vercel@0.1.13
- @llamaindex/voyage-ai@1.0.19
- @llamaindex/readers@3.1.12
- @llamaindex/workflow@1.1.13
- @llamaindex/deepseek@0.0.23
- @llamaindex/fireworks@0.0.23
- @llamaindex/groq@0.0.78
- @llamaindex/together@0.0.23
- @llamaindex/vllm@0.0.49
- @llamaindex/xai@0.0.10
## 0.3.25
### Patch Changes
+31 -7
View File
@@ -1,9 +1,10 @@
# LlamaIndexTS Examples
Before running any of the code examples,
make sure you have basic knowledge of the [LlamaIndexTS](https://ts.llamaindex.ai/).
This package contains several examples of how to use LlamaIndexTS.
## Usage
Most examples will use OpenAI by default, so be sure to set your API key.
## Running Examples
```shell
# export your API key
@@ -12,8 +13,31 @@ export OPENAI_API_KEY="sk-..."
npx tsx ./rag/chatEngine.ts
```
## Build your own RAG app
## Recommended Starter Examples
```shell
npx create llama
```
Agents:
- [Basic OpenAI Agent with Tools](./agents/agent/openai.ts)
- [Agent with MCP Tools](./agents/agent/mcp-tools.ts)
- [Customizing Memory](./agents/memory/agent-memory.ts)
Workflows:
- [Workflow basics](./agents/workflow/joke.ts)
- [Find more workflow examples in the `workflows-ts` repo!](https://github.com/run-llama/workflows-ts)
Indexing, Retrieval, and Querying:
- [Basic Vector Indexing + Query Engine](./index/vectorIndex.ts)
- [Agent + Query Engine Tool](./agents/agent/query-tool.ts)
Multimodal:
- [Multimodal RAG](./multimodal/rag.ts)
- [Multimodal Chat](./multimodal/context.ts)
Some more general folders that might be useful to explore:
- [storage](./storage/): Examples with various vector stores
- [readers](./readers/): Examples of how to use the various readers
- [models](./models/): Examples of how to use the various LLMs and embedding models from many providers
+1 -1
View File
@@ -3,7 +3,7 @@
*/
import { openai } from "@llamaindex/openai";
import { agent } from "@llamaindex/workflow";
import { getWeatherTool } from "../../deprecated/agents/utils/tools";
import { getWeatherTool } from "../tools/tools";
async function main() {
const weatherAgent = agent({
+1 -1
View File
@@ -1,6 +1,6 @@
import { ollama } from "@llamaindex/ollama";
import { agent } from "@llamaindex/workflow";
import { getWeatherTool } from "../../deprecated/agents/utils/tools";
import { getWeatherTool } from "../tools/tools";
async function main() {
const myAgent = agent({
+36
View File
@@ -0,0 +1,36 @@
import { openai } from "@llamaindex/openai";
import { agent } from "@llamaindex/workflow";
import { createMemory, staticBlock } from "llamaindex";
// Simple example: Agent with Predefined Memory
async function simpleAgentMemoryExample() {
console.log("=== Simple Agent Memory Example ===");
const memory = createMemory({
memoryBlocks: [
staticBlock({
content:
"The user is a software engineer who loves TypeScript and LlamaIndex.",
}),
],
});
// Create agent workflow
const workflow = agent({
name: "assistant",
llm: openai({ model: "gpt-4.1-nano" }),
memory,
});
// Test - agent should remember John and the shopping cart context
console.log("\n--- Testing Memory Context ---");
const result = await workflow.run("Hi, my name is John. Do you know me?");
console.log("Assistant Response:", result.data.result);
const result2 = await workflow.run("What is my name?");
console.log("Assistant Response:", result2.data.result);
}
// Run the example
simpleAgentMemoryExample().catch(console.error);
+58
View File
@@ -0,0 +1,58 @@
import { openai } from "@llamaindex/openai";
import { createMemory } from "llamaindex";
// Example: Basic Memory Usage with Factory
async function basicMemoryExample() {
console.log("\n=== Example: Basic Memory Usage with Factory ===");
const memory = createMemory({ tokenLimit: 30 });
// Add messages to memory
await memory.add({
role: "user",
content: "Hi, my name is John and I'm a software engineer.",
});
await memory.add({
role: "assistant",
content: "Hello John! Nice to meet you. How can I help you today?",
});
await memory.add({
role: "user",
content: "I love working with TypeScript and React.",
});
// Not all messages are included because of token limit is set to 30
const llmMessages = await memory.getLLM();
console.log(
`\nLLM messages (${llmMessages.length} messages) limited by a small token limit:`,
);
llmMessages.forEach((msg, idx) => {
console.log(`${idx + 1}. ${msg.role}: ${msg.content}`);
});
// But the token limit above will be the window size of an LLM instance if you use getLLM with LLM
const llm = openai({ model: "gpt-4.1-mini" });
const llmMessagesWithLLM = await memory.getLLM(llm);
// Now all the messages are included because of the LLM window size of the model is much larger
console.log(
`\nLLM messages with LLM (${llmMessagesWithLLM.length} messages) limited by LLM window size:`,
);
llmMessagesWithLLM.forEach((msg, idx) => {
console.log(`${idx + 1}. ${msg.role}: ${msg.content}`);
});
}
// Main function
async function main() {
console.log("🧠 Basic Memory Factory Examples");
console.log("===============================");
try {
await basicMemoryExample();
} catch (error) {
console.error("Error running basic memory examples:", error);
}
}
main().catch(console.error);
+101
View File
@@ -0,0 +1,101 @@
import { openai } from "@llamaindex/openai";
import { createMemory, factExtractionBlock } from "llamaindex";
// Configure OpenAI
const llm = openai({ model: "gpt-4.1-mini" });
// Example: Memory with Fact Extraction
async function factExtractionMemoryExample() {
console.log("\n=== Memory with Fact Extraction ===");
// Create memory with a fact extraction
const memory = createMemory([], {
tokenLimit: 100,
shortTermTokenLimitRatio: 0.7, // 70% for short-term, 30% for long-term
memoryBlocks: [
factExtractionBlock({
id: "user-facts",
priority: 5,
llm: llm,
maxFacts: 10,
isLongTerm: true,
}),
],
});
// Simulate a conversation with facts
const conversationTurns = [
{
role: "user",
content: "Hi, I'm Sarah and I work as a data scientist at Google.",
},
{
role: "assistant",
content:
"Hello Sarah! It's great to meet you. Data science at Google must be exciting!",
},
{
role: "user",
content:
"Yes, I specialize in machine learning and natural language processing.",
},
{
role: "assistant",
content: "That's impressive! ML and NLP are fascinating fields.",
},
{
role: "user",
content:
"I have a PhD in Computer Science from Stanford, and I love hiking on weekends.",
},
{
role: "assistant",
content:
"Wow, Stanford PhD! And hiking is a great way to unwind from tech work.",
},
{
role: "user",
content: "I also have two cats named Whiskers and Mittens.",
},
{
role: "assistant",
content:
"Cats make wonderful companions! Whiskers and Mittens are cute names.",
},
];
// Add conversation turns to memory
console.log("Adding conversation to memory...");
for (const turn of conversationTurns) {
await memory.add(turn);
}
// Get messages - facts should be extracted and included
const messages = await memory.getLLM(llm);
console.log("\nMessages with extracted facts:");
messages.forEach((msg, idx) => {
console.log(`${idx + 1}. ${msg.role ?? "unknown"}: ${msg.content}`);
});
//Messages with extracted facts:
// 1. assistant: Cats make wonderful companions! Whiskers and Mittens are cute names.
// 2. user: I also have two cats named Whiskers and Mittens.
// 3. assistant: Wow, Stanford PhD! And hiking is a great way to unwind from tech work.
// 4. memory: Sarah works as a data scientist at Google
// Sarah specializes in machine learning and natural language processing
// Sarah has a PhD in Computer Science from Stanford
// Sarah enjoys hiking on weekends
}
// Main function
async function main() {
console.log("🧠 Fact Extraction Memory Example");
console.log("=================================");
try {
await factExtractionMemoryExample();
} catch (error) {
console.error("Error running fact extraction memory example:", error);
}
}
main().catch(console.error);
+62
View File
@@ -0,0 +1,62 @@
import { openai } from "@llamaindex/openai";
import { createMemory, staticBlock } from "llamaindex";
// Configure OpenAI
const llm = openai({ model: "gpt-4.1-mini" });
// Example: Memory with Static Blocks
async function staticMemoryBlockExample() {
console.log("\n=== Memory with Static Blocks ===");
console.log("- Memory always include static block");
console.log("- Memory cut off the messages within token limit\n");
// Create memory with a static block
const memory = createMemory([], {
tokenLimit: 30, // A small token limit which is not enough for the whole conversation below
memoryBlocks: [
staticBlock({
content:
"The user's name is John and he is a software engineer who loves TypeScript and LlamaIndex.",
}),
],
});
// Add some messages to the memory
await memory.add({
role: "user",
content: "What do you know about me?",
});
await memory.add({
role: "assistant",
content:
"Based on our conversation, I know you're John, a software engineer who enjoys working with TypeScript and LlamaIndex!",
});
await memory.add({
role: "user",
content: "Which language does LlamaIndex support?",
});
// Get messages
// static block will always be included
// only the last message will be included because of token limit set above
const messages = await memory.getLLM(llm);
messages.forEach((msg, idx) => {
console.log(`${idx + 1}. ${msg.role}: ${msg.content}`);
});
// Messages with static block:
// 1. user: The user's name is John and he is a software engineer who loves TypeScript and LlamaIndex.
// 2. user: Which language does LlamaIndex support?
}
// Main function
async function main() {
try {
await staticMemoryBlockExample();
} catch (error) {
console.error("Error running static memory blocks example:", error);
}
}
main().catch(console.error);
@@ -1,7 +1,7 @@
import { OpenAI } from "@llamaindex/openai";
import { openai } from "@llamaindex/openai";
async function main() {
const llm = new OpenAI({ model: "gpt-4-turbo" });
const llm = openai({ model: "gpt-4.1-mini" });
const args: Parameters<typeof llm.chat>[0] = {
additionalChatOptions: {
tool_choice: "auto",
+46
View File
@@ -0,0 +1,46 @@
import { openai } from "@llamaindex/openai";
import { tool } from "llamaindex";
import z from "zod";
import { ChatMessage } from "llamaindex";
async function main() {
const llm = openai({ model: "gpt-4.1-mini" });
const messages = [
{
content: `What's the weather like in San Francisco?`,
role: "user",
} as ChatMessage,
];
let exit = false;
do {
const { stream, newMessages, toolCalls } = await llm.exec({
messages,
tools: [
tool({
name: "get_weather",
description: "Get the current weather for a location",
parameters: z.object({
address: z.string().describe("The address"),
}),
execute: ({ address }) => {
return `It's sunny in ${address}!`;
},
}),
],
stream: true,
});
for await (const chunk of stream) {
process.stdout.write(chunk.delta);
}
messages.push(...newMessages());
// exit condition to stop the agent loop
// here we can also check for specific tool calls or limit the number of llm.exec calls
exit = toolCalls.length === 0;
} while (!exit);
}
(async function () {
await main();
})();
+43
View File
@@ -0,0 +1,43 @@
import { openai } from "@llamaindex/openai";
import { ChatMessage, tool } from "llamaindex";
import z from "zod";
async function main() {
const llm = openai({ model: "gpt-4.1-mini" });
const messages = [
{
content: `What's the weather like in San Francisco?`,
role: "user",
} as ChatMessage,
];
let exit = false;
do {
const { newMessages, toolCalls } = await llm.exec({
messages,
tools: [
tool({
name: "get_weather",
description: "Get the current weather for a location",
parameters: z.object({
address: z.string().describe("The address"),
}),
execute: ({ address }) => {
return `It's sunny in ${address}!`;
},
}),
],
});
console.log(newMessages);
messages.push(...newMessages);
// exit condition to stop the agent loop
// here we can also check for specific tool calls or limit the number of llm.exec calls
exit = toolCalls.length === 0;
} while (!exit);
}
(async function () {
console.log("Starting...");
await main();
console.log("Done");
})();
+1 -1
View File
@@ -4,7 +4,7 @@ import {
getCurrentIDTool,
getUserInfoTool,
getWeatherTool,
} from "./utils/tools";
} from "../../agents/tools/tools";
async function main() {
// Create an OpenAIAgent with the function tools
+1 -1
View File
@@ -3,7 +3,7 @@ import {
getCurrentIDTool,
getUserInfoTool,
getWeatherTool,
} from "./utils/tools";
} from "../../agents/tools/tools";
async function main() {
// Create an OpenAIAgent with the function tools
+1 -1
View File
@@ -59,7 +59,7 @@ async function main() {
const anthropic = new Anthropic({
apiKey: process.env.ANTHROPIC_API_KEY,
model: "claude-3-opus",
model: "claude-3.5-sonnet",
});
// Create an ReActAgent with the function tools
@@ -61,7 +61,7 @@ async function main() {
// Create an OpenAIAgent with the function tools
const agent = new ReActAgent({
llm: new Anthropic({
model: "claude-3-opus",
model: "claude-3.5-sonnet",
}),
tools: [functionTool, functionTool2],
});
@@ -1,5 +1,5 @@
import { Anthropic } from "@llamaindex/anthropic";
import { ChatMemoryBuffer, SimpleChatEngine } from "llamaindex";
import { createMemory, SimpleChatEngine } from "llamaindex";
import { stdin as input, stdout as output } from "node:process";
import readline from "node:readline/promises";
@@ -9,14 +9,12 @@ import readline from "node:readline/promises";
model: "claude-3-7-sonnet",
});
// chatHistory will store all the messages in the conversation
const chatHistory = new ChatMemoryBuffer({
chatHistory: [
{
content: "You want to talk in rhymes.",
role: "system",
},
],
});
const chatHistory = createMemory([
{
content: "You want to talk in rhymes.",
role: "system",
},
]);
const chatEngine = new SimpleChatEngine({
llm,
memory: chatHistory,
@@ -15,15 +15,15 @@
},
"devDependencies": {
"@eslint/js": "^9.25.0",
"@types/react": "^19.1.2",
"@types/react-dom": "^19.1.2",
"@types/react": "^19.1.8",
"@types/react-dom": "^19.1.6",
"@vitejs/plugin-react": "^4.5.2",
"eslint": "^9.25.0",
"eslint": "^9.30.1",
"eslint-plugin-react-hooks": "^5.2.0",
"eslint-plugin-react-refresh": "^0.4.19",
"globals": "^16.0.0",
"typescript": "~5.8.3",
"typescript-eslint": "^8.30.1",
"typescript-eslint": "^8.36.0",
"vite": "^6.3.5"
}
}
@@ -30,6 +30,12 @@ async function main() {
);
// and print out the text part
console.log(textPart?.text);
const imageId = response.message.options?.image_id;
if (imageId) {
console.log("Image ID for multi-turn generation:", imageId);
console.log("Use this image_id in subsequent requests to modify the image");
}
}
main().catch(console.error);
@@ -0,0 +1,89 @@
import { openaiResponses } from "@llamaindex/openai";
import fs from "fs";
import { MessageContentDetail } from "llamaindex";
async function main() {
const llm = openaiResponses({
model: "gpt-4.1-mini",
builtInTools: [{ type: "image_generation" }],
});
// First turn: Generate initial image
console.log("=== First Turn: Generate initial image ===");
const firstResponse = await llm.chat({
messages: [
{
role: "user",
content:
"Generate an image of a cute tiny llama wearing a hat playing with a cat on a meadow",
},
],
});
const firstContent = firstResponse.message.content as MessageContentDetail[];
const firstImagePart = firstContent.find((part) => part.type === "image");
const firstTextPart = firstContent.find((part) => part.type === "text");
// Save the first image
if (firstImagePart?.data) {
fs.writeFileSync(
"llama-initial.png",
Buffer.from(firstImagePart.data as string, "base64"),
);
console.log("First image saved as 'llama-initial.png'");
}
if (firstTextPart?.text) {
console.log("First response:", firstTextPart.text);
}
// Get the image_id from the response options for multi-turn
const imageId = firstResponse.message.options?.image_id;
console.log("Image ID for multi-turn:", imageId);
if (imageId) {
// Second turn: Modify the image using the image_id
console.log("\n=== Second Turn: Modify the image ===");
const secondResponse = await llm.chat({
messages: [
{
role: "user",
content:
"Generate an image of a cute tiny llama wearing a hat playing with a cat on a meadow",
},
{
role: "assistant",
content: firstContent,
options: { image_id: imageId },
},
{
role: "user",
content:
"Now add a rainbow in the background and make the llama's hat blue",
},
],
});
const secondContent = secondResponse.message
.content as MessageContentDetail[];
const secondImagePart = secondContent.find((part) => part.type === "image");
const secondTextPart = secondContent.find((part) => part.type === "text");
// Save the modified image
if (secondImagePart?.data) {
fs.writeFileSync(
"llama-modified.png",
Buffer.from(secondImagePart.data as string, "base64"),
);
console.log("Modified image saved as 'llama-modified.png'");
}
if (secondTextPart?.text) {
console.log("Second response:", secondTextPart.text);
}
} else {
console.log("No image_id received, cannot perform multi-turn generation");
}
}
main().catch(console.error);
+55 -54
View File
@@ -1,79 +1,80 @@
{
"name": "@llamaindex/examples",
"version": "0.3.25",
"version": "0.3.30",
"private": true,
"scripts": {
"lint": "eslint .",
"start": "tsx ./starter.ts"
"start": "echo 'To get started, run `npx tsx <path to example>`'"
},
"dependencies": {
"@ai-sdk/openai": "^1.0.5",
"@azure/cosmos": "^4.1.1",
"@azure/identity": "^4.4.1",
"@azure/search-documents": "^12.1.0",
"@llamaindex/anthropic": "^0.3.14",
"@llamaindex/assemblyai": "^0.1.11",
"@llamaindex/astra": "^0.0.26",
"@llamaindex/azure": "^0.1.23",
"@llamaindex/chroma": "^0.0.26",
"@llamaindex/clip": "^0.0.62",
"@llamaindex/cloud": "^4.0.16",
"@llamaindex/cohere": "^0.0.26",
"@llamaindex/core": "^0.6.12",
"@llamaindex/deepinfra": "^0.0.62",
"@llamaindex/deepseek": "^0.0.22",
"@llamaindex/discord": "^0.1.11",
"@llamaindex/elastic-search": "^0.1.12",
"@llamaindex/anthropic": "^0.3.17",
"@llamaindex/assemblyai": "^0.1.14",
"@llamaindex/astra": "^0.0.29",
"@llamaindex/azure": "^0.1.26",
"@llamaindex/bm25-retriever": "^0.0.4",
"@llamaindex/chroma": "^0.0.29",
"@llamaindex/clip": "^0.0.65",
"@llamaindex/cloud": "^4.0.24",
"@llamaindex/cohere": "^0.0.29",
"@llamaindex/core": "^0.6.15",
"@llamaindex/deepinfra": "^0.0.65",
"@llamaindex/deepseek": "^0.0.26",
"@llamaindex/discord": "^0.1.14",
"@llamaindex/elastic-search": "^0.1.15",
"@llamaindex/env": "^0.1.30",
"@llamaindex/firestore": "^1.0.19",
"@llamaindex/fireworks": "^0.0.22",
"@llamaindex/google": "^0.3.11",
"@llamaindex/groq": "^0.0.77",
"@llamaindex/huggingface": "^0.1.16",
"@llamaindex/jinaai": "^0.0.22",
"@llamaindex/milvus": "^0.1.21",
"@llamaindex/mistral": "^0.1.12",
"@llamaindex/mixedbread": "^0.0.26",
"@llamaindex/mongodb": "^0.0.27",
"@llamaindex/node-parser": "^2.0.12",
"@llamaindex/notion": "^0.1.11",
"@llamaindex/ollama": "^0.1.12",
"@llamaindex/openai": "^0.4.6",
"@llamaindex/perplexity": "^0.0.19",
"@llamaindex/pinecone": "^0.1.12",
"@llamaindex/portkey-ai": "^0.0.54",
"@llamaindex/postgres": "^0.0.55",
"@llamaindex/qdrant": "^0.1.22",
"@llamaindex/readers": "^3.1.11",
"@llamaindex/replicate": "^0.0.54",
"@llamaindex/supabase": "^0.1.12",
"@llamaindex/together": "^0.0.22",
"@llamaindex/tools": "^0.1.1",
"@llamaindex/upstash": "^0.0.26",
"@llamaindex/vercel": "^0.1.12",
"@llamaindex/vllm": "^0.0.48",
"@llamaindex/voyage-ai": "^1.0.18",
"@llamaindex/weaviate": "^0.0.27",
"@llamaindex/workflow": "^1.1.12",
"@llamaindex/xai": "workspace:^0.0.9",
"@notionhq/client": "^2.2.15",
"@llamaindex/firestore": "^1.0.22",
"@llamaindex/fireworks": "^0.0.25",
"@llamaindex/google": "^0.3.14",
"@llamaindex/groq": "^0.0.81",
"@llamaindex/huggingface": "^0.1.19",
"@llamaindex/jinaai": "^0.0.25",
"@llamaindex/milvus": "^0.1.24",
"@llamaindex/mistral": "^0.1.15",
"@llamaindex/mixedbread": "^0.0.29",
"@llamaindex/mongodb": "^0.0.30",
"@llamaindex/node-parser": "^2.0.15",
"@llamaindex/notion": "^0.1.14",
"@llamaindex/ollama": "^0.1.15",
"@llamaindex/openai": "^0.4.9",
"@llamaindex/perplexity": "^0.0.22",
"@llamaindex/pinecone": "^0.1.15",
"@llamaindex/portkey-ai": "^0.0.57",
"@llamaindex/postgres": "^0.0.58",
"@llamaindex/qdrant": "^0.1.25",
"@llamaindex/readers": "^3.1.14",
"@llamaindex/replicate": "^0.0.57",
"@llamaindex/supabase": "^0.1.15",
"@llamaindex/together": "^0.0.25",
"@llamaindex/tools": "^0.1.5",
"@llamaindex/upstash": "^0.0.29",
"@llamaindex/vercel": "^0.1.15",
"@llamaindex/vllm": "^0.0.51",
"@llamaindex/voyage-ai": "^1.0.21",
"@llamaindex/weaviate": "^0.0.30",
"@llamaindex/workflow": "^1.1.15",
"@llamaindex/xai": "^0.0.12",
"@notionhq/client": "^4.0.0",
"@pinecone-database/pinecone": "^4.0.0",
"@vercel/postgres": "^0.10.0",
"ai": "^4.0.0",
"ai": "^4.3.17",
"ajv": "^8.17.1",
"commander": "^12.1.0",
"dotenv": "^16.4.5",
"dotenv": "^17.2.0",
"js-tiktoken": "^1.0.14",
"llamaindex": "^0.11.11",
"llamaindex": "^0.11.19",
"mongodb": "6.7.0",
"postgres": "^3.4.4",
"wikipedia": "^2.1.2",
"zod": "^3.25.67"
"zod": "^3.25.76"
},
"devDependencies": {
"@types/node": "^22.9.0",
"tsx": "^4.19.3",
"typescript": "^5.7.3"
"@types/node": "^24.0.13",
"tsx": "^4.20.3",
"typescript": "^5.8.3"
},
"stackblitz": {
"startCommand": "npm start"
+2
View File
@@ -0,0 +1,2 @@
packages:
- "**"
+8 -13
View File
@@ -2,11 +2,7 @@ import { stdin as input, stdout as output } from "node:process";
import readline from "node:readline/promises";
import { OpenAI } from "@llamaindex/openai";
import {
ChatSummaryMemoryBuffer,
Settings,
SimpleChatEngine,
} from "llamaindex";
import { createMemory, Settings, SimpleChatEngine } from "llamaindex";
if (process.env.NODE_ENV === "development") {
Settings.callbackManager.on("llm-end", (event) => {
@@ -15,10 +11,13 @@ if (process.env.NODE_ENV === "development") {
}
async function main() {
// Set maxTokens to 75% of the context window size of 4096
// This will trigger the summarizer once the chat history reaches 25% of the context window size (1024 tokens)
const llm = new OpenAI({ model: "gpt-3.5-turbo", maxTokens: 4096 * 0.75 });
const chatHistory = new ChatSummaryMemoryBuffer({ llm });
const llm = new OpenAI({ model: "gpt-3.5-turbo" });
const chatHistory = createMemory([
{
content: "You are a helpful assistant.",
role: "system",
},
]);
const chatEngine = new SimpleChatEngine({ llm });
const rl = readline.createInterface({ input, output });
@@ -29,10 +28,6 @@ async function main() {
chatHistory,
stream: true,
});
if (chatHistory.getLastSummary()) {
// Print the summary of the conversation so far that is produced by the SummaryChatHistory
console.log(`Summary: ${chatHistory.getLastSummary()?.content}`);
}
for await (const chunk of stream) {
process.stdout.write(chunk.response);
}
+5 -4
View File
@@ -21,13 +21,14 @@
},
"dependencies": {
"@llamaindex/cloud": "workspace:* || ^2.0.24",
"@llamaindex/readers": "workspace:* || ^1.0.25",
"@llamaindex/excel": "workspace:*",
"@llamaindex/readers": "workspace:* || ^1.0.25",
"@notionhq/client": "^4.0.0",
"llamaindex": "workspace:* || ^0.8.37"
},
"devDependencies": {
"@types/node": "^22.9.0",
"tsx": "^4.19.3",
"typescript": "^5.7.3"
"@types/node": "^24.0.13",
"tsx": "^4.20.3",
"typescript": "^5.8.3"
}
}
+1 -1
View File
@@ -1,4 +1,4 @@
import { LlamaParseReader } from "@llamaindex/cloud";
import { LlamaParseReader } from "@llamaindex/cloud/reader";
import { openai, OpenAIEmbedding } from "@llamaindex/openai";
import { Settings, VectorStoreIndex } from "llamaindex";
@@ -1,4 +1,4 @@
import { LlamaParseReader } from "@llamaindex/cloud";
import { LlamaParseReader } from "@llamaindex/cloud/reader";
import { SimpleDirectoryReader } from "@llamaindex/readers/directory";
import { VectorStoreIndex } from "llamaindex";
+14
View File
@@ -0,0 +1,14 @@
# BM25 Retriever
In this guide, we introduce a bm25 retriever that search documents using the bm25 method. BM25 (Best Matching 25) is a ranking function that extends TF-IDF by considering term frequency saturation and document length. BM25 effectively ranks documents based on query term occurrence and rarity across the corpus.
## Setup
1. `cd` Into the `examples` directory
2. run `npm i`
## Example
```bash
`npx tsx ./retrievers/bm25/example.ts`
```
+33
View File
@@ -0,0 +1,33 @@
import { Bm25Retriever } from "@llamaindex/bm25-retriever";
import { OpenAIEmbedding } from "@llamaindex/openai";
import { PDFReader } from "@llamaindex/readers/pdf";
import { MetadataMode, Settings, VectorStoreIndex } from "llamaindex";
Settings.embedModel = new OpenAIEmbedding();
async function main() {
// Load PDF
const reader = new PDFReader();
const documents = await reader.loadData("./data/brk-2022.pdf");
// Split text and create embeddings. Store them in a VectorStoreIndex
const index = await VectorStoreIndex.fromDocuments(documents);
const retriever = new Bm25Retriever({
docStore: index.docStore,
topK: 3,
});
// Query the data
const response = await retriever.retrieve({
query: "What mistakes did Warren E. Buffett make?",
});
// Output response
response.forEach((r) => {
console.log(`Score: ${r.score}`);
console.log(`Text: ${r.node.getContent(MetadataMode.NONE)}`);
});
}
main().catch(console.error);
+16 -10
View File
@@ -4,7 +4,7 @@
"scripts": {
"clean": "find . -type d \\( -name .turbo -o -name node_modules -o -name dist -o -name .next -o -name lib \\) -exec rm -rf {} +",
"build": "turbo run build --filter=\"./packages/*\" --filter=\"./packages/providers/**\"",
"dev": "turbo run dev --filter=\"./packages/*\" --filter=\"./packages/providers/**\"",
"dev": "turbo run dev --filter=\"./packages/*\" --filter=\"./packages/providers/**\" --concurrency=100",
"format": "prettier --ignore-unknown --cache --check .",
"format:write": "prettier --ignore-unknown --write .",
"lint": "turbo run lint",
@@ -17,18 +17,19 @@
"release-snapshot": "pnpm run build && changeset publish --tag snapshot",
"new-version": "changeset version && pnpm format:write && pnpm run build",
"new-snapshot": "pnpm run build && changeset version --snapshot",
"lint-staged": "lint-staged"
"lint-staged": "lint-staged",
"preinstall": "npx only-allow pnpm"
},
"devDependencies": {
"@changesets/cli": "^2.27.5",
"@eslint/js": "^9.25.0",
"bunchee": "6.4.0",
"eslint": "9.22.0",
"eslint-config-next": "^15.1.0",
"eslint-config-prettier": "^9.1.0",
"eslint-config-turbo": "^2.3.3",
"eslint-plugin-react": "7.37.2",
"eslint-plugin-turbo": "^2.5.0",
"eslint": "9.30.1",
"eslint-config-next": "^15.3.5",
"eslint-config-prettier": "^10.1.5",
"eslint-config-turbo": "^2.5.4",
"eslint-plugin-react": "7.37.5",
"eslint-plugin-turbo": "^2.5.4",
"globals": "^15.12.0",
"husky": "^9.1.7",
"lint-staged": "^15.2.11",
@@ -37,11 +38,16 @@
"prettier-plugin-organize-imports": "^4.1.0",
"prettier-plugin-tailwindcss": "^0.6.11",
"turbo": "^2.4.4",
"typescript": "^5.7.3",
"typescript-eslint": "^8.18.0",
"typescript": "^5.8.3",
"typescript-eslint": "^8.36.0",
"vitest": "^3.1.1"
},
"packageManager": "pnpm@10.8.1",
"pnpm": {
"overrides": {
"@notionhq/client": "4.0.0"
}
},
"lint-staged": {
"*.{js,jsx,ts,tsx}": [
"eslint --fix",
+49
View File
@@ -1,5 +1,54 @@
# @llamaindex/autotool
## 8.0.19
### Patch Changes
- llamaindex@0.11.19
## 8.0.18
### Patch Changes
- llamaindex@0.11.18
## 8.0.17
### Patch Changes
- llamaindex@0.11.17
## 8.0.16
### Patch Changes
- llamaindex@0.11.16
## 8.0.15
### Patch Changes
- llamaindex@0.11.15
## 8.0.14
### Patch Changes
- llamaindex@0.11.14
## 8.0.13
### Patch Changes
- llamaindex@0.11.13
## 8.0.12
### Patch Changes
- Updated dependencies [515a8b9]
- llamaindex@0.11.12
## 8.0.11
### Patch Changes
@@ -1,5 +1,62 @@
# @llamaindex/autotool-01-node-example
## 0.0.127
### Patch Changes
- llamaindex@0.11.19
- @llamaindex/autotool@8.0.19
## 0.0.126
### Patch Changes
- llamaindex@0.11.18
- @llamaindex/autotool@8.0.18
## 0.0.125
### Patch Changes
- llamaindex@0.11.17
- @llamaindex/autotool@8.0.17
## 0.0.124
### Patch Changes
- llamaindex@0.11.16
- @llamaindex/autotool@8.0.16
## 0.0.123
### Patch Changes
- llamaindex@0.11.15
- @llamaindex/autotool@8.0.15
## 0.0.122
### Patch Changes
- llamaindex@0.11.14
- @llamaindex/autotool@8.0.14
## 0.0.121
### Patch Changes
- llamaindex@0.11.13
- @llamaindex/autotool@8.0.13
## 0.0.120
### Patch Changes
- Updated dependencies [515a8b9]
- llamaindex@0.11.12
- @llamaindex/autotool@8.0.12
## 0.0.119
### Patch Changes
@@ -8,10 +8,10 @@
"openai": "^4.73.1"
},
"devDependencies": {
"tsx": "^4.19.3"
"tsx": "^4.20.3"
},
"scripts": {
"start": "node --import tsx --import @llamaindex/autotool/node ./src/index.ts"
},
"version": "0.0.119"
"version": "0.0.127"
}
+5 -5
View File
@@ -6,7 +6,7 @@
"url": "git+https://github.com/run-llama/LlamaIndexTS.git",
"directory": "packages/autotool"
},
"version": "8.0.11",
"version": "8.0.19",
"description": "auto transpile your JS function to LLM Agent compatible",
"files": [
"dist",
@@ -74,12 +74,12 @@
"devDependencies": {
"@swc/types": "^0.1.12",
"@types/json-schema": "^7.0.15",
"@types/node": "^22.9.0",
"@types/node": "^24.0.13",
"llamaindex": "workspace:*",
"next": "^15.3.0",
"next": "^15.3.3",
"rollup": "^4.28.1",
"tsx": "^4.19.3",
"typescript": "^5.7.3",
"tsx": "^4.20.3",
"typescript": "^5.8.3",
"vitest": "^2.1.5",
"webpack": "^5.97.1"
}
+57
View File
@@ -1,5 +1,62 @@
# @llamaindex/cloud
## 4.0.24
### Patch Changes
- Updated dependencies [7ad3411]
- Updated dependencies [5da5b3c]
- @llamaindex/core@0.6.15
## 4.0.23
### Patch Changes
- a1b1598: fix: add generic types into agent data responses
## 4.0.22
### Patch Changes
- d2be868: Bug fixes for new beta agent-data cloud API
## 4.0.21
### Patch Changes
- 579ca0c: chore: bump sdk version
## 4.0.20
### Patch Changes
- 48b0d88: fix: exports in `api` submodule
- f185772: fix(cloud): missing file
## 4.0.19
### Patch Changes
- 5a0ed1f: feat: init agent api on cloud sdk
- 5a0ed1f: feat: init agent api on cloud sdk
- Updated dependencies [8eeac33]
- @llamaindex/core@0.6.14
## 4.0.18
### Patch Changes
- 47a7555: chore: bump sdk version
## 4.0.17
### Patch Changes
- Updated dependencies [d578889]
- Updated dependencies [0fcc92f]
- Updated dependencies [515a8b9]
- @llamaindex/core@0.6.13
## 4.0.16
### Patch Changes
+8
View File
@@ -0,0 +1,8 @@
{
"type": "module",
"main": "./dist/index.cjs",
"module": "./dist/index.js",
"types": "./dist/index.d.ts",
"exports": "./dist/index.js",
"private": true
}
+2793 -294
View File
File diff suppressed because it is too large Load Diff
+16 -3
View File
@@ -1,6 +1,6 @@
{
"name": "@llamaindex/cloud",
"version": "4.0.16",
"version": "4.0.24",
"type": "module",
"license": "MIT",
"scripts": {
@@ -11,10 +11,23 @@
"files": [
"openapi.json",
"./api",
"./reader"
"./reader",
"./parse",
"./beta/agent"
],
"exports": {
"./openapi.json": "./openapi.json",
"./beta/agent": {
"require": {
"types": "./beta/agent/dist/index.d.cts",
"default": "./beta/agent/dist/index.cjs"
},
"import": {
"types": "./beta/agent/dist/index.d.ts",
"default": "./beta/agent/dist/index.js"
},
"default": "./beta/agent/dist/index.js"
},
"./api": {
"require": {
"types": "./api/dist/index.d.cts",
@@ -79,6 +92,6 @@
},
"dependencies": {
"p-retry": "^6.2.1",
"zod": "^3.25.67"
"zod": "^3.25.76"
}
}
+314
View File
@@ -0,0 +1,314 @@
import { createClient, createConfig } from "@hey-api/client-fetch";
import { getEnv } from "@llamaindex/env";
import {
aggregateAgentDataApiV1BetaAgentDataAggregatePost,
createAgentDataApiV1BetaAgentDataPost,
deleteAgentDataApiV1BetaAgentDataItemIdDelete,
getAgentDataApiV1BetaAgentDataItemIdGet,
searchAgentDataApiV1BetaAgentDataSearchPost,
updateAgentDataApiV1BetaAgentDataItemIdPut,
type AgentData,
type AggregateGroup,
} from "../../client";
import type {
AggregateAgentDataOptions,
SearchAgentDataOptions,
TypedAgentData,
TypedAgentDataItems,
TypedAggregateGroup,
TypedAggregateGroupItems,
} from "./types";
/**
* Async client for agent data operations
*/
export class AgentClient<T = unknown> {
private client: ReturnType<typeof createClient>;
private baseUrl: string;
private headers: Record<string, string>;
private collection: string;
private agentUrlId: string;
constructor({
apiKey = getEnv("LLAMA_CLOUD_API_KEY"),
baseUrl = "https://api.cloud.llamaindex.ai/",
collection = "default",
agentUrlId = "default",
}: {
apiKey?: string;
baseUrl?: string;
collection?: string;
agentUrlId?: string;
}) {
this.baseUrl = baseUrl;
this.headers = {
"X-SDK-Name": "llamaindex-ts",
...(apiKey && { Authorization: `Bearer ${apiKey}` }),
};
this.client = createClient(
createConfig({
baseUrl: this.baseUrl,
headers: this.headers,
}),
);
this.collection = collection;
this.agentUrlId = agentUrlId;
}
/**
* Create new agent data
*/
async createItem(data: T): Promise<TypedAgentData<T>> {
const response = await createAgentDataApiV1BetaAgentDataPost({
throwOnError: true,
body: {
agent_slug: this.agentUrlId,
collection: this.collection,
data: data as Record<string, unknown>,
},
client: this.client,
});
return this.transformResponse(response.data);
}
/**
* Get agent data by ID
*/
async getItem(id: string): Promise<TypedAgentData<T> | null> {
try {
const response = await getAgentDataApiV1BetaAgentDataItemIdGet({
throwOnError: true,
path: { item_id: id },
client: this.client,
});
return this.transformResponse(response.data);
} catch (error) {
if (
error instanceof Error &&
"response" in error &&
(error as { response?: { status?: number } }).response?.status === 404
) {
return null;
}
throw error;
}
}
/**
* Update agent data
*/
async updateItem(id: string, data: T): Promise<TypedAgentData<T>> {
const response = await updateAgentDataApiV1BetaAgentDataItemIdPut({
throwOnError: true,
path: { item_id: id },
body: {
data: data as Record<string, unknown>,
},
client: this.client,
});
return this.transformResponse(response.data);
}
/**
* Delete agent data
*/
async deleteItem(id: string): Promise<void> {
await deleteAgentDataApiV1BetaAgentDataItemIdDelete({
throwOnError: true,
path: { item_id: id },
client: this.client,
});
}
/**
* List agent data
*/
async search(
options: SearchAgentDataOptions,
): Promise<TypedAgentDataItems<T>> {
const response = await searchAgentDataApiV1BetaAgentDataSearchPost({
throwOnError: true,
body: {
agent_slug: this.agentUrlId,
...(this.collection !== undefined && {
collection: this.collection,
}),
...(options.filter !== undefined && { filter: options.filter }),
...(options.orderBy !== undefined && { order_by: options.orderBy }),
...(options.pageSize !== undefined && { page_size: options.pageSize }),
...(options.offset !== undefined && { offset: options.offset }),
...(options.includeTotal !== undefined && {
include_total: options.includeTotal,
}),
},
client: this.client,
});
const result: TypedAgentDataItems<T> = {
items: response.data.items.map((item: AgentData) =>
this.transformResponse(item),
),
};
if (
response.data.total_size !== null &&
response.data.total_size !== undefined
) {
result.totalSize = response.data.total_size;
}
if (
response.data.next_page_token !== null &&
response.data.next_page_token !== undefined
) {
result.nextPageToken = response.data.next_page_token;
}
return result;
}
/**
* Aggregate agent data into groups
*/
async aggregate(
options: AggregateAgentDataOptions,
): Promise<TypedAggregateGroupItems<T>> {
const response = await aggregateAgentDataApiV1BetaAgentDataAggregatePost({
throwOnError: true,
body: {
agent_slug: this.agentUrlId,
...(this.collection !== undefined && {
collection: this.collection,
}),
...(options.filter !== undefined && { filter: options.filter }),
...(options.groupBy !== undefined && { group_by: options.groupBy }),
...(options.count !== undefined && { count: options.count }),
...(options.first !== undefined && { first: options.first }),
...(options.orderBy !== undefined && { order_by: options.orderBy }),
...(options.offset !== undefined && { offset: options.offset }),
...(options.pageSize !== undefined && { page_size: options.pageSize }),
},
client: this.client,
});
const result: TypedAggregateGroupItems<T> = {
items: response.data.items.map((item) =>
this.transformAggregateResponse(item),
),
};
if (
response.data.total_size !== null &&
response.data.total_size !== undefined
) {
result.totalSize = response.data.total_size;
}
if (
response.data.next_page_token !== null &&
response.data.next_page_token !== undefined
) {
result.nextPageToken = response.data.next_page_token;
}
return result;
}
/**
* Transform API response to typed data
*/
private transformResponse(data: AgentData): TypedAgentData<T> {
const result: TypedAgentData<T> = {
id: data.id!,
agentUrlId: data.agent_slug,
data: data.data as T,
createdAt: new Date(data.created_at!),
updatedAt: new Date(data.updated_at!),
};
if (data.collection !== undefined) {
result.collection = data.collection;
}
return result;
}
/**
* Transform API aggregate response to typed data
*/
private transformAggregateResponse(
data: AggregateGroup,
): TypedAggregateGroup<T> {
const result: TypedAggregateGroup<T> = {
groupKey: data.group_key,
};
if (data.count !== null && data.count !== undefined) {
result.count = data.count;
}
if (data.first_item !== null && data.first_item !== undefined) {
result.firstItem = data.first_item as T;
}
return result;
}
}
export interface AgentDataClientOptions<T = unknown> {
/** API key for the client */
apiKey?: string;
/** Base URL for the client */
/** Base URL of the llama cloud api */
baseUrl?: string;
/** If running in an agent runtime, optionally provide the window url to infer the agent url id */
windowUrl?: string;
/** Agent URL ID for the client, if not provided, it will be inferred from the window url, or fall back to "default" */
agentUrlId?: string;
/** Collection name for the client, defaults to "default" */
collection?: string;
}
/**
* Create a new AsyncAgentDataClient instance
* @param options - The options for the client
* @returns A new AgentClient instance
*/
export function createAgentDataClient<T = unknown>({
apiKey,
baseUrl,
windowUrl,
agentUrlId,
collection = "default",
}: {
apiKey?: string;
baseUrl?: string;
windowUrl?: string;
agentUrlId?: string;
collection?: string;
} = {}): AgentClient<T> {
if (windowUrl && !agentUrlId) {
try {
const path = new URL(windowUrl).pathname;
// /deployments/<agent-url-id>/ui/ -> ["", "deployments", "<agent-url-id>", "ui"]
agentUrlId = path.split("/")[2];
} catch (error) {
console.warn(
"Failed to infer agent url id from window url, falling back to default",
error,
);
}
}
return new AgentClient({
...(apiKey && { apiKey }),
...(baseUrl && { baseUrl }),
...(agentUrlId && { agentUrlId }),
collection,
});
}
+16
View File
@@ -0,0 +1,16 @@
export { AgentClient, createAgentDataClient } from "./client";
export type {
AggregateAgentDataOptions,
ComparisonOperator,
ExtractedData,
FilterOperation,
SearchAgentDataOptions,
StatusType,
TypedAgentData,
TypedAgentDataItems,
TypedAggregateGroup,
TypedAggregateGroupItems,
} from "./types";
export { StatusType as StatusTypeEnum } from "./types";
+138
View File
@@ -0,0 +1,138 @@
import type { FilterOperation as RawFilterOperation } from "../../client/types.gen";
/**
* Status types for agent data processing
*/
export const StatusType = {
ERROR: "error",
ACCEPTED: "accepted",
REJECTED: "rejected",
PENDING_REVIEW: "pending_review",
} as const;
export type StatusType = (typeof StatusType)[keyof typeof StatusType];
export const ComparisonOperator = {
GT: "gt",
GTE: "gte",
LT: "lt",
LTE: "lte",
EQ: "eq",
INCLUDES: "includes",
} as const;
export type ComparisonOperator =
(typeof ComparisonOperator)[keyof typeof ComparisonOperator];
/**
* Filter operation for searching/filtering agent data
*/
export type FilterOperation = RawFilterOperation;
/**
* Base extracted data interface
*/
export interface ExtractedData<T = unknown> {
/** The original data that was extracted from the document. For tracking changes. Should not be updated. */
original_data: T;
/** The latest state of the data. Will differ if data has been updated. */
data?: T;
/** The status of the extracted data. Prefer to use the StatusType values, but any string is allowed. */
status: StatusType | string;
/** Confidence scores, if any, for each primitive field in the original_data data. */
confidence?: Record<string, unknown>;
/** The ID of the file that was used to extract the data. */
file_id?: string;
/** The name of the file that was used to extract the data. */
file_name?: string;
/** The hash of the file that was used to extract the data. */
file_hash?: string;
/** Additional metadata about the extracted data, such as errors, tokens, etc. */
metadata?: Record<string, unknown>;
}
/**
* TypedAgentData interface for typed agent data
*/
export interface TypedAgentData<T = unknown> {
/** The unique ID of the agent data record. */
id: string;
/** The ID of the agent that created the data. */
agentUrlId: string;
/** The collection of the agent data. */
collection?: string;
/** The data of the agent data. Usually an ExtractedData&lt;SomeOtherType&gt; */
data: T;
/** The date and time the data was created. */
createdAt: Date;
/** The date and time the data was last updated. */
updatedAt: Date;
}
/**
* Paginated response of typed agent data items
*/
export interface TypedAgentDataItems<T = unknown> {
items: TypedAgentData<T>[];
totalSize?: number;
nextPageToken?: string;
}
/**
* Options for listing agent data
*/
export interface SearchAgentDataOptions {
/** Filter options for the list. */
filter?: Record<string, FilterOperation>;
/** Order by options for the list. */
orderBy?: string;
/** Page size for the list. */
pageSize?: number;
/** Offset for the list. */
offset?: number;
/**
* Whether to include the total number of items in the response.
* Should use only for first request to build total pagination, and not subsequent requests.
*/
includeTotal?: boolean;
}
/**
* Options for aggregating agent data
*/
export interface AggregateAgentDataOptions {
/** Filter options for the aggregation. */
filter?: Record<string, FilterOperation>;
/** Fields to group by. */
groupBy?: string[];
/** Whether to count the number of items in each group. */
count?: boolean;
/** Whether to return the first item in each group. */
first?: boolean;
/** Order by options for the aggregation. */
orderBy?: string;
/** Offset for the aggregation. */
offset?: number;
/** Page size for the aggregation. */
pageSize?: number;
}
/**
* Single aggregation group result
*/
export interface TypedAggregateGroup<T = unknown> {
/** The group key values */
groupKey: Record<string, unknown>;
/** Count of items in the group */
count?: number;
/** First item in the group */
firstItem?: T;
}
/**
* Paginated response of aggregated agent data
*/
export interface TypedAggregateGroupItems<T = unknown> {
items: TypedAggregateGroup<T>[];
totalSize?: number;
nextPageToken?: string;
}

Some files were not shown because too many files have changed in this diff Show More