mirror of
https://github.com/run-llama/LlamaIndexTS.git
synced 2026-07-01 22:14:03 -04:00
Compare commits
53 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| c1c58feed2 | |||
| 7ad3411766 | |||
| a1fdb07b96 | |||
| 5da5b3c89c | |||
| ddc0eafbaa | |||
| 1782554488 | |||
| a1b1598bc6 | |||
| b02847ae91 | |||
| 50acb4821e | |||
| 47a5b94b0c | |||
| d2be868b93 | |||
| 50d42c4129 | |||
| 848b97d4d0 | |||
| c5796b8d2d | |||
| 579ca0cf60 | |||
| f7e670c8d9 | |||
| 9ff971435c | |||
| 7c9d0e24c4 | |||
| af3f86694b | |||
| 5cce681f62 | |||
| 48b0d88941 | |||
| f18577263a | |||
| 214e133e92 | |||
| ae58862669 | |||
| 5a0ed1f990 | |||
| 36773a82b6 | |||
| 891562d598 | |||
| 93852e15fd | |||
| e1320b08a8 | |||
| 8eeac3310f | |||
| 984a573068 | |||
| f0160d9646 | |||
| 39758ab018 | |||
| f631d4f7d6 | |||
| d68c2a4be8 | |||
| 47a7555c07 | |||
| 363bfa778e | |||
| 229cdeb0ff | |||
| 7a2485cca2 | |||
| 1329186a23 | |||
| 5d6e7384f5 | |||
| f2dfd305fb | |||
| 3cd8a573df | |||
| 09c6077f6e | |||
| 14cc65b4e3 | |||
| c544d8f67c | |||
| d578889e21 | |||
| 9f745d1941 | |||
| f292e94dcd | |||
| 0fcc92f632 | |||
| 515a8b9111 | |||
| 7e8efc6284 | |||
| 0fcf65126d |
+55
-2
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -12,9 +12,9 @@
|
||||
},
|
||||
"aliases": {
|
||||
"components": "@/components",
|
||||
"utils": "@/lib/utils",
|
||||
"utils": "@/libs/utils",
|
||||
"ui": "@/components/ui",
|
||||
"lib": "@/lib",
|
||||
"lib": "@/libs",
|
||||
"hooks": "@/hooks"
|
||||
}
|
||||
}
|
||||
|
||||
+13
-12
@@ -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"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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,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,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";
|
||||
|
||||
|
||||
@@ -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,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,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";
|
||||
|
||||
|
||||
@@ -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,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,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,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,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,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,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,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",
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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,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,6 +1,6 @@
|
||||
import * as React from "react";
|
||||
|
||||
import { cn } from "@/lib/utils";
|
||||
import { cn } from "@/libs/utils";
|
||||
|
||||
export type InputProps = React.InputHTMLAttributes<HTMLInputElement>;
|
||||
|
||||
|
||||
@@ -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,4 +1,4 @@
|
||||
import { cn } from "@/lib/utils";
|
||||
import { cn } from "@/libs/utils";
|
||||
|
||||
function Skeleton({
|
||||
className,
|
||||
|
||||
@@ -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,6 +1,6 @@
|
||||
import * as React from "react";
|
||||
|
||||
import { cn } from "@/lib/utils";
|
||||
import { cn } from "@/libs/utils";
|
||||
|
||||
export type TextareaProps = React.TextareaHTMLAttributes<HTMLTextAreaElement>;
|
||||
|
||||
|
||||
@@ -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({
|
||||
|
||||
@@ -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,
|
||||
},
|
||||
};
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
@@ -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(),
|
||||
});
|
||||
|
||||
@@ -0,0 +1,6 @@
|
||||
import { clsx, type ClassValue } from "clsx";
|
||||
import { twMerge } from "tailwind-merge";
|
||||
|
||||
export function cn(...inputs: ClassValue[]) {
|
||||
return twMerge(clsx(inputs));
|
||||
}
|
||||
@@ -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"
|
||||
},
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
@@ -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"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
@@ -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
|
||||
|
||||
@@ -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,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({
|
||||
|
||||
@@ -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);
|
||||
@@ -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);
|
||||
@@ -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);
|
||||
@@ -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",
|
||||
@@ -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();
|
||||
})();
|
||||
@@ -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");
|
||||
})();
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
@@ -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"
|
||||
|
||||
@@ -0,0 +1,2 @@
|
||||
packages:
|
||||
- "**"
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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,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";
|
||||
|
||||
|
||||
@@ -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`
|
||||
```
|
||||
@@ -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
@@ -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",
|
||||
|
||||
@@ -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"
|
||||
}
|
||||
|
||||
@@ -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"
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
File diff suppressed because it is too large
Load Diff
@@ -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"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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,
|
||||
});
|
||||
}
|
||||
@@ -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";
|
||||
@@ -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<SomeOtherType> */
|
||||
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
Reference in New Issue
Block a user