mirror of
https://github.com/run-llama/LlamaIndexTS.git
synced 2026-07-15 06:52:45 -04:00
Compare commits
5 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 8aacafdc08 | |||
| f2fed7d23f | |||
| f12915a037 | |||
| 7a481bf80d | |||
| c42cce5360 |
@@ -0,0 +1,5 @@
|
|||||||
|
---
|
||||||
|
"@llamaindex/cloud": patch
|
||||||
|
---
|
||||||
|
|
||||||
|
feat: init agent api on cloud sdk
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
---
|
||||||
|
"@llamaindex/cloud": patch
|
||||||
|
---
|
||||||
|
|
||||||
|
feat: init agent api on cloud sdk
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
---
|
||||||
|
"@llamaindex/core": patch
|
||||||
|
---
|
||||||
|
|
||||||
|
Fix createMemory factory when parsing options
|
||||||
@@ -1,146 +1,5 @@
|
|||||||
# @llamaindex/doc
|
# @llamaindex/doc
|
||||||
|
|
||||||
## 0.2.47
|
|
||||||
|
|
||||||
### Patch Changes
|
|
||||||
|
|
||||||
- Updated dependencies [c3bf3c7]
|
|
||||||
- Updated dependencies [f9f1de9]
|
|
||||||
- @llamaindex/cloud@4.0.28
|
|
||||||
- @llamaindex/core@0.6.19
|
|
||||||
- llamaindex@0.11.24
|
|
||||||
- @llamaindex/node-parser@2.0.19
|
|
||||||
- @llamaindex/openai@0.4.14
|
|
||||||
- @llamaindex/readers@3.1.18
|
|
||||||
- @llamaindex/workflow@1.1.20
|
|
||||||
|
|
||||||
## 0.2.46
|
|
||||||
|
|
||||||
### Patch Changes
|
|
||||||
|
|
||||||
- Updated dependencies [f29799e]
|
|
||||||
- Updated dependencies [7224c06]
|
|
||||||
- @llamaindex/workflow@1.1.19
|
|
||||||
- @llamaindex/core@0.6.18
|
|
||||||
- llamaindex@0.11.23
|
|
||||||
- @llamaindex/cloud@4.0.27
|
|
||||||
- @llamaindex/node-parser@2.0.18
|
|
||||||
- @llamaindex/openai@0.4.13
|
|
||||||
- @llamaindex/readers@3.1.17
|
|
||||||
|
|
||||||
## 0.2.45
|
|
||||||
|
|
||||||
### Patch Changes
|
|
||||||
|
|
||||||
- Updated dependencies [9ed3195]
|
|
||||||
- @llamaindex/workflow@1.1.18
|
|
||||||
- llamaindex@0.11.22
|
|
||||||
|
|
||||||
## 0.2.44
|
|
||||||
|
|
||||||
### Patch Changes
|
|
||||||
|
|
||||||
- 38da40b: feat: VectoryMemoryBlock
|
|
||||||
- Updated dependencies [38da40b]
|
|
||||||
- @llamaindex/core@0.6.17
|
|
||||||
- @llamaindex/cloud@4.0.26
|
|
||||||
- llamaindex@0.11.21
|
|
||||||
- @llamaindex/node-parser@2.0.17
|
|
||||||
- @llamaindex/openai@0.4.12
|
|
||||||
- @llamaindex/readers@3.1.16
|
|
||||||
- @llamaindex/workflow@1.1.17
|
|
||||||
|
|
||||||
## 0.2.43
|
|
||||||
|
|
||||||
### Patch Changes
|
|
||||||
|
|
||||||
- ea15e75: Minor updates in deployment docs
|
|
||||||
|
|
||||||
## 0.2.42
|
|
||||||
|
|
||||||
### Patch Changes
|
|
||||||
|
|
||||||
- a8ec08c: fix: ensure correct message content in agent workflow
|
|
||||||
- Updated dependencies [a8ec08c]
|
|
||||||
- Updated dependencies [2967d57]
|
|
||||||
- @llamaindex/core@0.6.16
|
|
||||||
- @llamaindex/workflow@1.1.16
|
|
||||||
- @llamaindex/cloud@4.0.25
|
|
||||||
- llamaindex@0.11.20
|
|
||||||
- @llamaindex/node-parser@2.0.16
|
|
||||||
- @llamaindex/openai@0.4.11
|
|
||||||
- @llamaindex/readers@3.1.15
|
|
||||||
|
|
||||||
## 0.2.41
|
|
||||||
|
|
||||||
### Patch Changes
|
|
||||||
|
|
||||||
- Updated dependencies [856dd8c]
|
|
||||||
- @llamaindex/openai@0.4.10
|
|
||||||
|
|
||||||
## 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
|
## 0.2.34
|
||||||
|
|
||||||
### Patch Changes
|
### Patch Changes
|
||||||
|
|||||||
@@ -27,33 +27,6 @@ const config = {
|
|||||||
destination: "/docs/workflows/:path*",
|
destination: "/docs/workflows/:path*",
|
||||||
permanent: true,
|
permanent: true,
|
||||||
},
|
},
|
||||||
{
|
|
||||||
source: "/docs/llamaindex/getting_started/installation/node.mdx",
|
|
||||||
destination:
|
|
||||||
"/docs/llamaindex/getting_started/installation/server-apis.mdx",
|
|
||||||
permanent: true,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
source: "/docs/llamaindex/getting_started/installation/typescript.mdx",
|
|
||||||
destination: "/docs/llamaindex/getting_started/installation/index.mdx",
|
|
||||||
permanent: true,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
source: "/docs/llamaindex/getting_started/installation/next.mdx",
|
|
||||||
destination: "/docs/llamaindex/getting_started/installation/nextjs.mdx",
|
|
||||||
permanent: true,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
source: "/docs/llamaindex/getting_started/installation/vite.mdx",
|
|
||||||
destination: "/docs/llamaindex/getting_started/installation/index.mdx",
|
|
||||||
permanent: true,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
source: "/docs/llamaindex/getting_started/installation/cloudflare.mdx",
|
|
||||||
destination:
|
|
||||||
"/docs/llamaindex/getting_started/installation/serverless.mdx",
|
|
||||||
permanent: true,
|
|
||||||
},
|
|
||||||
];
|
];
|
||||||
},
|
},
|
||||||
turbopack: {
|
turbopack: {
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@llamaindex/doc",
|
"name": "@llamaindex/doc",
|
||||||
"version": "0.2.47",
|
"version": "0.2.34",
|
||||||
"private": true,
|
"private": true,
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"postinstall": "fumadocs-mdx",
|
"postinstall": "fumadocs-mdx",
|
||||||
@@ -76,21 +76,21 @@
|
|||||||
"@next/env": "^15.3.0",
|
"@next/env": "^15.3.0",
|
||||||
"@tailwindcss/postcss": "^4.0.9",
|
"@tailwindcss/postcss": "^4.0.9",
|
||||||
"@types/mdx": "^2.0.13",
|
"@types/mdx": "^2.0.13",
|
||||||
"@types/node": "24.0.13",
|
"@types/node": "22.9.0",
|
||||||
"@types/react": "^19.1.8",
|
"@types/react": "^19.0.10",
|
||||||
"@types/react-dom": "^19.1.6",
|
"@types/react-dom": "^19.0.4",
|
||||||
"autoprefixer": "^10.4.20",
|
"autoprefixer": "^10.4.20",
|
||||||
"cross-env": "^7.0.3",
|
"cross-env": "^7.0.3",
|
||||||
"fast-glob": "^3.3.2",
|
"fast-glob": "^3.3.2",
|
||||||
"gray-matter": "^4.0.3",
|
"gray-matter": "^4.0.3",
|
||||||
"postcss": "^8.5.6",
|
"postcss": "^8.5.3",
|
||||||
"raw-loader": "^4.0.2",
|
"raw-loader": "^4.0.2",
|
||||||
"remark": "^15.0.1",
|
"remark": "^15.0.1",
|
||||||
"remark-gfm": "^4.0.0",
|
"remark-gfm": "^4.0.0",
|
||||||
"remark-mdx": "^3.1.0",
|
"remark-mdx": "^3.1.0",
|
||||||
"remark-stringify": "^11.0.0",
|
"remark-stringify": "^11.0.0",
|
||||||
"tailwindcss": "^4.1.11",
|
"tailwindcss": "^4.0.9",
|
||||||
"tsx": "^4.20.3",
|
"tsx": "^4.19.3",
|
||||||
"typedoc": "0.28.3",
|
"typedoc": "0.28.3",
|
||||||
"typedoc-plugin-markdown": "^4.6.2",
|
"typedoc-plugin-markdown": "^4.6.2",
|
||||||
"typedoc-plugin-merge-modules": " ^7.0.0",
|
"typedoc-plugin-merge-modules": " ^7.0.0",
|
||||||
|
|||||||
Binary file not shown.
|
Before Width: | Height: | Size: 206 KiB After Width: | Height: | Size: 540 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 154 KiB |
@@ -1,4 +1,4 @@
|
|||||||
import { MockLLM } from "@llamaindex/core/llms/mock";
|
import { MockLLM } from "@llamaindex/core/utils";
|
||||||
import { LlamaIndexAdapter, type Message } from "ai";
|
import { LlamaIndexAdapter, type Message } from "ai";
|
||||||
import { Settings, SimpleChatEngine, type ChatMessage } from "llamaindex";
|
import { Settings, SimpleChatEngine, type ChatMessage } from "llamaindex";
|
||||||
import { NextResponse, type NextRequest } from "next/server";
|
import { NextResponse, type NextRequest } from "next/server";
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import { AIProvider } from "@/actions";
|
import { AIProvider } from "@/actions";
|
||||||
import { TooltipProvider } from "@/components/ui/tooltip";
|
import { TooltipProvider } from "@/components/ui/tooltip";
|
||||||
import { GoogleAnalytics, GoogleTagManager } from "@next/third-parties/google";
|
import { GoogleAnalytics } from "@next/third-parties/google";
|
||||||
import { RootProvider } from "fumadocs-ui/provider";
|
import { RootProvider } from "fumadocs-ui/provider";
|
||||||
import { Inter } from "next/font/google";
|
import { Inter } from "next/font/google";
|
||||||
import type { ReactNode } from "react";
|
import type { ReactNode } from "react";
|
||||||
@@ -36,7 +36,6 @@ export default function Layout({ children }: { children: ReactNode }) {
|
|||||||
LlamaIndex.TS - Build LLM-powered document agents and workflows
|
LlamaIndex.TS - Build LLM-powered document agents and workflows
|
||||||
</title>
|
</title>
|
||||||
</head>
|
</head>
|
||||||
<GoogleTagManager gtmId="GTM-WWRFB36R" />
|
|
||||||
<body className="flex min-h-screen flex-col">
|
<body className="flex min-h-screen flex-col">
|
||||||
<TooltipProvider>
|
<TooltipProvider>
|
||||||
<AIProvider>
|
<AIProvider>
|
||||||
|
|||||||
@@ -19,8 +19,3 @@ npm run dev
|
|||||||
to start the development server. You can then visit [http://localhost:3000](http://localhost:3000) to see your app, which should look something like this:
|
to start the development server. You can then visit [http://localhost:3000](http://localhost:3000) to see your app, which should look something like this:
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
## Learn more
|
|
||||||
|
|
||||||
- [Learn more about `create-llama`](https://github.com/run-llama/create-llama)
|
|
||||||
- [Want to use the same UI components? You can use our React components](https://ui.llamaindex.ai/)
|
|
||||||
|
|||||||
@@ -17,8 +17,7 @@ npm i
|
|||||||
Then you can run any example in the folder with `tsx`, e.g.:
|
Then you can run any example in the folder with `tsx`, e.g.:
|
||||||
|
|
||||||
```bash npm2yarn
|
```bash npm2yarn
|
||||||
export OPENAI_API_KEY=your-api-key
|
npx tsx ./vectorIndex.ts
|
||||||
npx tsx ./agents/agent/openai.ts
|
|
||||||
```
|
```
|
||||||
|
|
||||||
## Try examples online
|
## Try examples online
|
||||||
|
|||||||
@@ -0,0 +1,70 @@
|
|||||||
|
---
|
||||||
|
title: With Cloudflare Worker
|
||||||
|
description: In this guide, you'll learn how to use LlamaIndex with CloudFlare Worker
|
||||||
|
---
|
||||||
|
|
||||||
|
Before you start, make sure you have try LlamaIndex.TS in Node.js to make sure you understand the basics.
|
||||||
|
|
||||||
|
<Card
|
||||||
|
title="Getting Started with LlamaIndex.TS in Node.js"
|
||||||
|
href="/docs/llamaindex/getting_started/installation/node"
|
||||||
|
/>
|
||||||
|
|
||||||
|
Also, you need have the basic understanding of <a href='https://developers.cloudflare.com/workers/'><SiCloudflareworkers className="inline mr-2" color="#F38020" />Cloudflare Worker</a>.
|
||||||
|
|
||||||
|
## Adding environment variables
|
||||||
|
|
||||||
|
```ts
|
||||||
|
export default {
|
||||||
|
async fetch(request: Request, env: Env): Promise<Response> {
|
||||||
|
const { setEnvs } = await import("@llamaindex/env");
|
||||||
|
setEnvs(env);
|
||||||
|
const { OpenAIAgent } = await import("@llamaindex/openai");
|
||||||
|
// Start your code here
|
||||||
|
return new Response("Hello, world!");
|
||||||
|
},
|
||||||
|
};
|
||||||
|
```
|
||||||
|
|
||||||
|
Then, you need create `.dev.vars` and add LLM api keys for the local development, such as `OPENAI_API_KEY` for OpenAI API key.
|
||||||
|
|
||||||
|
<Callout type="warn">Do not commit the api key to git repository.</Callout>
|
||||||
|
|
||||||
|
## Integrating with Hono
|
||||||
|
|
||||||
|
```ts
|
||||||
|
import { Hono } from "hono";
|
||||||
|
|
||||||
|
type Bindings = {
|
||||||
|
OPENAI_API_KEY: string;
|
||||||
|
};
|
||||||
|
|
||||||
|
const app = new Hono<{
|
||||||
|
Bindings: Bindings;
|
||||||
|
}>();
|
||||||
|
|
||||||
|
app.post("/llm", async (c) => {
|
||||||
|
const { setEnvs } = await import("@llamaindex/env");
|
||||||
|
setEnvs(c.env);
|
||||||
|
|
||||||
|
// ...
|
||||||
|
|
||||||
|
return new Response('Hello, world!');
|
||||||
|
})
|
||||||
|
|
||||||
|
export default {
|
||||||
|
fetch: app.fetch,
|
||||||
|
};
|
||||||
|
```
|
||||||
|
|
||||||
|
## Difference between Node.js and Cloudflare Worker
|
||||||
|
|
||||||
|
In Cloudflare Worker and similar serverless JS environment, you need to be aware of the following differences:
|
||||||
|
|
||||||
|
- Some Node.js modules are not available in Cloudflare Worker, such as `node:fs`, `node:child_process`, `node:cluster`...
|
||||||
|
- You are recommend to design your code using network request, such as use `fetch` API to communicate with database, instead of a long-running process in Node.js.
|
||||||
|
- Some of LlamaIndex.TS packages are not available in Cloudflare Worker, for example `@llamaindex/readers` and `@llamaindex/huggingface`.
|
||||||
|
- The main `llamaindex` is designed to work in all JavaScript environment, including Cloudflare Worker. If you find any issue, please report to us.
|
||||||
|
- `@llamaindex/env` is a JS environment binding module, which polyfill some Node.js/Modern Web API (for example, we have a memory based `fs` module, and Crypto API polyfill). It is designed to work in all JavaScript environment, including Cloudflare Worker.
|
||||||
|
|
||||||
|
|
||||||
@@ -1,177 +1,69 @@
|
|||||||
---
|
---
|
||||||
title: Installation
|
title: Installation
|
||||||
description: How to install and set up LlamaIndex.TS for your project.
|
description: How to install llamaindex packages.
|
||||||
---
|
---
|
||||||
|
|
||||||
## Quick Start
|
To install llamaindex, run the following command:
|
||||||
|
|
||||||
Install the core package:
|
|
||||||
|
|
||||||
```package-install
|
```package-install
|
||||||
npm i llamaindex
|
npm i llamaindex
|
||||||
```
|
```
|
||||||
|
|
||||||
In most cases, you'll also need an LLM provider and the Workflow package:
|
In most cases, you'll also need an LLM package and the Workflow package to use LlamaIndex. For example, to use the OpenAI LLM with agents, you would install the following:
|
||||||
|
|
||||||
```package-install
|
```package-install
|
||||||
npm i @llamaindex/openai @llamaindex/workflow
|
npm i @llamaindex/openai @llamaindex/workflow
|
||||||
```
|
```
|
||||||
|
|
||||||
## Environment Setup
|
Go to [LLM APIs](/docs/llamaindex/modules/models/llms) to find out how to use other LLMs.
|
||||||
|
|
||||||
### API Keys
|
|
||||||
|
|
||||||
Most LLM providers require API keys. Set your OpenAI key (or other provider):
|
## Frameworks
|
||||||
|
|
||||||
```bash
|
LlamaIndex supports a wide range of frameworks and runtimes. Click on the card below to learn more.
|
||||||
export OPENAI_API_KEY=your-api-key
|
|
||||||
```
|
|
||||||
|
|
||||||
Or use a `.env` file:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
echo "OPENAI_API_KEY=your-api-key" > .env
|
|
||||||
```
|
|
||||||
|
|
||||||
<Callout type="warn">Never commit API keys to your repository.</Callout>
|
|
||||||
|
|
||||||
### Loading Environment Variables
|
|
||||||
|
|
||||||
For Node.js applications:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
node --env-file .env your-script.js
|
|
||||||
```
|
|
||||||
|
|
||||||
For other environments, see the deployment-specific guides below.
|
|
||||||
|
|
||||||
## TypeScript Configuration
|
|
||||||
|
|
||||||
LlamaIndex.TS is built with TypeScript and provides excellent type safety. Add these settings to your `tsconfig.json`:
|
|
||||||
|
|
||||||
```json5
|
|
||||||
{
|
|
||||||
"compilerOptions": {
|
|
||||||
// Essential for module resolution
|
|
||||||
"moduleResolution": "bundler", // or "nodenext" | "node16" | "node"
|
|
||||||
|
|
||||||
// Required for Web Stream API support
|
|
||||||
"lib": ["DOM.AsyncIterable"],
|
|
||||||
|
|
||||||
// Recommended for better compatibility
|
|
||||||
"target": "es2020",
|
|
||||||
"module": "esnext"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
## Running your first agent
|
|
||||||
|
|
||||||
### Set up
|
|
||||||
|
|
||||||
If you don't already have a project, you can create a new one in a new folder:
|
|
||||||
|
|
||||||
```package-install
|
|
||||||
npm init
|
|
||||||
npm i -D typescript @types/node
|
|
||||||
npm i @llamaindex/openai @llamaindex/workflow llamaindex zod
|
|
||||||
```
|
|
||||||
|
|
||||||
### Run the agent
|
|
||||||
|
|
||||||
Create the file `example.ts`. This code will:
|
|
||||||
|
|
||||||
- Create two tools for use by the agent:
|
|
||||||
- A `sumNumbers` tool that adds two numbers
|
|
||||||
- A `divideNumbers` tool that divides numbers
|
|
||||||
- Give an example of the data structure we wish to generate
|
|
||||||
- Prompt the LLM with instructions and the example, plus a sample transcript
|
|
||||||
|
|
||||||
<include cwd>../../examples/agents/agent/openai.ts</include>
|
|
||||||
|
|
||||||
To run the code:
|
|
||||||
|
|
||||||
```package-install
|
|
||||||
npx tsx example.ts
|
|
||||||
```
|
|
||||||
|
|
||||||
You should expect output something like:
|
|
||||||
|
|
||||||
```
|
|
||||||
{
|
|
||||||
result: '5 + 5 is 10. Then, 10 divided by 2 is 5.',
|
|
||||||
state: {
|
|
||||||
memory: Memory {
|
|
||||||
messages: [Array],
|
|
||||||
tokenLimit: 30000,
|
|
||||||
shortTermTokenLimitRatio: 0.7,
|
|
||||||
memoryBlocks: [],
|
|
||||||
memoryCursor: 0,
|
|
||||||
adapters: [Object]
|
|
||||||
},
|
|
||||||
scratchpad: [],
|
|
||||||
currentAgentName: 'Agent',
|
|
||||||
agents: [ 'Agent' ],
|
|
||||||
nextAgentName: null
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Done
|
|
||||||
```
|
|
||||||
|
|
||||||
## Performance Optimization
|
|
||||||
|
|
||||||
### Tokenization Speed
|
|
||||||
|
|
||||||
Install `gpt-tokenizer` for 60x faster tokenization (Node.js environments only):
|
|
||||||
|
|
||||||
```package-install
|
|
||||||
npm i gpt-tokenizer
|
|
||||||
```
|
|
||||||
|
|
||||||
LlamaIndex will automatically use this when available.
|
|
||||||
|
|
||||||
## Deployment Guides
|
|
||||||
|
|
||||||
Choose your deployment target:
|
|
||||||
|
|
||||||
<Cards>
|
<Cards>
|
||||||
<Card
|
<Card title={
|
||||||
title="Server APIs & Backends"
|
<>
|
||||||
description="Express, Fastify, Koa, standalone Node.js servers"
|
<SiNodedotjs className="inline" color="#5FA04E" /> Node.js
|
||||||
href="/docs/llamaindex/getting_started/installation/server-apis"
|
</>
|
||||||
/>
|
} href="/docs/llamaindex/getting_started/installation/node" />
|
||||||
<Card
|
<Card title={
|
||||||
title="Serverless Functions"
|
<>
|
||||||
description="Vercel, Netlify, AWS Lambda, Cloudflare Workers"
|
<SiTypescript className="inline" color="#3178C6" /> TypeScript
|
||||||
href="/docs/llamaindex/getting_started/installation/serverless"
|
</>
|
||||||
/>
|
} href="/docs/llamaindex/getting_started/installation/typescript" />
|
||||||
<Card
|
<Card title={
|
||||||
title="Next.js Applications"
|
<>
|
||||||
description="API routes, server components, edge runtime"
|
<SiVite className='inline' color='#646CFF' /> Vite
|
||||||
href="/docs/llamaindex/getting_started/installation/nextjs"
|
</>
|
||||||
/>
|
} href="/docs/llamaindex/getting_started/installation/vite" />
|
||||||
<Card
|
<Card
|
||||||
title="Troubleshooting"
|
title={
|
||||||
description="Common issues, bundle optimization, compatibility"
|
<>
|
||||||
href="/docs/llamaindex/getting_started/installation/troubleshooting"
|
<SiNextdotjs className='inline' /> Next.js (React Server Component)
|
||||||
/>
|
</>
|
||||||
|
}
|
||||||
|
href="/docs/llamaindex/getting_started/installation/next"
|
||||||
|
/>
|
||||||
|
<Card title={
|
||||||
|
<>
|
||||||
|
<SiCloudflareworkers className='inline' color='#F38020' /> Cloudflare Workers
|
||||||
|
</>
|
||||||
|
} href="/docs/llamaindex/getting_started/installation/cloudflare" />
|
||||||
</Cards>
|
</Cards>
|
||||||
|
|
||||||
## LLM/Embedding Providers
|
## What's next?
|
||||||
|
|
||||||
Go to [LLM APIs](/docs/llamaindex/modules/models/llms) and [Embedding APIs](/docs/llamaindex/modules/models/embeddings) to find out how to use different LLM and embedding providers beyond OpenAI.
|
|
||||||
|
|
||||||
## What's Next?
|
|
||||||
|
|
||||||
<Cards>
|
<Cards>
|
||||||
<Card
|
<Card
|
||||||
title="Learn LlamaIndex.TS"
|
title="Learn LlamaIndex.TS"
|
||||||
description="Learn how to use LlamaIndex.TS by starting with one of our tutorials."
|
description="Learn how to use LlamaIndex.TS by starting with one of our tutorials."
|
||||||
href="/docs/llamaindex/tutorials/basic_agent"
|
href="/docs/llamaindex/tutorials/rag"
|
||||||
/>
|
/>
|
||||||
<Card
|
<Card
|
||||||
title="Show me code examples"
|
title="Show me code examples"
|
||||||
description="Explore code examples using LlamaIndex.TS."
|
description="Explore code examples using LlamaIndex.TS."
|
||||||
href="/docs/llamaindex/getting_started/examples"
|
href="/docs/llamaindex/getting_started/examples"
|
||||||
/>
|
/>
|
||||||
</Cards>
|
</Cards>
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
{
|
{
|
||||||
"title": "Installation",
|
"title": "Installation",
|
||||||
"pages": ["server-apis", "serverless", "nextjs", "troubleshooting"]
|
"pages": ["node", "typescript", "next", "vite", "cloudflare"]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,41 @@
|
|||||||
|
---
|
||||||
|
title: With Next.js
|
||||||
|
description: In this guide, you'll learn how to use LlamaIndex with Next.js.
|
||||||
|
---
|
||||||
|
|
||||||
|
Before you start, make sure you have try LlamaIndex.TS in Node.js to make sure you understand the basics.
|
||||||
|
|
||||||
|
<Card
|
||||||
|
title="Getting Started with LlamaIndex.TS in Node.js"
|
||||||
|
href="/docs/llamaindex/getting_started/installation/node"
|
||||||
|
/>
|
||||||
|
|
||||||
|
## Differences between Node.js and Next.js
|
||||||
|
|
||||||
|
Next.js is a React framework that has both server side compatibility and client side compatibility.
|
||||||
|
This means that you need to be careful when using LlamaIndex.TS in Next.js.
|
||||||
|
Don't leak the import data like API keys to the client side.
|
||||||
|
|
||||||
|
Also, in Next.js, there is build time and runtime. Some computations can be done at build time like Document embedding could be done at build time for better performance.
|
||||||
|
Where as the `llamaindex` package is working with Next.js, some provider packages like `@llamaindex/huggingface` are not working well with Next.js. This is due to the upstream dependencies used by the provider package.
|
||||||
|
|
||||||
|
Make sure to use `withLlamaIndex` to make sure that LlamaIndex.TS works well with Next.js.
|
||||||
|
|
||||||
|
```js
|
||||||
|
// next.config.mjs / next.config.ts
|
||||||
|
import withLlamaIndex from "llamaindex/next";
|
||||||
|
|
||||||
|
/** @type {import('next').NextConfig} */
|
||||||
|
const nextConfig = {};
|
||||||
|
|
||||||
|
export default withLlamaIndex(nextConfig);
|
||||||
|
```
|
||||||
|
|
||||||
|
If you see any dependency issues, you are welcome to open an issue on the GitHub.
|
||||||
|
|
||||||
|
## Edge Runtime
|
||||||
|
|
||||||
|
[Vercel Edge Runtime](https://edge-runtime.vercel.app/) is a subset of Node.js APIs. Similar to [Cloudflare Workers](/docs/llamaindex/getting_started/installation/cloudflare#difference-between-nodejs-and-cloudflare-worker),
|
||||||
|
it is a serverless platform that runs your code on the edge.
|
||||||
|
|
||||||
|
Not all features of Node.js are supported in Vercel Edge Runtime, so does LlamaIndex.TS, we are working on more compatibility with all JavaScript runtimes.
|
||||||
@@ -1,405 +0,0 @@
|
|||||||
---
|
|
||||||
title: Next.js Applications
|
|
||||||
description: Deploy LlamaIndex.TS in Next.js applications with API routes, server components, and edge runtime.
|
|
||||||
---
|
|
||||||
|
|
||||||
This guide covers integrating LlamaIndex.TS agents with Next.js applications.
|
|
||||||
|
|
||||||
## Essential Configuration
|
|
||||||
|
|
||||||
### Next.js Config
|
|
||||||
|
|
||||||
Use `withLlamaIndex` to ensure compatibility:
|
|
||||||
|
|
||||||
```javascript
|
|
||||||
// next.config.mjs
|
|
||||||
import withLlamaIndex from "llamaindex/next";
|
|
||||||
|
|
||||||
/** @type {import('next').NextConfig} */
|
|
||||||
const nextConfig = {
|
|
||||||
// Your existing config
|
|
||||||
};
|
|
||||||
|
|
||||||
export default withLlamaIndex(nextConfig);
|
|
||||||
```
|
|
||||||
|
|
||||||
## API Routes
|
|
||||||
|
|
||||||
### App Router (Recommended)
|
|
||||||
|
|
||||||
```typescript
|
|
||||||
// app/api/chat/route.ts
|
|
||||||
import { agent } from "@llamaindex/workflow";
|
|
||||||
import { tool } from "llamaindex";
|
|
||||||
import { openai } from "@llamaindex/openai";
|
|
||||||
import { z } from "zod";
|
|
||||||
import { NextRequest, NextResponse } from "next/server";
|
|
||||||
|
|
||||||
// Initialize agent once (consider using a singleton pattern)
|
|
||||||
let myAgent: any = null;
|
|
||||||
|
|
||||||
async function initializeAgent() {
|
|
||||||
if (myAgent) return myAgent;
|
|
||||||
|
|
||||||
try {
|
|
||||||
const greetTool = tool({
|
|
||||||
name: "greet",
|
|
||||||
description: "Greets a user with their name",
|
|
||||||
parameters: z.object({
|
|
||||||
name: z.string(),
|
|
||||||
}),
|
|
||||||
execute: ({ name }) => `Hello, ${name}! How can I help you today?`,
|
|
||||||
});
|
|
||||||
|
|
||||||
myAgent = agent({
|
|
||||||
tools: [greetTool],
|
|
||||||
llm: openai({ model: "gpt-4o-mini" }),
|
|
||||||
});
|
|
||||||
|
|
||||||
return myAgent;
|
|
||||||
} catch (error) {
|
|
||||||
console.error("Failed to initialize agent:", error);
|
|
||||||
throw error;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
export async function POST(request: NextRequest) {
|
|
||||||
try {
|
|
||||||
const { message } = await request.json();
|
|
||||||
|
|
||||||
if (!message || typeof message !== 'string') {
|
|
||||||
return NextResponse.json(
|
|
||||||
{ error: "Message is required and must be a string" },
|
|
||||||
{ status: 400 }
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
const agent = await initializeAgent();
|
|
||||||
const result = await agent.run(message);
|
|
||||||
|
|
||||||
return NextResponse.json({ response: result.data });
|
|
||||||
} catch (error) {
|
|
||||||
console.error("Chat error:", error);
|
|
||||||
return NextResponse.json(
|
|
||||||
{ error: "Internal server error" },
|
|
||||||
{ status: 500 }
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
### Pages Router (Legacy)
|
|
||||||
|
|
||||||
```typescript
|
|
||||||
// pages/api/chat.ts
|
|
||||||
import { agent } from "@llamaindex/workflow";
|
|
||||||
import { tool } from "llamaindex";
|
|
||||||
import { openai } from "@llamaindex/openai";
|
|
||||||
import { z } from "zod";
|
|
||||||
import type { NextApiRequest, NextApiResponse } from "next";
|
|
||||||
|
|
||||||
let myAgent: any = null;
|
|
||||||
|
|
||||||
async function initializeAgent() {
|
|
||||||
if (myAgent) return myAgent;
|
|
||||||
|
|
||||||
const timeTool = tool({
|
|
||||||
name: "getCurrentTime",
|
|
||||||
description: "Gets the current time",
|
|
||||||
parameters: z.object({}),
|
|
||||||
execute: () => new Date().toISOString(),
|
|
||||||
});
|
|
||||||
|
|
||||||
myAgent = agent({
|
|
||||||
tools: [timeTool],
|
|
||||||
llm: openai({ model: "gpt-4o-mini" }),
|
|
||||||
});
|
|
||||||
|
|
||||||
return myAgent;
|
|
||||||
}
|
|
||||||
|
|
||||||
export default async function handler(
|
|
||||||
req: NextApiRequest,
|
|
||||||
res: NextApiResponse
|
|
||||||
) {
|
|
||||||
if (req.method !== "POST") {
|
|
||||||
return res.status(405).json({ error: "Method not allowed" });
|
|
||||||
}
|
|
||||||
|
|
||||||
try {
|
|
||||||
const { message } = req.body;
|
|
||||||
|
|
||||||
const agent = await initializeAgent();
|
|
||||||
const result = await agent.run(message);
|
|
||||||
|
|
||||||
res.json({ response: result.data });
|
|
||||||
} catch (error) {
|
|
||||||
console.error("Chat error:", error);
|
|
||||||
res.status(500).json({ error: "Internal server error" });
|
|
||||||
}
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
## Server Components
|
|
||||||
|
|
||||||
Initialize agents in server components:
|
|
||||||
|
|
||||||
```typescript
|
|
||||||
// app/chat/page.tsx
|
|
||||||
import { agent } from "@llamaindex/workflow";
|
|
||||||
import { tool } from "llamaindex";
|
|
||||||
import { openai } from "@llamaindex/openai";
|
|
||||||
import { z } from "zod";
|
|
||||||
|
|
||||||
async function initializeAgent() {
|
|
||||||
const helpTool = tool({
|
|
||||||
name: "getHelp",
|
|
||||||
description: "Provides help information",
|
|
||||||
parameters: z.object({
|
|
||||||
topic: z.string().optional(),
|
|
||||||
}),
|
|
||||||
execute: ({ topic }) => {
|
|
||||||
if (topic) {
|
|
||||||
return `Here's help for ${topic}: This is a helpful resource about ${topic}.`;
|
|
||||||
}
|
|
||||||
return "Available topics: general, troubleshooting, api, deployment";
|
|
||||||
},
|
|
||||||
});
|
|
||||||
|
|
||||||
return agent({
|
|
||||||
tools: [helpTool],
|
|
||||||
llm: openai({ model: "gpt-4o-mini" }),
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
export default async function ChatPage() {
|
|
||||||
const chatAgent = await initializeAgent();
|
|
||||||
|
|
||||||
return (
|
|
||||||
<div>
|
|
||||||
<h1>Chat Interface</h1>
|
|
||||||
<p>Agent initialized and ready to help!</p>
|
|
||||||
{/* Your chat UI components */}
|
|
||||||
</div>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
## Edge Runtime
|
|
||||||
|
|
||||||
The Edge Runtime has limited Node.js API access:
|
|
||||||
|
|
||||||
```typescript
|
|
||||||
// app/api/chat-edge/route.ts
|
|
||||||
import { NextRequest, NextResponse } from "next/server";
|
|
||||||
|
|
||||||
export const runtime = "edge";
|
|
||||||
|
|
||||||
export async function POST(request: NextRequest) {
|
|
||||||
const { setEnvs } = await import("@llamaindex/env");
|
|
||||||
setEnvs(process.env);
|
|
||||||
|
|
||||||
try {
|
|
||||||
const { message } = await request.json();
|
|
||||||
|
|
||||||
const { agent } = await import("@llamaindex/workflow");
|
|
||||||
const { tool } = await import("llamaindex");
|
|
||||||
const { openai } = await import("@llamaindex/openai");
|
|
||||||
const { z } = await import("zod");
|
|
||||||
|
|
||||||
const timeTool = tool({
|
|
||||||
name: "time",
|
|
||||||
description: "Gets current time",
|
|
||||||
parameters: z.object({}),
|
|
||||||
execute: () => new Date().toISOString(),
|
|
||||||
});
|
|
||||||
|
|
||||||
const myAgent = agent({
|
|
||||||
tools: [timeTool],
|
|
||||||
llm: openai({ model: "gpt-4o-mini" }),
|
|
||||||
});
|
|
||||||
|
|
||||||
const result = await myAgent.run(message);
|
|
||||||
return NextResponse.json({ response: result.data });
|
|
||||||
} catch (error) {
|
|
||||||
return NextResponse.json({ error: error.message }, { status: 500 });
|
|
||||||
}
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
## Streaming Responses
|
|
||||||
|
|
||||||
Implement streaming for better user experience:
|
|
||||||
|
|
||||||
```typescript
|
|
||||||
// app/api/chat-stream/route.ts
|
|
||||||
import { agent } from "@llamaindex/workflow";
|
|
||||||
import { tool } from "llamaindex";
|
|
||||||
import { openai } from "@llamaindex/openai";
|
|
||||||
import { agentStreamEvent } from "@llamaindex/workflow";
|
|
||||||
import { NextRequest } from "next/server";
|
|
||||||
import { z } from "zod";
|
|
||||||
|
|
||||||
// Initialize agent once (consider using a singleton pattern)
|
|
||||||
let myAgent: any = null;
|
|
||||||
|
|
||||||
async function initializeAgent() {
|
|
||||||
if (myAgent) return myAgent;
|
|
||||||
|
|
||||||
try {
|
|
||||||
const greetTool = tool({
|
|
||||||
name: "greet",
|
|
||||||
description: "Greets a user with their name",
|
|
||||||
parameters: z.object({
|
|
||||||
name: z.string(),
|
|
||||||
}),
|
|
||||||
execute: ({ name }) => `Hello, ${name}! How can I help you today?`,
|
|
||||||
});
|
|
||||||
|
|
||||||
myAgent = agent({
|
|
||||||
tools: [greetTool],
|
|
||||||
llm: openai({ model: "gpt-4o-mini" }),
|
|
||||||
});
|
|
||||||
|
|
||||||
return myAgent;
|
|
||||||
} catch (error) {
|
|
||||||
console.error("Failed to initialize agent:", error);
|
|
||||||
throw error;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
export async function POST(request: NextRequest) {
|
|
||||||
const { message } = await request.json();
|
|
||||||
|
|
||||||
const stream = new ReadableStream({
|
|
||||||
async start(controller) {
|
|
||||||
try {
|
|
||||||
const agent = await initializeAgent();
|
|
||||||
const events = agent.runStream(message);
|
|
||||||
|
|
||||||
for await (const event of events) {
|
|
||||||
if (agentStreamEvent.include(event)) {
|
|
||||||
controller.enqueue(new TextEncoder().encode(event.data.delta));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
controller.close();
|
|
||||||
} catch (error) {
|
|
||||||
controller.error(error);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
});
|
|
||||||
|
|
||||||
return new Response(stream, {
|
|
||||||
headers: {
|
|
||||||
"Content-Type": "text/plain",
|
|
||||||
"Transfer-Encoding": "chunked",
|
|
||||||
},
|
|
||||||
});
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
## Client-side Integration
|
|
||||||
|
|
||||||
### React Hook for API Calls
|
|
||||||
|
|
||||||
```typescript
|
|
||||||
// hooks/useAgentChat.ts
|
|
||||||
import { useState } from "react";
|
|
||||||
|
|
||||||
export function useAgentChat() {
|
|
||||||
const [loading, setLoading] = useState(false);
|
|
||||||
const [error, setError] = useState<string | null>(null);
|
|
||||||
const [response, setResponse] = useState<string | null>(null);
|
|
||||||
|
|
||||||
const chat = async (message: string) => {
|
|
||||||
setLoading(true);
|
|
||||||
setError(null);
|
|
||||||
|
|
||||||
try {
|
|
||||||
const res = await fetch("/api/chat", {
|
|
||||||
method: "POST",
|
|
||||||
headers: { "Content-Type": "application/json" },
|
|
||||||
body: JSON.stringify({ message }),
|
|
||||||
});
|
|
||||||
|
|
||||||
if (!res.ok) {
|
|
||||||
throw new Error(`HTTP error! status: ${res.status}`);
|
|
||||||
}
|
|
||||||
|
|
||||||
const data = await res.json();
|
|
||||||
setResponse(data.response);
|
|
||||||
} catch (err) {
|
|
||||||
setError(err instanceof Error ? err.message : "An error occurred");
|
|
||||||
} finally {
|
|
||||||
setLoading(false);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
return { chat, loading, error, response };
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
### Chat Component
|
|
||||||
|
|
||||||
```typescript
|
|
||||||
// components/ChatInterface.tsx
|
|
||||||
"use client";
|
|
||||||
|
|
||||||
import { useState } from "react";
|
|
||||||
import { useAgentChat } from "@/hooks/useAgentChat";
|
|
||||||
|
|
||||||
export default function ChatInterface() {
|
|
||||||
const [message, setMessage] = useState("");
|
|
||||||
const { chat, loading, error, response } = useAgentChat();
|
|
||||||
|
|
||||||
const handleSubmit = async (e: React.FormEvent) => {
|
|
||||||
e.preventDefault();
|
|
||||||
if (!message.trim()) return;
|
|
||||||
|
|
||||||
await chat(message);
|
|
||||||
setMessage("");
|
|
||||||
};
|
|
||||||
|
|
||||||
return (
|
|
||||||
<div className="max-w-2xl mx-auto p-4">
|
|
||||||
<form onSubmit={handleSubmit} className="mb-4">
|
|
||||||
<input
|
|
||||||
type="text"
|
|
||||||
value={message}
|
|
||||||
onChange={(e) => setMessage(e.target.value)}
|
|
||||||
placeholder="Send a message..."
|
|
||||||
className="w-full p-2 border rounded"
|
|
||||||
disabled={loading}
|
|
||||||
/>
|
|
||||||
<button
|
|
||||||
type="submit"
|
|
||||||
disabled={loading || !message.trim()}
|
|
||||||
className="mt-2 px-4 py-2 bg-blue-500 text-white rounded disabled:opacity-50"
|
|
||||||
>
|
|
||||||
{loading ? "Thinking..." : "Send"}
|
|
||||||
</button>
|
|
||||||
</form>
|
|
||||||
|
|
||||||
{error && (
|
|
||||||
<div className="p-3 mb-4 bg-red-100 border border-red-400 text-red-700 rounded">
|
|
||||||
Error: {error}
|
|
||||||
</div>
|
|
||||||
)}
|
|
||||||
|
|
||||||
{response && (
|
|
||||||
<div className="p-3 bg-gray-100 border rounded">
|
|
||||||
<strong>Agent:</strong>
|
|
||||||
<p>{response}</p>
|
|
||||||
</div>
|
|
||||||
)}
|
|
||||||
</div>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
## Next Steps
|
|
||||||
|
|
||||||
- Learn about [serverless deployment](/docs/llamaindex/getting_started/installation/serverless)
|
|
||||||
- Explore [server APIs](/docs/llamaindex/getting_started/installation/server-apis)
|
|
||||||
- Check [troubleshooting guide](/docs/llamaindex/getting_started/installation/troubleshooting) for common issues
|
|
||||||
@@ -0,0 +1,40 @@
|
|||||||
|
---
|
||||||
|
title: With Node.js/Bun/Deno
|
||||||
|
description: In this guide, you'll learn how to use LlamaIndex with Node.js, Bun, and Deno.
|
||||||
|
---
|
||||||
|
|
||||||
|
## Adding environment variables
|
||||||
|
|
||||||
|
By default, LlamaIndex uses OpenAI provider, which requires an API key. You can set the `OPENAI_API_KEY` environment variable to authenticate with OpenAI.
|
||||||
|
|
||||||
|
```shell
|
||||||
|
export OPENAI_API_KEY=your-api-key
|
||||||
|
```
|
||||||
|
|
||||||
|
Or you can use a `.env` file:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
echo "OPENAI_API_KEY=your-api-key" > .env
|
||||||
|
node --env-file .env your-script.js
|
||||||
|
```
|
||||||
|
|
||||||
|
<Callout type="warn">Do not commit the api key to git repository.</Callout>
|
||||||
|
|
||||||
|
For more information, see the [How to read environment variables from Node.js](https://nodejs.org/en/learn/command-line/how-to-read-environment-variables-from-nodejs).
|
||||||
|
|
||||||
|
## Performance Optimization
|
||||||
|
|
||||||
|
By the default, we are using `js-tiktoken` for tokenization. You can install `gpt-tokenizer` which is then automatically used by LlamaIndex to get a 60x speedup for tokenization:
|
||||||
|
|
||||||
|
```package-install
|
||||||
|
npm i gpt-tokenizer
|
||||||
|
```
|
||||||
|
|
||||||
|
**Note**: This only works for Node.js
|
||||||
|
|
||||||
|
## TypeScript support
|
||||||
|
|
||||||
|
<Card
|
||||||
|
title="Getting Started with LlamaIndex.TS in TypeScript"
|
||||||
|
href="/docs/llamaindex/getting_started/installation/typescript"
|
||||||
|
/>
|
||||||
@@ -1,211 +0,0 @@
|
|||||||
---
|
|
||||||
title: Server APIs & Backends
|
|
||||||
description: Deploy LlamaIndex.TS in server environments like Express, Fastify, and standalone Node.js applications.
|
|
||||||
---
|
|
||||||
|
|
||||||
This guide covers adding LlamaIndex.TS agents to traditional server environments where you have full Node.js runtime access.
|
|
||||||
|
|
||||||
## Supported Runtimes
|
|
||||||
|
|
||||||
LlamaIndex.TS works seamlessly with:
|
|
||||||
|
|
||||||
- **Node.js** (v18+)
|
|
||||||
- **Bun** (v1.0+)
|
|
||||||
- **Deno** (v1.30+)
|
|
||||||
|
|
||||||
## Common Server Frameworks
|
|
||||||
|
|
||||||
### Express.js
|
|
||||||
|
|
||||||
```typescript
|
|
||||||
import express from 'express';
|
|
||||||
import { agent } from '@llamaindex/workflow';
|
|
||||||
import { tool } from 'llamaindex';
|
|
||||||
import { openai } from '@llamaindex/openai';
|
|
||||||
import { z } from 'zod';
|
|
||||||
|
|
||||||
const app = express();
|
|
||||||
app.use(express.json());
|
|
||||||
|
|
||||||
// Initialize agent once at startup
|
|
||||||
let myAgent: any;
|
|
||||||
|
|
||||||
async function initializeAgent() {
|
|
||||||
// Create tools for the agent
|
|
||||||
const sumTool = tool({
|
|
||||||
name: "sum",
|
|
||||||
description: "Adds two numbers",
|
|
||||||
parameters: z.object({
|
|
||||||
a: z.number(),
|
|
||||||
b: z.number(),
|
|
||||||
}),
|
|
||||||
execute: ({ a, b }) => a + b,
|
|
||||||
});
|
|
||||||
|
|
||||||
const multiplyTool = tool({
|
|
||||||
name: "multiply",
|
|
||||||
description: "Multiplies two numbers",
|
|
||||||
parameters: z.object({
|
|
||||||
a: z.number(),
|
|
||||||
b: z.number(),
|
|
||||||
}),
|
|
||||||
execute: ({ a, b }) => a * b,
|
|
||||||
});
|
|
||||||
|
|
||||||
// Create the agent
|
|
||||||
myAgent = agent({
|
|
||||||
tools: [sumTool, multiplyTool],
|
|
||||||
llm: openai({ model: "gpt-4o-mini" }),
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
app.post('/api/chat', async (req, res) => {
|
|
||||||
try {
|
|
||||||
const { message } = req.body;
|
|
||||||
const result = await myAgent.run(message);
|
|
||||||
res.json({ response: result.data });
|
|
||||||
} catch (error) {
|
|
||||||
res.status(500).json({ error: 'Chat failed' });
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
// Initialize and start server
|
|
||||||
initializeAgent().then(() => {
|
|
||||||
app.listen(3000, () => {
|
|
||||||
console.log('Server running on port 3000');
|
|
||||||
});
|
|
||||||
});
|
|
||||||
```
|
|
||||||
|
|
||||||
### Fastify
|
|
||||||
|
|
||||||
```typescript
|
|
||||||
import Fastify from 'fastify';
|
|
||||||
import { agent } from '@llamaindex/workflow';
|
|
||||||
import { tool } from 'llamaindex';
|
|
||||||
import { openai } from '@llamaindex/openai';
|
|
||||||
import { z } from 'zod';
|
|
||||||
|
|
||||||
const fastify = Fastify();
|
|
||||||
let myAgent: any;
|
|
||||||
|
|
||||||
async function initializeAgent() {
|
|
||||||
const sumTool = tool({
|
|
||||||
name: "sum",
|
|
||||||
description: "Adds two numbers",
|
|
||||||
parameters: z.object({
|
|
||||||
a: z.number(),
|
|
||||||
b: z.number(),
|
|
||||||
}),
|
|
||||||
execute: ({ a, b }) => a + b,
|
|
||||||
});
|
|
||||||
|
|
||||||
myAgent = agent({
|
|
||||||
tools: [sumTool],
|
|
||||||
llm: openai({ model: "gpt-4o-mini" }),
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
fastify.post('/api/chat', async (request, reply) => {
|
|
||||||
try {
|
|
||||||
const { message } = request.body as { message: string };
|
|
||||||
const result = await myAgent.run(message);
|
|
||||||
return { response: result.data };
|
|
||||||
} catch (error) {
|
|
||||||
reply.status(500).send({ error: 'Chat failed' });
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
const start = async () => {
|
|
||||||
await initializeAgent();
|
|
||||||
await fastify.listen({ port: 3000 });
|
|
||||||
console.log('Server running on port 3000');
|
|
||||||
};
|
|
||||||
|
|
||||||
start();
|
|
||||||
```
|
|
||||||
|
|
||||||
### Hono
|
|
||||||
|
|
||||||
```typescript
|
|
||||||
import { Hono } from "hono";
|
|
||||||
import { agent } from "@llamaindex/workflow";
|
|
||||||
import { tool } from "llamaindex";
|
|
||||||
import { openai } from "@llamaindex/openai";
|
|
||||||
import { z } from "zod";
|
|
||||||
|
|
||||||
type Bindings = {
|
|
||||||
OPENAI_API_KEY: string;
|
|
||||||
};
|
|
||||||
|
|
||||||
const app = new Hono<{ Bindings: Bindings }>();
|
|
||||||
|
|
||||||
app.post("/api/chat", async (c) => {
|
|
||||||
const { setEnvs } = await import("@llamaindex/env");
|
|
||||||
setEnvs(c.env);
|
|
||||||
|
|
||||||
const { message } = await c.req.json();
|
|
||||||
|
|
||||||
const greetTool = tool({
|
|
||||||
name: "greet",
|
|
||||||
description: "Greets a user",
|
|
||||||
parameters: z.object({
|
|
||||||
name: z.string(),
|
|
||||||
}),
|
|
||||||
execute: ({ name }) => `Hello, ${name}!`,
|
|
||||||
});
|
|
||||||
|
|
||||||
const myAgent = agent({
|
|
||||||
tools: [greetTool],
|
|
||||||
llm: openai({ model: "gpt-4o-mini" }),
|
|
||||||
});
|
|
||||||
|
|
||||||
try {
|
|
||||||
const result = await myAgent.run(message);
|
|
||||||
return c.json({ response: result.data });
|
|
||||||
} catch (error) {
|
|
||||||
return c.json({ error: error.message }, 500);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
export default app;
|
|
||||||
```
|
|
||||||
|
|
||||||
## Streaming Responses
|
|
||||||
|
|
||||||
For real-time agent responses:
|
|
||||||
|
|
||||||
```typescript
|
|
||||||
import { agentStreamEvent } from "@llamaindex/workflow";
|
|
||||||
|
|
||||||
app.post('/api/chat-stream', async (req, res) => {
|
|
||||||
const { message } = req.body;
|
|
||||||
|
|
||||||
res.writeHead(200, {
|
|
||||||
'Content-Type': 'text/plain',
|
|
||||||
'Transfer-Encoding': 'chunked',
|
|
||||||
});
|
|
||||||
|
|
||||||
try {
|
|
||||||
const events = myAgent.runStream(message);
|
|
||||||
|
|
||||||
for await (const event of events) {
|
|
||||||
if (agentStreamEvent.include(event)) {
|
|
||||||
res.write(event.data.delta);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
res.end();
|
|
||||||
} catch (error) {
|
|
||||||
res.write('Error: ' + error.message);
|
|
||||||
res.end();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
```
|
|
||||||
|
|
||||||
|
|
||||||
## Next Steps
|
|
||||||
|
|
||||||
- Learn about [serverless deployment](/docs/llamaindex/getting_started/installation/serverless)
|
|
||||||
- Explore [Next.js integration](/docs/llamaindex/getting_started/installation/nextjs)
|
|
||||||
- Check [troubleshooting guide](/docs/llamaindex/getting_started/installation/troubleshooting) for common issues
|
|
||||||
@@ -1,240 +0,0 @@
|
|||||||
---
|
|
||||||
title: Serverless Functions
|
|
||||||
description: Deploy LlamaIndex.TS in serverless environments like Vercel, Netlify, AWS Lambda, and Cloudflare Workers.
|
|
||||||
---
|
|
||||||
|
|
||||||
This guide covers adding LlamaIndex.TS agents to serverless environments where you have execution time and memory constraints.
|
|
||||||
|
|
||||||
## Cloudflare Workers
|
|
||||||
|
|
||||||
```typescript
|
|
||||||
export default {
|
|
||||||
async fetch(request: Request, env: Env): Promise<Response> {
|
|
||||||
const { setEnvs } = await import("@llamaindex/env");
|
|
||||||
setEnvs(env);
|
|
||||||
|
|
||||||
const { agent } = await import("@llamaindex/workflow");
|
|
||||||
const { openai } = await import("@llamaindex/openai");
|
|
||||||
const { tool } = await import("llamaindex");
|
|
||||||
const { z } = await import("zod");
|
|
||||||
|
|
||||||
const timeTool = tool({
|
|
||||||
name: "getCurrentTime",
|
|
||||||
description: "Gets the current time",
|
|
||||||
parameters: z.object({}),
|
|
||||||
execute: () => new Date().toISOString(),
|
|
||||||
});
|
|
||||||
|
|
||||||
const myAgent = agent({
|
|
||||||
tools: [timeTool],
|
|
||||||
llm: openai({ model: "gpt-4o-mini" }),
|
|
||||||
});
|
|
||||||
|
|
||||||
try {
|
|
||||||
const { message } = await request.json();
|
|
||||||
const result = await myAgent.run(message);
|
|
||||||
|
|
||||||
return new Response(JSON.stringify({ response: result.data }), {
|
|
||||||
headers: { "Content-Type": "application/json" },
|
|
||||||
});
|
|
||||||
} catch (error) {
|
|
||||||
return new Response(JSON.stringify({ error: error.message }), {
|
|
||||||
status: 500,
|
|
||||||
headers: { "Content-Type": "application/json" },
|
|
||||||
});
|
|
||||||
}
|
|
||||||
},
|
|
||||||
};
|
|
||||||
```
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## Vercel Functions
|
|
||||||
|
|
||||||
### Node.js Runtime
|
|
||||||
|
|
||||||
```typescript
|
|
||||||
// pages/api/chat.ts or app/api/chat/route.ts
|
|
||||||
import { agent } from "@llamaindex/workflow";
|
|
||||||
import { tool } from "llamaindex";
|
|
||||||
import { openai } from "@llamaindex/openai";
|
|
||||||
import { z } from "zod";
|
|
||||||
|
|
||||||
export default async function handler(req, res) {
|
|
||||||
if (req.method !== 'POST') {
|
|
||||||
return res.status(405).json({ error: 'Method not allowed' });
|
|
||||||
}
|
|
||||||
|
|
||||||
const { message } = req.body;
|
|
||||||
|
|
||||||
const weatherTool = tool({
|
|
||||||
name: "getWeather",
|
|
||||||
description: "Get weather information",
|
|
||||||
parameters: z.object({
|
|
||||||
city: z.string(),
|
|
||||||
}),
|
|
||||||
execute: ({ city }) => `Weather in ${city}: 72°F, sunny`,
|
|
||||||
});
|
|
||||||
|
|
||||||
const myAgent = agent({
|
|
||||||
tools: [weatherTool],
|
|
||||||
llm: openai({ model: "gpt-4o-mini" }),
|
|
||||||
});
|
|
||||||
|
|
||||||
try {
|
|
||||||
const result = await myAgent.run(message);
|
|
||||||
res.json({ response: result.data });
|
|
||||||
} catch (error) {
|
|
||||||
res.status(500).json({ error: error.message });
|
|
||||||
}
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
### Edge Runtime
|
|
||||||
|
|
||||||
```typescript
|
|
||||||
// app/api/chat/route.ts
|
|
||||||
import { NextRequest, NextResponse } from "next/server";
|
|
||||||
|
|
||||||
export const runtime = "edge";
|
|
||||||
|
|
||||||
export async function POST(request: NextRequest) {
|
|
||||||
const { setEnvs } = await import("@llamaindex/env");
|
|
||||||
setEnvs(process.env);
|
|
||||||
|
|
||||||
const { message } = await request.json();
|
|
||||||
|
|
||||||
try {
|
|
||||||
// Use simpler tools for edge runtime
|
|
||||||
const { agent } = await import("@llamaindex/workflow");
|
|
||||||
const { tool } = await import("llamaindex");
|
|
||||||
const { openai } = await import("@llamaindex/openai");
|
|
||||||
const { z } = await import("zod");
|
|
||||||
|
|
||||||
const timeTool = tool({
|
|
||||||
name: "time",
|
|
||||||
description: "Gets current time",
|
|
||||||
parameters: z.object({}),
|
|
||||||
execute: () => new Date().toISOString(),
|
|
||||||
});
|
|
||||||
|
|
||||||
const myAgent = agent({
|
|
||||||
tools: [timeTool],
|
|
||||||
llm: openai({ model: "gpt-4o-mini" }),
|
|
||||||
});
|
|
||||||
|
|
||||||
const result = await myAgent.run(message);
|
|
||||||
return NextResponse.json({ response: result.data });
|
|
||||||
} catch (error) {
|
|
||||||
return NextResponse.json({ error: error.message }, { status: 500 });
|
|
||||||
}
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
## AWS Lambda
|
|
||||||
|
|
||||||
```typescript
|
|
||||||
import { APIGatewayProxyHandler } from "aws-lambda";
|
|
||||||
import { agent } from "@llamaindex/workflow";
|
|
||||||
import { tool } from "llamaindex";
|
|
||||||
import { openai } from "@llamaindex/openai";
|
|
||||||
import { z } from "zod";
|
|
||||||
|
|
||||||
export const handler: APIGatewayProxyHandler = async (event, context) => {
|
|
||||||
const { message } = JSON.parse(event.body || "{}");
|
|
||||||
|
|
||||||
const calculatorTool = tool({
|
|
||||||
name: "calculate",
|
|
||||||
description: "Performs basic math",
|
|
||||||
parameters: z.object({
|
|
||||||
expression: z.string(),
|
|
||||||
}),
|
|
||||||
execute: ({ expression }) => {
|
|
||||||
// Simple calculator implementation
|
|
||||||
try {
|
|
||||||
return `Result: ${eval(expression)}`;
|
|
||||||
} catch {
|
|
||||||
return "Invalid expression";
|
|
||||||
}
|
|
||||||
},
|
|
||||||
});
|
|
||||||
|
|
||||||
const myAgent = agent({
|
|
||||||
tools: [calculatorTool],
|
|
||||||
llm: openai({ model: "gpt-4o-mini" }),
|
|
||||||
});
|
|
||||||
|
|
||||||
try {
|
|
||||||
const result = await myAgent.run(message);
|
|
||||||
|
|
||||||
return {
|
|
||||||
statusCode: 200,
|
|
||||||
headers: {
|
|
||||||
"Content-Type": "application/json",
|
|
||||||
"Access-Control-Allow-Origin": "*",
|
|
||||||
},
|
|
||||||
body: JSON.stringify({ response: result.data }),
|
|
||||||
};
|
|
||||||
} catch (error) {
|
|
||||||
return {
|
|
||||||
statusCode: 500,
|
|
||||||
body: JSON.stringify({ error: error.message }),
|
|
||||||
};
|
|
||||||
}
|
|
||||||
};
|
|
||||||
```
|
|
||||||
|
|
||||||
## Netlify Functions
|
|
||||||
|
|
||||||
```typescript
|
|
||||||
// netlify/functions/chat.ts
|
|
||||||
import { Handler } from "@netlify/functions";
|
|
||||||
import { agent } from "@llamaindex/workflow";
|
|
||||||
import { tool } from "llamaindex";
|
|
||||||
import { openai } from "@llamaindex/openai";
|
|
||||||
import { z } from "zod";
|
|
||||||
|
|
||||||
export const handler: Handler = async (event, context) => {
|
|
||||||
if (event.httpMethod !== "POST") {
|
|
||||||
return { statusCode: 405, body: "Method Not Allowed" };
|
|
||||||
}
|
|
||||||
|
|
||||||
const { message } = JSON.parse(event.body || "{}");
|
|
||||||
|
|
||||||
const helpTool = tool({
|
|
||||||
name: "help",
|
|
||||||
description: "Provides help information",
|
|
||||||
parameters: z.object({
|
|
||||||
topic: z.string().optional(),
|
|
||||||
}),
|
|
||||||
execute: ({ topic }) => {
|
|
||||||
return topic ? `Help for ${topic}` : "Available help topics";
|
|
||||||
},
|
|
||||||
});
|
|
||||||
|
|
||||||
const myAgent = agent({
|
|
||||||
tools: [helpTool],
|
|
||||||
llm: openai({ model: "gpt-4o-mini" }),
|
|
||||||
});
|
|
||||||
|
|
||||||
try {
|
|
||||||
const result = await myAgent.run(message);
|
|
||||||
|
|
||||||
return {
|
|
||||||
statusCode: 200,
|
|
||||||
body: JSON.stringify({ response: result.data }),
|
|
||||||
};
|
|
||||||
} catch (error) {
|
|
||||||
return {
|
|
||||||
statusCode: 500,
|
|
||||||
body: JSON.stringify({ error: error.message }),
|
|
||||||
};
|
|
||||||
}
|
|
||||||
};
|
|
||||||
```
|
|
||||||
|
|
||||||
## Next Steps
|
|
||||||
|
|
||||||
- Learn about [Next.js integration](/docs/llamaindex/getting_started/installation/nextjs)
|
|
||||||
- Explore [server deployment](/docs/llamaindex/getting_started/installation/server-apis)
|
|
||||||
- Check [troubleshooting guide](/docs/llamaindex/getting_started/installation/troubleshooting) for common issues
|
|
||||||
-501
@@ -1,501 +0,0 @@
|
|||||||
---
|
|
||||||
title: Troubleshooting
|
|
||||||
description: Common issues and solutions when installing and deploying LlamaIndex.TS applications.
|
|
||||||
---
|
|
||||||
|
|
||||||
This guide addresses common issues you might encounter when installing and deploying LlamaIndex.TS applications across different environments.
|
|
||||||
|
|
||||||
## Installation Issues
|
|
||||||
|
|
||||||
### Module Resolution Errors
|
|
||||||
|
|
||||||
**Problem:** Import errors or module not found errors
|
|
||||||
|
|
||||||
**Solution:** Ensure your `tsconfig.json` is properly configured:
|
|
||||||
|
|
||||||
```json5
|
|
||||||
{
|
|
||||||
"compilerOptions": {
|
|
||||||
"moduleResolution": "bundler", // or "nodenext" | "node16" | "node"
|
|
||||||
"lib": ["DOM.AsyncIterable"],
|
|
||||||
"target": "es2020",
|
|
||||||
"module": "esnext"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
**Alternative solution:** Try different module resolution strategies:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# Clear node_modules and reinstall
|
|
||||||
rm -rf node_modules package-lock.json
|
|
||||||
npm install
|
|
||||||
|
|
||||||
# Or try with different package manager
|
|
||||||
pnpm install
|
|
||||||
# or
|
|
||||||
yarn install
|
|
||||||
```
|
|
||||||
|
|
||||||
### TypeScript Errors
|
|
||||||
|
|
||||||
**Problem:** TypeScript compilation errors with LlamaIndex imports
|
|
||||||
|
|
||||||
**Solution:** Ensure you have the correct TypeScript configuration:
|
|
||||||
|
|
||||||
```json5
|
|
||||||
{
|
|
||||||
"compilerOptions": {
|
|
||||||
"strict": true,
|
|
||||||
"skipLibCheck": true, // Skip type checking of node_modules
|
|
||||||
"allowSyntheticDefaultImports": true,
|
|
||||||
"esModuleInterop": true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
### Package Compatibility Issues
|
|
||||||
|
|
||||||
**Problem:** Some packages don't work in certain environments
|
|
||||||
|
|
||||||
**Common incompatibilities:**
|
|
||||||
- `@llamaindex/readers` - May not work in serverless environments
|
|
||||||
- `@llamaindex/huggingface` - Limited browser/edge compatibility
|
|
||||||
- File system readers - Don't work in browser/edge environments
|
|
||||||
|
|
||||||
**Solution:** Use environment-specific alternatives:
|
|
||||||
|
|
||||||
```typescript
|
|
||||||
// Instead of file system readers in serverless
|
|
||||||
// Use remote data sources
|
|
||||||
async function loadDocumentsFromAPI() {
|
|
||||||
const response = await fetch('https://api.example.com/documents');
|
|
||||||
const data = await response.json();
|
|
||||||
return data.map(doc => new Document(doc.content));
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
## Runtime Issues
|
|
||||||
|
|
||||||
### Memory Errors
|
|
||||||
|
|
||||||
**Problem:** Out of memory errors during index creation or querying
|
|
||||||
|
|
||||||
**Solution:** Optimize memory usage:
|
|
||||||
|
|
||||||
```typescript
|
|
||||||
// Batch process large document sets
|
|
||||||
async function batchProcessDocuments(documents: Document[], batchSize = 10) {
|
|
||||||
const results = [];
|
|
||||||
|
|
||||||
for (let i = 0; i < documents.length; i += batchSize) {
|
|
||||||
const batch = documents.slice(i, i + batchSize);
|
|
||||||
const batchIndex = await VectorStoreIndex.fromDocuments(batch);
|
|
||||||
results.push(batchIndex);
|
|
||||||
|
|
||||||
// Optional: Add delay between batches
|
|
||||||
await new Promise(resolve => setTimeout(resolve, 100));
|
|
||||||
}
|
|
||||||
|
|
||||||
return results;
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
**For serverless environments:**
|
|
||||||
|
|
||||||
```typescript
|
|
||||||
// Use external vector stores instead of in-memory
|
|
||||||
// TODO: Example with Pinecone, Weaviate, etc.
|
|
||||||
// const vectorStore = new PineconeVectorStore(/* config */);
|
|
||||||
// const index = await VectorStoreIndex.fromVectorStore(vectorStore);
|
|
||||||
```
|
|
||||||
|
|
||||||
### API Rate Limiting
|
|
||||||
|
|
||||||
**Problem:** Rate limiting errors from LLM providers
|
|
||||||
|
|
||||||
**Solution:** Implement retry logic with exponential backoff:
|
|
||||||
|
|
||||||
```typescript
|
|
||||||
async function queryWithRetry(queryEngine: any, question: string, maxRetries = 3) {
|
|
||||||
for (let i = 0; i < maxRetries; i++) {
|
|
||||||
try {
|
|
||||||
return await queryEngine.query(question);
|
|
||||||
} catch (error) {
|
|
||||||
if (error.message.includes('rate limit') && i < maxRetries - 1) {
|
|
||||||
const delay = Math.pow(2, i) * 1000; // Exponential backoff
|
|
||||||
await new Promise(resolve => setTimeout(resolve, delay));
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
throw error;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
### Tokenization Performance
|
|
||||||
|
|
||||||
**Problem:** Slow tokenization affecting performance
|
|
||||||
|
|
||||||
**Solution:** Install faster tokenizer (Node.js only):
|
|
||||||
|
|
||||||
```bash
|
|
||||||
npm install gpt-tokenizer
|
|
||||||
```
|
|
||||||
|
|
||||||
LlamaIndex will automatically use this for 60x faster tokenization.
|
|
||||||
|
|
||||||
## Bundling Issues
|
|
||||||
|
|
||||||
### Bundle Size Too Large
|
|
||||||
|
|
||||||
**Problem:** Large bundle sizes affecting performance
|
|
||||||
|
|
||||||
**Solution:** Use dynamic imports and code splitting:
|
|
||||||
|
|
||||||
```typescript
|
|
||||||
// Lazy load LlamaIndex components
|
|
||||||
const initializeLlamaIndex = async () => {
|
|
||||||
const { VectorStoreIndex, SimpleDirectoryReader } = await import("llamaindex");
|
|
||||||
return { VectorStoreIndex, SimpleDirectoryReader };
|
|
||||||
};
|
|
||||||
|
|
||||||
// In your API route
|
|
||||||
export async function POST(request: NextRequest) {
|
|
||||||
const { VectorStoreIndex, SimpleDirectoryReader } = await initializeLlamaIndex();
|
|
||||||
// Use the imported modules
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
### Webpack/Vite Bundling Issues
|
|
||||||
|
|
||||||
**Problem:** Bundler compatibility issues
|
|
||||||
|
|
||||||
**Solution for Next.js:**
|
|
||||||
|
|
||||||
```javascript
|
|
||||||
// next.config.mjs
|
|
||||||
import withLlamaIndex from "llamaindex/next";
|
|
||||||
|
|
||||||
const nextConfig = {
|
|
||||||
webpack: (config, { isServer }) => {
|
|
||||||
// Custom webpack configuration if needed
|
|
||||||
if (!isServer) {
|
|
||||||
config.resolve.fallback = {
|
|
||||||
...config.resolve.fallback,
|
|
||||||
fs: false,
|
|
||||||
net: false,
|
|
||||||
tls: false,
|
|
||||||
};
|
|
||||||
}
|
|
||||||
return config;
|
|
||||||
},
|
|
||||||
};
|
|
||||||
|
|
||||||
export default withLlamaIndex(nextConfig);
|
|
||||||
```
|
|
||||||
|
|
||||||
**Solution for Vite:**
|
|
||||||
|
|
||||||
```typescript
|
|
||||||
// vite.config.ts
|
|
||||||
import { defineConfig } from 'vite';
|
|
||||||
|
|
||||||
export default defineConfig({
|
|
||||||
define: {
|
|
||||||
global: 'globalThis',
|
|
||||||
},
|
|
||||||
resolve: {
|
|
||||||
alias: {
|
|
||||||
// Add aliases for problematic modules
|
|
||||||
},
|
|
||||||
},
|
|
||||||
optimizeDeps: {
|
|
||||||
include: ['llamaindex'],
|
|
||||||
},
|
|
||||||
});
|
|
||||||
```
|
|
||||||
|
|
||||||
## Environment-Specific Issues
|
|
||||||
|
|
||||||
### Node.js Version Compatibility
|
|
||||||
|
|
||||||
**Problem:** Node.js version compatibility issues
|
|
||||||
|
|
||||||
**Solution:** Use supported Node.js versions:
|
|
||||||
|
|
||||||
```json
|
|
||||||
{
|
|
||||||
"engines": {
|
|
||||||
"node": ">=18.0.0"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
**Check your Node.js version:**
|
|
||||||
|
|
||||||
```bash
|
|
||||||
node --version
|
|
||||||
```
|
|
||||||
|
|
||||||
### Cloudflare Workers Issues
|
|
||||||
|
|
||||||
**Problem:** Module not available in Cloudflare Workers
|
|
||||||
|
|
||||||
**Solution:** Use `@llamaindex/env` for environment compatibility:
|
|
||||||
|
|
||||||
```typescript
|
|
||||||
export default {
|
|
||||||
async fetch(request: Request, env: Env): Promise<Response> {
|
|
||||||
const { setEnvs } = await import("@llamaindex/env");
|
|
||||||
setEnvs(env);
|
|
||||||
|
|
||||||
// Your LlamaIndex code here
|
|
||||||
},
|
|
||||||
};
|
|
||||||
```
|
|
||||||
|
|
||||||
### Vercel Edge Runtime Issues
|
|
||||||
|
|
||||||
**Problem:** Limited Node.js API access in Edge Runtime
|
|
||||||
|
|
||||||
**Solution:** Use standard runtime or adapt code:
|
|
||||||
|
|
||||||
```typescript
|
|
||||||
// Force standard runtime
|
|
||||||
export const runtime = "nodejs";
|
|
||||||
|
|
||||||
// Or adapt for edge
|
|
||||||
export const runtime = "edge";
|
|
||||||
|
|
||||||
export async function POST(request: NextRequest) {
|
|
||||||
// Use edge-compatible code only
|
|
||||||
const { setEnvs } = await import("@llamaindex/env");
|
|
||||||
setEnvs(process.env);
|
|
||||||
|
|
||||||
// Avoid file system operations
|
|
||||||
// Use remote data sources
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
## Performance Issues
|
|
||||||
|
|
||||||
### Slow Query Responses
|
|
||||||
|
|
||||||
**Problem:** Slow query performance
|
|
||||||
|
|
||||||
**Solution:** Implement caching and optimization:
|
|
||||||
|
|
||||||
```typescript
|
|
||||||
import { LRUCache } from 'lru-cache';
|
|
||||||
|
|
||||||
const queryCache = new LRUCache<string, string>({
|
|
||||||
max: 100,
|
|
||||||
ttl: 1000 * 60 * 10, // 10 minutes
|
|
||||||
});
|
|
||||||
|
|
||||||
export async function optimizedQuery(question: string, queryEngine: any) {
|
|
||||||
// Check cache first
|
|
||||||
const cached = queryCache.get(question);
|
|
||||||
if (cached) return cached;
|
|
||||||
|
|
||||||
// Query and cache result
|
|
||||||
const result = await queryEngine.query(question);
|
|
||||||
queryCache.set(question, result);
|
|
||||||
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
### Cold Start Issues
|
|
||||||
|
|
||||||
**Problem:** Slow cold starts in serverless environments
|
|
||||||
|
|
||||||
**Solution:** Pre-warm your functions:
|
|
||||||
|
|
||||||
```typescript
|
|
||||||
// Pre-initialize outside handler
|
|
||||||
let cachedQueryEngine: any = null;
|
|
||||||
|
|
||||||
export async function handler(event: any) {
|
|
||||||
if (!cachedQueryEngine) {
|
|
||||||
cachedQueryEngine = await initializeQueryEngine();
|
|
||||||
}
|
|
||||||
|
|
||||||
// Use cached engine
|
|
||||||
return await cachedQueryEngine.query(question);
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
## Environment Variable Issues
|
|
||||||
|
|
||||||
### Missing API Keys
|
|
||||||
|
|
||||||
**Problem:** API key not found or invalid
|
|
||||||
|
|
||||||
**Solution:** Verify environment variable setup:
|
|
||||||
|
|
||||||
```typescript
|
|
||||||
// Check if API key is available
|
|
||||||
if (!process.env.OPENAI_API_KEY) {
|
|
||||||
throw new Error('OPENAI_API_KEY environment variable is required');
|
|
||||||
}
|
|
||||||
|
|
||||||
// For debugging (remove in production)
|
|
||||||
console.log('API Key present:', !!process.env.OPENAI_API_KEY);
|
|
||||||
```
|
|
||||||
|
|
||||||
### Environment Variable Loading
|
|
||||||
|
|
||||||
**Problem:** Environment variables not loading correctly
|
|
||||||
|
|
||||||
**Solution:** Use proper loading mechanisms:
|
|
||||||
|
|
||||||
```typescript
|
|
||||||
// For Node.js
|
|
||||||
import 'dotenv/config';
|
|
||||||
|
|
||||||
// For Next.js - use .env.local
|
|
||||||
// Variables are automatically loaded
|
|
||||||
|
|
||||||
// For Cloudflare Workers
|
|
||||||
export default {
|
|
||||||
async fetch(request: Request, env: Env): Promise<Response> {
|
|
||||||
// Use env parameter, not process.env
|
|
||||||
const apiKey = env.OPENAI_API_KEY;
|
|
||||||
// ...
|
|
||||||
},
|
|
||||||
};
|
|
||||||
```
|
|
||||||
|
|
||||||
## Common Error Messages
|
|
||||||
|
|
||||||
### "Cannot find module 'llamaindex'"
|
|
||||||
|
|
||||||
**Cause:** Package not installed or module resolution issue
|
|
||||||
|
|
||||||
**Solution:**
|
|
||||||
```bash
|
|
||||||
npm install llamaindex
|
|
||||||
```
|
|
||||||
|
|
||||||
### "Module not found: Can't resolve 'fs'"
|
|
||||||
|
|
||||||
**Cause:** File system modules used in browser/edge environment
|
|
||||||
|
|
||||||
**Solution:**
|
|
||||||
```typescript
|
|
||||||
// Use dynamic imports with fallbacks
|
|
||||||
const loadDocuments = async () => {
|
|
||||||
if (typeof window !== 'undefined') {
|
|
||||||
// Browser environment - use alternative
|
|
||||||
return await loadDocumentsFromAPI();
|
|
||||||
} else {
|
|
||||||
// Node.js environment - use file system
|
|
||||||
const { SimpleDirectoryReader } = await import('llamaindex');
|
|
||||||
return await new SimpleDirectoryReader('data').loadData();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
```
|
|
||||||
|
|
||||||
### "ReferenceError: global is not defined"
|
|
||||||
|
|
||||||
**Cause:** Global polyfill missing in browser environments
|
|
||||||
|
|
||||||
**Solution:**
|
|
||||||
```typescript
|
|
||||||
// Add to your app entry point
|
|
||||||
if (typeof global === 'undefined') {
|
|
||||||
global = globalThis;
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
### "Cannot read properties of undefined (reading 'query')"
|
|
||||||
|
|
||||||
**Cause:** Query engine not properly initialized
|
|
||||||
|
|
||||||
**Solution:**
|
|
||||||
```typescript
|
|
||||||
// Always check initialization
|
|
||||||
if (!queryEngine) {
|
|
||||||
throw new Error('Query engine not initialized');
|
|
||||||
}
|
|
||||||
|
|
||||||
// Or use optional chaining
|
|
||||||
const response = await queryEngine?.query(question);
|
|
||||||
```
|
|
||||||
|
|
||||||
## Debugging Tips
|
|
||||||
|
|
||||||
### Enable Debug Logging
|
|
||||||
|
|
||||||
```typescript
|
|
||||||
// Enable debug logging
|
|
||||||
process.env.DEBUG = "llamaindex:*";
|
|
||||||
|
|
||||||
// Or specific modules
|
|
||||||
process.env.DEBUG = "llamaindex:vector-store";
|
|
||||||
```
|
|
||||||
|
|
||||||
### Check Package Versions
|
|
||||||
|
|
||||||
```bash
|
|
||||||
npm list llamaindex
|
|
||||||
npm list @llamaindex/openai
|
|
||||||
```
|
|
||||||
|
|
||||||
### Test in Isolation
|
|
||||||
|
|
||||||
```typescript
|
|
||||||
// Create minimal test case
|
|
||||||
import { VectorStoreIndex } from 'llamaindex';
|
|
||||||
|
|
||||||
async function testBasic() {
|
|
||||||
try {
|
|
||||||
console.log('Testing basic import...');
|
|
||||||
const index = new VectorStoreIndex();
|
|
||||||
console.log('Success!');
|
|
||||||
} catch (error) {
|
|
||||||
console.error('Error:', error);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
testBasic();
|
|
||||||
```
|
|
||||||
|
|
||||||
## Getting Help
|
|
||||||
|
|
||||||
### Before Asking for Help
|
|
||||||
|
|
||||||
1. **Check this troubleshooting guide**
|
|
||||||
2. **Search existing GitHub issues**
|
|
||||||
3. **Try minimal reproduction**
|
|
||||||
4. **Check your environment configuration**
|
|
||||||
|
|
||||||
### When Reporting Issues
|
|
||||||
|
|
||||||
Include:
|
|
||||||
- Node.js version (`node --version`)
|
|
||||||
- Package versions (`npm list llamaindex`)
|
|
||||||
- Environment (Node.js, Cloudflare Workers, Vercel, etc.)
|
|
||||||
- Minimal code reproduction
|
|
||||||
- Full error message and stack trace
|
|
||||||
|
|
||||||
### Useful Resources
|
|
||||||
|
|
||||||
- [GitHub Issues](https://github.com/run-llama/LlamaIndexTS/issues)
|
|
||||||
- [Discord Community](https://discord.gg/dGcwcsnxhU)
|
|
||||||
- [Documentation](https://docs.llamaindex.ai/)
|
|
||||||
|
|
||||||
## Next Steps
|
|
||||||
|
|
||||||
If you're still experiencing issues:
|
|
||||||
|
|
||||||
1. **Check specific deployment guides:**
|
|
||||||
- [Server APIs](/docs/llamaindex/getting_started/installation/server-apis)
|
|
||||||
- [Serverless Functions](/docs/llamaindex/getting_started/installation/serverless)
|
|
||||||
- [Next.js Applications](/docs/llamaindex/getting_started/installation/nextjs)
|
|
||||||
|
|
||||||
2. **Open an issue** on GitHub with a minimal reproduction
|
|
||||||
|
|
||||||
3. **Join our Discord** for community support
|
|
||||||
@@ -0,0 +1,99 @@
|
|||||||
|
---
|
||||||
|
title: With TypeScript
|
||||||
|
description: In this guide, you'll learn how to use LlamaIndex with TypeScript
|
||||||
|
---
|
||||||
|
|
||||||
|
LlamaIndex.TS is written in TypeScript and designed to be used in TypeScript projects.
|
||||||
|
|
||||||
|
We put a lot of work on strong typing to make sure you have a great typing experience with code completion such as:
|
||||||
|
|
||||||
|
```ts twoslash
|
||||||
|
import { PromptTemplate } from 'llamaindex'
|
||||||
|
const promptTemplate = new PromptTemplate({
|
||||||
|
template: `Context information from multiple sources is below.
|
||||||
|
---------------------
|
||||||
|
{context}
|
||||||
|
---------------------
|
||||||
|
Given the information from multiple sources and not prior knowledge.
|
||||||
|
Answer the query in the style of a Shakespeare play"
|
||||||
|
Query: {query}
|
||||||
|
Answer:`,
|
||||||
|
templateVars: ["context", "query"],
|
||||||
|
});
|
||||||
|
// @noErrors
|
||||||
|
promptTemplate.format({
|
||||||
|
c
|
||||||
|
//^|
|
||||||
|
})
|
||||||
|
```
|
||||||
|
|
||||||
|
## Enable TypeScript
|
||||||
|
|
||||||
|
Make sure to set [moduleResolution](https://www.typescriptlang.org/docs/handbook/modules/theory.html#module-resolution) in your `tsconfig.json` file:
|
||||||
|
|
||||||
|
```json5
|
||||||
|
{
|
||||||
|
compilerOptions: {
|
||||||
|
// ⬇️ add this line to your tsconfig.json
|
||||||
|
moduleResolution: "bundler", // or "nodenext" | "node16" | "node"
|
||||||
|
},
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
We recommend using `bundler` or `nodenext`, but due to popularity of `node`, we still added support for it.
|
||||||
|
|
||||||
|
## Enable AsyncIterable for `Web Stream` API
|
||||||
|
|
||||||
|
Some modules uses `Web Stream` API like `ReadableStream` and `WritableStream`, you need to enable `DOM.AsyncIterable` in your `tsconfig.json`.
|
||||||
|
|
||||||
|
```json5
|
||||||
|
{
|
||||||
|
compilerOptions: {
|
||||||
|
// ⬇️ add this lib to your tsconfig.json
|
||||||
|
lib: ["DOM.AsyncIterable"],
|
||||||
|
},
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
```typescript
|
||||||
|
import { tool } from 'llamaindex'
|
||||||
|
import { agent } from "@llamaindex/workflow";
|
||||||
|
import { openai } from "@llamaindex/openai";
|
||||||
|
|
||||||
|
Settings.llm = openai({
|
||||||
|
model: "gpt-4o-mini",
|
||||||
|
});
|
||||||
|
|
||||||
|
const addTool = tool({
|
||||||
|
name: "add",
|
||||||
|
description: "Adds two numbers",
|
||||||
|
parameters: z.object({x: z.number(), y: z.number()}),
|
||||||
|
execute: ({ x, y }) => x + y,
|
||||||
|
});
|
||||||
|
|
||||||
|
const myAgent = agent({
|
||||||
|
tools: [addTool],
|
||||||
|
});
|
||||||
|
|
||||||
|
// Chat with the agent
|
||||||
|
const context = myAgent.run("Hello, how are you?");
|
||||||
|
|
||||||
|
for await (const event of context) {
|
||||||
|
if (event instanceof AgentStream) {
|
||||||
|
for (const chunk of event.data.delta) {
|
||||||
|
process.stdout.write(chunk); // stream response
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
console.log(event); // other events
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
## Run TypeScript Script in Node.js
|
||||||
|
|
||||||
|
We recommend to use [tsx](https://www.npmjs.com/package/tsx) to run TypeScript script in Node.js.
|
||||||
|
|
||||||
|
```shell
|
||||||
|
node --import tsx ./my-script.ts
|
||||||
|
```
|
||||||
@@ -0,0 +1,23 @@
|
|||||||
|
---
|
||||||
|
title: With Vite
|
||||||
|
description: In this guide, you'll learn how to use LlamaIndex with Vite
|
||||||
|
---
|
||||||
|
|
||||||
|
Before you start, make sure you have try LlamaIndex.TS in Node.js to make sure you understand the basics.
|
||||||
|
|
||||||
|
<Card
|
||||||
|
title="Getting Started with LlamaIndex.TS in Node.js"
|
||||||
|
href="/docs/llamaindex/getting_started/installation/node"
|
||||||
|
/>
|
||||||
|
|
||||||
|
Also, make sure you have a basic understanding of [Vite](https://vitejs.dev/).
|
||||||
|
|
||||||
|
## Why mention Vite?
|
||||||
|
|
||||||
|
Vite.js is widely used in building many web applications, like React.js, even for some native app like [Electron](https://www.electronjs.org/).
|
||||||
|
|
||||||
|
However, it's not a ready-to-use solution for a Node.js-like application using Vite, as Vite is designed for web applications(run in browser).
|
||||||
|
|
||||||
|
There's some plugin/framework based on Vite, like [Waku.gg](https://github.com/dai-shi/waku), or [Electron Vite](https://electron-vite.org/)
|
||||||
|
|
||||||
|
For now, we have no clear solution for bundling LlamaIndex.TS with Vite, if you have any idea/solution, please let us know.
|
||||||
@@ -1,118 +1,21 @@
|
|||||||
---
|
---
|
||||||
title: Welcome to LlamaIndex.TS
|
title: What is LlamaIndex.TS
|
||||||
description: LlamaIndex.TS is the leading framework for utilizing context engineering to build LLM applications in JavaScript and TypeScript.
|
description: LlamaIndex is the leading data framework for building LLM applications
|
||||||
---
|
---
|
||||||
|
|
||||||
LlamaIndex.TS is a **framework for utilizing context engineering to build generative AI applications** with large language models. From rapid-prototyping RAG chatbots to deploying multi-agent workflows in production, LlamaIndex gives you everything you need — all in idiomatic TypeScript.
|
LlamaIndex is a framework for building context-augmented generative AI applications with LLMs including agents and workflows.
|
||||||
|
|
||||||
Built for modern JavaScript runtimes like <SiNodedotjs className="inline" color="#5FA04E" /> **Node.js**, <SiDeno className="inline" color="#70FFAF" /> **Deno**, <SiBun className="inline" /> **Bun**, <SiCloudflareworkers className="inline" color="#F38020" /> **Cloudflare Workers**, and more.
|
The TypeScript implementation is designed for JavaScript server side applications using <SiNodedotjs className="inline" color="#5FA04E" /> Node.js, <SiDeno className="inline" color="#70FFAF" /> Deno, <SiBun className="inline" /> Bun, <SiCloudflareworkers className="inline" color="#F38020" /> Cloudflare Workers, and more.
|
||||||
|
|
||||||
<div className="grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3 my-6">
|
LlamaIndex.TS provides tools for beginners, advanced users, and everyone in between.
|
||||||
<a href="#introduction" className="block rounded-lg border border-gray-600/40 p-4 hover:border-gray-400 hover:bg-gray-700/20 no-underline">
|
|
||||||
<h3 className="mb-1 text-lg font-semibold underline">Introduction</h3>
|
|
||||||
<p className="text-sm text-gray-400 no-underline">Context engineering, agents & workflows — what do they mean?</p>
|
|
||||||
</a>
|
|
||||||
|
|
||||||
<a href="#use-cases" className="block rounded-lg border border-gray-600/40 p-4 hover:border-gray-400 hover:bg-gray-700/20 no-underline">
|
Try it out with a starter example using StackBlitz:
|
||||||
<h3 className="mb-1 text-lg font-semibold underline">Use cases</h3>
|
|
||||||
<p className="text-sm text-gray-400 no-underline">See what you can build with LlamaIndex.TS.</p>
|
|
||||||
</a>
|
|
||||||
|
|
||||||
<a href="#getting-started" className="block rounded-lg border border-gray-600/40 p-4 hover:border-gray-400 hover:bg-gray-700/20 no-underline">
|
|
||||||
<h3 className="mb-1 text-lg font-semibold underline">Getting started</h3>
|
|
||||||
<p className="text-sm text-gray-400 no-underline">Your first app in 5 lines of code.</p>
|
|
||||||
</a>
|
|
||||||
|
|
||||||
<a href="https://docs.cloud.llamaindex.ai/" className="block rounded-lg border border-gray-600/40 p-4 hover:border-gray-400 hover:bg-gray-700/20 no-underline" target="_blank" rel="noopener noreferrer">
|
|
||||||
<h3 className="mb-1 text-lg font-semibold underline">LlamaCloud</h3>
|
|
||||||
<p className="text-sm text-gray-400 no-underline">Managed parsing, extraction & retrieval pipelines.</p>
|
|
||||||
</a>
|
|
||||||
|
|
||||||
<a href="#community" className="block rounded-lg border border-gray-600/40 p-4 hover:border-gray-400 hover:bg-gray-700/20 no-underline">
|
|
||||||
<h3 className="mb-1 text-lg font-semibold underline">Community</h3>
|
|
||||||
<p className="text-sm text-gray-400 no-underline">Join thousands of builders on Discord, Twitter, and more.</p>
|
|
||||||
</a>
|
|
||||||
|
|
||||||
<a href="#related-projects" className="block rounded-lg border border-gray-600/40 p-4 hover:border-gray-400 hover:bg-gray-700/20 no-underline">
|
|
||||||
<h3 className="mb-1 text-lg font-semibold underline">Related projects</h3>
|
|
||||||
<p className="text-sm text-gray-400 no-underline">Connectors, demos & starter kits.</p>
|
|
||||||
</a>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
## Introduction
|
|
||||||
|
|
||||||
### What are agents?
|
|
||||||
|
|
||||||
[Agents](/docs/llamaindex/tutorials/agents/1_setup) are LLM-powered assistants that can reason, use external tools, and take actions to accomplish tasks such as research, data extraction, and automation.
|
|
||||||
LlamaIndex.TS provides foundational building blocks for creating and orchestrating these agents.
|
|
||||||
|
|
||||||
### What are workflows?
|
|
||||||
|
|
||||||
[Workflows](/docs/llamaindex/tutorials/workflows) are multi-step, event-driven processes that combine agents, data connectors, and other tools to solve complex problems.
|
|
||||||
With LlamaIndex.TS you can chain together retrieval, generation, and tool-calling steps and then deploy the entire pipeline as a microservice.
|
|
||||||
|
|
||||||
### What is context engineering?
|
|
||||||
|
|
||||||
LLMs come pre-trained on vast public corpora, but not on **your** private or domain-specific data.
|
|
||||||
Context engineering bridges that gap by injecting the right pieces of your data into the LLM prompt at the right time.
|
|
||||||
The most popular example is [Retrieval-Augmented Generation (RAG)](/docs/llamaindex/getting_started/concepts), but the same idea powers agent memory, evaluation, extraction, summarisation, and more.
|
|
||||||
|
|
||||||
LlamaIndex.TS gives you:
|
|
||||||
|
|
||||||
- **Data connectors** to ingest from APIs, files, SQL, and dozens more sources.
|
|
||||||
- **Indexes & retrievers** to store and retrieve your data for LLM consumption.
|
|
||||||
- **Agents and Engines** to query and use chat+reasoning interfaces over your data.
|
|
||||||
- **Workflows** for fine-grained orchestration of your data and LLM-powered agents.
|
|
||||||
- **Observability** integrations so you can iterate with confidence.
|
|
||||||
|
|
||||||
You can learn more about these concepts in our [concepts guide](/docs/llamaindex/getting_started/concepts).
|
|
||||||
|
|
||||||
## Use cases
|
|
||||||
|
|
||||||
Popular scenarios include:
|
|
||||||
|
|
||||||
- [LLM-Powered Agents](/docs/llamaindex/tutorials/agents/1_setup)
|
|
||||||
- [Indexing and Retrieval](/docs/llamaindex/tutorials/rag)
|
|
||||||
- [Extracting Structured Data](/docs/llamaindex/tutorials/structured_data_extraction)
|
|
||||||
- [Custom Orchestration with Workflows](/docs/llamaindex/tutorials/workflows)
|
|
||||||
|
|
||||||
## Getting started
|
|
||||||
|
|
||||||
The fastest way to get started is in StackBlitz below — no local setup required:
|
|
||||||
|
|
||||||
<iframe
|
<iframe
|
||||||
className="w-full h-[440px]"
|
className="w-full h-[440px]"
|
||||||
aria-label="LlamaIndex.TS Starter"
|
aria-label="LlamaIndex.TS Starter"
|
||||||
aria-description="Interactive starter for LlamaIndex.TS"
|
aria-description="This is a starter example for LlamaIndex.TS, it shows the basic usage of the library."
|
||||||
src="https://stackblitz.com/github/run-llama/LlamaIndexTS/tree/main/examples?embed=1&file=starter.ts"
|
src="https://stackblitz.com/github/run-llama/LlamaIndexTS/tree/main/examples?embed=1&file=starter.ts"
|
||||||
/>
|
/>
|
||||||
|
|
||||||
Want to learn more? We have several tutorials to get you started:
|
You'll need an OpenAI API key to run this example. You can retrieve it from [OpenAI](https://platform.openai.com/api-keys).
|
||||||
|
|
||||||
- [Installation + Runtime Guide](/docs/llamaindex/getting_started/installation)
|
|
||||||
- [Create your first agent](/docs/llamaindex/tutorials/agents/1_setup)
|
|
||||||
- [Learn how to index data and chat with it](/docs/llamaindex/tutorials/rag)
|
|
||||||
- [Learn how to write your own workflows and agents](/docs/llamaindex/tutorials/workflows)
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## LlamaCloud
|
|
||||||
|
|
||||||
Need an end-to-end managed pipeline? Check out **[LlamaCloud](https://cloud.llamaindex.ai/)**: best-in-class document parsing (LlamaParse), extraction (LlamaExtract), and indexing services with generous free tiers.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Community
|
|
||||||
|
|
||||||
- [Twitter](https://twitter.com/llama_index)
|
|
||||||
- [Discord](https://discord.gg/dGcwcsnxhU)
|
|
||||||
- [LinkedIn](https://www.linkedin.com/company/llamaindex/)
|
|
||||||
|
|
||||||
We 💜 contributors! View our [contributing guide](https://github.com/run-llama/LlamaIndexTS/blob/main/CONTRIBUTING.md) to get started.
|
|
||||||
|
|
||||||
## Related projects
|
|
||||||
|
|
||||||
- [Python framework GitHub](https://github.com/run-llama/llama_index)
|
|
||||||
- [Python docs](https://docs.llamaindex.ai/)
|
|
||||||
- [create-llama](https://www.npmjs.com/package/create-llama) — scaffold a new project in seconds!
|
|
||||||
- [UI Components](https://ui.llamaindex.ai/) — build chat applications with our Next.js components.
|
|
||||||
@@ -1,85 +0,0 @@
|
|||||||
---
|
|
||||||
title: MCP Toolbox For Databases
|
|
||||||
description: MCP Toolbox for Databases is an open source MCP server for databases.
|
|
||||||
---
|
|
||||||
|
|
||||||
# MCP Toolbox for Databases
|
|
||||||
|
|
||||||
[MCP Toolbox for Databases](https://github.com/googleapis/genai-toolbox) is an open source MCP server for databases. It was designed with enterprise-grade and production-quality in mind. It enables you to develop tools easier, faster, and more securely by handling the complexities such as connection pooling, authentication, and more.
|
|
||||||
|
|
||||||
Toolbox Tools can be seemlessly integrated with LlamaIndex applications. For more
|
|
||||||
information on [getting
|
|
||||||
started](https://googleapis.github.io/genai-toolbox/getting-started/local_quickstart_js/) or
|
|
||||||
[configuring](https://googleapis.github.io/genai-toolbox/getting-started/configure/)
|
|
||||||
Toolbox, see the
|
|
||||||
[documentation](https://googleapis.github.io/genai-toolbox/getting-started/introduction/).
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
### Configure and deploy
|
|
||||||
|
|
||||||
Toolbox is an open source server that you deploy and manage yourself. For more
|
|
||||||
instructions on deploying and configuring, see the official Toolbox
|
|
||||||
documentation:
|
|
||||||
|
|
||||||
* [Installing the Server](https://googleapis.github.io/genai-toolbox/getting-started/introduction/#installing-the-server)
|
|
||||||
* [Configuring Toolbox](https://googleapis.github.io/genai-toolbox/getting-started/configure/)
|
|
||||||
|
|
||||||
### Install client SDK
|
|
||||||
|
|
||||||
LlamaIndex relies on the `@toolbox-sdk/core` node package to use Toolbox. Install the
|
|
||||||
package before getting started:
|
|
||||||
|
|
||||||
```shell
|
|
||||||
npm install @toolbox-sdk/core
|
|
||||||
```
|
|
||||||
|
|
||||||
### Loading Toolbox Tools
|
|
||||||
|
|
||||||
Once your Toolbox server is configured and up and running, you can load tools
|
|
||||||
from your server using the SDK:
|
|
||||||
|
|
||||||
```javascript
|
|
||||||
import { gemini, GEMINI_MODEL } from "@llamaindex/google";
|
|
||||||
import { agent } from "@llamaindex/workflow";
|
|
||||||
import { tool } from "llamaindex";
|
|
||||||
import { ToolboxClient } from "@toolbox-sdk/core";
|
|
||||||
|
|
||||||
// Initialize LLM
|
|
||||||
const llm = gemini({
|
|
||||||
model: GEMINI_MODEL.GEMINI_2_0_FLASH,
|
|
||||||
apiKey: process.env.GOOGLE_API_KEY,
|
|
||||||
});
|
|
||||||
|
|
||||||
// Replace with your Toolbox Server URL
|
|
||||||
const URL = 'https://127.0.0.1:5000';
|
|
||||||
|
|
||||||
const client = new ToolboxClient("http://127.0.0.1:5000");
|
|
||||||
const toolboxTools = await client.loadToolset("my-toolset");
|
|
||||||
|
|
||||||
const getTool = (toolboxTool) => tool({
|
|
||||||
name: toolboxTool.getName(),
|
|
||||||
description: toolboxTool.getDescription(),
|
|
||||||
parameters: toolboxTool.getParamSchema(),
|
|
||||||
execute: toolboxTool
|
|
||||||
});
|
|
||||||
const tools = toolboxTools.map(getTool);
|
|
||||||
|
|
||||||
const myAgent = agent({
|
|
||||||
tools: tools,
|
|
||||||
llm,
|
|
||||||
memory,
|
|
||||||
systemPrompt: prompt,
|
|
||||||
});
|
|
||||||
const result = await myAgent.run(query);
|
|
||||||
console.log(result);
|
|
||||||
```
|
|
||||||
|
|
||||||
### Advanced Toolbox Features
|
|
||||||
|
|
||||||
Toolbox has a variety of features to make developing Gen AI tools for databases seamless.
|
|
||||||
For more information, read more about the following:
|
|
||||||
|
|
||||||
- [Authenticated Parameters](https://googleapis.github.io/genai-toolbox/resources/tools/#authenticated-parameters): bind tool inputs to values from OIDC tokens automatically, making it easy to run sensitive queries without potentially leaking data
|
|
||||||
- [Authorized Invocations](https://googleapis.github.io/genai-toolbox/resources/tools/#authorized-invocations): restrict access to use a tool based on the users Auth token
|
|
||||||
- [OpenTelemetry](https://googleapis.github.io/genai-toolbox/how-to/export_telemetry/): get metrics and tracing from Toolbox with [OpenTelemetry](https://opentelemetry.io/docs/)
|
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"title": "Integration",
|
"title": "Integration",
|
||||||
"description": "See our integrations",
|
"description": "See our integrations",
|
||||||
"pages": ["open-llm-metry", "lang-trace", "mcp-toolbox", "vercel"]
|
"pages": ["open-llm-metry", "lang-trace", "vercel"]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -34,7 +34,6 @@ const jokeAgent = agent({
|
|||||||
// Run the workflow
|
// Run the workflow
|
||||||
const result = await jokeAgent.run("Tell me something funny");
|
const result = await jokeAgent.run("Tell me something funny");
|
||||||
console.log(result.data.result); // Baby Llama is called cria
|
console.log(result.data.result); // Baby Llama is called cria
|
||||||
console.log(result.data.message); // { role: 'assistant', content: 'Baby Llama is called cria' }
|
|
||||||
```
|
```
|
||||||
|
|
||||||
### Event Streaming
|
### Event Streaming
|
||||||
|
|||||||
@@ -1,164 +0,0 @@
|
|||||||
---
|
|
||||||
title: Low-Level LLM Execution
|
|
||||||
---
|
|
||||||
|
|
||||||
Sometimes your need more control over LLM interactions than what high-level agents provide. The `llm.exec` method makes it simple for you to make a single LLM call with tools but hides the complexity of executing the tools and generating the tool messages.
|
|
||||||
|
|
||||||
## When to Use `llm.exec`
|
|
||||||
|
|
||||||
Use `llm.exec` when you need to:
|
|
||||||
- Build custom agent logic in [workflow](/docs/llamaindex/modules/agents/workflows) steps
|
|
||||||
- Have precise control over message handling and tool execution
|
|
||||||
|
|
||||||
## Basic Usage
|
|
||||||
|
|
||||||
The `llm.exec` method takes messages and tools as parameter and executes one LLM call.
|
|
||||||
The LLM might either request to call one or more of the tools or generate an assistant message as result.
|
|
||||||
For each tool call that is requested, `llm.exec` executes it and generates the two tool call messages (call and result). If no tool call is requested, just the assistant message is returned.
|
|
||||||
|
|
||||||
```ts
|
|
||||||
import { openai } from "@llamaindex/openai";
|
|
||||||
import { ChatMessage, tool } from "llamaindex";
|
|
||||||
import z from "zod";
|
|
||||||
|
|
||||||
const llm = openai({ model: "gpt-4.1-mini" });
|
|
||||||
const messages = [
|
|
||||||
{
|
|
||||||
content: "What's the weather like in San Francisco?",
|
|
||||||
role: "user",
|
|
||||||
} as ChatMessage,
|
|
||||||
];
|
|
||||||
|
|
||||||
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}!`;
|
|
||||||
},
|
|
||||||
}),
|
|
||||||
],
|
|
||||||
});
|
|
||||||
|
|
||||||
// Add the new messages (including tool calls and responses) to your conversation
|
|
||||||
messages.push(...newMessages);
|
|
||||||
```
|
|
||||||
|
|
||||||
> `newMessages` is an array as each tool call generates two messages: a tool call message and the tool call result message.
|
|
||||||
|
|
||||||
## Agent Loop Pattern
|
|
||||||
|
|
||||||
A common pattern is to use `llm.exec` in a loop until the LLM stops making tool calls:
|
|
||||||
|
|
||||||
```ts
|
|
||||||
import { openai } from "@llamaindex/openai";
|
|
||||||
import { ChatMessage, tool } from "llamaindex";
|
|
||||||
import z from "zod";
|
|
||||||
|
|
||||||
async function runAgentLoop() {
|
|
||||||
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 when no more tool calls are made
|
|
||||||
exit = toolCalls.length === 0;
|
|
||||||
} while (!exit);
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
## Streaming Support
|
|
||||||
|
|
||||||
For real-time responses, use the `stream` option to get the assistant's response as streamed tokens:
|
|
||||||
|
|
||||||
```ts
|
|
||||||
import { openai } from "@llamaindex/openai";
|
|
||||||
import { tool } from "llamaindex";
|
|
||||||
import z from "zod";
|
|
||||||
|
|
||||||
async function streamingAgentLoop() {
|
|
||||||
const llm = openai({ model: "gpt-4o-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,
|
|
||||||
});
|
|
||||||
|
|
||||||
// Stream the response token by token
|
|
||||||
for await (const chunk of stream) {
|
|
||||||
process.stdout.write(chunk.delta);
|
|
||||||
}
|
|
||||||
|
|
||||||
messages.push(...newMessages());
|
|
||||||
|
|
||||||
exit = toolCalls.length === 0;
|
|
||||||
} while (!exit);
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
> `newMessages` is a function when streaming. The reason is that the result only is available after streaming. Calling it before, will throw an error.
|
|
||||||
|
|
||||||
## Return Values
|
|
||||||
|
|
||||||
`llm.exec` returns an object with:
|
|
||||||
|
|
||||||
- **`newMessages`**: Array of new chat messages including the LLM response and any tool call messages (call or result). This is a function return the array when streaming.
|
|
||||||
- **`toolCalls`**: Array of tool calls made by the LLM
|
|
||||||
- **`stream`**: Async iterable for streaming responses (only when `stream: true`)
|
|
||||||
|
|
||||||
## Best Practices
|
|
||||||
|
|
||||||
For using `llm.exec` in an agent loop, take care to:
|
|
||||||
|
|
||||||
1. **Maintain message history**: Always add `newMessages` to your conversation history
|
|
||||||
2. **Set exit conditions**: Implement proper logic to avoid infinite loops
|
|
||||||
|
|
||||||
@@ -1,10 +1,4 @@
|
|||||||
{
|
{
|
||||||
"title": "Agents",
|
"title": "Agents",
|
||||||
"pages": [
|
"pages": ["tool", "agent_workflow", "workflows", "natural_language_workflow"]
|
||||||
"tool",
|
|
||||||
"agent_workflow",
|
|
||||||
"workflows",
|
|
||||||
"low-level",
|
|
||||||
"natural_language_workflow"
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -101,9 +101,6 @@ const agent = agent({
|
|||||||
});
|
});
|
||||||
```
|
```
|
||||||
|
|
||||||
You can also use [MCP Toolbox for
|
|
||||||
Databases](/docs/llamaindex/integration/mcp-toolbox) to interact with MCP tools.
|
|
||||||
|
|
||||||
|
|
||||||
## Function tool
|
## Function tool
|
||||||
|
|
||||||
|
|||||||
@@ -106,40 +106,34 @@ const memory = createMemory({
|
|||||||
|
|
||||||
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`.
|
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 three predefined memory blocks:
|
Currently, there are two predefined memory blocks:
|
||||||
|
|
||||||
- `staticBlock`: A memory block that stores a static piece of information.
|
- `staticBlock`: A memory block that stores a static piece of information.
|
||||||
- `factExtractionBlock`: A memory block that extracts facts from the chat history.
|
- `factExtractionBlock`: A memory block that extracts facts from the chat history.
|
||||||
- `vectorBlock`: A memory block that stores and retrieves chat messages from a vector database using semantic similarity search. Messages are stored individually and retrieved based on their relevance to recent conversation context. Here we've passed in the `vectorStore` to use to store and retrieve the chat messages.
|
|
||||||
|
|
||||||
This sounds a bit complicated, but it's actually quite simple. Let's look at an example:
|
This sounds a bit complicated, but it's actually quite simple. Let's look at an example:
|
||||||
|
|
||||||
```ts
|
```ts
|
||||||
import { createMemory, factExtractionBlock, staticBlock, vectorBlock } from "llamaindex";
|
import { createMemory, factExtractionBlock, staticBlock } from "llamaindex";
|
||||||
import { QdrantVectorStore } from "@llamaindex/qdrant";
|
|
||||||
import { OpenAIEmbedding } from "@llamaindex/openai";
|
|
||||||
|
|
||||||
const memoryBlocks= [
|
const memoryBlocks= [
|
||||||
staticBlock({
|
staticBlock({
|
||||||
|
id: "core_info",
|
||||||
content: "My name is Logan, and I live in Saskatoon. I work at LlamaIndex.",
|
content: "My name is Logan, and I live in Saskatoon. I work at LlamaIndex.",
|
||||||
}),
|
}),
|
||||||
factExtractionBlock({
|
factExtractionBlock({
|
||||||
|
id: "user-extracted_info",
|
||||||
priority: 1,
|
priority: 1,
|
||||||
llm: llm,
|
llm: llm,
|
||||||
maxFacts: 50,
|
maxFacts: 50,
|
||||||
}),
|
}),
|
||||||
vectorBlock({
|
|
||||||
vectorStore: new QdrantVectorStore({ url: "http://localhost:6333" }),
|
|
||||||
priority: 2,
|
|
||||||
}),
|
|
||||||
];
|
];
|
||||||
```
|
```
|
||||||
|
|
||||||
Here, we've setup three memory blocks:
|
Here, we've setup two memory blocks:
|
||||||
|
|
||||||
- `staticBlock`: 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.
|
- `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.
|
||||||
- `factExtractionBlock`: 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.
|
- `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.
|
||||||
- `vectorBlock`: A vector memory block that will store in a vector database and retrieve them from there. Messages are stored individually and retrieved based on their relevance to recent conversation context. Here we've passed in the `vectorStore` to use to store and retrieve the chat messages.
|
|
||||||
|
|
||||||
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.
|
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.
|
||||||
|
|
||||||
@@ -164,46 +158,6 @@ When memory is retrieved (using `getLLM`), the short-term and long-term memories
|
|||||||
|
|
||||||
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).
|
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).
|
||||||
|
|
||||||
|
|
||||||
#### VectorBlock Configuration Options
|
|
||||||
|
|
||||||
The `vectorBlock` offers several configuration options to customize its behavior:
|
|
||||||
|
|
||||||
```ts
|
|
||||||
vectorBlock({
|
|
||||||
vectorStore: new QdrantVectorStore({ url: "http://localhost:6333" }),
|
|
||||||
priority: 2,
|
|
||||||
retrievalContextWindow: 5, // Number of recent messages to use for context when retrieving
|
|
||||||
formatTemplate: new PromptTemplate({ template: "Context: {{ context }}" }), // Custom formatting template
|
|
||||||
nodePostprocessors: [/* custom postprocessors */], // Apply processing to retrieved nodes
|
|
||||||
queryOptions: {
|
|
||||||
similarityTopK: 3, // Number of top similar results to return (default: 2)
|
|
||||||
mode: VectorStoreQueryMode.DEFAULT, // Query mode for the vector store
|
|
||||||
sessionFilterKey: "session_id", // Metadata key for session filtering (default: "session_id")
|
|
||||||
// Custom filters can be added here - session filter is automatically included
|
|
||||||
filters: {
|
|
||||||
filters: [
|
|
||||||
{ key: "custom_field", value: "custom_value", operator: "==" }
|
|
||||||
],
|
|
||||||
condition: "and"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
})
|
|
||||||
```
|
|
||||||
|
|
||||||
**Key Configuration Options:**
|
|
||||||
|
|
||||||
- **`retrievalContextWindow`**: Number of recent messages to consider when creating the retrieval query (default: 5). A larger window provides more context but may be less precise.
|
|
||||||
- **`formatTemplate`**: Template for formatting retrieved information before adding to memory. Defaults to a simple context template.
|
|
||||||
- **`nodePostprocessors`**: Array of postprocessors to apply to retrieved nodes, useful for filtering or transforming results.
|
|
||||||
- **`queryOptions.similarityTopK`**: Number of most similar messages to retrieve from the vector store (default: 2).
|
|
||||||
- **`queryOptions.sessionFilterKey`**: Metadata key used to isolate memory between different sessions (default: "session_id").
|
|
||||||
- **`queryOptions.filters`**: Additional metadata filters for retrieval. The session filter is automatically added to ensure memory isolation.
|
|
||||||
|
|
||||||
**Session Isolation:**
|
|
||||||
|
|
||||||
The vectorBlock automatically adds a session filter using the block's ID to ensure that memories from different sessions don't interfere with each other. This filter uses the `sessionFilterKey` (default: "session_id") and can be customized if needed.
|
|
||||||
|
|
||||||
## Persistence with Snapshots
|
## Persistence with Snapshots
|
||||||
|
|
||||||
Save and restore memory state:
|
Save and restore memory state:
|
||||||
|
|||||||
@@ -5,13 +5,13 @@ title: Bedrock
|
|||||||
## Installation
|
## Installation
|
||||||
|
|
||||||
```package-install
|
```package-install
|
||||||
npm i llamaindex @llamaindex/aws
|
npm i llamaindex @llamaindex/community
|
||||||
```
|
```
|
||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
|
|
||||||
```ts
|
```ts
|
||||||
import { BEDROCK_MODELS, Bedrock } from "@llamaindex/aws";
|
import { BEDROCK_MODELS, Bedrock } from "@llamaindex/community";
|
||||||
|
|
||||||
Settings.llm = new Bedrock({
|
Settings.llm = new Bedrock({
|
||||||
model: BEDROCK_MODELS.ANTHROPIC_CLAUDE_3_HAIKU,
|
model: BEDROCK_MODELS.ANTHROPIC_CLAUDE_3_HAIKU,
|
||||||
@@ -23,19 +23,9 @@ Settings.llm = new Bedrock({
|
|||||||
});
|
});
|
||||||
```
|
```
|
||||||
|
|
||||||
Supported models are listed below (accessible by BEDROCK_MODELS).
|
Currently only supports Anthropic and Meta models:
|
||||||
|
|
||||||
```ts
|
```ts
|
||||||
AMAZON_TITAN_TG1_LARGE = "amazon.titan-tg1-large";
|
|
||||||
AMAZON_TITAN_TEXT_EXPRESS_V1 = "amazon.titan-text-express-v1";
|
|
||||||
AI21_J2_GRANDE_INSTRUCT = "ai21.j2-grande-instruct";
|
|
||||||
AI21_J2_JUMBO_INSTRUCT = "ai21.j2-jumbo-instruct";
|
|
||||||
AI21_J2_MID = "ai21.j2-mid";
|
|
||||||
AI21_J2_MID_V1 = "ai21.j2-mid-v1";
|
|
||||||
AI21_J2_ULTRA = "ai21.j2-ultra";
|
|
||||||
AI21_J2_ULTRA_V1 = "ai21.j2-ultra-v1";
|
|
||||||
COHERE_COMMAND_TEXT_V14 = "cohere.command-text-v14";
|
|
||||||
|
|
||||||
ANTHROPIC_CLAUDE_INSTANT_1 = "anthropic.claude-instant-v1";
|
ANTHROPIC_CLAUDE_INSTANT_1 = "anthropic.claude-instant-v1";
|
||||||
ANTHROPIC_CLAUDE_2 = "anthropic.claude-v2";
|
ANTHROPIC_CLAUDE_2 = "anthropic.claude-v2";
|
||||||
ANTHROPIC_CLAUDE_2_1 = "anthropic.claude-v2:1";
|
ANTHROPIC_CLAUDE_2_1 = "anthropic.claude-v2:1";
|
||||||
@@ -43,12 +33,7 @@ ANTHROPIC_CLAUDE_3_SONNET = "anthropic.claude-3-sonnet-20240229-v1:0";
|
|||||||
ANTHROPIC_CLAUDE_3_HAIKU = "anthropic.claude-3-haiku-20240307-v1:0";
|
ANTHROPIC_CLAUDE_3_HAIKU = "anthropic.claude-3-haiku-20240307-v1:0";
|
||||||
ANTHROPIC_CLAUDE_3_OPUS = "anthropic.claude-3-opus-20240229-v1:0"; // available on us-west-2
|
ANTHROPIC_CLAUDE_3_OPUS = "anthropic.claude-3-opus-20240229-v1:0"; // available on us-west-2
|
||||||
ANTHROPIC_CLAUDE_3_5_SONNET = "anthropic.claude-3-5-sonnet-20240620-v1:0";
|
ANTHROPIC_CLAUDE_3_5_SONNET = "anthropic.claude-3-5-sonnet-20240620-v1:0";
|
||||||
ANTHROPIC_CLAUDE_3_5_SONNET_V2 = "anthropic.claude-3-5-sonnet-20241022-v2:0";
|
|
||||||
ANTHROPIC_CLAUDE_3_5_HAIKU = "anthropic.claude-3-5-haiku-20241022-v1:0";
|
ANTHROPIC_CLAUDE_3_5_HAIKU = "anthropic.claude-3-5-haiku-20241022-v1:0";
|
||||||
ANTHROPIC_CLAUDE_3_7_SONNET = "anthropic.claude-3-7-sonnet-20250219-v1:0";
|
|
||||||
ANTHROPIC_CLAUDE_4_SONNET = "anthropic.claude-sonnet-4-20250514-v1:0";
|
|
||||||
ANTHROPIC_CLAUDE_4_OPUS = "anthropic.claude-opus-4-20250514-v1:0";
|
|
||||||
|
|
||||||
META_LLAMA2_13B_CHAT = "meta.llama2-13b-chat-v1";
|
META_LLAMA2_13B_CHAT = "meta.llama2-13b-chat-v1";
|
||||||
META_LLAMA2_70B_CHAT = "meta.llama2-70b-chat-v1";
|
META_LLAMA2_70B_CHAT = "meta.llama2-70b-chat-v1";
|
||||||
META_LLAMA3_8B_INSTRUCT = "meta.llama3-8b-instruct-v1:0";
|
META_LLAMA3_8B_INSTRUCT = "meta.llama3-8b-instruct-v1:0";
|
||||||
@@ -60,66 +45,41 @@ META_LLAMA3_2_1B_INSTRUCT = "meta.llama3-2-1b-instruct-v1:0"; // only available
|
|||||||
META_LLAMA3_2_3B_INSTRUCT = "meta.llama3-2-3b-instruct-v1:0"; // only available via inference endpoints (see below)
|
META_LLAMA3_2_3B_INSTRUCT = "meta.llama3-2-3b-instruct-v1:0"; // only available via inference endpoints (see below)
|
||||||
META_LLAMA3_2_11B_INSTRUCT = "meta.llama3-2-11b-instruct-v1:0"; // only available via inference endpoints (see below), multimodal and function call supported
|
META_LLAMA3_2_11B_INSTRUCT = "meta.llama3-2-11b-instruct-v1:0"; // only available via inference endpoints (see below), multimodal and function call supported
|
||||||
META_LLAMA3_2_90B_INSTRUCT = "meta.llama3-2-90b-instruct-v1:0"; // only available via inference endpoints (see below), multimodal and function call supported
|
META_LLAMA3_2_90B_INSTRUCT = "meta.llama3-2-90b-instruct-v1:0"; // only available via inference endpoints (see below), multimodal and function call supported
|
||||||
META_LLAMA3_3_70B_INSTRUCT = "meta.llama3-3-70b-instruct-v1:0";
|
|
||||||
|
|
||||||
MISTRAL_7B_INSTRUCT = "mistral.mistral-7b-instruct-v0:2";
|
|
||||||
MISTRAL_MIXTRAL_7B_INSTRUCT = "mistral.mixtral-8x7b-instruct-v0:1";
|
|
||||||
MISTRAL_MIXTRAL_LARGE_2402 = "mistral.mistral-large-2402-v1:0";
|
|
||||||
|
|
||||||
AMAZON_NOVA_PREMIER_1 = "amazon.nova-premier-v1:0";
|
AMAZON_NOVA_PREMIER_1 = "amazon.nova-premier-v1:0";
|
||||||
AMAZON_NOVA_PRO_1 = "amazon.nova-pro-v1:0";
|
AMAZON_NOVA_PRO_1 = "amazon.nova-pro-v1:0";
|
||||||
AMAZON_NOVA_LITE_1 = "amazon.nova-lite-v1:0";
|
AMAZON_NOVA_LITE_1 = "amazon.nova-lite-v1:0";
|
||||||
AMAZON_NOVA_MICRO_1 = "amazon.nova-micro-v1:0";
|
AMAZON_NOVA_MICRO_1 = "amazon.nova-micro-v1:0";
|
||||||
```
|
```
|
||||||
|
|
||||||
You can also use Bedrock's Inference endpoints by using the model names (accessible by INFERENCE_BEDROCK_MODELS).
|
You can also use Bedrock's Inference endpoints by using the model names:
|
||||||
Note that the region must be set correctly.
|
|
||||||
|
|
||||||
```ts
|
```ts
|
||||||
//US
|
// US
|
||||||
US_ANTHROPIC_CLAUDE_3_HAIKU = "us.anthropic.claude-3-haiku-20240307-v1:0";
|
US_ANTHROPIC_CLAUDE_3_HAIKU = "us.anthropic.claude-3-haiku-20240307-v1:0";
|
||||||
US_ANTHROPIC_CLAUDE_3_5_HAIKU = "us.anthropic.claude-3-5-haiku-20241022-v1:0";
|
|
||||||
US_ANTHROPIC_CLAUDE_3_OPUS = "us.anthropic.claude-3-opus-20240229-v1:0";
|
US_ANTHROPIC_CLAUDE_3_OPUS = "us.anthropic.claude-3-opus-20240229-v1:0";
|
||||||
US_ANTHROPIC_CLAUDE_3_SONNET = "us.anthropic.claude-3-sonnet-20240229-v1:0";
|
US_ANTHROPIC_CLAUDE_3_SONNET = "us.anthropic.claude-3-sonnet-20240229-v1:0";
|
||||||
US_ANTHROPIC_CLAUDE_3_5_SONNET = "us.anthropic.claude-3-5-sonnet-20240620-v1:0";
|
US_ANTHROPIC_CLAUDE_3_5_SONNET = "us.anthropic.claude-3-5-sonnet-20240620-v1:0";
|
||||||
US_ANTHROPIC_CLAUDE_3_5_SONNET_V2 = "us.anthropic.claude-3-5-sonnet-20241022-v2:0";
|
US_ANTHROPIC_CLAUDE_3_5_SONNET_V2 =
|
||||||
US_ANTHROPIC_CLAUDE_3_7_SONNET = "us.anthropic.claude-3-7-sonnet-20250219-v1:0";
|
"us.anthropic.claude-3-5-sonnet-20241022-v2:0";
|
||||||
US_ANTHROPIC_CLAUDE_4_SONNET = "us.anthropic.claude-sonnet-4-20250514-v1:0";
|
|
||||||
US_ANTHROPIC_CLAUDE_4_OPUS = "us.anthropic.claude-opus-4-20250514-v1:0";
|
|
||||||
US_META_LLAMA_3_2_1B_INSTRUCT = "us.meta.llama3-2-1b-instruct-v1:0";
|
US_META_LLAMA_3_2_1B_INSTRUCT = "us.meta.llama3-2-1b-instruct-v1:0";
|
||||||
US_META_LLAMA_3_2_3B_INSTRUCT = "us.meta.llama3-2-3b-instruct-v1:0";
|
US_META_LLAMA_3_2_3B_INSTRUCT = "us.meta.llama3-2-3b-instruct-v1:0";
|
||||||
US_META_LLAMA_3_2_11B_INSTRUCT = "us.meta.llama3-2-11b-instruct-v1:0";
|
US_META_LLAMA_3_2_11B_INSTRUCT = "us.meta.llama3-2-11b-instruct-v1:0";
|
||||||
US_META_LLAMA_3_2_90B_INSTRUCT = "us.meta.llama3-2-90b-instruct-v1:0";
|
US_META_LLAMA_3_2_90B_INSTRUCT = "us.meta.llama3-2-90b-instruct-v1:0";
|
||||||
US_META_LLAMA_3_3_70B_INSTRUCT = "us.meta.llama3-3-70b-instruct-v1:0";
|
US_AMAZON_NOVA_PRO_1 = "us.amazon.nova-premier-v1:0";
|
||||||
US_AMAZON_NOVA_PREMIER_1 = "us.amazon.nova-premier-v1:0";
|
|
||||||
US_AMAZON_NOVA_PRO_1 = "us.amazon.nova-pro-v1:0";
|
US_AMAZON_NOVA_PRO_1 = "us.amazon.nova-pro-v1:0";
|
||||||
US_AMAZON_NOVA_LITE_1 = "us.amazon.nova-lite-v1:0";
|
US_AMAZON_NOVA_LITE_1 = "us.amazon.nova-lite-v1:0";
|
||||||
US_AMAZON_NOVA_MICRO_1 = "us.amazon.nova-micro-v1:0";
|
US_AMAZON_NOVA_MICRO_1 = "us.amazon.nova-micro-v1:0";
|
||||||
|
|
||||||
//EU
|
// EU
|
||||||
EU_ANTHROPIC_CLAUDE_3_HAIKU = "eu.anthropic.claude-3-haiku-20240307-v1:0";
|
EU_ANTHROPIC_CLAUDE_3_HAIKU = "eu.anthropic.claude-3-haiku-20240307-v1:0";
|
||||||
EU_ANTHROPIC_CLAUDE_3_5_HAIKU = "eu.anthropic.claude-3-5-haiku-20240307-v1:0";
|
|
||||||
EU_ANTHROPIC_CLAUDE_3_SONNET = "eu.anthropic.claude-3-sonnet-20240229-v1:0";
|
EU_ANTHROPIC_CLAUDE_3_SONNET = "eu.anthropic.claude-3-sonnet-20240229-v1:0";
|
||||||
EU_ANTHROPIC_CLAUDE_3_5_SONNET = "eu.anthropic.claude-3-5-sonnet-20240620-v1:0";
|
EU_ANTHROPIC_CLAUDE_3_5_SONNET = "eu.anthropic.claude-3-5-sonnet-20240620-v1:0";
|
||||||
EU_ANTHROPIC_CLAUDE_3_7_SONNET = "eu.anthropic.claude-3-7-sonnet-20250219-v1:0";
|
|
||||||
EU_ANTHROPIC_CLAUDE_4_SONNET = "eu.anthropic.claude-sonnet-4-20250514-v1:0";
|
|
||||||
EU_ANTHROPIC_CLAUDE_4_OPUS = "eu.anthropic.claude-opus-4-20250514-v1:0";
|
|
||||||
EU_META_LLAMA_3_2_1B_INSTRUCT = "eu.meta.llama3-2-1b-instruct-v1:0";
|
EU_META_LLAMA_3_2_1B_INSTRUCT = "eu.meta.llama3-2-1b-instruct-v1:0";
|
||||||
EU_META_LLAMA_3_2_3B_INSTRUCT = "eu.meta.llama3-2-3b-instruct-v1:0";
|
EU_META_LLAMA_3_2_3B_INSTRUCT = "eu.meta.llama3-2-3b-instruct-v1:0";
|
||||||
EU_AMAZON_NOVA_PREMIER_1 = "eu.amazon.nova-premier-v1:0";
|
EU_AMAZON_NOVA_PRO_1 = "eu.amazon.nova-premier-v1:0";
|
||||||
EU_AMAZON_NOVA_PRO_1 = "eu.amazon.nova-pro-v1:0";
|
EU_AMAZON_NOVA_PRO_1 = "eu.amazon.nova-pro-v1:0";
|
||||||
EU_AMAZON_NOVA_LITE_1 = "eu.amazon.nova-lite-v1:0";
|
EU_AMAZON_NOVA_LITE_1 = "eu.amazon.nova-lite-v1:0";
|
||||||
EU_AMAZON_NOVA_MICRO_1 = "eu.amazon.nova-micro-v1:0";
|
EU_AMAZON_NOVA_MICRO_1 = "eu.amazon.nova-micro-v1:0";
|
||||||
|
|
||||||
//APAC
|
|
||||||
APAC_ANTHROPIC_CLAUDE_3_5_SONNET = "apac.anthropic.claude-3-5-sonnet-20240620-v1:0";
|
|
||||||
APAC_ANTHROPIC_CLAUDE_3_5_SONNET_V2 = "apac.anthropic.claude-3-5-sonnet-20241022-v2:0";
|
|
||||||
APAC_ANTHROPIC_CLAUDE_3_7_SONNET = "apac.anthropic.claude-3-7-sonnet-20250219-v1:0";
|
|
||||||
APAC_ANTHROPIC_CLAUDE_3_HAIKU = "apac.anthropic.claude-3-haiku-20240307-v1:0";
|
|
||||||
APAC_ANTHROPIC_CLAUDE_3_SONNET = "apac.anthropic.claude-3-sonnet-20240229-v1:0";
|
|
||||||
APAC_AMAZON_NOVA_PRO_1 = "apac.amazon.nova-pro-v1:0";
|
|
||||||
APAC_AMAZON_NOVA_LITE_1 = "apac.amazon.nova-lite-v1:0";
|
|
||||||
APAC_AMAZON_NOVA_MICRO_1 = "apac.amazon.nova-micro-v1:0";
|
|
||||||
```
|
```
|
||||||
|
|
||||||
Sonnet, Haiku and Opus are multimodal, image_url only supports base64 data url format, e.g. `data:image/jpeg;base64,SGVsbG8sIFdvcmxkIQ==`
|
Sonnet, Haiku and Opus are multimodal, image_url only supports base64 data url format, e.g. `data:image/jpeg;base64,SGVsbG8sIFdvcmxkIQ==`
|
||||||
@@ -127,11 +87,10 @@ Sonnet, Haiku and Opus are multimodal, image_url only supports base64 data url f
|
|||||||
## Full Example
|
## Full Example
|
||||||
|
|
||||||
```ts
|
```ts
|
||||||
import { INFERENCE_BEDROCK_MODELS, Bedrock } from "@llamaindex/aws";
|
import { BEDROCK_MODELS, Bedrock } from "llamaindex";
|
||||||
|
|
||||||
Settings.llm = new Bedrock({
|
Settings.llm = new Bedrock({
|
||||||
model: INFERENCE_BEDROCK_MODELS.US_ANTHROPIC_CLAUDE_3_SONNET,
|
model: BEDROCK_MODELS.ANTHROPIC_CLAUDE_3_HAIKU,
|
||||||
region: "us-east-1",
|
|
||||||
});
|
});
|
||||||
|
|
||||||
async function main() {
|
async function main() {
|
||||||
@@ -160,7 +119,7 @@ async function main() {
|
|||||||
## Agent Example
|
## Agent Example
|
||||||
|
|
||||||
```ts
|
```ts
|
||||||
import { BEDROCK_MODELS, Bedrock } from "@llamaindex/aws";
|
import { BEDROCK_MODELS, Bedrock } from "@llamaindex/community";
|
||||||
import { tool } from "llamaindex";
|
import { tool } from "llamaindex";
|
||||||
import { agent } from "@llamaindex/workflow";
|
import { agent } from "@llamaindex/workflow";
|
||||||
import { z } from "zod";
|
import { z } from "zod";
|
||||||
|
|||||||
@@ -38,13 +38,10 @@ You should expect output something like:
|
|||||||
{
|
{
|
||||||
result: '5 + 5 is 10. Then, 10 divided by 2 is 5.',
|
result: '5 + 5 is 10. Then, 10 divided by 2 is 5.',
|
||||||
state: {
|
state: {
|
||||||
memory: Memory {
|
memory: ChatMemoryBuffer {
|
||||||
messages: [Array],
|
chatStore: SimpleChatStore {},
|
||||||
tokenLimit: 30000,
|
chatStoreKey: 'chat_history',
|
||||||
shortTermTokenLimitRatio: 0.7,
|
tokenLimit: 750000
|
||||||
memoryBlocks: [],
|
|
||||||
memoryCursor: 0,
|
|
||||||
adapters: [Object]
|
|
||||||
},
|
},
|
||||||
scratchpad: [],
|
scratchpad: [],
|
||||||
currentAgentName: 'Agent',
|
currentAgentName: 'Agent',
|
||||||
|
|||||||
@@ -1,71 +1,5 @@
|
|||||||
# @llamaindex/cloudflare-worker-agent-test
|
# @llamaindex/cloudflare-worker-agent-test
|
||||||
|
|
||||||
## 0.0.185
|
|
||||||
|
|
||||||
### Patch Changes
|
|
||||||
|
|
||||||
- llamaindex@0.11.24
|
|
||||||
|
|
||||||
## 0.0.184
|
|
||||||
|
|
||||||
### Patch Changes
|
|
||||||
|
|
||||||
- llamaindex@0.11.23
|
|
||||||
|
|
||||||
## 0.0.183
|
|
||||||
|
|
||||||
### Patch Changes
|
|
||||||
|
|
||||||
- llamaindex@0.11.22
|
|
||||||
|
|
||||||
## 0.0.182
|
|
||||||
|
|
||||||
### Patch Changes
|
|
||||||
|
|
||||||
- llamaindex@0.11.21
|
|
||||||
|
|
||||||
## 0.0.181
|
|
||||||
|
|
||||||
### Patch Changes
|
|
||||||
|
|
||||||
- llamaindex@0.11.20
|
|
||||||
|
|
||||||
## 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
|
## 0.0.174
|
||||||
|
|
||||||
### Patch Changes
|
### Patch Changes
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@llamaindex/cloudflare-worker-agent-test",
|
"name": "@llamaindex/cloudflare-worker-agent-test",
|
||||||
"version": "0.0.185",
|
"version": "0.0.174",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"private": true,
|
"private": true,
|
||||||
"scripts": {
|
"scripts": {
|
||||||
|
|||||||
@@ -1,74 +1,5 @@
|
|||||||
# @llamaindex/llama-parse-browser-test
|
# @llamaindex/llama-parse-browser-test
|
||||||
|
|
||||||
## 0.0.83
|
|
||||||
|
|
||||||
### Patch Changes
|
|
||||||
|
|
||||||
- Updated dependencies [c3bf3c7]
|
|
||||||
- @llamaindex/cloud@4.0.28
|
|
||||||
|
|
||||||
## 0.0.82
|
|
||||||
|
|
||||||
### Patch Changes
|
|
||||||
|
|
||||||
- @llamaindex/cloud@4.0.27
|
|
||||||
|
|
||||||
## 0.0.81
|
|
||||||
|
|
||||||
### Patch Changes
|
|
||||||
|
|
||||||
- @llamaindex/cloud@4.0.26
|
|
||||||
|
|
||||||
## 0.0.80
|
|
||||||
|
|
||||||
### Patch Changes
|
|
||||||
|
|
||||||
- Updated dependencies [2967d57]
|
|
||||||
- @llamaindex/cloud@4.0.25
|
|
||||||
|
|
||||||
## 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
|
## 0.0.73
|
||||||
|
|
||||||
### Patch Changes
|
### Patch Changes
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"name": "@llamaindex/llama-parse-browser-test",
|
"name": "@llamaindex/llama-parse-browser-test",
|
||||||
"private": true,
|
"private": true,
|
||||||
"version": "0.0.83",
|
"version": "0.0.73",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"dev": "vite",
|
"dev": "vite",
|
||||||
|
|||||||
@@ -1,71 +1,5 @@
|
|||||||
# @llamaindex/next-agent-test
|
# @llamaindex/next-agent-test
|
||||||
|
|
||||||
## 0.1.185
|
|
||||||
|
|
||||||
### Patch Changes
|
|
||||||
|
|
||||||
- llamaindex@0.11.24
|
|
||||||
|
|
||||||
## 0.1.184
|
|
||||||
|
|
||||||
### Patch Changes
|
|
||||||
|
|
||||||
- llamaindex@0.11.23
|
|
||||||
|
|
||||||
## 0.1.183
|
|
||||||
|
|
||||||
### Patch Changes
|
|
||||||
|
|
||||||
- llamaindex@0.11.22
|
|
||||||
|
|
||||||
## 0.1.182
|
|
||||||
|
|
||||||
### Patch Changes
|
|
||||||
|
|
||||||
- llamaindex@0.11.21
|
|
||||||
|
|
||||||
## 0.1.181
|
|
||||||
|
|
||||||
### Patch Changes
|
|
||||||
|
|
||||||
- llamaindex@0.11.20
|
|
||||||
|
|
||||||
## 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
|
## 0.1.174
|
||||||
|
|
||||||
### Patch Changes
|
### Patch Changes
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@llamaindex/next-agent-test",
|
"name": "@llamaindex/next-agent-test",
|
||||||
"version": "0.1.185",
|
"version": "0.1.174",
|
||||||
"private": true,
|
"private": true,
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"dev": "next dev",
|
"dev": "next dev",
|
||||||
@@ -15,11 +15,11 @@
|
|||||||
"react-dom": "19.0.0"
|
"react-dom": "19.0.0"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@types/node": "^24.0.13",
|
"@types/node": "^22.9.0",
|
||||||
"@types/react": "^19.1.8",
|
"@types/react": "^19.0.10",
|
||||||
"@types/react-dom": "^19.1.6",
|
"@types/react-dom": "^19.0.4",
|
||||||
"eslint": "9.30.1",
|
"eslint": "9.16.0",
|
||||||
"eslint-config-next": "15.3.5",
|
"eslint-config-next": "15.1.0",
|
||||||
"typescript": "^5.8.3"
|
"typescript": "^5.8.3"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,71 +1,5 @@
|
|||||||
# test-edge-runtime
|
# test-edge-runtime
|
||||||
|
|
||||||
## 0.1.184
|
|
||||||
|
|
||||||
### Patch Changes
|
|
||||||
|
|
||||||
- llamaindex@0.11.24
|
|
||||||
|
|
||||||
## 0.1.183
|
|
||||||
|
|
||||||
### Patch Changes
|
|
||||||
|
|
||||||
- llamaindex@0.11.23
|
|
||||||
|
|
||||||
## 0.1.182
|
|
||||||
|
|
||||||
### Patch Changes
|
|
||||||
|
|
||||||
- llamaindex@0.11.22
|
|
||||||
|
|
||||||
## 0.1.181
|
|
||||||
|
|
||||||
### Patch Changes
|
|
||||||
|
|
||||||
- llamaindex@0.11.21
|
|
||||||
|
|
||||||
## 0.1.180
|
|
||||||
|
|
||||||
### Patch Changes
|
|
||||||
|
|
||||||
- llamaindex@0.11.20
|
|
||||||
|
|
||||||
## 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
|
## 0.1.173
|
||||||
|
|
||||||
### Patch Changes
|
### Patch Changes
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@llamaindex/nextjs-edge-runtime-test",
|
"name": "@llamaindex/nextjs-edge-runtime-test",
|
||||||
"version": "0.1.184",
|
"version": "0.1.173",
|
||||||
"private": true,
|
"private": true,
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"dev": "next dev",
|
"dev": "next dev",
|
||||||
@@ -14,9 +14,9 @@
|
|||||||
"react-dom": "^19.1.0"
|
"react-dom": "^19.1.0"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@types/node": "^24.0.13",
|
"@types/node": "^22.9.0",
|
||||||
"@types/react": "^19.1.8",
|
"@types/react": "^19.0.10",
|
||||||
"@types/react-dom": "^19.1.6",
|
"@types/react-dom": "^19.0.4",
|
||||||
"typescript": "^5.8.3"
|
"typescript": "^5.8.3"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,89 +1,5 @@
|
|||||||
# @llamaindex/next-node-runtime
|
# @llamaindex/next-node-runtime
|
||||||
|
|
||||||
## 0.1.54
|
|
||||||
|
|
||||||
### Patch Changes
|
|
||||||
|
|
||||||
- llamaindex@0.11.24
|
|
||||||
- @llamaindex/huggingface@0.1.24
|
|
||||||
- @llamaindex/readers@3.1.18
|
|
||||||
|
|
||||||
## 0.1.53
|
|
||||||
|
|
||||||
### Patch Changes
|
|
||||||
|
|
||||||
- llamaindex@0.11.23
|
|
||||||
- @llamaindex/huggingface@0.1.23
|
|
||||||
- @llamaindex/readers@3.1.17
|
|
||||||
|
|
||||||
## 0.1.52
|
|
||||||
|
|
||||||
### Patch Changes
|
|
||||||
|
|
||||||
- llamaindex@0.11.22
|
|
||||||
|
|
||||||
## 0.1.51
|
|
||||||
|
|
||||||
### Patch Changes
|
|
||||||
|
|
||||||
- llamaindex@0.11.21
|
|
||||||
- @llamaindex/huggingface@0.1.22
|
|
||||||
- @llamaindex/readers@3.1.16
|
|
||||||
|
|
||||||
## 0.1.50
|
|
||||||
|
|
||||||
### Patch Changes
|
|
||||||
|
|
||||||
- llamaindex@0.11.20
|
|
||||||
- @llamaindex/huggingface@0.1.21
|
|
||||||
- @llamaindex/readers@3.1.15
|
|
||||||
|
|
||||||
## 0.1.49
|
|
||||||
|
|
||||||
### Patch Changes
|
|
||||||
|
|
||||||
- @llamaindex/huggingface@0.1.20
|
|
||||||
|
|
||||||
## 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
|
## 0.1.42
|
||||||
|
|
||||||
### Patch Changes
|
### Patch Changes
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@llamaindex/next-node-runtime-test",
|
"name": "@llamaindex/next-node-runtime-test",
|
||||||
"version": "0.1.54",
|
"version": "0.1.42",
|
||||||
"private": true,
|
"private": true,
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"dev": "next dev",
|
"dev": "next dev",
|
||||||
@@ -16,11 +16,11 @@
|
|||||||
"react-dom": "19.0.0"
|
"react-dom": "19.0.0"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@types/node": "^24.0.13",
|
"@types/node": "^22.9.0",
|
||||||
"@types/react": "^19.1.8",
|
"@types/react": "^19.0.10",
|
||||||
"@types/react-dom": "^19.1.6",
|
"@types/react-dom": "^19.0.4",
|
||||||
"eslint": "9.30.1",
|
"eslint": "9.16.0",
|
||||||
"eslint-config-next": "15.3.5",
|
"eslint-config-next": "15.1.0",
|
||||||
"typescript": "^5.8.3"
|
"typescript": "^5.8.3"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,71 +1,5 @@
|
|||||||
# vite-import-llamaindex
|
# vite-import-llamaindex
|
||||||
|
|
||||||
## 0.0.51
|
|
||||||
|
|
||||||
### Patch Changes
|
|
||||||
|
|
||||||
- llamaindex@0.11.24
|
|
||||||
|
|
||||||
## 0.0.50
|
|
||||||
|
|
||||||
### Patch Changes
|
|
||||||
|
|
||||||
- llamaindex@0.11.23
|
|
||||||
|
|
||||||
## 0.0.49
|
|
||||||
|
|
||||||
### Patch Changes
|
|
||||||
|
|
||||||
- llamaindex@0.11.22
|
|
||||||
|
|
||||||
## 0.0.48
|
|
||||||
|
|
||||||
### Patch Changes
|
|
||||||
|
|
||||||
- llamaindex@0.11.21
|
|
||||||
|
|
||||||
## 0.0.47
|
|
||||||
|
|
||||||
### Patch Changes
|
|
||||||
|
|
||||||
- llamaindex@0.11.20
|
|
||||||
|
|
||||||
## 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
|
## 0.0.40
|
||||||
|
|
||||||
### Patch Changes
|
### Patch Changes
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"name": "vite-import-llamaindex",
|
"name": "vite-import-llamaindex",
|
||||||
"private": true,
|
"private": true,
|
||||||
"version": "0.0.51",
|
"version": "0.0.40",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"build": "vite build",
|
"build": "vite build",
|
||||||
|
|||||||
@@ -1,71 +1,5 @@
|
|||||||
# @llamaindex/waku-query-engine-test
|
# @llamaindex/waku-query-engine-test
|
||||||
|
|
||||||
## 0.0.185
|
|
||||||
|
|
||||||
### Patch Changes
|
|
||||||
|
|
||||||
- llamaindex@0.11.24
|
|
||||||
|
|
||||||
## 0.0.184
|
|
||||||
|
|
||||||
### Patch Changes
|
|
||||||
|
|
||||||
- llamaindex@0.11.23
|
|
||||||
|
|
||||||
## 0.0.183
|
|
||||||
|
|
||||||
### Patch Changes
|
|
||||||
|
|
||||||
- llamaindex@0.11.22
|
|
||||||
|
|
||||||
## 0.0.182
|
|
||||||
|
|
||||||
### Patch Changes
|
|
||||||
|
|
||||||
- llamaindex@0.11.21
|
|
||||||
|
|
||||||
## 0.0.181
|
|
||||||
|
|
||||||
### Patch Changes
|
|
||||||
|
|
||||||
- llamaindex@0.11.20
|
|
||||||
|
|
||||||
## 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
|
## 0.0.174
|
||||||
|
|
||||||
### Patch Changes
|
### Patch Changes
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@llamaindex/waku-query-engine-test",
|
"name": "@llamaindex/waku-query-engine-test",
|
||||||
"version": "0.0.185",
|
"version": "0.0.174",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"private": true,
|
"private": true,
|
||||||
"scripts": {
|
"scripts": {
|
||||||
@@ -18,10 +18,10 @@
|
|||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@tailwindcss/postcss": "^4.1.4",
|
"@tailwindcss/postcss": "^4.1.4",
|
||||||
"@types/react": "19.1.8",
|
"@types/react": "19.0.10",
|
||||||
"@types/react-dom": "19.1.6",
|
"@types/react-dom": "19.0.4",
|
||||||
"rollup": "4.38.0",
|
"rollup": "4.38.0",
|
||||||
"tailwindcss": "^4.1.11",
|
"tailwindcss": "^4.1.4",
|
||||||
"typescript": "5.8.3"
|
"typescript": "5.8.3"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ await test("pinecone", async (t) => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
const vectorStore = new PineconeVectorStore({
|
const vectorStore = new PineconeVectorStore({
|
||||||
embedModel: openaiEmbedding,
|
embeddingModel: openaiEmbedding,
|
||||||
});
|
});
|
||||||
|
|
||||||
t.after(async () => {
|
t.after(async () => {
|
||||||
|
|||||||
+3
-3
@@ -19,14 +19,14 @@
|
|||||||
"@llamaindex/openai": "workspace:*",
|
"@llamaindex/openai": "workspace:*",
|
||||||
"@llamaindex/pinecone": "workspace:*",
|
"@llamaindex/pinecone": "workspace:*",
|
||||||
"@llamaindex/postgres": "workspace:*",
|
"@llamaindex/postgres": "workspace:*",
|
||||||
"@types/node": "^24.0.13",
|
"@types/node": "^22.9.0",
|
||||||
"@types/pg": "^8.11.8",
|
"@types/pg": "^8.11.8",
|
||||||
"consola": "^3.2.3",
|
"consola": "^3.2.3",
|
||||||
"dotenv": "^17.2.0",
|
"dotenv": "^16.4.5",
|
||||||
"llamaindex": "workspace:*",
|
"llamaindex": "workspace:*",
|
||||||
"pg": "^8.12.0",
|
"pg": "^8.12.0",
|
||||||
"pgvector": "0.2.0",
|
"pgvector": "0.2.0",
|
||||||
"tsx": "^4.20.3",
|
"tsx": "^4.19.3",
|
||||||
"zod": "^3.25.76"
|
"zod": "^3.25.76"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,356 +1,5 @@
|
|||||||
# examples
|
# examples
|
||||||
|
|
||||||
## 0.3.35
|
|
||||||
|
|
||||||
### Patch Changes
|
|
||||||
|
|
||||||
- Updated dependencies [c3bf3c7]
|
|
||||||
- Updated dependencies [f9f1de9]
|
|
||||||
- @llamaindex/cloud@4.0.28
|
|
||||||
- @llamaindex/core@0.6.19
|
|
||||||
- llamaindex@0.11.24
|
|
||||||
- @llamaindex/node-parser@2.0.19
|
|
||||||
- @llamaindex/anthropic@0.3.21
|
|
||||||
- @llamaindex/assemblyai@0.1.18
|
|
||||||
- @llamaindex/clip@0.0.70
|
|
||||||
- @llamaindex/cohere@0.0.33
|
|
||||||
- @llamaindex/deepinfra@0.0.70
|
|
||||||
- @llamaindex/discord@0.1.18
|
|
||||||
- @llamaindex/google@0.3.18
|
|
||||||
- @llamaindex/huggingface@0.1.24
|
|
||||||
- @llamaindex/jinaai@0.0.30
|
|
||||||
- @llamaindex/mistral@0.1.19
|
|
||||||
- @llamaindex/mixedbread@0.0.33
|
|
||||||
- @llamaindex/notion@0.1.18
|
|
||||||
- @llamaindex/ollama@0.1.19
|
|
||||||
- @llamaindex/openai@0.4.14
|
|
||||||
- @llamaindex/perplexity@0.0.27
|
|
||||||
- @llamaindex/portkey-ai@0.0.61
|
|
||||||
- @llamaindex/replicate@0.0.61
|
|
||||||
- @llamaindex/bm25-retriever@0.0.8
|
|
||||||
- @llamaindex/astra@0.0.33
|
|
||||||
- @llamaindex/azure@0.1.31
|
|
||||||
- @llamaindex/chroma@0.0.33
|
|
||||||
- @llamaindex/elastic-search@0.1.19
|
|
||||||
- @llamaindex/firestore@1.0.26
|
|
||||||
- @llamaindex/milvus@0.1.28
|
|
||||||
- @llamaindex/mongodb@0.0.34
|
|
||||||
- @llamaindex/pinecone@0.1.19
|
|
||||||
- @llamaindex/postgres@0.0.62
|
|
||||||
- @llamaindex/qdrant@0.1.29
|
|
||||||
- @llamaindex/supabase@0.1.20
|
|
||||||
- @llamaindex/upstash@0.0.33
|
|
||||||
- @llamaindex/weaviate@0.0.34
|
|
||||||
- @llamaindex/vercel@0.1.19
|
|
||||||
- @llamaindex/voyage-ai@1.0.25
|
|
||||||
- @llamaindex/readers@3.1.18
|
|
||||||
- @llamaindex/tools@0.1.9
|
|
||||||
- @llamaindex/workflow@1.1.20
|
|
||||||
- @llamaindex/deepseek@0.0.31
|
|
||||||
- @llamaindex/fireworks@0.0.30
|
|
||||||
- @llamaindex/groq@0.0.86
|
|
||||||
- @llamaindex/together@0.0.30
|
|
||||||
- @llamaindex/vllm@0.0.56
|
|
||||||
- @llamaindex/xai@0.0.17
|
|
||||||
|
|
||||||
## 0.3.34
|
|
||||||
|
|
||||||
### Patch Changes
|
|
||||||
|
|
||||||
- Updated dependencies [f29799e]
|
|
||||||
- Updated dependencies [7224c06]
|
|
||||||
- @llamaindex/workflow@1.1.19
|
|
||||||
- @llamaindex/core@0.6.18
|
|
||||||
- llamaindex@0.11.23
|
|
||||||
- @llamaindex/cloud@4.0.27
|
|
||||||
- @llamaindex/node-parser@2.0.18
|
|
||||||
- @llamaindex/anthropic@0.3.20
|
|
||||||
- @llamaindex/assemblyai@0.1.17
|
|
||||||
- @llamaindex/clip@0.0.69
|
|
||||||
- @llamaindex/cohere@0.0.32
|
|
||||||
- @llamaindex/deepinfra@0.0.69
|
|
||||||
- @llamaindex/discord@0.1.17
|
|
||||||
- @llamaindex/google@0.3.17
|
|
||||||
- @llamaindex/huggingface@0.1.23
|
|
||||||
- @llamaindex/jinaai@0.0.29
|
|
||||||
- @llamaindex/mistral@0.1.18
|
|
||||||
- @llamaindex/mixedbread@0.0.32
|
|
||||||
- @llamaindex/notion@0.1.17
|
|
||||||
- @llamaindex/ollama@0.1.18
|
|
||||||
- @llamaindex/openai@0.4.13
|
|
||||||
- @llamaindex/perplexity@0.0.26
|
|
||||||
- @llamaindex/portkey-ai@0.0.60
|
|
||||||
- @llamaindex/replicate@0.0.60
|
|
||||||
- @llamaindex/bm25-retriever@0.0.7
|
|
||||||
- @llamaindex/astra@0.0.32
|
|
||||||
- @llamaindex/azure@0.1.30
|
|
||||||
- @llamaindex/chroma@0.0.32
|
|
||||||
- @llamaindex/elastic-search@0.1.18
|
|
||||||
- @llamaindex/firestore@1.0.25
|
|
||||||
- @llamaindex/milvus@0.1.27
|
|
||||||
- @llamaindex/mongodb@0.0.33
|
|
||||||
- @llamaindex/pinecone@0.1.18
|
|
||||||
- @llamaindex/postgres@0.0.61
|
|
||||||
- @llamaindex/qdrant@0.1.28
|
|
||||||
- @llamaindex/supabase@0.1.19
|
|
||||||
- @llamaindex/upstash@0.0.32
|
|
||||||
- @llamaindex/weaviate@0.0.33
|
|
||||||
- @llamaindex/vercel@0.1.18
|
|
||||||
- @llamaindex/voyage-ai@1.0.24
|
|
||||||
- @llamaindex/readers@3.1.17
|
|
||||||
- @llamaindex/tools@0.1.8
|
|
||||||
- @llamaindex/deepseek@0.0.30
|
|
||||||
- @llamaindex/fireworks@0.0.29
|
|
||||||
- @llamaindex/groq@0.0.85
|
|
||||||
- @llamaindex/together@0.0.29
|
|
||||||
- @llamaindex/vllm@0.0.55
|
|
||||||
- @llamaindex/xai@0.0.16
|
|
||||||
|
|
||||||
## 0.3.33
|
|
||||||
|
|
||||||
### Patch Changes
|
|
||||||
|
|
||||||
- Updated dependencies [38da40b]
|
|
||||||
- @llamaindex/core@0.6.17
|
|
||||||
- @llamaindex/cloud@4.0.26
|
|
||||||
- llamaindex@0.11.21
|
|
||||||
- @llamaindex/node-parser@2.0.17
|
|
||||||
- @llamaindex/anthropic@0.3.19
|
|
||||||
- @llamaindex/assemblyai@0.1.16
|
|
||||||
- @llamaindex/clip@0.0.68
|
|
||||||
- @llamaindex/cohere@0.0.31
|
|
||||||
- @llamaindex/deepinfra@0.0.68
|
|
||||||
- @llamaindex/discord@0.1.16
|
|
||||||
- @llamaindex/google@0.3.16
|
|
||||||
- @llamaindex/huggingface@0.1.22
|
|
||||||
- @llamaindex/jinaai@0.0.28
|
|
||||||
- @llamaindex/mistral@0.1.17
|
|
||||||
- @llamaindex/mixedbread@0.0.31
|
|
||||||
- @llamaindex/notion@0.1.16
|
|
||||||
- @llamaindex/ollama@0.1.17
|
|
||||||
- @llamaindex/openai@0.4.12
|
|
||||||
- @llamaindex/perplexity@0.0.25
|
|
||||||
- @llamaindex/portkey-ai@0.0.59
|
|
||||||
- @llamaindex/replicate@0.0.59
|
|
||||||
- @llamaindex/bm25-retriever@0.0.6
|
|
||||||
- @llamaindex/astra@0.0.31
|
|
||||||
- @llamaindex/azure@0.1.29
|
|
||||||
- @llamaindex/chroma@0.0.31
|
|
||||||
- @llamaindex/elastic-search@0.1.17
|
|
||||||
- @llamaindex/firestore@1.0.24
|
|
||||||
- @llamaindex/milvus@0.1.26
|
|
||||||
- @llamaindex/mongodb@0.0.32
|
|
||||||
- @llamaindex/pinecone@0.1.17
|
|
||||||
- @llamaindex/postgres@0.0.60
|
|
||||||
- @llamaindex/qdrant@0.1.27
|
|
||||||
- @llamaindex/supabase@0.1.18
|
|
||||||
- @llamaindex/upstash@0.0.31
|
|
||||||
- @llamaindex/weaviate@0.0.32
|
|
||||||
- @llamaindex/vercel@0.1.17
|
|
||||||
- @llamaindex/voyage-ai@1.0.23
|
|
||||||
- @llamaindex/readers@3.1.16
|
|
||||||
- @llamaindex/tools@0.1.7
|
|
||||||
- @llamaindex/workflow@1.1.17
|
|
||||||
- @llamaindex/deepseek@0.0.29
|
|
||||||
- @llamaindex/fireworks@0.0.28
|
|
||||||
- @llamaindex/groq@0.0.84
|
|
||||||
- @llamaindex/together@0.0.28
|
|
||||||
- @llamaindex/vllm@0.0.54
|
|
||||||
- @llamaindex/xai@0.0.15
|
|
||||||
|
|
||||||
## 0.3.32
|
|
||||||
|
|
||||||
### Patch Changes
|
|
||||||
|
|
||||||
- Updated dependencies [650eeb1]
|
|
||||||
- Updated dependencies [a8ec08c]
|
|
||||||
- Updated dependencies [2967d57]
|
|
||||||
- @llamaindex/google@0.3.15
|
|
||||||
- @llamaindex/core@0.6.16
|
|
||||||
- @llamaindex/workflow@1.1.16
|
|
||||||
- @llamaindex/cloud@4.0.25
|
|
||||||
- llamaindex@0.11.20
|
|
||||||
- @llamaindex/node-parser@2.0.16
|
|
||||||
- @llamaindex/anthropic@0.3.18
|
|
||||||
- @llamaindex/assemblyai@0.1.15
|
|
||||||
- @llamaindex/clip@0.0.67
|
|
||||||
- @llamaindex/cohere@0.0.30
|
|
||||||
- @llamaindex/deepinfra@0.0.67
|
|
||||||
- @llamaindex/discord@0.1.15
|
|
||||||
- @llamaindex/huggingface@0.1.21
|
|
||||||
- @llamaindex/jinaai@0.0.27
|
|
||||||
- @llamaindex/mistral@0.1.16
|
|
||||||
- @llamaindex/mixedbread@0.0.30
|
|
||||||
- @llamaindex/notion@0.1.15
|
|
||||||
- @llamaindex/ollama@0.1.16
|
|
||||||
- @llamaindex/openai@0.4.11
|
|
||||||
- @llamaindex/perplexity@0.0.24
|
|
||||||
- @llamaindex/portkey-ai@0.0.58
|
|
||||||
- @llamaindex/replicate@0.0.58
|
|
||||||
- @llamaindex/bm25-retriever@0.0.5
|
|
||||||
- @llamaindex/astra@0.0.30
|
|
||||||
- @llamaindex/azure@0.1.28
|
|
||||||
- @llamaindex/chroma@0.0.30
|
|
||||||
- @llamaindex/elastic-search@0.1.16
|
|
||||||
- @llamaindex/firestore@1.0.23
|
|
||||||
- @llamaindex/milvus@0.1.25
|
|
||||||
- @llamaindex/mongodb@0.0.31
|
|
||||||
- @llamaindex/pinecone@0.1.16
|
|
||||||
- @llamaindex/postgres@0.0.59
|
|
||||||
- @llamaindex/qdrant@0.1.26
|
|
||||||
- @llamaindex/supabase@0.1.17
|
|
||||||
- @llamaindex/upstash@0.0.30
|
|
||||||
- @llamaindex/weaviate@0.0.31
|
|
||||||
- @llamaindex/vercel@0.1.16
|
|
||||||
- @llamaindex/voyage-ai@1.0.22
|
|
||||||
- @llamaindex/readers@3.1.15
|
|
||||||
- @llamaindex/tools@0.1.6
|
|
||||||
- @llamaindex/deepseek@0.0.28
|
|
||||||
- @llamaindex/fireworks@0.0.27
|
|
||||||
- @llamaindex/groq@0.0.83
|
|
||||||
- @llamaindex/together@0.0.27
|
|
||||||
- @llamaindex/vllm@0.0.53
|
|
||||||
- @llamaindex/xai@0.0.14
|
|
||||||
|
|
||||||
## 0.3.31
|
|
||||||
|
|
||||||
### Patch Changes
|
|
||||||
|
|
||||||
- Updated dependencies [d8f4f6a]
|
|
||||||
- Updated dependencies [856dd8c]
|
|
||||||
- @llamaindex/supabase@0.1.16
|
|
||||||
- @llamaindex/openai@0.4.10
|
|
||||||
- @llamaindex/clip@0.0.66
|
|
||||||
- @llamaindex/deepinfra@0.0.66
|
|
||||||
- @llamaindex/deepseek@0.0.27
|
|
||||||
- @llamaindex/fireworks@0.0.26
|
|
||||||
- @llamaindex/groq@0.0.82
|
|
||||||
- @llamaindex/huggingface@0.1.20
|
|
||||||
- @llamaindex/jinaai@0.0.26
|
|
||||||
- @llamaindex/perplexity@0.0.23
|
|
||||||
- @llamaindex/azure@0.1.27
|
|
||||||
- @llamaindex/together@0.0.26
|
|
||||||
- @llamaindex/vllm@0.0.52
|
|
||||||
- @llamaindex/xai@0.0.13
|
|
||||||
|
|
||||||
## 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
|
## 0.3.27
|
||||||
|
|
||||||
### Patch Changes
|
### Patch Changes
|
||||||
|
|||||||
+7
-31
@@ -1,10 +1,9 @@
|
|||||||
# LlamaIndexTS Examples
|
# LlamaIndexTS Examples
|
||||||
|
|
||||||
This package contains several examples of how to use LlamaIndexTS.
|
Before running any of the code examples,
|
||||||
|
make sure you have basic knowledge of the [LlamaIndexTS](https://ts.llamaindex.ai/).
|
||||||
|
|
||||||
Most examples will use OpenAI by default, so be sure to set your API key.
|
## Usage
|
||||||
|
|
||||||
## Running Examples
|
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
# export your API key
|
# export your API key
|
||||||
@@ -13,31 +12,8 @@ export OPENAI_API_KEY="sk-..."
|
|||||||
npx tsx ./rag/chatEngine.ts
|
npx tsx ./rag/chatEngine.ts
|
||||||
```
|
```
|
||||||
|
|
||||||
## Recommended Starter Examples
|
## Build your own RAG app
|
||||||
|
|
||||||
Agents:
|
```shell
|
||||||
|
npx create llama
|
||||||
- [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 { openai } from "@llamaindex/openai";
|
||||||
import { agent } from "@llamaindex/workflow";
|
import { agent } from "@llamaindex/workflow";
|
||||||
import { getWeatherTool } from "../tools/tools";
|
import { getWeatherTool } from "../../deprecated/agents/utils/tools";
|
||||||
|
|
||||||
async function main() {
|
async function main() {
|
||||||
const weatherAgent = agent({
|
const weatherAgent = agent({
|
||||||
@@ -24,7 +24,6 @@ async function main() {
|
|||||||
state: result.data.state,
|
state: result.data.state,
|
||||||
});
|
});
|
||||||
console.log(`${JSON.stringify(caResult, null, 2)}`);
|
console.log(`${JSON.stringify(caResult, null, 2)}`);
|
||||||
console.log("assistant message:", result.data.message);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
main().catch((error) => {
|
main().catch((error) => {
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import { ollama } from "@llamaindex/ollama";
|
import { ollama } from "@llamaindex/ollama";
|
||||||
import { agent } from "@llamaindex/workflow";
|
import { agent } from "@llamaindex/workflow";
|
||||||
import { getWeatherTool } from "../tools/tools";
|
import { getWeatherTool } from "../../deprecated/agents/utils/tools";
|
||||||
|
|
||||||
async function main() {
|
async function main() {
|
||||||
const myAgent = agent({
|
const myAgent = agent({
|
||||||
|
|||||||
@@ -1,150 +0,0 @@
|
|||||||
/**
|
|
||||||
* Example: Vector Memory Block
|
|
||||||
*
|
|
||||||
* This example demonstrates how to use the VectorMemoryBlock to store and retrieve
|
|
||||||
* conversation history using vector similarity search. The vector memory block
|
|
||||||
* stores messages in a vector store and can retrieve relevant context based on
|
|
||||||
* semantic similarity to recent messages.
|
|
||||||
*/
|
|
||||||
|
|
||||||
import { OpenAI, OpenAIEmbedding } from "@llamaindex/openai";
|
|
||||||
import { QdrantVectorStore } from "@llamaindex/qdrant";
|
|
||||||
import { createMemory, vectorBlock } from "llamaindex";
|
|
||||||
|
|
||||||
// Set up the LLM and embedding model
|
|
||||||
const llm = new OpenAI({ model: "gpt-4.1-mini" });
|
|
||||||
const embedModel = new OpenAIEmbedding({ model: "text-embedding-3-small" });
|
|
||||||
|
|
||||||
// Simulate a conversation with some context
|
|
||||||
// This conversation has 8 messages, which is more than the token limit of 100 tokens (set below)
|
|
||||||
// The last 4 messages are kept in to short term memory block (as their tokens are in the limit)
|
|
||||||
// Whereas the first 5 messages are added to long term memory block (in here we will use the vector memory block with Qdrant)
|
|
||||||
const CONVERSATION_TURNS = [
|
|
||||||
//// This is the first 5 messages that are added to long term memory block (vector memory block)
|
|
||||||
{
|
|
||||||
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.",
|
|
||||||
},
|
|
||||||
|
|
||||||
//// This is the last 4 messages that are added to short term memory block
|
|
||||||
{
|
|
||||||
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.",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
role: "user",
|
|
||||||
content: "Summary information about Sarah and her cats",
|
|
||||||
},
|
|
||||||
];
|
|
||||||
|
|
||||||
async function main() {
|
|
||||||
console.log("=== Vector Memory Block Example ===\n");
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Create a vector store. You can quickly get a local instance of Qdrant running with Docker:
|
|
||||||
* ```bash
|
|
||||||
* docker pull qdrant/qdrant
|
|
||||||
* docker run -p 6333:6333 qdrant/qdrant
|
|
||||||
* ```
|
|
||||||
*
|
|
||||||
* Go to http://localhost:6333/dashboard#/collections to see your data
|
|
||||||
*/
|
|
||||||
const vectorStore = new QdrantVectorStore({
|
|
||||||
url: "http://localhost:6333",
|
|
||||||
embedModel,
|
|
||||||
});
|
|
||||||
|
|
||||||
// Create a vector memory block using the factory function
|
|
||||||
const vectorMemoryBlock = vectorBlock({
|
|
||||||
vectorStore,
|
|
||||||
priority: 5,
|
|
||||||
});
|
|
||||||
|
|
||||||
// Create a memory store with the vector memory block
|
|
||||||
const memory = createMemory([], {
|
|
||||||
llm,
|
|
||||||
memoryBlocks: [vectorMemoryBlock],
|
|
||||||
tokenLimit: 100,
|
|
||||||
shortTermTokenLimitRatio: 0.7,
|
|
||||||
});
|
|
||||||
|
|
||||||
// Store the conversation history in the vector memory
|
|
||||||
console.log(`Adding ${CONVERSATION_TURNS.length} messages to the memory...`);
|
|
||||||
for (const message of CONVERSATION_TURNS) {
|
|
||||||
await memory.add(message);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Retrieve relevant context for the current user request
|
|
||||||
console.log("Retrieving relevant context...");
|
|
||||||
const chatHistory = await memory.getLLM();
|
|
||||||
|
|
||||||
// You will see there's 1 generated context message from vector memory block, and 4 messages from short term memory block
|
|
||||||
console.log("Chat memory:", chatHistory);
|
|
||||||
|
|
||||||
// Now simulate the assistant responding with context
|
|
||||||
console.log("\nAssistant response with context:");
|
|
||||||
const response = await llm.chat({
|
|
||||||
messages: chatHistory,
|
|
||||||
});
|
|
||||||
console.log(response.message.content);
|
|
||||||
|
|
||||||
// Try adding more messages to the memory
|
|
||||||
const newMessages = [
|
|
||||||
{
|
|
||||||
role: "user",
|
|
||||||
content: "Write a long paragraph about weather in Tokyo",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
role: "assistant",
|
|
||||||
content:
|
|
||||||
"The weather in Tokyo is sunny and warm. The temperature is around 20 degrees Celsius. The weather is very nice and the people are friendly.",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
role: "user",
|
|
||||||
content: "What is the weather in Tokyo?",
|
|
||||||
},
|
|
||||||
];
|
|
||||||
// Add the new messages to the memory
|
|
||||||
for (const message of newMessages) {
|
|
||||||
await memory.add(message);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Try retrieving the new messages
|
|
||||||
const newChatHistory = await memory.getLLM();
|
|
||||||
// You can see now that new chat history will contain the nodes (separated by `\n`) in the
|
|
||||||
// context message that is generated by the vector memory block
|
|
||||||
// The number of retrieved nodes is set by `similarityTopK` in `queryOptions` of `vectorBlock`
|
|
||||||
// (default `similarityTopK` is 2)
|
|
||||||
console.log("New chat history:", newChatHistory);
|
|
||||||
}
|
|
||||||
|
|
||||||
main().catch(console.error);
|
|
||||||
@@ -1,46 +0,0 @@
|
|||||||
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();
|
|
||||||
})();
|
|
||||||
@@ -1,43 +0,0 @@
|
|||||||
import { openai } from "@llamaindex/openai";
|
|
||||||
import { ChatMessage, tool } from "llamaindex";
|
|
||||||
import z from "zod";
|
|
||||||
|
|
||||||
async function main() {
|
|
||||||
const llm = openai({ model: "gpt-4.1-mini" });
|
|
||||||
const messages = [
|
|
||||||
{
|
|
||||||
content: `What's the weather like in San Francisco?`,
|
|
||||||
role: "user",
|
|
||||||
} as ChatMessage,
|
|
||||||
];
|
|
||||||
|
|
||||||
let exit = false;
|
|
||||||
do {
|
|
||||||
const { newMessages, toolCalls } = await llm.exec({
|
|
||||||
messages,
|
|
||||||
tools: [
|
|
||||||
tool({
|
|
||||||
name: "get_weather",
|
|
||||||
description: "Get the current weather for a location",
|
|
||||||
parameters: z.object({
|
|
||||||
address: z.string().describe("The address"),
|
|
||||||
}),
|
|
||||||
execute: ({ address }) => {
|
|
||||||
return `It's sunny in ${address}!`;
|
|
||||||
},
|
|
||||||
}),
|
|
||||||
],
|
|
||||||
});
|
|
||||||
console.log(newMessages);
|
|
||||||
messages.push(...newMessages);
|
|
||||||
// exit condition to stop the agent loop
|
|
||||||
// here we can also check for specific tool calls or limit the number of llm.exec calls
|
|
||||||
exit = toolCalls.length === 0;
|
|
||||||
} while (!exit);
|
|
||||||
}
|
|
||||||
|
|
||||||
(async function () {
|
|
||||||
console.log("Starting...");
|
|
||||||
await main();
|
|
||||||
console.log("Done");
|
|
||||||
})();
|
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
import { openai } from "@llamaindex/openai";
|
import { OpenAI } from "@llamaindex/openai";
|
||||||
|
|
||||||
async function main() {
|
async function main() {
|
||||||
const llm = openai({ model: "gpt-4.1-mini" });
|
const llm = new OpenAI({ model: "gpt-4-turbo" });
|
||||||
const args: Parameters<typeof llm.chat>[0] = {
|
const args: Parameters<typeof llm.chat>[0] = {
|
||||||
additionalChatOptions: {
|
additionalChatOptions: {
|
||||||
tool_choice: "auto",
|
tool_choice: "auto",
|
||||||
@@ -4,7 +4,7 @@ import {
|
|||||||
getCurrentIDTool,
|
getCurrentIDTool,
|
||||||
getUserInfoTool,
|
getUserInfoTool,
|
||||||
getWeatherTool,
|
getWeatherTool,
|
||||||
} from "../../agents/tools/tools";
|
} from "./utils/tools";
|
||||||
|
|
||||||
async function main() {
|
async function main() {
|
||||||
// Create an OpenAIAgent with the function tools
|
// Create an OpenAIAgent with the function tools
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ import {
|
|||||||
getCurrentIDTool,
|
getCurrentIDTool,
|
||||||
getUserInfoTool,
|
getUserInfoTool,
|
||||||
getWeatherTool,
|
getWeatherTool,
|
||||||
} from "../../agents/tools/tools";
|
} from "./utils/tools";
|
||||||
|
|
||||||
async function main() {
|
async function main() {
|
||||||
// Create an OpenAIAgent with the function tools
|
// Create an OpenAIAgent with the function tools
|
||||||
|
|||||||
@@ -15,15 +15,15 @@
|
|||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@eslint/js": "^9.25.0",
|
"@eslint/js": "^9.25.0",
|
||||||
"@types/react": "^19.1.8",
|
"@types/react": "^19.1.2",
|
||||||
"@types/react-dom": "^19.1.6",
|
"@types/react-dom": "^19.1.2",
|
||||||
"@vitejs/plugin-react": "^4.5.2",
|
"@vitejs/plugin-react": "^4.5.2",
|
||||||
"eslint": "^9.30.1",
|
"eslint": "^9.25.0",
|
||||||
"eslint-plugin-react-hooks": "^5.2.0",
|
"eslint-plugin-react-hooks": "^5.2.0",
|
||||||
"eslint-plugin-react-refresh": "^0.4.19",
|
"eslint-plugin-react-refresh": "^0.4.19",
|
||||||
"globals": "^16.0.0",
|
"globals": "^16.0.0",
|
||||||
"typescript": "~5.8.3",
|
"typescript": "~5.8.3",
|
||||||
"typescript-eslint": "^8.36.0",
|
"typescript-eslint": "^8.30.1",
|
||||||
"vite": "^6.3.5"
|
"vite": "^6.3.5"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -30,12 +30,6 @@ async function main() {
|
|||||||
);
|
);
|
||||||
// and print out the text part
|
// and print out the text part
|
||||||
console.log(textPart?.text);
|
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);
|
main().catch(console.error);
|
||||||
|
|||||||
@@ -1,89 +0,0 @@
|
|||||||
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);
|
|
||||||
+52
-52
@@ -1,79 +1,79 @@
|
|||||||
{
|
{
|
||||||
"name": "@llamaindex/examples",
|
"name": "@llamaindex/examples",
|
||||||
"version": "0.3.35",
|
"version": "0.3.27",
|
||||||
"private": true,
|
"private": true,
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"lint": "eslint .",
|
"lint": "eslint .",
|
||||||
"start": "echo 'To get started, run `npx tsx <path to example>`'"
|
"start": "tsx ./starter.ts"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@ai-sdk/openai": "^1.0.5",
|
"@ai-sdk/openai": "^1.0.5",
|
||||||
"@azure/cosmos": "^4.1.1",
|
"@azure/cosmos": "^4.1.1",
|
||||||
"@azure/identity": "^4.4.1",
|
"@azure/identity": "^4.4.1",
|
||||||
"@azure/search-documents": "^12.1.0",
|
"@azure/search-documents": "^12.1.0",
|
||||||
"@llamaindex/anthropic": "^0.3.21",
|
"@llamaindex/anthropic": "^0.3.15",
|
||||||
"@llamaindex/assemblyai": "^0.1.18",
|
"@llamaindex/assemblyai": "^0.1.12",
|
||||||
"@llamaindex/astra": "^0.0.33",
|
"@llamaindex/astra": "^0.0.27",
|
||||||
"@llamaindex/azure": "^0.1.31",
|
"@llamaindex/azure": "^0.1.24",
|
||||||
"@llamaindex/bm25-retriever": "^0.0.8",
|
"@llamaindex/bm25-retriever": "^0.0.2",
|
||||||
"@llamaindex/chroma": "^0.0.33",
|
"@llamaindex/chroma": "^0.0.27",
|
||||||
"@llamaindex/clip": "^0.0.70",
|
"@llamaindex/clip": "^0.0.63",
|
||||||
"@llamaindex/cloud": "^4.0.28",
|
"@llamaindex/cloud": "^4.0.18",
|
||||||
"@llamaindex/cohere": "^0.0.33",
|
"@llamaindex/cohere": "^0.0.27",
|
||||||
"@llamaindex/core": "^0.6.19",
|
"@llamaindex/core": "^0.6.13",
|
||||||
"@llamaindex/deepinfra": "^0.0.70",
|
"@llamaindex/deepinfra": "^0.0.63",
|
||||||
"@llamaindex/deepseek": "^0.0.31",
|
"@llamaindex/deepseek": "^0.0.23",
|
||||||
"@llamaindex/discord": "^0.1.18",
|
"@llamaindex/discord": "^0.1.12",
|
||||||
"@llamaindex/elastic-search": "^0.1.19",
|
"@llamaindex/elastic-search": "^0.1.13",
|
||||||
"@llamaindex/env": "^0.1.30",
|
"@llamaindex/env": "^0.1.30",
|
||||||
"@llamaindex/firestore": "^1.0.26",
|
"@llamaindex/firestore": "^1.0.20",
|
||||||
"@llamaindex/fireworks": "^0.0.30",
|
"@llamaindex/fireworks": "^0.0.23",
|
||||||
"@llamaindex/google": "^0.3.18",
|
"@llamaindex/google": "^0.3.12",
|
||||||
"@llamaindex/groq": "^0.0.86",
|
"@llamaindex/groq": "^0.0.79",
|
||||||
"@llamaindex/huggingface": "^0.1.24",
|
"@llamaindex/huggingface": "^0.1.17",
|
||||||
"@llamaindex/jinaai": "^0.0.30",
|
"@llamaindex/jinaai": "^0.0.23",
|
||||||
"@llamaindex/milvus": "^0.1.28",
|
"@llamaindex/milvus": "^0.1.22",
|
||||||
"@llamaindex/mistral": "^0.1.19",
|
"@llamaindex/mistral": "^0.1.13",
|
||||||
"@llamaindex/mixedbread": "^0.0.33",
|
"@llamaindex/mixedbread": "^0.0.27",
|
||||||
"@llamaindex/mongodb": "^0.0.34",
|
"@llamaindex/mongodb": "^0.0.28",
|
||||||
"@llamaindex/node-parser": "^2.0.19",
|
"@llamaindex/node-parser": "^2.0.13",
|
||||||
"@llamaindex/notion": "^0.1.18",
|
"@llamaindex/notion": "^0.1.12",
|
||||||
"@llamaindex/ollama": "^0.1.19",
|
"@llamaindex/ollama": "^0.1.13",
|
||||||
"@llamaindex/openai": "^0.4.14",
|
"@llamaindex/openai": "^0.4.7",
|
||||||
"@llamaindex/perplexity": "^0.0.27",
|
"@llamaindex/perplexity": "^0.0.20",
|
||||||
"@llamaindex/pinecone": "^0.1.19",
|
"@llamaindex/pinecone": "^0.1.13",
|
||||||
"@llamaindex/portkey-ai": "^0.0.61",
|
"@llamaindex/portkey-ai": "^0.0.55",
|
||||||
"@llamaindex/postgres": "^0.0.62",
|
"@llamaindex/postgres": "^0.0.56",
|
||||||
"@llamaindex/qdrant": "^0.1.29",
|
"@llamaindex/qdrant": "^0.1.23",
|
||||||
"@llamaindex/readers": "^3.1.18",
|
"@llamaindex/readers": "^3.1.12",
|
||||||
"@llamaindex/replicate": "^0.0.61",
|
"@llamaindex/replicate": "^0.0.55",
|
||||||
"@llamaindex/supabase": "^0.1.20",
|
"@llamaindex/supabase": "^0.1.13",
|
||||||
"@llamaindex/together": "^0.0.30",
|
"@llamaindex/together": "^0.0.23",
|
||||||
"@llamaindex/tools": "^0.1.9",
|
"@llamaindex/tools": "^0.1.3",
|
||||||
"@llamaindex/upstash": "^0.0.33",
|
"@llamaindex/upstash": "^0.0.27",
|
||||||
"@llamaindex/vercel": "^0.1.19",
|
"@llamaindex/vercel": "^0.1.13",
|
||||||
"@llamaindex/vllm": "^0.0.56",
|
"@llamaindex/vllm": "^0.0.49",
|
||||||
"@llamaindex/voyage-ai": "^1.0.25",
|
"@llamaindex/voyage-ai": "^1.0.19",
|
||||||
"@llamaindex/weaviate": "^0.0.34",
|
"@llamaindex/weaviate": "^0.0.28",
|
||||||
"@llamaindex/workflow": "^1.1.20",
|
"@llamaindex/workflow": "^1.1.13",
|
||||||
"@llamaindex/xai": "^0.0.17",
|
"@llamaindex/xai": "workspace:^0.0.10",
|
||||||
"@notionhq/client": "^4.0.0",
|
"@notionhq/client": "^2.2.15",
|
||||||
"@pinecone-database/pinecone": "^4.0.0",
|
"@pinecone-database/pinecone": "^4.0.0",
|
||||||
"@vercel/postgres": "^0.10.0",
|
"@vercel/postgres": "^0.10.0",
|
||||||
"ai": "^4.3.17",
|
"ai": "^4.3.17",
|
||||||
"ajv": "^8.17.1",
|
"ajv": "^8.17.1",
|
||||||
"commander": "^12.1.0",
|
"commander": "^12.1.0",
|
||||||
"dotenv": "^17.2.0",
|
"dotenv": "^16.4.5",
|
||||||
"js-tiktoken": "^1.0.14",
|
"js-tiktoken": "^1.0.14",
|
||||||
"llamaindex": "^0.11.24",
|
"llamaindex": "^0.11.13",
|
||||||
"mongodb": "6.7.0",
|
"mongodb": "6.7.0",
|
||||||
"postgres": "^3.4.4",
|
"postgres": "^3.4.4",
|
||||||
"wikipedia": "^2.1.2",
|
"wikipedia": "^2.1.2",
|
||||||
"zod": "^3.25.76"
|
"zod": "^3.25.76"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@types/node": "^24.0.13",
|
"@types/node": "^22.9.0",
|
||||||
"tsx": "^4.20.3",
|
"tsx": "^4.19.3",
|
||||||
"typescript": "^5.8.3"
|
"typescript": "^5.8.3"
|
||||||
},
|
},
|
||||||
"stackblitz": {
|
"stackblitz": {
|
||||||
|
|||||||
@@ -1,2 +0,0 @@
|
|||||||
packages:
|
|
||||||
- "**"
|
|
||||||
@@ -23,12 +23,11 @@
|
|||||||
"@llamaindex/cloud": "workspace:* || ^2.0.24",
|
"@llamaindex/cloud": "workspace:* || ^2.0.24",
|
||||||
"@llamaindex/excel": "workspace:*",
|
"@llamaindex/excel": "workspace:*",
|
||||||
"@llamaindex/readers": "workspace:* || ^1.0.25",
|
"@llamaindex/readers": "workspace:* || ^1.0.25",
|
||||||
"@notionhq/client": "^4.0.0",
|
|
||||||
"llamaindex": "workspace:* || ^0.8.37"
|
"llamaindex": "workspace:* || ^0.8.37"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@types/node": "^24.0.13",
|
"@types/node": "^22.9.0",
|
||||||
"tsx": "^4.20.3",
|
"tsx": "^4.19.3",
|
||||||
"typescript": "^5.8.3"
|
"typescript": "^5.8.3"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ async function main() {
|
|||||||
const vectorStore = new QdrantVectorStore({
|
const vectorStore = new QdrantVectorStore({
|
||||||
url: process.env.QDRANT_URL,
|
url: process.env.QDRANT_URL,
|
||||||
apiKey: process.env.QDRANT_API_KEY,
|
apiKey: process.env.QDRANT_API_KEY,
|
||||||
embedModel: embedding,
|
embeddingModel: embedding,
|
||||||
collectionName: "gemini_test",
|
collectionName: "gemini_test",
|
||||||
});
|
});
|
||||||
const storageContext = await storageContextFromDefaults({ vectorStore });
|
const storageContext = await storageContextFromDefaults({ vectorStore });
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ async function main() {
|
|||||||
const vectorStore = new QdrantVectorStore({
|
const vectorStore = new QdrantVectorStore({
|
||||||
url: process.env.QDRANT_URL,
|
url: process.env.QDRANT_URL,
|
||||||
apiKey: process.env.QDRANT_API_KEY,
|
apiKey: process.env.QDRANT_API_KEY,
|
||||||
embedModel: embedding,
|
embeddingModel: embedding,
|
||||||
collectionName: "jina_test",
|
collectionName: "jina_test",
|
||||||
});
|
});
|
||||||
const storageContext = await storageContextFromDefaults({ vectorStore });
|
const storageContext = await storageContextFromDefaults({ vectorStore });
|
||||||
|
|||||||
Generated
+10114
File diff suppressed because it is too large
Load Diff
+8
-14
@@ -17,19 +17,18 @@
|
|||||||
"release-snapshot": "pnpm run build && changeset publish --tag snapshot",
|
"release-snapshot": "pnpm run build && changeset publish --tag snapshot",
|
||||||
"new-version": "changeset version && pnpm format:write && pnpm run build",
|
"new-version": "changeset version && pnpm format:write && pnpm run build",
|
||||||
"new-snapshot": "pnpm run build && changeset version --snapshot",
|
"new-snapshot": "pnpm run build && changeset version --snapshot",
|
||||||
"lint-staged": "lint-staged",
|
"lint-staged": "lint-staged"
|
||||||
"preinstall": "npx only-allow pnpm"
|
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@changesets/cli": "^2.27.5",
|
"@changesets/cli": "^2.27.5",
|
||||||
"@eslint/js": "^9.25.0",
|
"@eslint/js": "^9.25.0",
|
||||||
"bunchee": "6.4.0",
|
"bunchee": "6.4.0",
|
||||||
"eslint": "9.30.1",
|
"eslint": "9.22.0",
|
||||||
"eslint-config-next": "^15.3.5",
|
"eslint-config-next": "^15.1.0",
|
||||||
"eslint-config-prettier": "^10.1.5",
|
"eslint-config-prettier": "^9.1.0",
|
||||||
"eslint-config-turbo": "^2.5.4",
|
"eslint-config-turbo": "^2.3.3",
|
||||||
"eslint-plugin-react": "7.37.5",
|
"eslint-plugin-react": "7.37.2",
|
||||||
"eslint-plugin-turbo": "^2.5.4",
|
"eslint-plugin-turbo": "^2.5.0",
|
||||||
"globals": "^15.12.0",
|
"globals": "^15.12.0",
|
||||||
"husky": "^9.1.7",
|
"husky": "^9.1.7",
|
||||||
"lint-staged": "^15.2.11",
|
"lint-staged": "^15.2.11",
|
||||||
@@ -39,15 +38,10 @@
|
|||||||
"prettier-plugin-tailwindcss": "^0.6.11",
|
"prettier-plugin-tailwindcss": "^0.6.11",
|
||||||
"turbo": "^2.4.4",
|
"turbo": "^2.4.4",
|
||||||
"typescript": "^5.8.3",
|
"typescript": "^5.8.3",
|
||||||
"typescript-eslint": "^8.36.0",
|
"typescript-eslint": "^8.18.0",
|
||||||
"vitest": "^3.1.1"
|
"vitest": "^3.1.1"
|
||||||
},
|
},
|
||||||
"packageManager": "pnpm@10.8.1",
|
"packageManager": "pnpm@10.8.1",
|
||||||
"pnpm": {
|
|
||||||
"overrides": {
|
|
||||||
"@notionhq/client": "4.0.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"lint-staged": {
|
"lint-staged": {
|
||||||
"*.{js,jsx,ts,tsx}": [
|
"*.{js,jsx,ts,tsx}": [
|
||||||
"eslint --fix",
|
"eslint --fix",
|
||||||
|
|||||||
@@ -1,71 +1,5 @@
|
|||||||
# @llamaindex/autotool
|
# @llamaindex/autotool
|
||||||
|
|
||||||
## 8.0.24
|
|
||||||
|
|
||||||
### Patch Changes
|
|
||||||
|
|
||||||
- llamaindex@0.11.24
|
|
||||||
|
|
||||||
## 8.0.23
|
|
||||||
|
|
||||||
### Patch Changes
|
|
||||||
|
|
||||||
- llamaindex@0.11.23
|
|
||||||
|
|
||||||
## 8.0.22
|
|
||||||
|
|
||||||
### Patch Changes
|
|
||||||
|
|
||||||
- llamaindex@0.11.22
|
|
||||||
|
|
||||||
## 8.0.21
|
|
||||||
|
|
||||||
### Patch Changes
|
|
||||||
|
|
||||||
- llamaindex@0.11.21
|
|
||||||
|
|
||||||
## 8.0.20
|
|
||||||
|
|
||||||
### Patch Changes
|
|
||||||
|
|
||||||
- llamaindex@0.11.20
|
|
||||||
|
|
||||||
## 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
|
## 8.0.13
|
||||||
|
|
||||||
### Patch Changes
|
### Patch Changes
|
||||||
|
|||||||
@@ -1,82 +1,5 @@
|
|||||||
# @llamaindex/autotool-01-node-example
|
# @llamaindex/autotool-01-node-example
|
||||||
|
|
||||||
## 0.0.132
|
|
||||||
|
|
||||||
### Patch Changes
|
|
||||||
|
|
||||||
- llamaindex@0.11.24
|
|
||||||
- @llamaindex/autotool@8.0.24
|
|
||||||
|
|
||||||
## 0.0.131
|
|
||||||
|
|
||||||
### Patch Changes
|
|
||||||
|
|
||||||
- llamaindex@0.11.23
|
|
||||||
- @llamaindex/autotool@8.0.23
|
|
||||||
|
|
||||||
## 0.0.130
|
|
||||||
|
|
||||||
### Patch Changes
|
|
||||||
|
|
||||||
- llamaindex@0.11.22
|
|
||||||
- @llamaindex/autotool@8.0.22
|
|
||||||
|
|
||||||
## 0.0.129
|
|
||||||
|
|
||||||
### Patch Changes
|
|
||||||
|
|
||||||
- llamaindex@0.11.21
|
|
||||||
- @llamaindex/autotool@8.0.21
|
|
||||||
|
|
||||||
## 0.0.128
|
|
||||||
|
|
||||||
### Patch Changes
|
|
||||||
|
|
||||||
- llamaindex@0.11.20
|
|
||||||
- @llamaindex/autotool@8.0.20
|
|
||||||
|
|
||||||
## 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
|
## 0.0.121
|
||||||
|
|
||||||
### Patch Changes
|
### Patch Changes
|
||||||
|
|||||||
@@ -8,10 +8,10 @@
|
|||||||
"openai": "^4.73.1"
|
"openai": "^4.73.1"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"tsx": "^4.20.3"
|
"tsx": "^4.19.3"
|
||||||
},
|
},
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"start": "node --import tsx --import @llamaindex/autotool/node ./src/index.ts"
|
"start": "node --import tsx --import @llamaindex/autotool/node ./src/index.ts"
|
||||||
},
|
},
|
||||||
"version": "0.0.132"
|
"version": "0.0.121"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
"url": "git+https://github.com/run-llama/LlamaIndexTS.git",
|
"url": "git+https://github.com/run-llama/LlamaIndexTS.git",
|
||||||
"directory": "packages/autotool"
|
"directory": "packages/autotool"
|
||||||
},
|
},
|
||||||
"version": "8.0.24",
|
"version": "8.0.13",
|
||||||
"description": "auto transpile your JS function to LLM Agent compatible",
|
"description": "auto transpile your JS function to LLM Agent compatible",
|
||||||
"files": [
|
"files": [
|
||||||
"dist",
|
"dist",
|
||||||
@@ -74,11 +74,11 @@
|
|||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@swc/types": "^0.1.12",
|
"@swc/types": "^0.1.12",
|
||||||
"@types/json-schema": "^7.0.15",
|
"@types/json-schema": "^7.0.15",
|
||||||
"@types/node": "^24.0.13",
|
"@types/node": "^22.9.0",
|
||||||
"llamaindex": "workspace:*",
|
"llamaindex": "workspace:*",
|
||||||
"next": "^15.3.3",
|
"next": "^15.3.3",
|
||||||
"rollup": "^4.28.1",
|
"rollup": "^4.28.1",
|
||||||
"tsx": "^4.20.3",
|
"tsx": "^4.19.3",
|
||||||
"typescript": "^5.8.3",
|
"typescript": "^5.8.3",
|
||||||
"vitest": "^2.1.5",
|
"vitest": "^2.1.5",
|
||||||
"webpack": "^5.97.1"
|
"webpack": "^5.97.1"
|
||||||
|
|||||||
@@ -1,78 +1,5 @@
|
|||||||
# @llamaindex/cloud
|
# @llamaindex/cloud
|
||||||
|
|
||||||
## 4.0.28
|
|
||||||
|
|
||||||
### Patch Changes
|
|
||||||
|
|
||||||
- c3bf3c7: Adding support for citations to beta agent data schema
|
|
||||||
- Updated dependencies [f9f1de9]
|
|
||||||
- @llamaindex/core@0.6.19
|
|
||||||
|
|
||||||
## 4.0.27
|
|
||||||
|
|
||||||
### Patch Changes
|
|
||||||
|
|
||||||
- Updated dependencies [f29799e]
|
|
||||||
- Updated dependencies [7224c06]
|
|
||||||
- @llamaindex/core@0.6.18
|
|
||||||
|
|
||||||
## 4.0.26
|
|
||||||
|
|
||||||
### Patch Changes
|
|
||||||
|
|
||||||
- Updated dependencies [38da40b]
|
|
||||||
- @llamaindex/core@0.6.17
|
|
||||||
|
|
||||||
## 4.0.25
|
|
||||||
|
|
||||||
### Patch Changes
|
|
||||||
|
|
||||||
- 2967d57: Default to \_public agent url id
|
|
||||||
- Updated dependencies [a8ec08c]
|
|
||||||
- @llamaindex/core@0.6.16
|
|
||||||
|
|
||||||
## 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
|
## 4.0.18
|
||||||
|
|
||||||
### Patch Changes
|
### Patch Changes
|
||||||
|
|||||||
@@ -1,8 +0,0 @@
|
|||||||
{
|
|
||||||
"type": "module",
|
|
||||||
"main": "./dist/index.cjs",
|
|
||||||
"module": "./dist/index.js",
|
|
||||||
"types": "./dist/index.d.ts",
|
|
||||||
"exports": "./dist/index.js",
|
|
||||||
"private": true
|
|
||||||
}
|
|
||||||
+183
-262
@@ -2519,7 +2519,7 @@
|
|||||||
"get": {
|
"get": {
|
||||||
"tags": ["Organizations"],
|
"tags": ["Organizations"],
|
||||||
"summary": "Get Organization Usage",
|
"summary": "Get Organization Usage",
|
||||||
"description": "Get usage for a specific organization.",
|
"description": "Get usage for a project",
|
||||||
"operationId": "get_organization_usage_api_v1_organizations__organization_id__usage_get",
|
"operationId": "get_organization_usage_api_v1_organizations__organization_id__usage_get",
|
||||||
"security": [
|
"security": [
|
||||||
{
|
{
|
||||||
@@ -2535,8 +2535,15 @@
|
|||||||
"in": "path",
|
"in": "path",
|
||||||
"required": true,
|
"required": true,
|
||||||
"schema": {
|
"schema": {
|
||||||
"type": "string",
|
"anyOf": [
|
||||||
"format": "uuid",
|
{
|
||||||
|
"type": "string",
|
||||||
|
"format": "uuid"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "null"
|
||||||
|
}
|
||||||
|
],
|
||||||
"title": "Organization Id"
|
"title": "Organization Id"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -11643,7 +11650,7 @@
|
|||||||
},
|
},
|
||||||
"/api/v1/projects/{project_id}/agents": {
|
"/api/v1/projects/{project_id}/agents": {
|
||||||
"get": {
|
"get": {
|
||||||
"tags": ["Agent Deployments"],
|
"tags": ["Llama Apps"],
|
||||||
"summary": "List Deployments",
|
"summary": "List Deployments",
|
||||||
"description": "List all deployments for a project.",
|
"description": "List all deployments for a project.",
|
||||||
"operationId": "list_deployments_api_v1_projects__project_id__agents_get",
|
"operationId": "list_deployments_api_v1_projects__project_id__agents_get",
|
||||||
@@ -11709,7 +11716,7 @@
|
|||||||
},
|
},
|
||||||
"/api/v1/projects/{project_id}/agents:sync": {
|
"/api/v1/projects/{project_id}/agents:sync": {
|
||||||
"post": {
|
"post": {
|
||||||
"tags": ["Agent Deployments"],
|
"tags": ["Llama Apps"],
|
||||||
"summary": "Sync Deployments",
|
"summary": "Sync Deployments",
|
||||||
"description": "Sync deployments for a project.",
|
"description": "Sync deployments for a project.",
|
||||||
"operationId": "sync_deployments_api_v1_projects__project_id__agents_sync_post",
|
"operationId": "sync_deployments_api_v1_projects__project_id__agents_sync_post",
|
||||||
@@ -11773,12 +11780,12 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"/api/v1/classifier/classify": {
|
"/api/v1/billing/checkout-session": {
|
||||||
"post": {
|
"post": {
|
||||||
"tags": ["Classifier", "Beta", "Classifier"],
|
"tags": ["Billing"],
|
||||||
"summary": "Classify Documents",
|
"summary": "Create Checkout Session",
|
||||||
"description": "**[BETA]** Classify documents based on provided rules - simplified classification system.\n\n**This is a Beta feature** - API may change based on user feedback.\n\nThis endpoint supports:\n- Classifying new uploaded files\n- Classifying existing files by ID\n- Both new files and existing file IDs in one request\n\n## v0 Features:\n- **Simplified Rules**: Only `type` and `description` fields needed\n- **Matching Threshold**: Confidence-based classification with configurable threshold\n- **Smart Classification**: Filename heuristics + LLM content analysis\n- **Document Type Filtering**: Automatically filters out non-document file types\n- **Fast Processing**: Uses LlamaParse fast mode + GPT-4.1-nano\n- **Optimized Performance**: Parses each file only once for all rules\n\n## Simplified Scoring Logic:\n1. **Evaluate All Rules**: Compare document against all classification rules\n2. **Best Match Selection**: Return the highest scoring rule above matching_threshold\n3. **Unknown Classification**: Return as \"unknown\" if no rules score above threshold\n\nThis ensures optimal classification by:\n- Finding the best possible match among all rules\n- Avoiding false positives with confidence thresholds\n- Maximizing performance with single-pass file parsing\n\n## Rule Format:\n```json\n[\n {\n \"type\": \"invoice\",\n \"description\": \"contains invoice number, line items, and total amount\"\n },\n {\n \"type\": \"receipt\",\n \"description\": \"purchase receipt with transaction details and payment info\"\n }\n]\n```\n\n## Classification Process:\n1. **Metadata Heuristics** (configurable via API):\n - **Document Type Filter**: Only process document file types (PDF, DOC, DOCX, RTF, TXT, ODT, Pages, HTML, XML, Markdown)\n - **Filename Heuristics**: Check if rule type appears in filename\n - **Content Analysis**: Parse document content once and use LLM for semantic matching against all rules\n2. **Result**: Returns type, confidence score, and matched rule information\n\n## API Parameters:\n- `matching_threshold` (0.1-0.99, default: 0.6): Minimum confidence threshold for acceptable matches\n- `enable_metadata_heuristic` (boolean, default: true): Enable metadata-based features\n\n## Supported Document Types:\n**Text Documents**: pdf, doc, docx, rtf, txt, odt, pages\n**Web Documents**: html, htm, xml\n**Markup**: md, markdown\n\n## Limits (Beta):\n- Maximum 100 files per request\n- Maximum 10 rules per request\n- Rule descriptions: 10-500 characters\n- Document types: 1-50 characters (alphanumeric, hyphens, underscores)\n\n**Beta Notice**: This API is subject to change. Please provide feedback!",
|
"description": "Create a new checkout session.",
|
||||||
"operationId": "classify_documents_api_v1_classifier_classify_post",
|
"operationId": "create_checkout_session_api_v1_billing_checkout_session_post",
|
||||||
"security": [
|
"security": [
|
||||||
{
|
{
|
||||||
"HTTPBearer": []
|
"HTTPBearer": []
|
||||||
@@ -11788,23 +11795,6 @@
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
"parameters": [
|
"parameters": [
|
||||||
{
|
|
||||||
"name": "project_id",
|
|
||||||
"in": "query",
|
|
||||||
"required": false,
|
|
||||||
"schema": {
|
|
||||||
"anyOf": [
|
|
||||||
{
|
|
||||||
"type": "string",
|
|
||||||
"format": "uuid"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "null"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"title": "Project Id"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "organization_id",
|
"name": "organization_id",
|
||||||
"in": "query",
|
"in": "query",
|
||||||
@@ -11842,9 +11832,9 @@
|
|||||||
"requestBody": {
|
"requestBody": {
|
||||||
"required": true,
|
"required": true,
|
||||||
"content": {
|
"content": {
|
||||||
"multipart/form-data": {
|
"application/json": {
|
||||||
"schema": {
|
"schema": {
|
||||||
"$ref": "#/components/schemas/Body_classify_documents_api_v1_classifier_classify_post"
|
"$ref": "#/components/schemas/CheckoutSessionCreatePayload"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -11855,7 +11845,8 @@
|
|||||||
"content": {
|
"content": {
|
||||||
"application/json": {
|
"application/json": {
|
||||||
"schema": {
|
"schema": {
|
||||||
"$ref": "#/components/schemas/ClassifyResponse"
|
"type": "string",
|
||||||
|
"title": "Response Create Checkout Session Api V1 Billing Checkout Session Post"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -11957,6 +11948,55 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"/api/v1/billing/webhook": {
|
||||||
|
"post": {
|
||||||
|
"tags": ["Billing"],
|
||||||
|
"summary": "Stripe Webhook",
|
||||||
|
"description": "Stripe webhook endpoint.",
|
||||||
|
"operationId": "stripe_webhook_api_v1_billing_webhook_post",
|
||||||
|
"parameters": [
|
||||||
|
{
|
||||||
|
"name": "stripe-signature",
|
||||||
|
"in": "header",
|
||||||
|
"required": false,
|
||||||
|
"schema": {
|
||||||
|
"type": "string",
|
||||||
|
"title": "Stripe-Signature"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"responses": {
|
||||||
|
"200": {
|
||||||
|
"description": "Successful Response",
|
||||||
|
"content": {
|
||||||
|
"application/json": {
|
||||||
|
"schema": {
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": {
|
||||||
|
"const": "success",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"propertyNames": {
|
||||||
|
"const": "status"
|
||||||
|
},
|
||||||
|
"title": "Response Stripe Webhook Api V1 Billing Webhook Post"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"422": {
|
||||||
|
"description": "Validation Error",
|
||||||
|
"content": {
|
||||||
|
"application/json": {
|
||||||
|
"schema": {
|
||||||
|
"$ref": "#/components/schemas/HTTPValidationError"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"/api/v1/billing/downgrade-plan": {
|
"/api/v1/billing/downgrade-plan": {
|
||||||
"post": {
|
"post": {
|
||||||
"tags": ["Billing"],
|
"tags": ["Billing"],
|
||||||
@@ -12125,6 +12165,64 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"/api/v1/billing/metronome-webhook": {
|
||||||
|
"post": {
|
||||||
|
"tags": ["Billing"],
|
||||||
|
"summary": "Metronome Webhook",
|
||||||
|
"description": "Metronome webhook endpoint.",
|
||||||
|
"operationId": "metronome_webhook_api_v1_billing_metronome_webhook_post",
|
||||||
|
"parameters": [
|
||||||
|
{
|
||||||
|
"name": "Metronome-Webhook-Signature",
|
||||||
|
"in": "header",
|
||||||
|
"required": false,
|
||||||
|
"schema": {
|
||||||
|
"type": "string",
|
||||||
|
"title": "Metronome-Webhook-Signature"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Date",
|
||||||
|
"in": "header",
|
||||||
|
"required": false,
|
||||||
|
"schema": {
|
||||||
|
"type": "string",
|
||||||
|
"title": "Date"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"responses": {
|
||||||
|
"200": {
|
||||||
|
"description": "Successful Response",
|
||||||
|
"content": {
|
||||||
|
"application/json": {
|
||||||
|
"schema": {
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": {
|
||||||
|
"const": "success",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"propertyNames": {
|
||||||
|
"const": "status"
|
||||||
|
},
|
||||||
|
"title": "Response Metronome Webhook Api V1 Billing Metronome Webhook Post"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"422": {
|
||||||
|
"description": "Validation Error",
|
||||||
|
"content": {
|
||||||
|
"application/json": {
|
||||||
|
"schema": {
|
||||||
|
"$ref": "#/components/schemas/HTTPValidationError"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"/api/v1/billing/metronome/dashboard": {
|
"/api/v1/billing/metronome/dashboard": {
|
||||||
"get": {
|
"get": {
|
||||||
"tags": ["Billing"],
|
"tags": ["Billing"],
|
||||||
@@ -15670,12 +15768,12 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"/api/v1/beta/agent-data": {
|
"/api/v1/beta/agent-data/": {
|
||||||
"post": {
|
"post": {
|
||||||
"tags": ["Beta", "Agent Data"],
|
"tags": ["Beta", "Agent Data"],
|
||||||
"summary": "Create Agent Data",
|
"summary": "Create Agent Data",
|
||||||
"description": "Create new agent data.",
|
"description": "Create new agent data.",
|
||||||
"operationId": "create_agent_data_api_v1_beta_agent_data_post",
|
"operationId": "create_agent_data_api_v1_beta_agent_data__post",
|
||||||
"security": [
|
"security": [
|
||||||
{
|
{
|
||||||
"HTTPBearer": []
|
"HTTPBearer": []
|
||||||
@@ -18785,73 +18883,6 @@
|
|||||||
"required": ["start_date", "end_date"],
|
"required": ["start_date", "end_date"],
|
||||||
"title": "BillingPeriod"
|
"title": "BillingPeriod"
|
||||||
},
|
},
|
||||||
"Body_classify_documents_api_v1_classifier_classify_post": {
|
|
||||||
"properties": {
|
|
||||||
"rules_json": {
|
|
||||||
"type": "string",
|
|
||||||
"title": "Rules Json",
|
|
||||||
"description": "JSON string containing classifier rules"
|
|
||||||
},
|
|
||||||
"files": {
|
|
||||||
"anyOf": [
|
|
||||||
{
|
|
||||||
"items": {
|
|
||||||
"type": "string",
|
|
||||||
"format": "binary"
|
|
||||||
},
|
|
||||||
"type": "array"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "null"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"title": "Files"
|
|
||||||
},
|
|
||||||
"file_ids": {
|
|
||||||
"anyOf": [
|
|
||||||
{
|
|
||||||
"type": "string"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "null"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"title": "File Ids",
|
|
||||||
"description": "Comma-separated list of existing file IDs"
|
|
||||||
},
|
|
||||||
"matching_threshold": {
|
|
||||||
"anyOf": [
|
|
||||||
{
|
|
||||||
"type": "number",
|
|
||||||
"maximum": 0.99,
|
|
||||||
"minimum": 0.1
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "null"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"title": "Matching Threshold",
|
|
||||||
"description": "Minimum confidence threshold for acceptable matches (0.1-0.99, default: 0.6)",
|
|
||||||
"default": 0.6
|
|
||||||
},
|
|
||||||
"enable_metadata_heuristic": {
|
|
||||||
"anyOf": [
|
|
||||||
{
|
|
||||||
"type": "boolean"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "null"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"title": "Enable Metadata Heuristic",
|
|
||||||
"description": "Enable metadata-based features (document filtering + content classification, default: true)",
|
|
||||||
"default": true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"type": "object",
|
|
||||||
"required": ["rules_json"],
|
|
||||||
"title": "Body_classify_documents_api_v1_classifier_classify_post"
|
|
||||||
},
|
|
||||||
"Body_create_report_api_v1_reports__post": {
|
"Body_create_report_api_v1_reports__post": {
|
||||||
"properties": {
|
"properties": {
|
||||||
"name": {
|
"name": {
|
||||||
@@ -19345,11 +19376,6 @@
|
|||||||
],
|
],
|
||||||
"title": "Max Pages"
|
"title": "Max Pages"
|
||||||
},
|
},
|
||||||
"merge_tables_across_pages_in_markdown": {
|
|
||||||
"type": "boolean",
|
|
||||||
"title": "Merge Tables Across Pages In Markdown",
|
|
||||||
"default": false
|
|
||||||
},
|
|
||||||
"outlined_table_extraction": {
|
"outlined_table_extraction": {
|
||||||
"type": "boolean",
|
"type": "boolean",
|
||||||
"title": "Outlined Table Extraction",
|
"title": "Outlined Table Extraction",
|
||||||
@@ -19831,11 +19857,6 @@
|
|||||||
],
|
],
|
||||||
"title": "Max Pages"
|
"title": "Max Pages"
|
||||||
},
|
},
|
||||||
"merge_tables_across_pages_in_markdown": {
|
|
||||||
"type": "boolean",
|
|
||||||
"title": "Merge Tables Across Pages In Markdown",
|
|
||||||
"default": false
|
|
||||||
},
|
|
||||||
"outlined_table_extraction": {
|
"outlined_table_extraction": {
|
||||||
"type": "boolean",
|
"type": "boolean",
|
||||||
"title": "Outlined Table Extraction",
|
"title": "Outlined Table Extraction",
|
||||||
@@ -20409,101 +20430,30 @@
|
|||||||
"type": "object",
|
"type": "object",
|
||||||
"title": "ChatInputParams"
|
"title": "ChatInputParams"
|
||||||
},
|
},
|
||||||
|
"CheckoutSessionCreatePayload": {
|
||||||
|
"properties": {
|
||||||
|
"success_url": {
|
||||||
|
"type": "string",
|
||||||
|
"minLength": 1,
|
||||||
|
"format": "uri",
|
||||||
|
"title": "Success Url"
|
||||||
|
},
|
||||||
|
"cancel_url": {
|
||||||
|
"type": "string",
|
||||||
|
"minLength": 1,
|
||||||
|
"format": "uri",
|
||||||
|
"title": "Cancel Url"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"required": ["success_url", "cancel_url"],
|
||||||
|
"title": "CheckoutSessionCreatePayload"
|
||||||
|
},
|
||||||
"ChunkMode": {
|
"ChunkMode": {
|
||||||
"type": "string",
|
"type": "string",
|
||||||
"enum": ["PAGE", "DOCUMENT", "SECTION", "GROUPED_PAGES"],
|
"enum": ["PAGE", "DOCUMENT", "SECTION", "GROUPED_PAGES"],
|
||||||
"title": "ChunkMode"
|
"title": "ChunkMode"
|
||||||
},
|
},
|
||||||
"ClassificationResult": {
|
|
||||||
"properties": {
|
|
||||||
"file_id": {
|
|
||||||
"type": "string",
|
|
||||||
"format": "uuid",
|
|
||||||
"title": "File Id",
|
|
||||||
"description": "The ID of the classified file"
|
|
||||||
},
|
|
||||||
"type": {
|
|
||||||
"type": "string",
|
|
||||||
"title": "Type",
|
|
||||||
"description": "The assigned document type ('unknown' if no rules matched)",
|
|
||||||
"examples": ["invoice", "receipt", "contract", "unknown"]
|
|
||||||
},
|
|
||||||
"confidence": {
|
|
||||||
"type": "number",
|
|
||||||
"maximum": 1.0,
|
|
||||||
"minimum": 0.0,
|
|
||||||
"title": "Confidence",
|
|
||||||
"description": "Confidence score of the classification (0.0-1.0)"
|
|
||||||
},
|
|
||||||
"matched_rule": {
|
|
||||||
"anyOf": [
|
|
||||||
{
|
|
||||||
"type": "string"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "null"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"title": "Matched Rule",
|
|
||||||
"description": "Description of the rule that matched, or method used (e.g., 'auto: filename contains invoice')",
|
|
||||||
"examples": [
|
|
||||||
"contains invoice number, line items, and total",
|
|
||||||
"auto: filename contains 'invoice'",
|
|
||||||
null
|
|
||||||
]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"type": "object",
|
|
||||||
"required": ["file_id", "type", "confidence", "matched_rule"],
|
|
||||||
"title": "ClassificationResult",
|
|
||||||
"description": "Result of classifying a single file.\n\nContains the classification outcome with confidence score and matched rule info."
|
|
||||||
},
|
|
||||||
"ClassifyResponse": {
|
|
||||||
"properties": {
|
|
||||||
"items": {
|
|
||||||
"items": {
|
|
||||||
"$ref": "#/components/schemas/ClassificationResult"
|
|
||||||
},
|
|
||||||
"type": "array",
|
|
||||||
"title": "Items",
|
|
||||||
"description": "The list of items."
|
|
||||||
},
|
|
||||||
"next_page_token": {
|
|
||||||
"anyOf": [
|
|
||||||
{
|
|
||||||
"type": "string"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "null"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"title": "Next Page Token",
|
|
||||||
"description": "A token, which can be sent as page_token to retrieve the next page. If this field is omitted, there are no subsequent pages."
|
|
||||||
},
|
|
||||||
"total_size": {
|
|
||||||
"anyOf": [
|
|
||||||
{
|
|
||||||
"type": "integer"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "null"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"title": "Total Size",
|
|
||||||
"description": "The total number of items available. This is only populated when specifically requested. The value may be an estimate and can be used for display purposes only."
|
|
||||||
},
|
|
||||||
"unknown_count": {
|
|
||||||
"type": "integer",
|
|
||||||
"minimum": 0.0,
|
|
||||||
"title": "Unknown Count",
|
|
||||||
"description": "Number of files that couldn't be classified"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"type": "object",
|
|
||||||
"required": ["items", "unknown_count"],
|
|
||||||
"title": "ClassifyResponse",
|
|
||||||
"description": "Response model for the classify endpoint following AIP-132 pagination standard.\n\nContains classification results with pagination support and summary statistics."
|
|
||||||
},
|
|
||||||
"CloudAzStorageBlobDataSource": {
|
"CloudAzStorageBlobDataSource": {
|
||||||
"properties": {
|
"properties": {
|
||||||
"supports_access_control": {
|
"supports_access_control": {
|
||||||
@@ -21991,7 +21941,6 @@
|
|||||||
},
|
},
|
||||||
"query": {
|
"query": {
|
||||||
"type": "string",
|
"type": "string",
|
||||||
"minLength": 1,
|
|
||||||
"title": "Query",
|
"title": "Query",
|
||||||
"description": "The query to retrieve against."
|
"description": "The query to retrieve against."
|
||||||
}
|
}
|
||||||
@@ -22508,12 +22457,14 @@
|
|||||||
"version_metadata": {
|
"version_metadata": {
|
||||||
"anyOf": [
|
"anyOf": [
|
||||||
{
|
{
|
||||||
"$ref": "#/components/schemas/DataSourceReaderVersionMetadata"
|
"additionalProperties": true,
|
||||||
|
"type": "object"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "null"
|
"type": "null"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
"title": "Version Metadata",
|
||||||
"description": "Version metadata for the data source"
|
"description": "Version metadata for the data source"
|
||||||
},
|
},
|
||||||
"project_id": {
|
"project_id": {
|
||||||
@@ -22619,24 +22570,6 @@
|
|||||||
"title": "DataSourceCreate",
|
"title": "DataSourceCreate",
|
||||||
"description": "Schema for creating a data source."
|
"description": "Schema for creating a data source."
|
||||||
},
|
},
|
||||||
"DataSourceReaderVersionMetadata": {
|
|
||||||
"properties": {
|
|
||||||
"reader_version": {
|
|
||||||
"anyOf": [
|
|
||||||
{
|
|
||||||
"type": "string"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "null"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"title": "Reader Version",
|
|
||||||
"description": "The version of the reader to use for this data source."
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"type": "object",
|
|
||||||
"title": "DataSourceReaderVersionMetadata"
|
|
||||||
},
|
|
||||||
"DataSourceUpdate": {
|
"DataSourceUpdate": {
|
||||||
"properties": {
|
"properties": {
|
||||||
"name": {
|
"name": {
|
||||||
@@ -22908,7 +22841,6 @@
|
|||||||
},
|
},
|
||||||
"query": {
|
"query": {
|
||||||
"type": "string",
|
"type": "string",
|
||||||
"minLength": 1,
|
|
||||||
"title": "Query",
|
"title": "Query",
|
||||||
"description": "The query to retrieve against."
|
"description": "The query to retrieve against."
|
||||||
},
|
},
|
||||||
@@ -23867,7 +23799,7 @@
|
|||||||
},
|
},
|
||||||
"ExtractMode": {
|
"ExtractMode": {
|
||||||
"type": "string",
|
"type": "string",
|
||||||
"enum": ["FAST", "BALANCED", "PREMIUM", "MULTIMODAL"],
|
"enum": ["FAST", "BALANCED", "PREMIUM", "MULTIMODAL", "ACCURATE"],
|
||||||
"title": "ExtractMode"
|
"title": "ExtractMode"
|
||||||
},
|
},
|
||||||
"ExtractModels": {
|
"ExtractModels": {
|
||||||
@@ -26278,19 +26210,6 @@
|
|||||||
"description": "Whether to try to extract outlined tables",
|
"description": "Whether to try to extract outlined tables",
|
||||||
"default": false
|
"default": false
|
||||||
},
|
},
|
||||||
"mergeTablesAcrossPagesInMarkdown": {
|
|
||||||
"anyOf": [
|
|
||||||
{
|
|
||||||
"type": "boolean"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "null"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"title": "Mergetablesacrosspagesinmarkdown",
|
|
||||||
"description": "Whether to merge tables across pages in markdown",
|
|
||||||
"default": false
|
|
||||||
},
|
|
||||||
"saveImages": {
|
"saveImages": {
|
||||||
"anyOf": [
|
"anyOf": [
|
||||||
{
|
{
|
||||||
@@ -27151,7 +27070,6 @@
|
|||||||
"disable_image_extraction": false,
|
"disable_image_extraction": false,
|
||||||
"invalidate_cache": false,
|
"invalidate_cache": false,
|
||||||
"outlined_table_extraction": false,
|
"outlined_table_extraction": false,
|
||||||
"merge_tables_across_pages_in_markdown": false,
|
|
||||||
"output_pdf_of_document": false,
|
"output_pdf_of_document": false,
|
||||||
"do_not_cache": false,
|
"do_not_cache": false,
|
||||||
"fast_mode": false,
|
"fast_mode": false,
|
||||||
@@ -27328,18 +27246,6 @@
|
|||||||
"title": "Outlined Table Extraction",
|
"title": "Outlined Table Extraction",
|
||||||
"default": false
|
"default": false
|
||||||
},
|
},
|
||||||
"merge_tables_across_pages_in_markdown": {
|
|
||||||
"anyOf": [
|
|
||||||
{
|
|
||||||
"type": "boolean"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "null"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"title": "Merge Tables Across Pages In Markdown",
|
|
||||||
"default": false
|
|
||||||
},
|
|
||||||
"output_pdf_of_document": {
|
"output_pdf_of_document": {
|
||||||
"anyOf": [
|
"anyOf": [
|
||||||
{
|
{
|
||||||
@@ -29500,18 +29406,6 @@
|
|||||||
"title": "Outlined Table Extraction",
|
"title": "Outlined Table Extraction",
|
||||||
"default": false
|
"default": false
|
||||||
},
|
},
|
||||||
"merge_tables_across_pages_in_markdown": {
|
|
||||||
"anyOf": [
|
|
||||||
{
|
|
||||||
"type": "boolean"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "null"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"title": "Merge Tables Across Pages In Markdown",
|
|
||||||
"default": false
|
|
||||||
},
|
|
||||||
"output_pdf_of_document": {
|
"output_pdf_of_document": {
|
||||||
"anyOf": [
|
"anyOf": [
|
||||||
{
|
{
|
||||||
@@ -31440,12 +31334,14 @@
|
|||||||
"version_metadata": {
|
"version_metadata": {
|
||||||
"anyOf": [
|
"anyOf": [
|
||||||
{
|
{
|
||||||
"$ref": "#/components/schemas/DataSourceReaderVersionMetadata"
|
"additionalProperties": true,
|
||||||
|
"type": "object"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "null"
|
"type": "null"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
"title": "Version Metadata",
|
||||||
"description": "Version metadata for the data source"
|
"description": "Version metadata for the data source"
|
||||||
},
|
},
|
||||||
"project_id": {
|
"project_id": {
|
||||||
@@ -32233,6 +32129,12 @@
|
|||||||
"title": "Data Source Project File Changed",
|
"title": "Data Source Project File Changed",
|
||||||
"description": "Whether the data source project file has changed",
|
"description": "Whether the data source project file has changed",
|
||||||
"default": false
|
"default": false
|
||||||
|
},
|
||||||
|
"should_migrate_pipeline_file_to_external_file_id": {
|
||||||
|
"type": "boolean",
|
||||||
|
"title": "Should Migrate Pipeline File To External File Id",
|
||||||
|
"description": "Whether to migrate the pipeline file to the external file id",
|
||||||
|
"default": false
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"type": "object",
|
"type": "object",
|
||||||
@@ -34337,6 +34239,19 @@
|
|||||||
"title": "Name",
|
"title": "Name",
|
||||||
"description": "A name for the role."
|
"description": "A name for the role."
|
||||||
},
|
},
|
||||||
|
"organization_id": {
|
||||||
|
"anyOf": [
|
||||||
|
{
|
||||||
|
"type": "string",
|
||||||
|
"format": "uuid"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "null"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"title": "Organization Id",
|
||||||
|
"description": "The organization's ID."
|
||||||
|
},
|
||||||
"permissions": {
|
"permissions": {
|
||||||
"items": {
|
"items": {
|
||||||
"$ref": "#/components/schemas/Permission"
|
"$ref": "#/components/schemas/Permission"
|
||||||
@@ -34347,7 +34262,7 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"type": "object",
|
"type": "object",
|
||||||
"required": ["id", "name", "permissions"],
|
"required": ["id", "name", "organization_id", "permissions"],
|
||||||
"title": "Role",
|
"title": "Role",
|
||||||
"description": "Schema for a role."
|
"description": "Schema for a role."
|
||||||
},
|
},
|
||||||
@@ -35219,13 +35134,19 @@
|
|||||||
"title": "Project Ids",
|
"title": "Project Ids",
|
||||||
"description": "The project ID scope."
|
"description": "The project ID scope."
|
||||||
},
|
},
|
||||||
|
"role_id": {
|
||||||
|
"type": "string",
|
||||||
|
"format": "uuid",
|
||||||
|
"title": "Role Id",
|
||||||
|
"description": "The role's ID."
|
||||||
|
},
|
||||||
"role": {
|
"role": {
|
||||||
"$ref": "#/components/schemas/Role",
|
"$ref": "#/components/schemas/Role",
|
||||||
"description": "The role."
|
"description": "The role."
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"type": "object",
|
"type": "object",
|
||||||
"required": ["id", "user_id", "organization_id", "role"],
|
"required": ["id", "user_id", "organization_id", "role_id", "role"],
|
||||||
"title": "UserOrganizationRole",
|
"title": "UserOrganizationRole",
|
||||||
"description": "Schema for a user's role in an organization."
|
"description": "Schema for a user's role in an organization."
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@llamaindex/cloud",
|
"name": "@llamaindex/cloud",
|
||||||
"version": "4.0.28",
|
"version": "4.0.18",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
@@ -11,22 +11,20 @@
|
|||||||
"files": [
|
"files": [
|
||||||
"openapi.json",
|
"openapi.json",
|
||||||
"./api",
|
"./api",
|
||||||
"./reader",
|
"./reader"
|
||||||
"./parse",
|
|
||||||
"./beta/agent"
|
|
||||||
],
|
],
|
||||||
"exports": {
|
"exports": {
|
||||||
"./openapi.json": "./openapi.json",
|
"./openapi.json": "./openapi.json",
|
||||||
"./beta/agent": {
|
"./agent": {
|
||||||
"require": {
|
"require": {
|
||||||
"types": "./beta/agent/dist/index.d.cts",
|
"types": "./agent/dist/index.d.cts",
|
||||||
"default": "./beta/agent/dist/index.cjs"
|
"default": "./agent/dist/index.cjs"
|
||||||
},
|
},
|
||||||
"import": {
|
"import": {
|
||||||
"types": "./beta/agent/dist/index.d.ts",
|
"types": "./agent/dist/index.d.ts",
|
||||||
"default": "./beta/agent/dist/index.js"
|
"default": "./agent/dist/index.js"
|
||||||
},
|
},
|
||||||
"default": "./beta/agent/dist/index.js"
|
"default": "./agent/dist/index.js"
|
||||||
},
|
},
|
||||||
"./api": {
|
"./api": {
|
||||||
"require": {
|
"require": {
|
||||||
|
|||||||
@@ -0,0 +1,291 @@
|
|||||||
|
import { createClient, createConfig } from "@hey-api/client-fetch";
|
||||||
|
import { getEnv } from "@llamaindex/env";
|
||||||
|
import pRetry from "p-retry";
|
||||||
|
import {
|
||||||
|
createAgentDataApiV1BetaAgentDataPost,
|
||||||
|
deleteAgentDataApiV1BetaAgentDataItemIdDelete,
|
||||||
|
getAgentDataApiV1BetaAgentDataItemIdGet,
|
||||||
|
searchAgentDataApiV1BetaAgentDataSearchPost,
|
||||||
|
updateAgentDataApiV1BetaAgentDataItemIdPut,
|
||||||
|
type AgentData,
|
||||||
|
} from "../client";
|
||||||
|
import type {
|
||||||
|
CreateAgentDataOptions,
|
||||||
|
ExtractedData,
|
||||||
|
ExtractOptions,
|
||||||
|
ListAgentDataOptions,
|
||||||
|
TypedAgentData,
|
||||||
|
TypedAgentDataItems,
|
||||||
|
UpdateAgentDataOptions,
|
||||||
|
} from "./types";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Async client for agent data operations
|
||||||
|
*/
|
||||||
|
export class AgentClient {
|
||||||
|
private client: ReturnType<typeof createClient>;
|
||||||
|
private baseUrl: string;
|
||||||
|
private headers: Record<string, string>;
|
||||||
|
|
||||||
|
constructor(options?: { apiKey?: string; baseUrl?: string }) {
|
||||||
|
const apiKey = options?.apiKey || getEnv("LLAMA_CLOUD_API_KEY");
|
||||||
|
this.baseUrl = options?.baseUrl || "https://api.cloud.llamaindex.ai/";
|
||||||
|
|
||||||
|
this.headers = {
|
||||||
|
"X-SDK-Name": "llamaindex-ts",
|
||||||
|
...(apiKey && { Authorization: `Bearer ${apiKey}` }),
|
||||||
|
};
|
||||||
|
|
||||||
|
this.client = createClient(
|
||||||
|
createConfig({
|
||||||
|
baseUrl: this.baseUrl,
|
||||||
|
headers: this.headers,
|
||||||
|
}),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create new agent data
|
||||||
|
*/
|
||||||
|
async create<T = unknown>(
|
||||||
|
options: CreateAgentDataOptions<T>,
|
||||||
|
): Promise<TypedAgentData<T>> {
|
||||||
|
const response = await createAgentDataApiV1BetaAgentDataPost({
|
||||||
|
throwOnError: true,
|
||||||
|
body: {
|
||||||
|
agent_slug: options.agentSlug,
|
||||||
|
...(options.collection !== undefined && {
|
||||||
|
collection: options.collection,
|
||||||
|
}),
|
||||||
|
data: options.data as Record<string, unknown>,
|
||||||
|
},
|
||||||
|
client: this.client,
|
||||||
|
});
|
||||||
|
|
||||||
|
return this.transformResponse(response.data);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get agent data by ID
|
||||||
|
*/
|
||||||
|
async get<T = unknown>(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 update<T = unknown>(
|
||||||
|
id: string,
|
||||||
|
options: UpdateAgentDataOptions<T>,
|
||||||
|
): Promise<TypedAgentData<T>> {
|
||||||
|
const response = await updateAgentDataApiV1BetaAgentDataItemIdPut({
|
||||||
|
throwOnError: true,
|
||||||
|
path: { item_id: id },
|
||||||
|
body: {
|
||||||
|
data: options.data as Record<string, unknown>,
|
||||||
|
},
|
||||||
|
client: this.client,
|
||||||
|
});
|
||||||
|
|
||||||
|
return this.transformResponse(response.data);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Delete agent data
|
||||||
|
*/
|
||||||
|
async delete(id: string): Promise<void> {
|
||||||
|
await deleteAgentDataApiV1BetaAgentDataItemIdDelete({
|
||||||
|
throwOnError: true,
|
||||||
|
path: { item_id: id },
|
||||||
|
client: this.client,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* List agent data
|
||||||
|
*/
|
||||||
|
async list<T = unknown>(
|
||||||
|
options: ListAgentDataOptions,
|
||||||
|
): Promise<TypedAgentDataItems<T>> {
|
||||||
|
const response = await searchAgentDataApiV1BetaAgentDataSearchPost({
|
||||||
|
throwOnError: true,
|
||||||
|
body: {
|
||||||
|
agent_slug: options.agentSlug,
|
||||||
|
...(options.collection !== undefined && {
|
||||||
|
collection: options.collection,
|
||||||
|
}),
|
||||||
|
...(options.filter !== undefined && { filter: options.filter }),
|
||||||
|
...(options.orderBy !== undefined && { order_by: options.orderBy }),
|
||||||
|
...(options.pageSize !== undefined && { page_size: options.pageSize }),
|
||||||
|
...(options.pageToken !== undefined && {
|
||||||
|
page_token: options.pageToken,
|
||||||
|
}),
|
||||||
|
...(options.offset !== undefined && { offset: options.offset }),
|
||||||
|
},
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Extract data from agent with retry logic
|
||||||
|
*/
|
||||||
|
async extract<T = unknown>(
|
||||||
|
agentId: string,
|
||||||
|
input: unknown,
|
||||||
|
options?: ExtractOptions,
|
||||||
|
): Promise<ExtractedData<T>> {
|
||||||
|
const extractOptions = {
|
||||||
|
retries: options?.retryCount || 3,
|
||||||
|
onFailedAttempt: (error: {
|
||||||
|
attemptNumber: number;
|
||||||
|
retriesLeft: number;
|
||||||
|
}) => {
|
||||||
|
console.log(
|
||||||
|
`Extraction attempt ${error.attemptNumber} failed. ${error.retriesLeft} retries left.`,
|
||||||
|
);
|
||||||
|
},
|
||||||
|
minTimeout: options?.retryDelay || 1000,
|
||||||
|
maxTimeout: options?.timeout || 30000,
|
||||||
|
};
|
||||||
|
|
||||||
|
return pRetry(async () => {
|
||||||
|
// Note: The extract endpoint might not be in the generated client yet
|
||||||
|
// Using the native fetch API for this endpoint
|
||||||
|
const response = await fetch(
|
||||||
|
`${this.baseUrl}/api/v1/beta/agent-data/${agentId}/extract`,
|
||||||
|
{
|
||||||
|
method: "POST",
|
||||||
|
body: JSON.stringify({ input }),
|
||||||
|
headers: {
|
||||||
|
"Content-Type": "application/json",
|
||||||
|
...this.headers,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
);
|
||||||
|
|
||||||
|
if (!response.ok) {
|
||||||
|
throw new Error(`Failed to extract data: ${response.statusText}`);
|
||||||
|
}
|
||||||
|
|
||||||
|
const extractedData = (await response.json()) as ExtractedData<T>;
|
||||||
|
|
||||||
|
// If status is still pending or in progress, poll for completion
|
||||||
|
if (
|
||||||
|
extractedData.status === "pending" ||
|
||||||
|
extractedData.status === "in_progress"
|
||||||
|
) {
|
||||||
|
return this.pollExtraction<T>(extractedData.id, options);
|
||||||
|
}
|
||||||
|
|
||||||
|
return extractedData;
|
||||||
|
}, extractOptions);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Poll for extraction completion
|
||||||
|
*/
|
||||||
|
private async pollExtraction<T = unknown>(
|
||||||
|
extractionId: string,
|
||||||
|
options?: ExtractOptions,
|
||||||
|
): Promise<ExtractedData<T>> {
|
||||||
|
const pollInterval = 2000; // 2 seconds
|
||||||
|
const maxAttempts = Math.floor((options?.timeout || 30000) / pollInterval);
|
||||||
|
|
||||||
|
for (let i = 0; i < maxAttempts; i++) {
|
||||||
|
await new Promise((resolve) => setTimeout(resolve, pollInterval));
|
||||||
|
|
||||||
|
const response = await fetch(
|
||||||
|
`${this.baseUrl}/api/v1/extractions/${extractionId}`,
|
||||||
|
{
|
||||||
|
headers: this.headers,
|
||||||
|
},
|
||||||
|
);
|
||||||
|
|
||||||
|
if (!response.ok) {
|
||||||
|
throw new Error(
|
||||||
|
`Failed to get extraction status: ${response.statusText}`,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
const extractedData = (await response.json()) as ExtractedData<T>;
|
||||||
|
|
||||||
|
if (
|
||||||
|
extractedData.status === "completed" ||
|
||||||
|
extractedData.status === "failed"
|
||||||
|
) {
|
||||||
|
return extractedData;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
throw new Error("Extraction timeout exceeded");
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Transform API response to typed data
|
||||||
|
*/
|
||||||
|
private transformResponse<T = unknown>(data: AgentData): TypedAgentData<T> {
|
||||||
|
const result: TypedAgentData<T> = {
|
||||||
|
id: data.id!,
|
||||||
|
agentSlug: 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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a new AsyncAgentDataClient instance
|
||||||
|
*/
|
||||||
|
export function createAgentDataClient(options?: {
|
||||||
|
apiKey?: string;
|
||||||
|
baseUrl?: string;
|
||||||
|
}): AgentClient {
|
||||||
|
return new AgentClient(options);
|
||||||
|
}
|
||||||
@@ -1,16 +1,18 @@
|
|||||||
export { AgentClient, createAgentDataClient } from "./client";
|
export { AgentClient, createAgentDataClient } from "./client";
|
||||||
|
|
||||||
export type {
|
export type {
|
||||||
AggregateAgentDataOptions,
|
AgentDataT,
|
||||||
ComparisonOperator,
|
CreateAgentDataOptions,
|
||||||
|
ExtractOptions,
|
||||||
ExtractedData,
|
ExtractedData,
|
||||||
|
ExtractedT,
|
||||||
FilterOperation,
|
FilterOperation,
|
||||||
SearchAgentDataOptions,
|
ListAgentDataOptions,
|
||||||
|
SortOptions,
|
||||||
StatusType,
|
StatusType,
|
||||||
TypedAgentData,
|
TypedAgentData,
|
||||||
TypedAgentDataItems,
|
TypedAgentDataItems,
|
||||||
TypedAggregateGroup,
|
UpdateAgentDataOptions,
|
||||||
TypedAggregateGroupItems,
|
|
||||||
} from "./types";
|
} from "./types";
|
||||||
|
|
||||||
export { StatusType as StatusTypeEnum } from "./types";
|
export { StatusType as StatusTypeEnum } from "./types";
|
||||||
@@ -0,0 +1,98 @@
|
|||||||
|
/**
|
||||||
|
* Status types for agent data processing
|
||||||
|
*/
|
||||||
|
export enum StatusType {
|
||||||
|
PENDING = "pending",
|
||||||
|
IN_PROGRESS = "in_progress",
|
||||||
|
COMPLETED = "completed",
|
||||||
|
FAILED = "failed",
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Filter operation for searching/filtering agent data
|
||||||
|
*/
|
||||||
|
export interface FilterOperation {
|
||||||
|
[key: string]: unknown;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Base extracted data interface
|
||||||
|
*/
|
||||||
|
export interface ExtractedData<T = unknown> {
|
||||||
|
id: string;
|
||||||
|
status: StatusType;
|
||||||
|
data?: T;
|
||||||
|
error?: string;
|
||||||
|
createdAt: Date;
|
||||||
|
updatedAt: Date;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* TypedAgentData interface for typed agent data
|
||||||
|
*/
|
||||||
|
export interface TypedAgentData<T = unknown> {
|
||||||
|
id: string;
|
||||||
|
agentSlug: string;
|
||||||
|
collection?: string;
|
||||||
|
data: T;
|
||||||
|
createdAt: Date;
|
||||||
|
updatedAt: Date;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Collection of typed agent data items
|
||||||
|
*/
|
||||||
|
export interface TypedAgentDataItems<T = unknown> {
|
||||||
|
items: TypedAgentData<T>[];
|
||||||
|
totalSize?: number;
|
||||||
|
nextPageToken?: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Options for creating agent data
|
||||||
|
*/
|
||||||
|
export interface CreateAgentDataOptions<T = unknown> {
|
||||||
|
agentSlug: string;
|
||||||
|
collection?: string;
|
||||||
|
data: T;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Options for updating agent data
|
||||||
|
*/
|
||||||
|
export interface UpdateAgentDataOptions<T = unknown> {
|
||||||
|
data: T;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sort options for listing
|
||||||
|
*/
|
||||||
|
export interface SortOptions {
|
||||||
|
field: string;
|
||||||
|
order: "asc" | "desc";
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Options for listing agent data
|
||||||
|
*/
|
||||||
|
export interface ListAgentDataOptions {
|
||||||
|
agentSlug: string;
|
||||||
|
collection?: string;
|
||||||
|
filter?: Record<string, FilterOperation>;
|
||||||
|
orderBy?: string;
|
||||||
|
pageSize?: number;
|
||||||
|
pageToken?: string;
|
||||||
|
offset?: number;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Options for extraction
|
||||||
|
*/
|
||||||
|
export interface ExtractOptions {
|
||||||
|
timeout?: number;
|
||||||
|
retryCount?: number;
|
||||||
|
retryDelay?: number;
|
||||||
|
}
|
||||||
|
|
||||||
|
export type ExtractedT<T> = T;
|
||||||
|
export type AgentDataT<T> = T;
|
||||||
@@ -7,5 +7,21 @@ client.setConfig({
|
|||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
|
export {
|
||||||
|
AgentClient,
|
||||||
|
createAgentDataClient,
|
||||||
|
StatusTypeEnum,
|
||||||
|
type AgentDataT,
|
||||||
|
type CreateAgentDataOptions,
|
||||||
|
type ExtractedData,
|
||||||
|
type ExtractedT,
|
||||||
|
type ExtractOptions,
|
||||||
|
type ListAgentDataOptions,
|
||||||
|
type SortOptions,
|
||||||
|
type StatusType,
|
||||||
|
type TypedAgentData,
|
||||||
|
type TypedAgentDataItems,
|
||||||
|
type UpdateAgentDataOptions,
|
||||||
|
} from "./agent";
|
||||||
export * from "./client";
|
export * from "./client";
|
||||||
export { client };
|
export { client };
|
||||||
|
|||||||
@@ -1,329 +0,0 @@
|
|||||||
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 = "_public",
|
|
||||||
}: {
|
|
||||||
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,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Search 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. Does it's best to infer an agent url id from environment.
|
|
||||||
* Pass in the window url and/or env to infer the agent url id from them.
|
|
||||||
* @param options - The options for the client
|
|
||||||
* @returns A new AgentClient instance
|
|
||||||
*/
|
|
||||||
export function createAgentDataClient<T = unknown>({
|
|
||||||
apiKey,
|
|
||||||
baseUrl,
|
|
||||||
windowUrl,
|
|
||||||
env,
|
|
||||||
agentUrlId,
|
|
||||||
collection = "default",
|
|
||||||
}: {
|
|
||||||
apiKey?: string;
|
|
||||||
baseUrl?: string;
|
|
||||||
windowUrl?: string;
|
|
||||||
env?: Record<string, string>;
|
|
||||||
agentUrlId?: string;
|
|
||||||
collection?: string;
|
|
||||||
} = {}): AgentClient<T> {
|
|
||||||
if (env && !agentUrlId) {
|
|
||||||
agentUrlId =
|
|
||||||
env.LLAMA_DEPLOY_DEPLOYMENT_NAME ||
|
|
||||||
env.NEXT_PUBLIC_LLAMA_DEPLOY_DEPLOYMENT_NAME ||
|
|
||||||
env.VITE_LLAMA_DEPLOY_DEPLOYMENT_NAME;
|
|
||||||
}
|
|
||||||
if (windowUrl && !agentUrlId) {
|
|
||||||
try {
|
|
||||||
const url = new URL(windowUrl);
|
|
||||||
const path = url.pathname;
|
|
||||||
const isLocalhost = // local agents should default to _public, otherwise a full deployment is required
|
|
||||||
url.hostname.includes("localhost") ||
|
|
||||||
url.hostname.includes("127.0.0.1");
|
|
||||||
if (path.startsWith("/deployments/") && !isLocalhost) {
|
|
||||||
// /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,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
@@ -1,163 +0,0 @@
|
|||||||
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;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Metadata for an extracted field, including confidence and citation information
|
|
||||||
*/
|
|
||||||
export interface ExtractedFieldMetadata {
|
|
||||||
/** The confidence score for the field, combined with parsing confidence if applicable */
|
|
||||||
confidence?: number;
|
|
||||||
/** The confidence score for the field based on the extracted text only */
|
|
||||||
extracted_confidence?: number;
|
|
||||||
/** The page number that the field occurred on */
|
|
||||||
page_number?: number;
|
|
||||||
/** The original text this field's value was derived from */
|
|
||||||
matching_text?: string;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Dictionary mapping field names to their metadata
|
|
||||||
* Values can be ExtractedFieldMetadata objects, nested dictionaries, or arrays
|
|
||||||
*/
|
|
||||||
export type ExtractedFieldMetadataDict = Record<
|
|
||||||
string,
|
|
||||||
ExtractedFieldMetadata | Record<string, unknown> | unknown[]
|
|
||||||
>;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 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;
|
|
||||||
/** The overall confidence score for the extracted data. */
|
|
||||||
overall_confidence?: number;
|
|
||||||
/** Page links, and perhaps eventually bounding boxes, for individual fields in the extracted data. */
|
|
||||||
field_metadata?: ExtractedFieldMetadataDict;
|
|
||||||
/** 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;
|
|
||||||
}
|
|
||||||
@@ -179,7 +179,6 @@ export class LlamaParseReader extends FileReader {
|
|||||||
page_header_suffix?: string | undefined;
|
page_header_suffix?: string | undefined;
|
||||||
page_footer_prefix?: string | undefined;
|
page_footer_prefix?: string | undefined;
|
||||||
page_footer_suffix?: string | undefined;
|
page_footer_suffix?: string | undefined;
|
||||||
merge_tables_across_pages_in_markdown?: boolean | undefined;
|
|
||||||
|
|
||||||
constructor(
|
constructor(
|
||||||
params: Partial<Omit<LlamaParseReader, "language" | "apiKey">> & {
|
params: Partial<Omit<LlamaParseReader, "language" | "apiKey">> & {
|
||||||
@@ -369,8 +368,6 @@ export class LlamaParseReader extends FileReader {
|
|||||||
page_header_suffix: this.page_header_suffix,
|
page_header_suffix: this.page_header_suffix,
|
||||||
page_footer_prefix: this.page_footer_prefix,
|
page_footer_prefix: this.page_footer_prefix,
|
||||||
page_footer_suffix: this.page_footer_suffix,
|
page_footer_suffix: this.page_footer_suffix,
|
||||||
merge_tables_across_pages_in_markdown:
|
|
||||||
this.merge_tables_across_pages_in_markdown,
|
|
||||||
} satisfies {
|
} satisfies {
|
||||||
[Key in keyof BodyUploadFileApiParsingUploadPost]-?:
|
[Key in keyof BodyUploadFileApiParsingUploadPost]-?:
|
||||||
| BodyUploadFileApiParsingUploadPost[Key]
|
| BodyUploadFileApiParsingUploadPost[Key]
|
||||||
|
|||||||
@@ -1,777 +0,0 @@
|
|||||||
# @llamaindex/community
|
|
||||||
|
|
||||||
## 0.0.101
|
|
||||||
|
|
||||||
### Patch Changes
|
|
||||||
|
|
||||||
- Updated dependencies [f9f1de9]
|
|
||||||
- @llamaindex/core@0.6.19
|
|
||||||
|
|
||||||
## 0.0.100
|
|
||||||
|
|
||||||
### Patch Changes
|
|
||||||
|
|
||||||
- Updated dependencies [f29799e]
|
|
||||||
- Updated dependencies [7224c06]
|
|
||||||
- @llamaindex/core@0.6.18
|
|
||||||
|
|
||||||
## 0.0.99
|
|
||||||
|
|
||||||
### Patch Changes
|
|
||||||
|
|
||||||
- c65a2dc: Deprecate community package and link to AWS package
|
|
||||||
|
|
||||||
## 0.0.98
|
|
||||||
|
|
||||||
### Patch Changes
|
|
||||||
|
|
||||||
- Updated dependencies [9b2e25a]
|
|
||||||
- @llamaindex/core@0.6.4
|
|
||||||
- @llamaindex/env@0.1.30
|
|
||||||
|
|
||||||
## 0.0.97
|
|
||||||
|
|
||||||
### Patch Changes
|
|
||||||
|
|
||||||
- Updated dependencies [3ee8c83]
|
|
||||||
- @llamaindex/core@0.6.3
|
|
||||||
|
|
||||||
## 0.0.96
|
|
||||||
|
|
||||||
### Patch Changes
|
|
||||||
|
|
||||||
- e9bf442: fix: update the tool call schema for nova
|
|
||||||
|
|
||||||
## 0.0.95
|
|
||||||
|
|
||||||
### Patch Changes
|
|
||||||
|
|
||||||
- 411dcea: Add Nova Premier to AWS Nova models. Add EU endpoints
|
|
||||||
|
|
||||||
## 0.0.94
|
|
||||||
|
|
||||||
### Patch Changes
|
|
||||||
|
|
||||||
- Updated dependencies [9c63f3f]
|
|
||||||
- @llamaindex/core@0.6.2
|
|
||||||
|
|
||||||
## 0.0.93
|
|
||||||
|
|
||||||
### Patch Changes
|
|
||||||
|
|
||||||
- Updated dependencies [1b6f368]
|
|
||||||
- Updated dependencies [eaf326e]
|
|
||||||
- @llamaindex/core@0.6.1
|
|
||||||
|
|
||||||
## 0.0.92
|
|
||||||
|
|
||||||
### Patch Changes
|
|
||||||
|
|
||||||
- 1325178: fix: stringify all tool results for anthropic on bedrock
|
|
||||||
|
|
||||||
## 0.0.91
|
|
||||||
|
|
||||||
### Patch Changes
|
|
||||||
|
|
||||||
- 5189b44: fix: add retry handling logic to parser reader and fix lint issues
|
|
||||||
- 3fd4cc3: feat: use google's new gen ai library to support multimodal output
|
|
||||||
- Updated dependencies [21bebfc]
|
|
||||||
- Updated dependencies [93bc0ff]
|
|
||||||
- Updated dependencies [91a18e7]
|
|
||||||
- Updated dependencies [5189b44]
|
|
||||||
- @llamaindex/core@0.6.0
|
|
||||||
|
|
||||||
## 0.0.90
|
|
||||||
|
|
||||||
### Patch Changes
|
|
||||||
|
|
||||||
- Updated dependencies [40ee761]
|
|
||||||
- @llamaindex/core@0.5.8
|
|
||||||
|
|
||||||
## 0.0.89
|
|
||||||
|
|
||||||
### Patch Changes
|
|
||||||
|
|
||||||
- Updated dependencies [4bac71d]
|
|
||||||
- @llamaindex/core@0.5.7
|
|
||||||
|
|
||||||
## 0.0.88
|
|
||||||
|
|
||||||
### Patch Changes
|
|
||||||
|
|
||||||
- e28c29d: Added Llama 3.3 70B Instruct support
|
|
||||||
- Updated dependencies [beb922b]
|
|
||||||
- @llamaindex/env@0.1.29
|
|
||||||
- @llamaindex/core@0.5.6
|
|
||||||
|
|
||||||
## 0.0.87
|
|
||||||
|
|
||||||
### Patch Changes
|
|
||||||
|
|
||||||
- Updated dependencies [5668970]
|
|
||||||
- @llamaindex/core@0.5.5
|
|
||||||
|
|
||||||
## 0.0.86
|
|
||||||
|
|
||||||
### Patch Changes
|
|
||||||
|
|
||||||
- Updated dependencies [ad3c7f1]
|
|
||||||
- @llamaindex/core@0.5.4
|
|
||||||
|
|
||||||
## 0.0.85
|
|
||||||
|
|
||||||
### Patch Changes
|
|
||||||
|
|
||||||
- 1914b52: Added Claude 3.7 Sonnet support
|
|
||||||
- Updated dependencies [cb021e7]
|
|
||||||
- @llamaindex/core@0.5.3
|
|
||||||
|
|
||||||
## 0.0.84
|
|
||||||
|
|
||||||
### Patch Changes
|
|
||||||
|
|
||||||
- Updated dependencies [d952e68]
|
|
||||||
- @llamaindex/core@0.5.2
|
|
||||||
|
|
||||||
## 0.0.83
|
|
||||||
|
|
||||||
### Patch Changes
|
|
||||||
|
|
||||||
- Updated dependencies [cc50c9c]
|
|
||||||
- @llamaindex/env@0.1.28
|
|
||||||
- @llamaindex/core@0.5.1
|
|
||||||
|
|
||||||
## 0.0.82
|
|
||||||
|
|
||||||
### Patch Changes
|
|
||||||
|
|
||||||
- Updated dependencies [6a4a737]
|
|
||||||
- Updated dependencies [d924c63]
|
|
||||||
- @llamaindex/core@0.5.0
|
|
||||||
|
|
||||||
## 0.0.81
|
|
||||||
|
|
||||||
### Patch Changes
|
|
||||||
|
|
||||||
- 1c908fd: Revert previous release (not working with CJS)
|
|
||||||
- Updated dependencies [1c908fd]
|
|
||||||
- @llamaindex/core@0.4.23
|
|
||||||
- @llamaindex/env@0.1.27
|
|
||||||
|
|
||||||
## 0.0.80
|
|
||||||
|
|
||||||
### Patch Changes
|
|
||||||
|
|
||||||
- cb608b5: fix: bundle output incorrect
|
|
||||||
- Updated dependencies [cb608b5]
|
|
||||||
- @llamaindex/core@0.4.22
|
|
||||||
- @llamaindex/env@0.1.26
|
|
||||||
|
|
||||||
## 0.0.79
|
|
||||||
|
|
||||||
### Patch Changes
|
|
||||||
|
|
||||||
- Updated dependencies [9456616]
|
|
||||||
- Updated dependencies [1931bbc]
|
|
||||||
- @llamaindex/core@0.4.21
|
|
||||||
|
|
||||||
## 0.0.78
|
|
||||||
|
|
||||||
### Patch Changes
|
|
||||||
|
|
||||||
- Updated dependencies [d211b7a]
|
|
||||||
- @llamaindex/core@0.4.20
|
|
||||||
|
|
||||||
## 0.0.77
|
|
||||||
|
|
||||||
### Patch Changes
|
|
||||||
|
|
||||||
- 24caf93: fix: added inference profile mapping for nova models"
|
|
||||||
- Updated dependencies [a9b5b99]
|
|
||||||
- @llamaindex/core@0.4.19
|
|
||||||
|
|
||||||
## 0.0.76
|
|
||||||
|
|
||||||
### Patch Changes
|
|
||||||
|
|
||||||
- c1850ee: feat: Amazon Nova support via Bedrock
|
|
||||||
- Updated dependencies [b504303]
|
|
||||||
- Updated dependencies [e0f6cc3]
|
|
||||||
- @llamaindex/env@0.1.25
|
|
||||||
- @llamaindex/core@0.4.18
|
|
||||||
|
|
||||||
## 0.0.75
|
|
||||||
|
|
||||||
### Patch Changes
|
|
||||||
|
|
||||||
- Updated dependencies [3d1808b]
|
|
||||||
- @llamaindex/core@0.4.17
|
|
||||||
|
|
||||||
## 0.0.74
|
|
||||||
|
|
||||||
### Patch Changes
|
|
||||||
|
|
||||||
- 8be4589: chore: bump version
|
|
||||||
- Updated dependencies [8be4589]
|
|
||||||
- @llamaindex/core@0.4.16
|
|
||||||
- @llamaindex/env@0.1.24
|
|
||||||
|
|
||||||
## 0.0.73
|
|
||||||
|
|
||||||
### Patch Changes
|
|
||||||
|
|
||||||
- Updated dependencies [d2b2722]
|
|
||||||
- @llamaindex/env@0.1.23
|
|
||||||
- @llamaindex/core@0.4.15
|
|
||||||
|
|
||||||
## 0.0.72
|
|
||||||
|
|
||||||
### Patch Changes
|
|
||||||
|
|
||||||
- Updated dependencies [969365c]
|
|
||||||
- @llamaindex/env@0.1.22
|
|
||||||
- @llamaindex/core@0.4.14
|
|
||||||
|
|
||||||
## 0.0.71
|
|
||||||
|
|
||||||
### Patch Changes
|
|
||||||
|
|
||||||
- 90d265c: chore: bump version
|
|
||||||
- Updated dependencies [90d265c]
|
|
||||||
- @llamaindex/core@0.4.13
|
|
||||||
- @llamaindex/env@0.1.21
|
|
||||||
|
|
||||||
## 0.0.70
|
|
||||||
|
|
||||||
### Patch Changes
|
|
||||||
|
|
||||||
- Updated dependencies [ef4f63d]
|
|
||||||
- @llamaindex/core@0.4.12
|
|
||||||
|
|
||||||
## 0.0.69
|
|
||||||
|
|
||||||
### Patch Changes
|
|
||||||
|
|
||||||
- Updated dependencies [6d22fa2]
|
|
||||||
- @llamaindex/core@0.4.11
|
|
||||||
|
|
||||||
## 0.0.68
|
|
||||||
|
|
||||||
### Patch Changes
|
|
||||||
|
|
||||||
- Updated dependencies [a7b0ac3]
|
|
||||||
- Updated dependencies [c69605f]
|
|
||||||
- @llamaindex/core@0.4.10
|
|
||||||
|
|
||||||
## 0.0.67
|
|
||||||
|
|
||||||
### Patch Changes
|
|
||||||
|
|
||||||
- Updated dependencies [7ae6eaa]
|
|
||||||
- @llamaindex/core@0.4.9
|
|
||||||
|
|
||||||
## 0.0.66
|
|
||||||
|
|
||||||
### Patch Changes
|
|
||||||
|
|
||||||
- Updated dependencies [f865c98]
|
|
||||||
- @llamaindex/core@0.4.8
|
|
||||||
|
|
||||||
## 0.0.65
|
|
||||||
|
|
||||||
### Patch Changes
|
|
||||||
|
|
||||||
- Updated dependencies [d89ebe0]
|
|
||||||
- Updated dependencies [fd8c882]
|
|
||||||
- @llamaindex/core@0.4.7
|
|
||||||
|
|
||||||
## 0.0.64
|
|
||||||
|
|
||||||
### Patch Changes
|
|
||||||
|
|
||||||
- Updated dependencies [4fc001c]
|
|
||||||
- @llamaindex/env@0.1.20
|
|
||||||
- @llamaindex/core@0.4.6
|
|
||||||
|
|
||||||
## 0.0.63
|
|
||||||
|
|
||||||
### Patch Changes
|
|
||||||
|
|
||||||
- Updated dependencies [ad85bd0]
|
|
||||||
- @llamaindex/core@0.4.5
|
|
||||||
- @llamaindex/env@0.1.19
|
|
||||||
|
|
||||||
## 0.0.62
|
|
||||||
|
|
||||||
### Patch Changes
|
|
||||||
|
|
||||||
- Updated dependencies [a8d3fa6]
|
|
||||||
- @llamaindex/env@0.1.18
|
|
||||||
- @llamaindex/core@0.4.4
|
|
||||||
|
|
||||||
## 0.0.61
|
|
||||||
|
|
||||||
### Patch Changes
|
|
||||||
|
|
||||||
- 487782c: Add missing inference endpoints for Haiku 3.5
|
|
||||||
- Updated dependencies [95a5cc6]
|
|
||||||
- @llamaindex/core@0.4.3
|
|
||||||
|
|
||||||
## 0.0.60
|
|
||||||
|
|
||||||
### Patch Changes
|
|
||||||
|
|
||||||
- Updated dependencies [14cc9eb]
|
|
||||||
- @llamaindex/env@0.1.17
|
|
||||||
- @llamaindex/core@0.4.2
|
|
||||||
|
|
||||||
## 0.0.59
|
|
||||||
|
|
||||||
### Patch Changes
|
|
||||||
|
|
||||||
- 47a7c3e: feat: added support for Haiku 3.5 via Bedrock
|
|
||||||
|
|
||||||
## 0.0.58
|
|
||||||
|
|
||||||
### Patch Changes
|
|
||||||
|
|
||||||
- Updated dependencies [9c73f0a]
|
|
||||||
- @llamaindex/core@0.4.1
|
|
||||||
|
|
||||||
## 0.0.57
|
|
||||||
|
|
||||||
### Patch Changes
|
|
||||||
|
|
||||||
- Updated dependencies [359fd33]
|
|
||||||
- Updated dependencies [efb7e1b]
|
|
||||||
- Updated dependencies [98ba1e7]
|
|
||||||
- Updated dependencies [620c63c]
|
|
||||||
- @llamaindex/core@0.4.0
|
|
||||||
|
|
||||||
## 0.0.56
|
|
||||||
|
|
||||||
### Patch Changes
|
|
||||||
|
|
||||||
- Updated dependencies [60b185f]
|
|
||||||
- @llamaindex/core@0.3.7
|
|
||||||
|
|
||||||
## 0.0.55
|
|
||||||
|
|
||||||
### Patch Changes
|
|
||||||
|
|
||||||
- Updated dependencies [691c5bc]
|
|
||||||
- @llamaindex/core@0.3.6
|
|
||||||
|
|
||||||
## 0.0.54
|
|
||||||
|
|
||||||
### Patch Changes
|
|
||||||
|
|
||||||
- Updated dependencies [fa60fc6]
|
|
||||||
- @llamaindex/env@0.1.16
|
|
||||||
- @llamaindex/core@0.3.5
|
|
||||||
|
|
||||||
## 0.0.53
|
|
||||||
|
|
||||||
### Patch Changes
|
|
||||||
|
|
||||||
- Updated dependencies [e2a0876]
|
|
||||||
- @llamaindex/core@0.3.4
|
|
||||||
|
|
||||||
## 0.0.52
|
|
||||||
|
|
||||||
### Patch Changes
|
|
||||||
|
|
||||||
- a5a75f6: feat: added sonnet 3.5 v2
|
|
||||||
|
|
||||||
## 0.0.51
|
|
||||||
|
|
||||||
### Patch Changes
|
|
||||||
|
|
||||||
- Updated dependencies [0493f67]
|
|
||||||
- @llamaindex/core@0.3.3
|
|
||||||
|
|
||||||
## 0.0.50
|
|
||||||
|
|
||||||
### Patch Changes
|
|
||||||
|
|
||||||
- Updated dependencies [4ba2cfe]
|
|
||||||
- @llamaindex/env@0.1.15
|
|
||||||
- @llamaindex/core@0.3.2
|
|
||||||
|
|
||||||
## 0.0.49
|
|
||||||
|
|
||||||
### Patch Changes
|
|
||||||
|
|
||||||
- a75af83: refactor: move some llm and embedding to single package
|
|
||||||
- Updated dependencies [ae49ff4]
|
|
||||||
- Updated dependencies [a75af83]
|
|
||||||
- @llamaindex/env@0.1.14
|
|
||||||
- @llamaindex/core@0.3.1
|
|
||||||
|
|
||||||
## 0.0.48
|
|
||||||
|
|
||||||
### Patch Changes
|
|
||||||
|
|
||||||
- Updated dependencies [1364e8e]
|
|
||||||
- Updated dependencies [96fc69c]
|
|
||||||
- @llamaindex/core@0.3.0
|
|
||||||
|
|
||||||
## 0.0.47
|
|
||||||
|
|
||||||
### Patch Changes
|
|
||||||
|
|
||||||
- Updated dependencies [5f67820]
|
|
||||||
- @llamaindex/core@0.2.12
|
|
||||||
|
|
||||||
## 0.0.46
|
|
||||||
|
|
||||||
### Patch Changes
|
|
||||||
|
|
||||||
- Updated dependencies [ee697fb]
|
|
||||||
- @llamaindex/core@0.2.11
|
|
||||||
|
|
||||||
## 0.0.45
|
|
||||||
|
|
||||||
### Patch Changes
|
|
||||||
|
|
||||||
- Updated dependencies [3489e7d]
|
|
||||||
- Updated dependencies [468bda5]
|
|
||||||
- @llamaindex/core@0.2.10
|
|
||||||
|
|
||||||
## 0.0.44
|
|
||||||
|
|
||||||
### Patch Changes
|
|
||||||
|
|
||||||
- Updated dependencies [b17d439]
|
|
||||||
- @llamaindex/core@0.2.9
|
|
||||||
|
|
||||||
## 0.0.43
|
|
||||||
|
|
||||||
### Patch Changes
|
|
||||||
|
|
||||||
- 2774e80: feat: added meta3.2 support via Bedrock including vision, tool call and inference region support
|
|
||||||
|
|
||||||
## 0.0.42
|
|
||||||
|
|
||||||
### Patch Changes
|
|
||||||
|
|
||||||
- df441e2: fix: consoleLogger is missing from `@llamaindex/env`
|
|
||||||
- Updated dependencies [df441e2]
|
|
||||||
- @llamaindex/core@0.2.8
|
|
||||||
- @llamaindex/env@0.1.13
|
|
||||||
|
|
||||||
## 0.0.41
|
|
||||||
|
|
||||||
### Patch Changes
|
|
||||||
|
|
||||||
- Updated dependencies [6cce3b1]
|
|
||||||
- @llamaindex/core@0.2.7
|
|
||||||
|
|
||||||
## 0.0.40
|
|
||||||
|
|
||||||
### Patch Changes
|
|
||||||
|
|
||||||
- 50e6b57: feat: add Amazon Bedrock Retriever
|
|
||||||
- Updated dependencies [8b7fdba]
|
|
||||||
- @llamaindex/core@0.2.6
|
|
||||||
|
|
||||||
## 0.0.39
|
|
||||||
|
|
||||||
### Patch Changes
|
|
||||||
|
|
||||||
- Updated dependencies [d902cc3]
|
|
||||||
- @llamaindex/core@0.2.5
|
|
||||||
|
|
||||||
## 0.0.38
|
|
||||||
|
|
||||||
### Patch Changes
|
|
||||||
|
|
||||||
- Updated dependencies [b48bcc3]
|
|
||||||
- @llamaindex/core@0.2.4
|
|
||||||
- @llamaindex/env@0.1.12
|
|
||||||
|
|
||||||
## 0.0.37
|
|
||||||
|
|
||||||
### Patch Changes
|
|
||||||
|
|
||||||
- Updated dependencies [2cd1383]
|
|
||||||
- @llamaindex/core@0.2.3
|
|
||||||
|
|
||||||
## 0.0.36
|
|
||||||
|
|
||||||
### Patch Changes
|
|
||||||
|
|
||||||
- Updated dependencies [749b43a]
|
|
||||||
- @llamaindex/core@0.2.2
|
|
||||||
|
|
||||||
## 0.0.35
|
|
||||||
|
|
||||||
### Patch Changes
|
|
||||||
|
|
||||||
- Updated dependencies [ac07e3c]
|
|
||||||
- Updated dependencies [70ccb4a]
|
|
||||||
- Updated dependencies [1a6137b]
|
|
||||||
- Updated dependencies [ac07e3c]
|
|
||||||
- @llamaindex/core@0.2.1
|
|
||||||
- @llamaindex/env@0.1.11
|
|
||||||
|
|
||||||
## 0.0.34
|
|
||||||
|
|
||||||
### Patch Changes
|
|
||||||
|
|
||||||
- Updated dependencies [11feef8]
|
|
||||||
- @llamaindex/core@0.2.0
|
|
||||||
|
|
||||||
## 0.0.33
|
|
||||||
|
|
||||||
### Patch Changes
|
|
||||||
|
|
||||||
- Updated dependencies [711c814]
|
|
||||||
- @llamaindex/core@0.1.12
|
|
||||||
|
|
||||||
## 0.0.32
|
|
||||||
|
|
||||||
### Patch Changes
|
|
||||||
|
|
||||||
- Updated dependencies [4648da6]
|
|
||||||
- @llamaindex/env@0.1.10
|
|
||||||
- @llamaindex/core@0.1.11
|
|
||||||
|
|
||||||
## 0.0.31
|
|
||||||
|
|
||||||
### Patch Changes
|
|
||||||
|
|
||||||
- Updated dependencies [0148354]
|
|
||||||
- @llamaindex/core@0.1.10
|
|
||||||
|
|
||||||
## 0.0.30
|
|
||||||
|
|
||||||
### Patch Changes
|
|
||||||
|
|
||||||
- Updated dependencies [e27e7dd]
|
|
||||||
- @llamaindex/core@0.1.9
|
|
||||||
|
|
||||||
## 0.0.29
|
|
||||||
|
|
||||||
### Patch Changes
|
|
||||||
|
|
||||||
- 58abc57: fix: align version
|
|
||||||
- Updated dependencies [58abc57]
|
|
||||||
- @llamaindex/core@0.1.8
|
|
||||||
- @llamaindex/env@0.1.9
|
|
||||||
|
|
||||||
## 0.0.28
|
|
||||||
|
|
||||||
### Patch Changes
|
|
||||||
|
|
||||||
- Updated dependencies [04b2f8e]
|
|
||||||
- @llamaindex/core@0.1.7
|
|
||||||
|
|
||||||
## 0.0.27
|
|
||||||
|
|
||||||
### Patch Changes
|
|
||||||
|
|
||||||
- Updated dependencies [0452af9]
|
|
||||||
- @llamaindex/core@0.1.6
|
|
||||||
|
|
||||||
## 0.0.26
|
|
||||||
|
|
||||||
### Patch Changes
|
|
||||||
|
|
||||||
- 224d507: fix: prevent tool calling getting mixed with conversation
|
|
||||||
- 376d29a: feat: added tool calling and agent support for llama3.1 504B
|
|
||||||
|
|
||||||
## 0.0.25
|
|
||||||
|
|
||||||
### Patch Changes
|
|
||||||
|
|
||||||
- Updated dependencies [91d02a4]
|
|
||||||
- @llamaindex/core@0.1.5
|
|
||||||
|
|
||||||
## 0.0.24
|
|
||||||
|
|
||||||
### Patch Changes
|
|
||||||
|
|
||||||
- 3d9a802: feat: added llama 3.1
|
|
||||||
- Updated dependencies [15962b3]
|
|
||||||
- @llamaindex/core@0.1.4
|
|
||||||
|
|
||||||
## 0.0.23
|
|
||||||
|
|
||||||
### Patch Changes
|
|
||||||
|
|
||||||
- Updated dependencies [6cf6ae6]
|
|
||||||
- @llamaindex/core@0.1.3
|
|
||||||
|
|
||||||
## 0.0.22
|
|
||||||
|
|
||||||
### Patch Changes
|
|
||||||
|
|
||||||
- Updated dependencies [b974eea]
|
|
||||||
- @llamaindex/core@0.1.2
|
|
||||||
|
|
||||||
## 0.0.21
|
|
||||||
|
|
||||||
### Patch Changes
|
|
||||||
|
|
||||||
- Updated dependencies [b3681bf]
|
|
||||||
- @llamaindex/core@0.1.1
|
|
||||||
|
|
||||||
## 0.0.20
|
|
||||||
|
|
||||||
### Patch Changes
|
|
||||||
|
|
||||||
- 56746c2: fix: llama3 patched to handle empty content (can happen with system) and added max tokens export
|
|
||||||
|
|
||||||
## 0.0.19
|
|
||||||
|
|
||||||
### Patch Changes
|
|
||||||
|
|
||||||
- 16ef5dd: refactor: depends on core pacakge instead of llamaindex
|
|
||||||
- Updated dependencies [16ef5dd]
|
|
||||||
- Updated dependencies [16ef5dd]
|
|
||||||
- @llamaindex/core@0.1.0
|
|
||||||
|
|
||||||
## 0.0.18
|
|
||||||
|
|
||||||
### Patch Changes
|
|
||||||
|
|
||||||
- llamaindex@0.4.14
|
|
||||||
|
|
||||||
## 0.0.17
|
|
||||||
|
|
||||||
### Patch Changes
|
|
||||||
|
|
||||||
- Updated dependencies [e8f8bea]
|
|
||||||
- Updated dependencies [304484b]
|
|
||||||
- llamaindex@0.4.13
|
|
||||||
|
|
||||||
## 0.0.16
|
|
||||||
|
|
||||||
### Patch Changes
|
|
||||||
|
|
||||||
- f326ab8: chore: bump version
|
|
||||||
- Updated dependencies [f326ab8]
|
|
||||||
- llamaindex@0.4.12
|
|
||||||
|
|
||||||
## 0.0.15
|
|
||||||
|
|
||||||
### Patch Changes
|
|
||||||
|
|
||||||
- Updated dependencies [8bf5b4a]
|
|
||||||
- llamaindex@0.4.11
|
|
||||||
|
|
||||||
## 0.0.14
|
|
||||||
|
|
||||||
### Patch Changes
|
|
||||||
|
|
||||||
- Updated dependencies [7dce3d2]
|
|
||||||
- llamaindex@0.4.10
|
|
||||||
|
|
||||||
## 0.0.13
|
|
||||||
|
|
||||||
### Patch Changes
|
|
||||||
|
|
||||||
- Updated dependencies [3a96a48]
|
|
||||||
- llamaindex@0.4.9
|
|
||||||
|
|
||||||
## 0.0.12
|
|
||||||
|
|
||||||
### Patch Changes
|
|
||||||
|
|
||||||
- Updated dependencies [83ebdfb]
|
|
||||||
- llamaindex@0.4.8
|
|
||||||
|
|
||||||
## 0.0.11
|
|
||||||
|
|
||||||
### Patch Changes
|
|
||||||
|
|
||||||
- Updated dependencies [41fe871]
|
|
||||||
- Updated dependencies [321c39d]
|
|
||||||
- Updated dependencies [f7f1af0]
|
|
||||||
- llamaindex@0.4.7
|
|
||||||
|
|
||||||
## 0.0.10
|
|
||||||
|
|
||||||
### Patch Changes
|
|
||||||
|
|
||||||
- Updated dependencies [1feb23b]
|
|
||||||
- Updated dependencies [08c55ec]
|
|
||||||
- llamaindex@0.4.6
|
|
||||||
|
|
||||||
## 0.0.9
|
|
||||||
|
|
||||||
### Patch Changes
|
|
||||||
|
|
||||||
- Updated dependencies [6c3e5d0]
|
|
||||||
- llamaindex@0.4.5
|
|
||||||
|
|
||||||
## 0.0.8
|
|
||||||
|
|
||||||
### Patch Changes
|
|
||||||
|
|
||||||
- Updated dependencies [42eb73a]
|
|
||||||
- llamaindex@0.4.4
|
|
||||||
|
|
||||||
## 0.0.7
|
|
||||||
|
|
||||||
### Patch Changes
|
|
||||||
|
|
||||||
- Updated dependencies [2ef62a9]
|
|
||||||
- llamaindex@0.4.3
|
|
||||||
|
|
||||||
## 0.0.6
|
|
||||||
|
|
||||||
### Patch Changes
|
|
||||||
|
|
||||||
- a87a4d1: feat: added tool support calling for Bedrock's Calude and general llm support for agents
|
|
||||||
- Updated dependencies [a87a4d1]
|
|
||||||
- Updated dependencies [0730140]
|
|
||||||
- llamaindex@0.4.2
|
|
||||||
|
|
||||||
## 0.0.5
|
|
||||||
|
|
||||||
### Patch Changes
|
|
||||||
|
|
||||||
- ed467a9: Add model ids for Anthropic Claude 3.5 Sonnet model on Anthropic and Bedrock
|
|
||||||
- Updated dependencies [3c47910]
|
|
||||||
- Updated dependencies [ed467a9]
|
|
||||||
- Updated dependencies [cba5406]
|
|
||||||
- llamaindex@0.4.1
|
|
||||||
|
|
||||||
## 0.0.4
|
|
||||||
|
|
||||||
### Patch Changes
|
|
||||||
|
|
||||||
- b1a4a74: docs: updated Bedrock Opus region and added a basic README
|
|
||||||
- Updated dependencies [436bc41]
|
|
||||||
- Updated dependencies [a44e54f]
|
|
||||||
- Updated dependencies [a51ed8d]
|
|
||||||
- Updated dependencies [d3b635b]
|
|
||||||
- llamaindex@0.4.0
|
|
||||||
|
|
||||||
## 0.0.3
|
|
||||||
|
|
||||||
### Patch Changes
|
|
||||||
|
|
||||||
- Updated dependencies [6bc5bdd]
|
|
||||||
- Updated dependencies [bf25ff6]
|
|
||||||
- Updated dependencies [e6d6576]
|
|
||||||
- llamaindex@0.3.17
|
|
||||||
|
|
||||||
## 0.0.2
|
|
||||||
|
|
||||||
### Patch Changes
|
|
||||||
|
|
||||||
- 8832669: Community bedrock support added
|
|
||||||
- Updated dependencies [11ae926]
|
|
||||||
- Updated dependencies [631f000]
|
|
||||||
- Updated dependencies [1378ec4]
|
|
||||||
- Updated dependencies [6b1ded4]
|
|
||||||
- Updated dependencies [4d4bd85]
|
|
||||||
- Updated dependencies [24a9d1e]
|
|
||||||
- Updated dependencies [45952de]
|
|
||||||
- Updated dependencies [54230f0]
|
|
||||||
- Updated dependencies [a29d835]
|
|
||||||
- Updated dependencies [73819bf]
|
|
||||||
- llamaindex@0.3.16
|
|
||||||
@@ -1,17 +0,0 @@
|
|||||||
# @llamaindex/community
|
|
||||||
|
|
||||||
AWS package for LlamaIndexTS, deprecated, use [@llamaindex/aws](https://www.npmjs.com/package/@llamaindex/aws) instead.
|
|
||||||
|
|
||||||
## Current Features:
|
|
||||||
|
|
||||||
- Bedrock support for Amazon Nova models Pro, Lite and Micro
|
|
||||||
- Bedrock support for the Anthropic Claude Models [usage](https://ts.llamaindex.ai/docs/llamaindex/modules/llms/bedrock) including the latest Sonnet 3.5 v2 and Haiku 3.5
|
|
||||||
- Bedrock support for the Meta LLama 2, 3, 3.1 and 3.2 Models [usage](https://ts.llamaindex.ai/docs/llamaindex/modules/llms/bedrock)
|
|
||||||
- Meta LLama3.1 405b and Llama3.2 tool call support
|
|
||||||
- Meta 3.2 11B and 90B vision support
|
|
||||||
- Bedrock support for querying Knowledge Base
|
|
||||||
- Bedrock: [Supported Regions and models for cross-region inference](https://docs.aws.amazon.com/bedrock/latest/userguide/cross-region-inference-support.html)
|
|
||||||
|
|
||||||
## LICENSE
|
|
||||||
|
|
||||||
MIT
|
|
||||||
@@ -1,53 +0,0 @@
|
|||||||
{
|
|
||||||
"name": "@llamaindex/community",
|
|
||||||
"description": "Community package for LlamaIndexTS",
|
|
||||||
"version": "0.0.101",
|
|
||||||
"type": "module",
|
|
||||||
"types": "dist/type/index.d.ts",
|
|
||||||
"main": "dist/cjs/index.js",
|
|
||||||
"exports": {
|
|
||||||
".": {
|
|
||||||
"import": {
|
|
||||||
"types": "./dist/type/index.d.ts",
|
|
||||||
"default": "./dist/index.js"
|
|
||||||
},
|
|
||||||
"require": {
|
|
||||||
"types": "./dist/type/index.d.ts",
|
|
||||||
"default": "./dist/index.cjs"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"./llm/bedrock": {
|
|
||||||
"import": {
|
|
||||||
"types": "./dist/type/llm/bedrock.d.ts",
|
|
||||||
"default": "./dist/llm/bedrock/index.js"
|
|
||||||
},
|
|
||||||
"require": {
|
|
||||||
"types": "./dist/type/llm/bedrock.d.ts",
|
|
||||||
"default": "./dist/llm/bedrock/index.cjs"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"files": [
|
|
||||||
"dist",
|
|
||||||
"CHANGELOG.md",
|
|
||||||
"!**/*.tsbuildinfo"
|
|
||||||
],
|
|
||||||
"repository": {
|
|
||||||
"type": "git",
|
|
||||||
"url": "git+https://github.com/run-llama/LlamaIndexTS.git",
|
|
||||||
"directory": "packages/community"
|
|
||||||
},
|
|
||||||
"scripts": {
|
|
||||||
"build": "bunchee",
|
|
||||||
"dev": "bunchee --watch"
|
|
||||||
},
|
|
||||||
"devDependencies": {
|
|
||||||
"@types/node": "^22.9.0"
|
|
||||||
},
|
|
||||||
"dependencies": {
|
|
||||||
"@aws-sdk/client-bedrock-agent-runtime": "^3.706.0",
|
|
||||||
"@aws-sdk/client-bedrock-runtime": "^3.706.0",
|
|
||||||
"@llamaindex/core": "workspace:*",
|
|
||||||
"@llamaindex/env": "workspace:*"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,8 +0,0 @@
|
|||||||
export {
|
|
||||||
BEDROCK_MODELS,
|
|
||||||
BEDROCK_MODEL_MAX_TOKENS,
|
|
||||||
Bedrock,
|
|
||||||
INFERENCE_BEDROCK_MODELS,
|
|
||||||
INFERENCE_TO_BEDROCK_MAP,
|
|
||||||
} from "./llm/bedrock/index.js";
|
|
||||||
export { AmazonKnowledgeBaseRetriever } from "./retrievers/bedrock.js";
|
|
||||||
@@ -1,134 +0,0 @@
|
|||||||
import type {
|
|
||||||
ContentBlockDelta,
|
|
||||||
ConverseOutput,
|
|
||||||
ConverseRequest,
|
|
||||||
ConverseResponse,
|
|
||||||
ConverseStreamOutput,
|
|
||||||
InvokeModelCommandInput,
|
|
||||||
InvokeModelWithResponseStreamCommandInput,
|
|
||||||
ResponseStream,
|
|
||||||
} from "@aws-sdk/client-bedrock-runtime";
|
|
||||||
import type {
|
|
||||||
BaseTool,
|
|
||||||
ChatMessage,
|
|
||||||
LLMMetadata,
|
|
||||||
ToolCall,
|
|
||||||
ToolCallLLMMessageOptions,
|
|
||||||
} from "@llamaindex/core/llms";
|
|
||||||
import { toUtf8 } from "../utils";
|
|
||||||
|
|
||||||
import { Provider, type BedrockChatStreamResponse } from "../provider";
|
|
||||||
import {
|
|
||||||
mapBaseToolsToAmazonTools,
|
|
||||||
mapChatMessagesToAmazonMessages,
|
|
||||||
} from "./utils";
|
|
||||||
|
|
||||||
export class AmazonProvider extends Provider<ConverseStreamOutput> {
|
|
||||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
||||||
getResultFromResponse(response: Record<string, any>): ConverseResponse {
|
|
||||||
return JSON.parse(toUtf8(response.body));
|
|
||||||
}
|
|
||||||
|
|
||||||
getToolsFromResponse<ToolContent>(response: ConverseOutput): ToolContent[] {
|
|
||||||
return (
|
|
||||||
response.message?.content
|
|
||||||
?.filter((item) => item.toolUse)
|
|
||||||
.map(
|
|
||||||
(item) =>
|
|
||||||
({
|
|
||||||
id: item.toolUse!.toolUseId,
|
|
||||||
name: item.toolUse!.name,
|
|
||||||
input: item.toolUse!.input
|
|
||||||
? JSON.parse(item.toolUse!.input as string)
|
|
||||||
: "",
|
|
||||||
}) as ToolContent,
|
|
||||||
) ?? []
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
getTextFromResponse(response: ConverseResponse): string {
|
|
||||||
const result = this.getResultFromResponse(response);
|
|
||||||
const content = result.output?.message?.content ?? [];
|
|
||||||
return content.map((item) => item.text).join(" ");
|
|
||||||
}
|
|
||||||
|
|
||||||
getTextFromStreamResponse(response: ResponseStream): string {
|
|
||||||
const event: ConverseStreamOutput | undefined =
|
|
||||||
this.getStreamingEventResponse(response);
|
|
||||||
if (!event || !event.contentBlockDelta) return "";
|
|
||||||
const delta: ContentBlockDelta | undefined = event.contentBlockDelta.delta;
|
|
||||||
return delta?.text || "";
|
|
||||||
}
|
|
||||||
|
|
||||||
async *reduceStream(
|
|
||||||
stream: AsyncIterable<ResponseStream>,
|
|
||||||
): BedrockChatStreamResponse {
|
|
||||||
let toolId: string | undefined = undefined;
|
|
||||||
let toolName: string | undefined = undefined;
|
|
||||||
for await (const response of stream) {
|
|
||||||
const event = this.getStreamingEventResponse(response);
|
|
||||||
const delta = this.getTextFromStreamResponse(response);
|
|
||||||
|
|
||||||
let options: undefined | ToolCallLLMMessageOptions = undefined;
|
|
||||||
if (event?.contentBlockStart && event.contentBlockStart.start?.toolUse) {
|
|
||||||
toolId = event.contentBlockStart.start?.toolUse.toolUseId;
|
|
||||||
toolName = event.contentBlockStart.start?.toolUse.name;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
if (
|
|
||||||
toolId &&
|
|
||||||
toolName &&
|
|
||||||
event?.contentBlockDelta?.delta?.toolUse?.input
|
|
||||||
) {
|
|
||||||
options = {
|
|
||||||
toolCall: [
|
|
||||||
{
|
|
||||||
id: toolId,
|
|
||||||
name: toolName,
|
|
||||||
input: JSON.parse(event?.contentBlockDelta?.delta?.toolUse.input),
|
|
||||||
} as ToolCall,
|
|
||||||
],
|
|
||||||
};
|
|
||||||
toolId = undefined;
|
|
||||||
toolName = undefined;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!delta && !options) continue;
|
|
||||||
|
|
||||||
yield {
|
|
||||||
delta: options ? "" : delta,
|
|
||||||
options,
|
|
||||||
raw: response,
|
|
||||||
};
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
getRequestBody<T extends ChatMessage>(
|
|
||||||
metadata: LLMMetadata,
|
|
||||||
messages: T[],
|
|
||||||
tools: BaseTool[] = [],
|
|
||||||
options: Omit<ConverseRequest, "modelId" | "messages" | "inferenceConfig">,
|
|
||||||
): InvokeModelCommandInput | InvokeModelWithResponseStreamCommandInput {
|
|
||||||
const request: Omit<ConverseRequest, "modelId"> = {
|
|
||||||
...options,
|
|
||||||
messages: mapChatMessagesToAmazonMessages(messages),
|
|
||||||
inferenceConfig: {
|
|
||||||
maxTokens: metadata.maxTokens,
|
|
||||||
temperature: metadata.temperature,
|
|
||||||
topP: metadata.topP,
|
|
||||||
},
|
|
||||||
};
|
|
||||||
if (tools.length) {
|
|
||||||
request.toolConfig = {
|
|
||||||
tools: mapBaseToolsToAmazonTools(tools),
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
return {
|
|
||||||
modelId: metadata.model,
|
|
||||||
contentType: "application/json",
|
|
||||||
accept: "application/json",
|
|
||||||
body: JSON.stringify(request),
|
|
||||||
};
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
import type { ConverseRequest, Message } from "@aws-sdk/client-bedrock-runtime";
|
|
||||||
|
|
||||||
export type AmazonMessages = ConverseRequest["messages"];
|
|
||||||
|
|
||||||
export type AmazonMessage = Message;
|
|
||||||
@@ -1,141 +0,0 @@
|
|||||||
import type {
|
|
||||||
ImageBlock,
|
|
||||||
ImageFormat,
|
|
||||||
Message,
|
|
||||||
Tool,
|
|
||||||
} from "@aws-sdk/client-bedrock-runtime";
|
|
||||||
import type {
|
|
||||||
BaseTool,
|
|
||||||
ChatMessage,
|
|
||||||
MessageContentDetail,
|
|
||||||
ToolCallLLMMessageOptions,
|
|
||||||
} from "@llamaindex/core/llms";
|
|
||||||
import { extractDataUrlComponents } from "../utils";
|
|
||||||
|
|
||||||
import type { JSONObject } from "@llamaindex/core/global";
|
|
||||||
import { mapMessageContentToMessageContentDetails } from "../../utils";
|
|
||||||
import type { AmazonMessage, AmazonMessages } from "./types";
|
|
||||||
|
|
||||||
const ACCEPTED_IMAGE_MIME_TYPES = [
|
|
||||||
"image/jpeg",
|
|
||||||
"image/png",
|
|
||||||
"image/webp",
|
|
||||||
"image/gif",
|
|
||||||
] as const;
|
|
||||||
|
|
||||||
const ACCEPTED_IMAGE_MIME_TYPE_FORMAT_MAP: Record<
|
|
||||||
(typeof ACCEPTED_IMAGE_MIME_TYPES)[number],
|
|
||||||
ImageFormat
|
|
||||||
> = {
|
|
||||||
"image/jpeg": "jpeg",
|
|
||||||
"image/png": "png",
|
|
||||||
"image/webp": "webp",
|
|
||||||
"image/gif": "gif",
|
|
||||||
};
|
|
||||||
|
|
||||||
export const mapImageContent = (imageUrl: string): ImageBlock => {
|
|
||||||
if (!imageUrl.startsWith("data:"))
|
|
||||||
throw new Error(
|
|
||||||
"For Amazon please only use base64 data url, e.g.: data:image/jpeg;base64,SGVsbG8sIFdvcmxkIQ==",
|
|
||||||
);
|
|
||||||
const { mimeType, base64: data } = extractDataUrlComponents(imageUrl);
|
|
||||||
if (
|
|
||||||
!ACCEPTED_IMAGE_MIME_TYPES.includes(
|
|
||||||
mimeType as keyof typeof ACCEPTED_IMAGE_MIME_TYPE_FORMAT_MAP,
|
|
||||||
)
|
|
||||||
)
|
|
||||||
throw new Error(
|
|
||||||
`Amazon only accepts the following mimeTypes: ${ACCEPTED_IMAGE_MIME_TYPES.join("\n")}`,
|
|
||||||
);
|
|
||||||
|
|
||||||
return {
|
|
||||||
format:
|
|
||||||
ACCEPTED_IMAGE_MIME_TYPE_FORMAT_MAP[
|
|
||||||
mimeType as keyof typeof ACCEPTED_IMAGE_MIME_TYPE_FORMAT_MAP
|
|
||||||
],
|
|
||||||
|
|
||||||
// @ts-expect-error: there's a mistake in the "@aws-sdk/client-bedrock-runtime" compared to the actual api
|
|
||||||
source: { bytes: data },
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
export const mapMessageContentDetailToAmazonContent = <
|
|
||||||
T extends MessageContentDetail,
|
|
||||||
>(
|
|
||||||
detail: T,
|
|
||||||
): Message["content"] => {
|
|
||||||
let content: Message["content"] = [];
|
|
||||||
|
|
||||||
if (detail.type === "text") {
|
|
||||||
content = [{ text: detail.text }];
|
|
||||||
} else if (detail.type === "image_url") {
|
|
||||||
content = [{ image: mapImageContent(detail.image_url.url) }];
|
|
||||||
} else {
|
|
||||||
throw new Error("Unsupported content detail type");
|
|
||||||
}
|
|
||||||
return content;
|
|
||||||
};
|
|
||||||
|
|
||||||
export const mapChatMessagesToAmazonMessages = <
|
|
||||||
T extends ChatMessage<ToolCallLLMMessageOptions>,
|
|
||||||
>(
|
|
||||||
messages: T[],
|
|
||||||
): AmazonMessages => {
|
|
||||||
return messages.flatMap((msg: T): AmazonMessage[] => {
|
|
||||||
return mapMessageContentToMessageContentDetails(msg.content).map(
|
|
||||||
(detail: MessageContentDetail): AmazonMessage => {
|
|
||||||
if (msg.options && "toolCall" in msg.options) {
|
|
||||||
return {
|
|
||||||
role: "assistant",
|
|
||||||
content: msg.options.toolCall.map((call) => ({
|
|
||||||
toolUse: {
|
|
||||||
toolUseId: call.id,
|
|
||||||
name: call.name,
|
|
||||||
input: call.input as JSONObject,
|
|
||||||
},
|
|
||||||
})),
|
|
||||||
};
|
|
||||||
}
|
|
||||||
if (msg.options && "toolResult" in msg.options) {
|
|
||||||
return {
|
|
||||||
role: "user",
|
|
||||||
content: [
|
|
||||||
{
|
|
||||||
toolResult: {
|
|
||||||
toolUseId: msg.options.toolResult.id,
|
|
||||||
content: [
|
|
||||||
{
|
|
||||||
text: msg.options.toolResult.result,
|
|
||||||
},
|
|
||||||
],
|
|
||||||
},
|
|
||||||
},
|
|
||||||
],
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
return {
|
|
||||||
role: msg.role === "assistant" ? "assistant" : "user",
|
|
||||||
content: mapMessageContentDetailToAmazonContent(detail),
|
|
||||||
};
|
|
||||||
},
|
|
||||||
);
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
export const mapBaseToolsToAmazonTools = (tools?: BaseTool[]): Tool[] => {
|
|
||||||
if (!tools) return [];
|
|
||||||
return tools.map((tool: BaseTool) => {
|
|
||||||
const {
|
|
||||||
metadata: { parameters, ...options },
|
|
||||||
} = tool;
|
|
||||||
return {
|
|
||||||
toolSpec: {
|
|
||||||
...options,
|
|
||||||
inputSchema: {
|
|
||||||
json: parameters,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
} as Tool;
|
|
||||||
});
|
|
||||||
};
|
|
||||||
@@ -1,156 +0,0 @@
|
|||||||
import {
|
|
||||||
type InvokeModelCommandInput,
|
|
||||||
type InvokeModelWithResponseStreamCommandInput,
|
|
||||||
ResponseStream,
|
|
||||||
} from "@aws-sdk/client-bedrock-runtime";
|
|
||||||
import type {
|
|
||||||
BaseTool,
|
|
||||||
ChatMessage,
|
|
||||||
LLMMetadata,
|
|
||||||
PartialToolCall,
|
|
||||||
ToolCall,
|
|
||||||
ToolCallLLMMessageOptions,
|
|
||||||
} from "@llamaindex/core/llms";
|
|
||||||
import { type BedrockChatStreamResponse, Provider } from "../provider";
|
|
||||||
import { toUtf8 } from "../utils";
|
|
||||||
import type {
|
|
||||||
AnthropicAdditionalChatOptions,
|
|
||||||
AnthropicNoneStreamingResponse,
|
|
||||||
AnthropicStreamEvent,
|
|
||||||
AnthropicTextContent,
|
|
||||||
ToolBlock,
|
|
||||||
} from "./types";
|
|
||||||
|
|
||||||
import {
|
|
||||||
mapBaseToolsToAnthropicTools,
|
|
||||||
mapChatMessagesToAnthropicMessages,
|
|
||||||
} from "./utils";
|
|
||||||
|
|
||||||
export class AnthropicProvider extends Provider<AnthropicStreamEvent> {
|
|
||||||
getResultFromResponse(
|
|
||||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
||||||
response: Record<string, any>,
|
|
||||||
): AnthropicNoneStreamingResponse {
|
|
||||||
return JSON.parse(toUtf8(response.body));
|
|
||||||
}
|
|
||||||
|
|
||||||
getToolsFromResponse<AnthropicToolContent>(
|
|
||||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
||||||
response: Record<string, any>,
|
|
||||||
): AnthropicToolContent[] {
|
|
||||||
const result = this.getResultFromResponse(response);
|
|
||||||
return result.content
|
|
||||||
.filter((item) => item.type === "tool_use")
|
|
||||||
.map((item) => item as AnthropicToolContent);
|
|
||||||
}
|
|
||||||
|
|
||||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
||||||
getTextFromResponse(response: Record<string, any>): string {
|
|
||||||
const result = this.getResultFromResponse(response);
|
|
||||||
return result.content
|
|
||||||
.filter((item) => item.type === "text")
|
|
||||||
.map((item) => (item as AnthropicTextContent).text)
|
|
||||||
.join(" ");
|
|
||||||
}
|
|
||||||
|
|
||||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
||||||
getTextFromStreamResponse(response: Record<string, any>): string {
|
|
||||||
const event = this.getStreamingEventResponse(response);
|
|
||||||
if (event?.type === "content_block_delta") {
|
|
||||||
if (event.delta.type === "text_delta") return event.delta.text;
|
|
||||||
if (event.delta.type === "input_json_delta")
|
|
||||||
return event.delta.partial_json;
|
|
||||||
}
|
|
||||||
return "";
|
|
||||||
}
|
|
||||||
|
|
||||||
async *reduceStream(
|
|
||||||
stream: AsyncIterable<ResponseStream>,
|
|
||||||
): BedrockChatStreamResponse {
|
|
||||||
let collecting = [];
|
|
||||||
let tool: ToolBlock | undefined = undefined;
|
|
||||||
// #TODO this should be broken down into a separate consumer
|
|
||||||
for await (const response of stream) {
|
|
||||||
const delta = this.getTextFromStreamResponse(response);
|
|
||||||
const event = this.getStreamingEventResponse(response);
|
|
||||||
if (
|
|
||||||
event?.type === "content_block_start" &&
|
|
||||||
event.content_block.type === "tool_use"
|
|
||||||
) {
|
|
||||||
tool = event.content_block;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (
|
|
||||||
event?.type === "content_block_delta" &&
|
|
||||||
event.delta.type === "input_json_delta"
|
|
||||||
) {
|
|
||||||
collecting.push(event.delta.partial_json);
|
|
||||||
}
|
|
||||||
|
|
||||||
let options: undefined | ToolCallLLMMessageOptions = undefined;
|
|
||||||
if (tool && collecting.length) {
|
|
||||||
const input = collecting.filter((item) => item).join("");
|
|
||||||
// We have all we need to parse the tool_use json
|
|
||||||
if (event?.type === "content_block_stop") {
|
|
||||||
options = {
|
|
||||||
toolCall: [
|
|
||||||
{
|
|
||||||
id: tool.id,
|
|
||||||
name: tool.name,
|
|
||||||
input: JSON.parse(input),
|
|
||||||
} as ToolCall,
|
|
||||||
],
|
|
||||||
};
|
|
||||||
// reset the collection/tool
|
|
||||||
collecting = [];
|
|
||||||
tool = undefined;
|
|
||||||
} else {
|
|
||||||
options = {
|
|
||||||
toolCall: [
|
|
||||||
{
|
|
||||||
id: tool.id,
|
|
||||||
name: tool.name,
|
|
||||||
input,
|
|
||||||
} as PartialToolCall,
|
|
||||||
],
|
|
||||||
};
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (!delta && !options) continue;
|
|
||||||
|
|
||||||
yield {
|
|
||||||
delta: options ? "" : delta,
|
|
||||||
options,
|
|
||||||
raw: response,
|
|
||||||
};
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
getRequestBody<T extends ChatMessage<ToolCallLLMMessageOptions>>(
|
|
||||||
metadata: LLMMetadata,
|
|
||||||
messages: T[],
|
|
||||||
tools?: BaseTool[],
|
|
||||||
options?: AnthropicAdditionalChatOptions,
|
|
||||||
): InvokeModelCommandInput | InvokeModelWithResponseStreamCommandInput {
|
|
||||||
const extra: Record<string, unknown> = {};
|
|
||||||
if (options?.toolChoice) {
|
|
||||||
extra["tool_choice"] = options?.toolChoice;
|
|
||||||
}
|
|
||||||
const mapped = mapChatMessagesToAnthropicMessages(messages);
|
|
||||||
return {
|
|
||||||
modelId: metadata.model,
|
|
||||||
contentType: "application/json",
|
|
||||||
accept: "application/json",
|
|
||||||
body: JSON.stringify({
|
|
||||||
anthropic_version: "bedrock-2023-05-31",
|
|
||||||
messages: mapped,
|
|
||||||
tools: mapBaseToolsToAnthropicTools(tools),
|
|
||||||
max_tokens: metadata.maxTokens,
|
|
||||||
temperature: metadata.temperature,
|
|
||||||
top_p: metadata.topP,
|
|
||||||
...extra,
|
|
||||||
}),
|
|
||||||
};
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,161 +0,0 @@
|
|||||||
import type { ToolMetadata } from "@llamaindex/core/llms";
|
|
||||||
import type { InvocationMetrics } from "../types";
|
|
||||||
|
|
||||||
export type ToolChoice =
|
|
||||||
| { type: "any" }
|
|
||||||
| { type: "auto" }
|
|
||||||
| { type: "tool"; name: string };
|
|
||||||
|
|
||||||
export interface ThinkingConfigDisabled {
|
|
||||||
type: "disabled";
|
|
||||||
}
|
|
||||||
|
|
||||||
export interface ThinkingConfigEnabled {
|
|
||||||
budget_tokens: number;
|
|
||||||
type: "enabled";
|
|
||||||
}
|
|
||||||
|
|
||||||
export type AnthropicAdditionalChatOptions = {
|
|
||||||
toolChoice: ToolChoice;
|
|
||||||
thinking?: ThinkingConfigDisabled | ThinkingConfigEnabled;
|
|
||||||
};
|
|
||||||
|
|
||||||
type Usage = {
|
|
||||||
input_tokens: number;
|
|
||||||
output_tokens: number;
|
|
||||||
};
|
|
||||||
|
|
||||||
type Message = {
|
|
||||||
id: string;
|
|
||||||
type: string;
|
|
||||||
role: string;
|
|
||||||
content: string[];
|
|
||||||
model: string;
|
|
||||||
stop_reason: string | null;
|
|
||||||
stop_sequence: string | null;
|
|
||||||
usage: Usage;
|
|
||||||
};
|
|
||||||
|
|
||||||
export type ToolBlock = {
|
|
||||||
id: string;
|
|
||||||
input: unknown;
|
|
||||||
name: string;
|
|
||||||
type: "tool_use";
|
|
||||||
};
|
|
||||||
|
|
||||||
export type TextBlock = {
|
|
||||||
type: "text";
|
|
||||||
text: string;
|
|
||||||
};
|
|
||||||
|
|
||||||
type ContentBlockStart = {
|
|
||||||
type: "content_block_start";
|
|
||||||
index: number;
|
|
||||||
content_block: ToolBlock | TextBlock;
|
|
||||||
};
|
|
||||||
|
|
||||||
type Delta =
|
|
||||||
| {
|
|
||||||
type: "text_delta";
|
|
||||||
text: string;
|
|
||||||
}
|
|
||||||
| {
|
|
||||||
type: "input_json_delta";
|
|
||||||
partial_json: string;
|
|
||||||
};
|
|
||||||
|
|
||||||
type ContentBlockDelta = {
|
|
||||||
type: "content_block_delta";
|
|
||||||
index: number;
|
|
||||||
delta: Delta;
|
|
||||||
};
|
|
||||||
|
|
||||||
type ContentBlockStop = {
|
|
||||||
type: "content_block_stop";
|
|
||||||
index: number;
|
|
||||||
};
|
|
||||||
|
|
||||||
type MessageDelta = {
|
|
||||||
type: "message_delta";
|
|
||||||
delta: {
|
|
||||||
stop_reason: string;
|
|
||||||
stop_sequence: string | null;
|
|
||||||
};
|
|
||||||
usage: Usage;
|
|
||||||
};
|
|
||||||
|
|
||||||
export type MessageStop = {
|
|
||||||
type: "message_stop";
|
|
||||||
"amazon-bedrock-invocationMetrics": InvocationMetrics;
|
|
||||||
};
|
|
||||||
|
|
||||||
export type AnthropicStreamEvent =
|
|
||||||
| { type: "message_start"; message: Message }
|
|
||||||
| ContentBlockStart
|
|
||||||
| ContentBlockDelta
|
|
||||||
| ContentBlockStop
|
|
||||||
| MessageDelta
|
|
||||||
| MessageStop;
|
|
||||||
|
|
||||||
export type AnthropicContent =
|
|
||||||
| AnthropicTextContent
|
|
||||||
| AnthropicImageContent
|
|
||||||
| AnthropicToolContent
|
|
||||||
| AnthropicToolResultContent;
|
|
||||||
|
|
||||||
export type AnthropicTextContent = {
|
|
||||||
type: "text";
|
|
||||||
text: string;
|
|
||||||
};
|
|
||||||
|
|
||||||
export type AnthropicToolContent = {
|
|
||||||
type: "tool_use";
|
|
||||||
id: string;
|
|
||||||
name: string;
|
|
||||||
input: Record<string, unknown>;
|
|
||||||
};
|
|
||||||
|
|
||||||
export type AnthropicToolResultContent = {
|
|
||||||
type: "tool_result";
|
|
||||||
tool_use_id: string;
|
|
||||||
content: string;
|
|
||||||
};
|
|
||||||
|
|
||||||
export type AnthropicMediaTypes =
|
|
||||||
| "image/jpeg"
|
|
||||||
| "image/png"
|
|
||||||
| "image/webp"
|
|
||||||
| "image/gif";
|
|
||||||
|
|
||||||
export type AnthropicImageSource = {
|
|
||||||
type: "base64";
|
|
||||||
media_type: AnthropicMediaTypes;
|
|
||||||
data: string; // base64 encoded image bytes
|
|
||||||
};
|
|
||||||
|
|
||||||
export type AnthropicImageContent = {
|
|
||||||
type: "image";
|
|
||||||
source: AnthropicImageSource;
|
|
||||||
};
|
|
||||||
|
|
||||||
export type AnthropicMessage = {
|
|
||||||
role: "user" | "assistant";
|
|
||||||
content: AnthropicContent[];
|
|
||||||
};
|
|
||||||
|
|
||||||
export type AnthropicNoneStreamingResponse = {
|
|
||||||
id: string;
|
|
||||||
type: "message";
|
|
||||||
role: "assistant";
|
|
||||||
content: AnthropicContent[];
|
|
||||||
model: string;
|
|
||||||
stop_reason: "end_turn" | "max_tokens" | "stop_sequence";
|
|
||||||
stop_sequence?: string;
|
|
||||||
usage: { input_tokens: number; output_tokens: number };
|
|
||||||
};
|
|
||||||
|
|
||||||
export type AnthropicTool = {
|
|
||||||
name: string;
|
|
||||||
description: string;
|
|
||||||
input_schema: ToolMetadata["parameters"];
|
|
||||||
};
|
|
||||||
@@ -1,166 +0,0 @@
|
|||||||
import type { JSONObject } from "@llamaindex/core/global";
|
|
||||||
import type {
|
|
||||||
BaseTool,
|
|
||||||
ChatMessage,
|
|
||||||
MessageContent,
|
|
||||||
MessageContentDetail,
|
|
||||||
ToolCallLLMMessageOptions,
|
|
||||||
} from "@llamaindex/core/llms";
|
|
||||||
import { mapMessageContentToMessageContentDetails } from "../../utils";
|
|
||||||
import { extractDataUrlComponents } from "../utils";
|
|
||||||
import type {
|
|
||||||
AnthropicContent,
|
|
||||||
AnthropicImageContent,
|
|
||||||
AnthropicMediaTypes,
|
|
||||||
AnthropicMessage,
|
|
||||||
AnthropicTextContent,
|
|
||||||
AnthropicTool,
|
|
||||||
} from "./types.js";
|
|
||||||
|
|
||||||
const ACCEPTED_IMAGE_MIME_TYPES = [
|
|
||||||
"image/jpeg",
|
|
||||||
"image/png",
|
|
||||||
"image/webp",
|
|
||||||
"image/gif",
|
|
||||||
];
|
|
||||||
|
|
||||||
export const mergeNeighboringSameRoleMessages = (
|
|
||||||
messages: AnthropicMessage[],
|
|
||||||
): AnthropicMessage[] => {
|
|
||||||
return messages.reduce(
|
|
||||||
(result: AnthropicMessage[], current: AnthropicMessage, index: number) => {
|
|
||||||
if (index > 0 && messages[index - 1]!.role === current.role) {
|
|
||||||
result[result.length - 1]!.content = [
|
|
||||||
...result[result.length - 1]!.content,
|
|
||||||
...current.content,
|
|
||||||
];
|
|
||||||
} else {
|
|
||||||
result.push(current);
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
},
|
|
||||||
[],
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
||||||
export const mapMessageContentDetailToAnthropicContent = <
|
|
||||||
T extends MessageContentDetail,
|
|
||||||
>(
|
|
||||||
detail: T,
|
|
||||||
): AnthropicContent => {
|
|
||||||
let content: AnthropicContent;
|
|
||||||
|
|
||||||
if (detail.type === "text") {
|
|
||||||
content = mapTextContent(detail.text);
|
|
||||||
} else if (detail.type === "image_url") {
|
|
||||||
content = mapImageContent(detail.image_url.url);
|
|
||||||
} else {
|
|
||||||
throw new Error("Unsupported content detail type");
|
|
||||||
}
|
|
||||||
return content;
|
|
||||||
};
|
|
||||||
|
|
||||||
export const mapMessageContentToAnthropicContent = <T extends MessageContent>(
|
|
||||||
content: T,
|
|
||||||
): AnthropicContent[] => {
|
|
||||||
return mapMessageContentToMessageContentDetails(content).map(
|
|
||||||
mapMessageContentDetailToAnthropicContent,
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
||||||
export const mapBaseToolsToAnthropicTools = (
|
|
||||||
tools?: BaseTool[],
|
|
||||||
): AnthropicTool[] => {
|
|
||||||
if (!tools) return [];
|
|
||||||
return tools.map((tool: BaseTool) => {
|
|
||||||
const {
|
|
||||||
metadata: { parameters, ...options },
|
|
||||||
} = tool;
|
|
||||||
return {
|
|
||||||
...options,
|
|
||||||
input_schema: parameters,
|
|
||||||
};
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
export const mapChatMessagesToAnthropicMessages = <
|
|
||||||
T extends ChatMessage<ToolCallLLMMessageOptions>,
|
|
||||||
>(
|
|
||||||
messages: T[],
|
|
||||||
): AnthropicMessage[] => {
|
|
||||||
const mapped = messages
|
|
||||||
.flatMap((msg: T): AnthropicMessage[] => {
|
|
||||||
if (msg.options && "toolCall" in msg.options) {
|
|
||||||
return [
|
|
||||||
{
|
|
||||||
role: "assistant",
|
|
||||||
content: msg.options.toolCall.map((call) => ({
|
|
||||||
type: "tool_use",
|
|
||||||
id: call.id,
|
|
||||||
name: call.name,
|
|
||||||
input: call.input as JSONObject,
|
|
||||||
})),
|
|
||||||
},
|
|
||||||
];
|
|
||||||
}
|
|
||||||
if (msg.options && "toolResult" in msg.options) {
|
|
||||||
return [
|
|
||||||
{
|
|
||||||
role: "user",
|
|
||||||
content: [
|
|
||||||
{
|
|
||||||
type: "tool_result",
|
|
||||||
tool_use_id: msg.options.toolResult.id,
|
|
||||||
content: JSON.stringify(msg.options.toolResult.result),
|
|
||||||
},
|
|
||||||
],
|
|
||||||
},
|
|
||||||
];
|
|
||||||
}
|
|
||||||
return mapMessageContentToMessageContentDetails(msg.content).map(
|
|
||||||
(detail: MessageContentDetail): AnthropicMessage => {
|
|
||||||
const content = mapMessageContentDetailToAnthropicContent(detail);
|
|
||||||
|
|
||||||
return {
|
|
||||||
role: msg.role === "assistant" ? "assistant" : "user",
|
|
||||||
content: [content],
|
|
||||||
};
|
|
||||||
},
|
|
||||||
);
|
|
||||||
})
|
|
||||||
.filter((message: AnthropicMessage) => {
|
|
||||||
const content = message.content[0]!;
|
|
||||||
if (content.type === "text" && !content.text) return false;
|
|
||||||
if (content.type === "image" && !content.source.data) return false;
|
|
||||||
if (content.type === "image" && message.role === "assistant")
|
|
||||||
return false;
|
|
||||||
return true;
|
|
||||||
});
|
|
||||||
|
|
||||||
return mergeNeighboringSameRoleMessages(mapped);
|
|
||||||
};
|
|
||||||
|
|
||||||
export const mapTextContent = (text: string): AnthropicTextContent => {
|
|
||||||
return { type: "text", text };
|
|
||||||
};
|
|
||||||
|
|
||||||
export const mapImageContent = (imageUrl: string): AnthropicImageContent => {
|
|
||||||
if (!imageUrl.startsWith("data:"))
|
|
||||||
throw new Error(
|
|
||||||
"For Anthropic please only use base64 data url, e.g.: data:image/jpeg;base64,SGVsbG8sIFdvcmxkIQ==",
|
|
||||||
);
|
|
||||||
const { mimeType, base64: data } = extractDataUrlComponents(imageUrl);
|
|
||||||
if (!ACCEPTED_IMAGE_MIME_TYPES.includes(mimeType))
|
|
||||||
throw new Error(
|
|
||||||
`Anthropic only accepts the following mimeTypes: ${ACCEPTED_IMAGE_MIME_TYPES.join("\n")}`,
|
|
||||||
);
|
|
||||||
|
|
||||||
return {
|
|
||||||
type: "image",
|
|
||||||
source: {
|
|
||||||
type: "base64",
|
|
||||||
media_type: mimeType as AnthropicMediaTypes,
|
|
||||||
data,
|
|
||||||
},
|
|
||||||
};
|
|
||||||
};
|
|
||||||
@@ -1,513 +0,0 @@
|
|||||||
import {
|
|
||||||
BedrockRuntimeClient,
|
|
||||||
type BedrockRuntimeClientConfig,
|
|
||||||
InvokeModelCommand,
|
|
||||||
InvokeModelWithResponseStreamCommand,
|
|
||||||
} from "@aws-sdk/client-bedrock-runtime";
|
|
||||||
import {
|
|
||||||
type ChatMessage,
|
|
||||||
type ChatResponse,
|
|
||||||
type CompletionResponse,
|
|
||||||
type LLMChatParamsNonStreaming,
|
|
||||||
type LLMChatParamsStreaming,
|
|
||||||
type LLMCompletionParamsNonStreaming,
|
|
||||||
type LLMCompletionParamsStreaming,
|
|
||||||
type LLMMetadata,
|
|
||||||
ToolCallLLM,
|
|
||||||
type ToolCallLLMMessageOptions,
|
|
||||||
} from "@llamaindex/core/llms";
|
|
||||||
import { streamConverter } from "@llamaindex/core/utils";
|
|
||||||
import {
|
|
||||||
type BedrockAdditionalChatOptions,
|
|
||||||
type BedrockChatStreamResponse,
|
|
||||||
Provider,
|
|
||||||
} from "./provider";
|
|
||||||
|
|
||||||
import { wrapLLMEvent } from "@llamaindex/core/decorator";
|
|
||||||
import { mapMessageContentToMessageContentDetails } from "../utils";
|
|
||||||
import { AmazonProvider } from "./amazon/provider";
|
|
||||||
import { AnthropicProvider } from "./anthropic/provider";
|
|
||||||
import { MetaProvider } from "./meta/provider";
|
|
||||||
|
|
||||||
// Other providers should go here
|
|
||||||
export const PROVIDERS: { [key: string]: Provider } = {
|
|
||||||
anthropic: new AnthropicProvider(),
|
|
||||||
meta: new MetaProvider(),
|
|
||||||
amazon: new AmazonProvider(),
|
|
||||||
};
|
|
||||||
|
|
||||||
export type BedrockChatParamsStreaming = LLMChatParamsStreaming<
|
|
||||||
BedrockAdditionalChatOptions,
|
|
||||||
ToolCallLLMMessageOptions
|
|
||||||
>;
|
|
||||||
|
|
||||||
export type BedrockChatParamsNonStreaming = LLMChatParamsNonStreaming<
|
|
||||||
BedrockAdditionalChatOptions,
|
|
||||||
ToolCallLLMMessageOptions
|
|
||||||
>;
|
|
||||||
|
|
||||||
export type BedrockChatNonStreamResponse =
|
|
||||||
ChatResponse<ToolCallLLMMessageOptions>;
|
|
||||||
|
|
||||||
export const BEDROCK_MODELS = {
|
|
||||||
AMAZON_TITAN_TG1_LARGE: "amazon.titan-tg1-large",
|
|
||||||
AMAZON_TITAN_TEXT_EXPRESS_V1: "amazon.titan-text-express-v1",
|
|
||||||
AI21_J2_GRANDE_INSTRUCT: "ai21.j2-grande-instruct",
|
|
||||||
AI21_J2_JUMBO_INSTRUCT: "ai21.j2-jumbo-instruct",
|
|
||||||
AI21_J2_MID: "ai21.j2-mid",
|
|
||||||
AI21_J2_MID_V1: "ai21.j2-mid-v1",
|
|
||||||
AI21_J2_ULTRA: "ai21.j2-ultra",
|
|
||||||
AI21_J2_ULTRA_V1: "ai21.j2-ultra-v1",
|
|
||||||
COHERE_COMMAND_TEXT_V14: "cohere.command-text-v14",
|
|
||||||
ANTHROPIC_CLAUDE_INSTANT_1: "anthropic.claude-instant-v1",
|
|
||||||
ANTHROPIC_CLAUDE_1: "anthropic.claude-v1", // EOF: No longer supported
|
|
||||||
ANTHROPIC_CLAUDE_2: "anthropic.claude-v2",
|
|
||||||
ANTHROPIC_CLAUDE_2_1: "anthropic.claude-v2:1",
|
|
||||||
ANTHROPIC_CLAUDE_3_SONNET: "anthropic.claude-3-sonnet-20240229-v1:0",
|
|
||||||
ANTHROPIC_CLAUDE_3_HAIKU: "anthropic.claude-3-haiku-20240307-v1:0",
|
|
||||||
ANTHROPIC_CLAUDE_3_OPUS: "anthropic.claude-3-opus-20240229-v1:0",
|
|
||||||
ANTHROPIC_CLAUDE_3_5_SONNET: "anthropic.claude-3-5-sonnet-20240620-v1:0",
|
|
||||||
ANTHROPIC_CLAUDE_3_5_SONNET_V2: "anthropic.claude-3-5-sonnet-20241022-v2:0",
|
|
||||||
ANTHROPIC_CLAUDE_3_5_HAIKU: "anthropic.claude-3-5-haiku-20241022-v1:0",
|
|
||||||
ANTHROPIC_CLAUDE_3_7_SONNET: "anthropic.claude-3-7-sonnet-20250219-v1:0",
|
|
||||||
META_LLAMA2_13B_CHAT: "meta.llama2-13b-chat-v1",
|
|
||||||
META_LLAMA2_70B_CHAT: "meta.llama2-70b-chat-v1",
|
|
||||||
META_LLAMA3_8B_INSTRUCT: "meta.llama3-8b-instruct-v1:0",
|
|
||||||
META_LLAMA3_70B_INSTRUCT: "meta.llama3-70b-instruct-v1:0",
|
|
||||||
META_LLAMA3_1_8B_INSTRUCT: "meta.llama3-1-8b-instruct-v1:0",
|
|
||||||
META_LLAMA3_1_70B_INSTRUCT: "meta.llama3-1-70b-instruct-v1:0",
|
|
||||||
META_LLAMA3_1_405B_INSTRUCT: "meta.llama3-1-405b-instruct-v1:0",
|
|
||||||
META_LLAMA3_2_1B_INSTRUCT: "meta.llama3-2-1b-instruct-v1:0",
|
|
||||||
META_LLAMA3_2_3B_INSTRUCT: "meta.llama3-2-3b-instruct-v1:0",
|
|
||||||
META_LLAMA3_2_11B_INSTRUCT: "meta.llama3-2-11b-instruct-v1:0",
|
|
||||||
META_LLAMA3_2_90B_INSTRUCT: "meta.llama3-2-90b-instruct-v1:0",
|
|
||||||
META_LLAMA3_3_70B_INSTRUCT: "meta.llama3-3-70b-instruct-v1:0",
|
|
||||||
MISTRAL_7B_INSTRUCT: "mistral.mistral-7b-instruct-v0:2",
|
|
||||||
MISTRAL_MIXTRAL_7B_INSTRUCT: "mistral.mixtral-8x7b-instruct-v0:1",
|
|
||||||
MISTRAL_MIXTRAL_LARGE_2402: "mistral.mistral-large-2402-v1:0",
|
|
||||||
AMAZON_NOVA_PREMIER_1: "amazon.nova-premier-v1:0",
|
|
||||||
AMAZON_NOVA_PRO_1: "amazon.nova-pro-v1:0",
|
|
||||||
AMAZON_NOVA_LITE_1: "amazon.nova-lite-v1:0",
|
|
||||||
AMAZON_NOVA_MICRO_1: "amazon.nova-micro-v1:0",
|
|
||||||
};
|
|
||||||
|
|
||||||
export type BEDROCK_MODELS =
|
|
||||||
(typeof BEDROCK_MODELS)[keyof typeof BEDROCK_MODELS];
|
|
||||||
|
|
||||||
export const INFERENCE_BEDROCK_MODELS = {
|
|
||||||
US_ANTHROPIC_CLAUDE_3_HAIKU: "us.anthropic.claude-3-haiku-20240307-v1:0",
|
|
||||||
US_ANTHROPIC_CLAUDE_3_5_HAIKU: "us.anthropic.claude-3-5-haiku-20241022-v1:0",
|
|
||||||
US_ANTHROPIC_CLAUDE_3_OPUS: "us.anthropic.claude-3-opus-20240229-v1:0",
|
|
||||||
US_ANTHROPIC_CLAUDE_3_SONNET: "us.anthropic.claude-3-sonnet-20240229-v1:0",
|
|
||||||
US_ANTHROPIC_CLAUDE_3_5_SONNET:
|
|
||||||
"us.anthropic.claude-3-5-sonnet-20240620-v1:0",
|
|
||||||
US_ANTHROPIC_CLAUDE_3_5_SONNET_V2:
|
|
||||||
"us.anthropic.claude-3-5-sonnet-20241022-v2:0",
|
|
||||||
US_ANTHROPIC_CLAUDE_3_7_SONNET:
|
|
||||||
"us.anthropic.claude-3-7-sonnet-20250219-v1:0",
|
|
||||||
US_META_LLAMA_3_2_1B_INSTRUCT: "us.meta.llama3-2-1b-instruct-v1:0",
|
|
||||||
US_META_LLAMA_3_2_3B_INSTRUCT: "us.meta.llama3-2-3b-instruct-v1:0",
|
|
||||||
US_META_LLAMA_3_2_11B_INSTRUCT: "us.meta.llama3-2-11b-instruct-v1:0",
|
|
||||||
US_META_LLAMA_3_2_90B_INSTRUCT: "us.meta.llama3-2-90b-instruct-v1:0",
|
|
||||||
US_META_LLAMA_3_3_70B_INSTRUCT: "us.meta.llama3-3-70b-instruct-v1:0",
|
|
||||||
US_AMAZON_NOVA_PREMIER_1: "us.amazon.nova-premier-v1:0",
|
|
||||||
US_AMAZON_NOVA_PRO_1: "us.amazon.nova-pro-v1:0",
|
|
||||||
US_AMAZON_NOVA_LITE_1: "us.amazon.nova-lite-v1:0",
|
|
||||||
US_AMAZON_NOVA_MICRO_1: "us.amazon.nova-micro-v1:0",
|
|
||||||
|
|
||||||
EU_ANTHROPIC_CLAUDE_3_HAIKU: "eu.anthropic.claude-3-haiku-20240307-v1:0",
|
|
||||||
EU_ANTHROPIC_CLAUDE_3_5_HAIKU: "eu.anthropic.claude-3-5-haiku-20240307-v1:0",
|
|
||||||
EU_ANTHROPIC_CLAUDE_3_SONNET: "eu.anthropic.claude-3-sonnet-20240229-v1:0",
|
|
||||||
EU_ANTHROPIC_CLAUDE_3_5_SONNET:
|
|
||||||
"eu.anthropic.claude-3-5-sonnet-20240620-v1:0",
|
|
||||||
EU_ANTHROPIC_CLAUDE_3_7_SONNET:
|
|
||||||
"eu.anthropic.claude-3-7-sonnet-20250219-v1:0",
|
|
||||||
EU_META_LLAMA_3_2_1B_INSTRUCT: "eu.meta.llama3-2-1b-instruct-v1:0",
|
|
||||||
EU_META_LLAMA_3_2_3B_INSTRUCT: "eu.meta.llama3-2-3b-instruct-v1:0",
|
|
||||||
EU_AMAZON_NOVA_PREMIER_1: "eu.amazon.nova-premier-v1:0",
|
|
||||||
EU_AMAZON_NOVA_PRO_1: "eu.amazon.nova-pro-v1:0",
|
|
||||||
EU_AMAZON_NOVA_LITE_1: "eu.amazon.nova-lite-v1:0",
|
|
||||||
EU_AMAZON_NOVA_MICRO_1: "eu.amazon.nova-micro-v1:0",
|
|
||||||
};
|
|
||||||
|
|
||||||
export type INFERENCE_BEDROCK_MODELS =
|
|
||||||
(typeof INFERENCE_BEDROCK_MODELS)[keyof typeof INFERENCE_BEDROCK_MODELS];
|
|
||||||
|
|
||||||
export const INFERENCE_TO_BEDROCK_MAP: Record<
|
|
||||||
INFERENCE_BEDROCK_MODELS,
|
|
||||||
BEDROCK_MODELS
|
|
||||||
> = {
|
|
||||||
[INFERENCE_BEDROCK_MODELS.US_ANTHROPIC_CLAUDE_3_HAIKU]:
|
|
||||||
BEDROCK_MODELS.ANTHROPIC_CLAUDE_3_HAIKU,
|
|
||||||
[INFERENCE_BEDROCK_MODELS.US_ANTHROPIC_CLAUDE_3_OPUS]:
|
|
||||||
BEDROCK_MODELS.ANTHROPIC_CLAUDE_3_OPUS,
|
|
||||||
[INFERENCE_BEDROCK_MODELS.US_ANTHROPIC_CLAUDE_3_SONNET]:
|
|
||||||
BEDROCK_MODELS.ANTHROPIC_CLAUDE_3_SONNET,
|
|
||||||
[INFERENCE_BEDROCK_MODELS.US_ANTHROPIC_CLAUDE_3_5_SONNET]:
|
|
||||||
BEDROCK_MODELS.ANTHROPIC_CLAUDE_3_5_SONNET,
|
|
||||||
[INFERENCE_BEDROCK_MODELS.US_ANTHROPIC_CLAUDE_3_7_SONNET]:
|
|
||||||
BEDROCK_MODELS.ANTHROPIC_CLAUDE_3_7_SONNET,
|
|
||||||
[INFERENCE_BEDROCK_MODELS.US_ANTHROPIC_CLAUDE_3_5_SONNET_V2]:
|
|
||||||
BEDROCK_MODELS.ANTHROPIC_CLAUDE_3_5_SONNET_V2,
|
|
||||||
[INFERENCE_BEDROCK_MODELS.US_ANTHROPIC_CLAUDE_3_5_HAIKU]:
|
|
||||||
BEDROCK_MODELS.ANTHROPIC_CLAUDE_3_5_HAIKU,
|
|
||||||
[INFERENCE_BEDROCK_MODELS.US_META_LLAMA_3_2_1B_INSTRUCT]:
|
|
||||||
BEDROCK_MODELS.META_LLAMA3_2_1B_INSTRUCT,
|
|
||||||
[INFERENCE_BEDROCK_MODELS.US_META_LLAMA_3_2_3B_INSTRUCT]:
|
|
||||||
BEDROCK_MODELS.META_LLAMA3_2_3B_INSTRUCT,
|
|
||||||
[INFERENCE_BEDROCK_MODELS.US_META_LLAMA_3_2_11B_INSTRUCT]:
|
|
||||||
BEDROCK_MODELS.META_LLAMA3_2_11B_INSTRUCT,
|
|
||||||
[INFERENCE_BEDROCK_MODELS.US_META_LLAMA_3_2_90B_INSTRUCT]:
|
|
||||||
BEDROCK_MODELS.META_LLAMA3_2_90B_INSTRUCT,
|
|
||||||
[INFERENCE_BEDROCK_MODELS.US_META_LLAMA_3_3_70B_INSTRUCT]:
|
|
||||||
BEDROCK_MODELS.META_LLAMA3_3_70B_INSTRUCT,
|
|
||||||
|
|
||||||
[INFERENCE_BEDROCK_MODELS.US_AMAZON_NOVA_PREMIER_1]:
|
|
||||||
BEDROCK_MODELS.AMAZON_NOVA_PREMIER_1,
|
|
||||||
[INFERENCE_BEDROCK_MODELS.US_AMAZON_NOVA_PRO_1]:
|
|
||||||
BEDROCK_MODELS.AMAZON_NOVA_PRO_1,
|
|
||||||
[INFERENCE_BEDROCK_MODELS.US_AMAZON_NOVA_LITE_1]:
|
|
||||||
BEDROCK_MODELS.AMAZON_NOVA_LITE_1,
|
|
||||||
[INFERENCE_BEDROCK_MODELS.US_AMAZON_NOVA_MICRO_1]:
|
|
||||||
BEDROCK_MODELS.AMAZON_NOVA_MICRO_1,
|
|
||||||
|
|
||||||
[INFERENCE_BEDROCK_MODELS.EU_ANTHROPIC_CLAUDE_3_HAIKU]:
|
|
||||||
BEDROCK_MODELS.ANTHROPIC_CLAUDE_3_HAIKU,
|
|
||||||
[INFERENCE_BEDROCK_MODELS.EU_ANTHROPIC_CLAUDE_3_SONNET]:
|
|
||||||
BEDROCK_MODELS.ANTHROPIC_CLAUDE_3_SONNET,
|
|
||||||
[INFERENCE_BEDROCK_MODELS.EU_ANTHROPIC_CLAUDE_3_5_SONNET]:
|
|
||||||
BEDROCK_MODELS.ANTHROPIC_CLAUDE_3_5_SONNET,
|
|
||||||
[INFERENCE_BEDROCK_MODELS.EU_ANTHROPIC_CLAUDE_3_7_SONNET]:
|
|
||||||
BEDROCK_MODELS.ANTHROPIC_CLAUDE_3_7_SONNET,
|
|
||||||
[INFERENCE_BEDROCK_MODELS.EU_META_LLAMA_3_2_1B_INSTRUCT]:
|
|
||||||
BEDROCK_MODELS.META_LLAMA3_2_1B_INSTRUCT,
|
|
||||||
[INFERENCE_BEDROCK_MODELS.EU_META_LLAMA_3_2_3B_INSTRUCT]:
|
|
||||||
BEDROCK_MODELS.META_LLAMA3_2_3B_INSTRUCT,
|
|
||||||
|
|
||||||
[INFERENCE_BEDROCK_MODELS.EU_AMAZON_NOVA_PREMIER_1]:
|
|
||||||
BEDROCK_MODELS.AMAZON_NOVA_PREMIER_1,
|
|
||||||
[INFERENCE_BEDROCK_MODELS.EU_AMAZON_NOVA_PRO_1]:
|
|
||||||
BEDROCK_MODELS.AMAZON_NOVA_PRO_1,
|
|
||||||
[INFERENCE_BEDROCK_MODELS.EU_AMAZON_NOVA_LITE_1]:
|
|
||||||
BEDROCK_MODELS.AMAZON_NOVA_LITE_1,
|
|
||||||
[INFERENCE_BEDROCK_MODELS.EU_AMAZON_NOVA_MICRO_1]:
|
|
||||||
BEDROCK_MODELS.AMAZON_NOVA_MICRO_1,
|
|
||||||
};
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Values taken from https://docs.aws.amazon.com/bedrock/latest/userguide/model-parameters.html#model-parameters-claude
|
|
||||||
*/
|
|
||||||
|
|
||||||
const COMPLETION_MODELS = {
|
|
||||||
[BEDROCK_MODELS.AMAZON_TITAN_TG1_LARGE]: 8000,
|
|
||||||
[BEDROCK_MODELS.AMAZON_TITAN_TEXT_EXPRESS_V1]: 8000,
|
|
||||||
[BEDROCK_MODELS.AI21_J2_GRANDE_INSTRUCT]: 8000,
|
|
||||||
[BEDROCK_MODELS.AI21_J2_JUMBO_INSTRUCT]: 8000,
|
|
||||||
[BEDROCK_MODELS.AI21_J2_MID]: 8000,
|
|
||||||
[BEDROCK_MODELS.AI21_J2_MID_V1]: 8000,
|
|
||||||
[BEDROCK_MODELS.AI21_J2_ULTRA]: 8000,
|
|
||||||
[BEDROCK_MODELS.AI21_J2_ULTRA_V1]: 8000,
|
|
||||||
[BEDROCK_MODELS.COHERE_COMMAND_TEXT_V14]: 4096,
|
|
||||||
};
|
|
||||||
|
|
||||||
const CHAT_ONLY_MODELS = {
|
|
||||||
[BEDROCK_MODELS.ANTHROPIC_CLAUDE_INSTANT_1]: 100000,
|
|
||||||
[BEDROCK_MODELS.ANTHROPIC_CLAUDE_1]: 100000,
|
|
||||||
[BEDROCK_MODELS.ANTHROPIC_CLAUDE_2]: 100000,
|
|
||||||
[BEDROCK_MODELS.ANTHROPIC_CLAUDE_2_1]: 200000,
|
|
||||||
[BEDROCK_MODELS.ANTHROPIC_CLAUDE_3_SONNET]: 200000,
|
|
||||||
[BEDROCK_MODELS.ANTHROPIC_CLAUDE_3_HAIKU]: 200000,
|
|
||||||
[BEDROCK_MODELS.ANTHROPIC_CLAUDE_3_OPUS]: 200000,
|
|
||||||
[BEDROCK_MODELS.ANTHROPIC_CLAUDE_3_5_SONNET]: 200000,
|
|
||||||
[BEDROCK_MODELS.ANTHROPIC_CLAUDE_3_5_SONNET_V2]: 200000,
|
|
||||||
[BEDROCK_MODELS.ANTHROPIC_CLAUDE_3_5_HAIKU]: 200000,
|
|
||||||
[BEDROCK_MODELS.ANTHROPIC_CLAUDE_3_7_SONNET]: 200000,
|
|
||||||
[BEDROCK_MODELS.META_LLAMA2_13B_CHAT]: 2048,
|
|
||||||
[BEDROCK_MODELS.META_LLAMA2_70B_CHAT]: 4096,
|
|
||||||
[BEDROCK_MODELS.META_LLAMA3_8B_INSTRUCT]: 8192,
|
|
||||||
[BEDROCK_MODELS.META_LLAMA3_70B_INSTRUCT]: 8192,
|
|
||||||
[BEDROCK_MODELS.META_LLAMA3_1_8B_INSTRUCT]: 128000,
|
|
||||||
[BEDROCK_MODELS.META_LLAMA3_1_70B_INSTRUCT]: 128000,
|
|
||||||
[BEDROCK_MODELS.META_LLAMA3_1_405B_INSTRUCT]: 128000,
|
|
||||||
[BEDROCK_MODELS.META_LLAMA3_2_1B_INSTRUCT]: 131000,
|
|
||||||
[BEDROCK_MODELS.META_LLAMA3_2_3B_INSTRUCT]: 131000,
|
|
||||||
[BEDROCK_MODELS.META_LLAMA3_2_11B_INSTRUCT]: 128000,
|
|
||||||
[BEDROCK_MODELS.META_LLAMA3_2_90B_INSTRUCT]: 128000,
|
|
||||||
[BEDROCK_MODELS.META_LLAMA3_3_70B_INSTRUCT]: 128000,
|
|
||||||
[BEDROCK_MODELS.MISTRAL_7B_INSTRUCT]: 32000,
|
|
||||||
[BEDROCK_MODELS.MISTRAL_MIXTRAL_7B_INSTRUCT]: 32000,
|
|
||||||
[BEDROCK_MODELS.MISTRAL_MIXTRAL_LARGE_2402]: 32000,
|
|
||||||
[BEDROCK_MODELS.AMAZON_NOVA_PREMIER_1]: 300000,
|
|
||||||
[BEDROCK_MODELS.AMAZON_NOVA_PRO_1]: 300000,
|
|
||||||
[BEDROCK_MODELS.AMAZON_NOVA_LITE_1]: 300000,
|
|
||||||
[BEDROCK_MODELS.AMAZON_NOVA_MICRO_1]: 130000,
|
|
||||||
};
|
|
||||||
|
|
||||||
const BEDROCK_FOUNDATION_LLMS = { ...COMPLETION_MODELS, ...CHAT_ONLY_MODELS };
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Only the following models support streaming as
|
|
||||||
* per result of Bedrock.Client.list_foundation_models
|
|
||||||
* https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/bedrock/client/list_foundation_models.html
|
|
||||||
*/
|
|
||||||
export const STREAMING_MODELS = new Set([
|
|
||||||
BEDROCK_MODELS.AMAZON_TITAN_TG1_LARGE,
|
|
||||||
BEDROCK_MODELS.AMAZON_TITAN_TEXT_EXPRESS_V1,
|
|
||||||
BEDROCK_MODELS.ANTHROPIC_CLAUDE_INSTANT_1,
|
|
||||||
BEDROCK_MODELS.ANTHROPIC_CLAUDE_1,
|
|
||||||
BEDROCK_MODELS.ANTHROPIC_CLAUDE_2,
|
|
||||||
BEDROCK_MODELS.ANTHROPIC_CLAUDE_2_1,
|
|
||||||
BEDROCK_MODELS.ANTHROPIC_CLAUDE_3_SONNET,
|
|
||||||
BEDROCK_MODELS.ANTHROPIC_CLAUDE_3_HAIKU,
|
|
||||||
BEDROCK_MODELS.ANTHROPIC_CLAUDE_3_OPUS,
|
|
||||||
BEDROCK_MODELS.ANTHROPIC_CLAUDE_3_5_SONNET,
|
|
||||||
BEDROCK_MODELS.ANTHROPIC_CLAUDE_3_5_SONNET_V2,
|
|
||||||
BEDROCK_MODELS.ANTHROPIC_CLAUDE_3_5_HAIKU,
|
|
||||||
BEDROCK_MODELS.ANTHROPIC_CLAUDE_3_7_SONNET,
|
|
||||||
BEDROCK_MODELS.META_LLAMA2_13B_CHAT,
|
|
||||||
BEDROCK_MODELS.META_LLAMA2_70B_CHAT,
|
|
||||||
BEDROCK_MODELS.META_LLAMA3_8B_INSTRUCT,
|
|
||||||
BEDROCK_MODELS.META_LLAMA3_70B_INSTRUCT,
|
|
||||||
BEDROCK_MODELS.META_LLAMA3_1_8B_INSTRUCT,
|
|
||||||
BEDROCK_MODELS.META_LLAMA3_1_70B_INSTRUCT,
|
|
||||||
BEDROCK_MODELS.META_LLAMA3_1_405B_INSTRUCT,
|
|
||||||
BEDROCK_MODELS.META_LLAMA3_2_1B_INSTRUCT,
|
|
||||||
BEDROCK_MODELS.META_LLAMA3_2_3B_INSTRUCT,
|
|
||||||
BEDROCK_MODELS.META_LLAMA3_2_11B_INSTRUCT,
|
|
||||||
BEDROCK_MODELS.META_LLAMA3_2_90B_INSTRUCT,
|
|
||||||
BEDROCK_MODELS.META_LLAMA3_3_70B_INSTRUCT,
|
|
||||||
BEDROCK_MODELS.MISTRAL_7B_INSTRUCT,
|
|
||||||
BEDROCK_MODELS.MISTRAL_MIXTRAL_7B_INSTRUCT,
|
|
||||||
BEDROCK_MODELS.MISTRAL_MIXTRAL_LARGE_2402,
|
|
||||||
BEDROCK_MODELS.AMAZON_NOVA_PREMIER_1,
|
|
||||||
BEDROCK_MODELS.AMAZON_NOVA_PRO_1,
|
|
||||||
BEDROCK_MODELS.AMAZON_NOVA_LITE_1,
|
|
||||||
BEDROCK_MODELS.AMAZON_NOVA_MICRO_1,
|
|
||||||
]);
|
|
||||||
|
|
||||||
export const TOOL_CALL_MODELS: BEDROCK_MODELS[] = [
|
|
||||||
BEDROCK_MODELS.ANTHROPIC_CLAUDE_3_SONNET,
|
|
||||||
BEDROCK_MODELS.ANTHROPIC_CLAUDE_3_HAIKU,
|
|
||||||
BEDROCK_MODELS.ANTHROPIC_CLAUDE_3_OPUS,
|
|
||||||
BEDROCK_MODELS.ANTHROPIC_CLAUDE_3_5_SONNET,
|
|
||||||
BEDROCK_MODELS.ANTHROPIC_CLAUDE_3_5_SONNET_V2,
|
|
||||||
BEDROCK_MODELS.ANTHROPIC_CLAUDE_3_5_HAIKU,
|
|
||||||
BEDROCK_MODELS.ANTHROPIC_CLAUDE_3_7_SONNET,
|
|
||||||
BEDROCK_MODELS.META_LLAMA3_1_405B_INSTRUCT,
|
|
||||||
BEDROCK_MODELS.META_LLAMA3_2_1B_INSTRUCT,
|
|
||||||
BEDROCK_MODELS.META_LLAMA3_2_3B_INSTRUCT,
|
|
||||||
BEDROCK_MODELS.META_LLAMA3_2_11B_INSTRUCT,
|
|
||||||
BEDROCK_MODELS.META_LLAMA3_2_90B_INSTRUCT,
|
|
||||||
BEDROCK_MODELS.META_LLAMA3_3_70B_INSTRUCT,
|
|
||||||
BEDROCK_MODELS.AMAZON_NOVA_PREMIER_1,
|
|
||||||
BEDROCK_MODELS.AMAZON_NOVA_PRO_1,
|
|
||||||
BEDROCK_MODELS.AMAZON_NOVA_LITE_1,
|
|
||||||
BEDROCK_MODELS.AMAZON_NOVA_MICRO_1,
|
|
||||||
];
|
|
||||||
|
|
||||||
const getProvider = (model: string): Provider => {
|
|
||||||
const providerName = model.split(".")[0];
|
|
||||||
if (!providerName) {
|
|
||||||
throw new Error(`Model ${model} is not supported`);
|
|
||||||
}
|
|
||||||
if (!(providerName in PROVIDERS)) {
|
|
||||||
throw new Error(
|
|
||||||
`Provider ${providerName} for model ${model} is not supported`,
|
|
||||||
);
|
|
||||||
}
|
|
||||||
return PROVIDERS[providerName]!;
|
|
||||||
};
|
|
||||||
|
|
||||||
export type BedrockModelParams = {
|
|
||||||
model: BEDROCK_MODELS | INFERENCE_BEDROCK_MODELS;
|
|
||||||
temperature?: number;
|
|
||||||
topP?: number;
|
|
||||||
maxTokens?: number;
|
|
||||||
};
|
|
||||||
|
|
||||||
export const BEDROCK_MODEL_MAX_TOKENS: Partial<Record<BEDROCK_MODELS, number>> =
|
|
||||||
{
|
|
||||||
[BEDROCK_MODELS.ANTHROPIC_CLAUDE_3_SONNET]: 4096,
|
|
||||||
[BEDROCK_MODELS.ANTHROPIC_CLAUDE_3_HAIKU]: 4096,
|
|
||||||
[BEDROCK_MODELS.ANTHROPIC_CLAUDE_3_OPUS]: 4096,
|
|
||||||
[BEDROCK_MODELS.ANTHROPIC_CLAUDE_3_5_SONNET]: 4096,
|
|
||||||
[BEDROCK_MODELS.ANTHROPIC_CLAUDE_3_5_SONNET_V2]: 8192,
|
|
||||||
[BEDROCK_MODELS.ANTHROPIC_CLAUDE_3_5_HAIKU]: 8192,
|
|
||||||
[BEDROCK_MODELS.ANTHROPIC_CLAUDE_3_7_SONNET]: 8192,
|
|
||||||
[BEDROCK_MODELS.META_LLAMA2_13B_CHAT]: 2048,
|
|
||||||
[BEDROCK_MODELS.META_LLAMA2_70B_CHAT]: 2048,
|
|
||||||
[BEDROCK_MODELS.META_LLAMA3_8B_INSTRUCT]: 2048,
|
|
||||||
[BEDROCK_MODELS.META_LLAMA3_70B_INSTRUCT]: 2048,
|
|
||||||
[BEDROCK_MODELS.META_LLAMA3_1_8B_INSTRUCT]: 2048,
|
|
||||||
[BEDROCK_MODELS.META_LLAMA3_1_70B_INSTRUCT]: 2048,
|
|
||||||
[BEDROCK_MODELS.META_LLAMA3_1_405B_INSTRUCT]: 2048,
|
|
||||||
[BEDROCK_MODELS.META_LLAMA3_2_1B_INSTRUCT]: 2048,
|
|
||||||
[BEDROCK_MODELS.META_LLAMA3_2_3B_INSTRUCT]: 2048,
|
|
||||||
[BEDROCK_MODELS.META_LLAMA3_2_11B_INSTRUCT]: 2048,
|
|
||||||
[BEDROCK_MODELS.META_LLAMA3_2_90B_INSTRUCT]: 2048,
|
|
||||||
[BEDROCK_MODELS.META_LLAMA3_3_70B_INSTRUCT]: 2048,
|
|
||||||
};
|
|
||||||
|
|
||||||
const DEFAULT_BEDROCK_PARAMS = {
|
|
||||||
temperature: 0.1,
|
|
||||||
topP: 1,
|
|
||||||
maxTokens: 1024, // required by anthropic
|
|
||||||
};
|
|
||||||
|
|
||||||
export type BedrockParams = BedrockRuntimeClientConfig & BedrockModelParams;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* ToolCallLLM for Bedrock
|
|
||||||
*/
|
|
||||||
export class Bedrock extends ToolCallLLM<BedrockAdditionalChatOptions> {
|
|
||||||
private client: BedrockRuntimeClient;
|
|
||||||
protected actualModel: BEDROCK_MODELS | INFERENCE_BEDROCK_MODELS;
|
|
||||||
model: BEDROCK_MODELS;
|
|
||||||
temperature: number;
|
|
||||||
topP: number;
|
|
||||||
maxTokens?: number;
|
|
||||||
provider: Provider;
|
|
||||||
topK?: number;
|
|
||||||
|
|
||||||
// there should be no check for env variables. Bedrock can be authenticated in various ways
|
|
||||||
// AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY and AWS_REGION are the env variables used directly by the sdk
|
|
||||||
constructor({
|
|
||||||
temperature,
|
|
||||||
topP,
|
|
||||||
maxTokens,
|
|
||||||
model,
|
|
||||||
...params
|
|
||||||
}: BedrockParams) {
|
|
||||||
super();
|
|
||||||
this.actualModel = model;
|
|
||||||
this.model = INFERENCE_TO_BEDROCK_MAP[model] ?? model;
|
|
||||||
this.provider = getProvider(this.model);
|
|
||||||
this.maxTokens = maxTokens ?? DEFAULT_BEDROCK_PARAMS.maxTokens;
|
|
||||||
this.temperature = temperature ?? DEFAULT_BEDROCK_PARAMS.temperature;
|
|
||||||
this.topP = topP ?? DEFAULT_BEDROCK_PARAMS.topP;
|
|
||||||
this.client = new BedrockRuntimeClient(params);
|
|
||||||
}
|
|
||||||
|
|
||||||
get supportToolCall(): boolean {
|
|
||||||
return TOOL_CALL_MODELS.includes(this.model);
|
|
||||||
}
|
|
||||||
|
|
||||||
get metadata(): LLMMetadata {
|
|
||||||
// NOTE, Anthropic supports top_k but LLMMetadata does not
|
|
||||||
return {
|
|
||||||
model: this.model,
|
|
||||||
temperature: this.temperature,
|
|
||||||
topP: this.topP,
|
|
||||||
maxTokens: this.maxTokens,
|
|
||||||
contextWindow: BEDROCK_FOUNDATION_LLMS[this.model] ?? 128000,
|
|
||||||
tokenizer: undefined,
|
|
||||||
structuredOutput: false,
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
protected async nonStreamChat(
|
|
||||||
params: BedrockChatParamsNonStreaming,
|
|
||||||
): Promise<BedrockChatNonStreamResponse> {
|
|
||||||
if (!this.supportToolCall && params.tools?.length) {
|
|
||||||
console.warn(`The model "${this.model}" doesn't support ToolCall`);
|
|
||||||
}
|
|
||||||
const input = this.provider.getRequestBody(
|
|
||||||
this.metadata,
|
|
||||||
params.messages,
|
|
||||||
params.tools,
|
|
||||||
params.additionalChatOptions,
|
|
||||||
);
|
|
||||||
const command = new InvokeModelCommand(input);
|
|
||||||
command.input.modelId = this.actualModel;
|
|
||||||
|
|
||||||
const response = await this.client.send(command);
|
|
||||||
let options: ToolCallLLMMessageOptions = {};
|
|
||||||
if (this.supportToolCall) {
|
|
||||||
const tools = this.provider.getToolsFromResponse(response);
|
|
||||||
if (tools.length) {
|
|
||||||
options = { toolCall: tools };
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return {
|
|
||||||
raw: response,
|
|
||||||
message: {
|
|
||||||
role: "assistant",
|
|
||||||
content: this.provider.getTextFromResponse(response),
|
|
||||||
options,
|
|
||||||
},
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
protected async *streamChat(
|
|
||||||
params: BedrockChatParamsStreaming,
|
|
||||||
): BedrockChatStreamResponse {
|
|
||||||
if (!STREAMING_MODELS.has(this.model))
|
|
||||||
throw new Error(`The model: ${this.model} does not support streaming`);
|
|
||||||
|
|
||||||
if (!this.supportToolCall && params.tools?.length) {
|
|
||||||
console.warn(`The model "${this.model}" doesn't support ToolCall`);
|
|
||||||
}
|
|
||||||
|
|
||||||
const input = this.provider.getRequestBody(
|
|
||||||
this.metadata,
|
|
||||||
params.messages,
|
|
||||||
params.tools,
|
|
||||||
params.additionalChatOptions,
|
|
||||||
);
|
|
||||||
const command = new InvokeModelWithResponseStreamCommand(input);
|
|
||||||
command.input.modelId = this.actualModel;
|
|
||||||
|
|
||||||
const response = await this.client.send(command);
|
|
||||||
if (response.body) yield* this.provider.reduceStream(response.body);
|
|
||||||
}
|
|
||||||
|
|
||||||
chat(params: BedrockChatParamsStreaming): Promise<BedrockChatStreamResponse>;
|
|
||||||
chat(
|
|
||||||
params: BedrockChatParamsNonStreaming,
|
|
||||||
): Promise<BedrockChatNonStreamResponse>;
|
|
||||||
@wrapLLMEvent
|
|
||||||
async chat(
|
|
||||||
params: BedrockChatParamsStreaming | BedrockChatParamsNonStreaming,
|
|
||||||
): Promise<BedrockChatStreamResponse | BedrockChatNonStreamResponse> {
|
|
||||||
if (params.stream) {
|
|
||||||
return this.streamChat(params);
|
|
||||||
}
|
|
||||||
return this.nonStreamChat(params);
|
|
||||||
}
|
|
||||||
|
|
||||||
complete(
|
|
||||||
params: LLMCompletionParamsStreaming,
|
|
||||||
): Promise<AsyncIterable<CompletionResponse>>;
|
|
||||||
complete(
|
|
||||||
params: LLMCompletionParamsNonStreaming,
|
|
||||||
): Promise<CompletionResponse>;
|
|
||||||
async complete(
|
|
||||||
params: LLMCompletionParamsStreaming | LLMCompletionParamsNonStreaming,
|
|
||||||
): Promise<CompletionResponse | AsyncIterable<CompletionResponse>> {
|
|
||||||
const message: ChatMessage = {
|
|
||||||
role: "user",
|
|
||||||
content: mapMessageContentToMessageContentDetails(params.prompt),
|
|
||||||
};
|
|
||||||
|
|
||||||
const input = this.provider.getRequestBody(this.metadata, [message]);
|
|
||||||
|
|
||||||
if (params.stream) {
|
|
||||||
const command = new InvokeModelWithResponseStreamCommand(input);
|
|
||||||
const response = await this.client.send(command);
|
|
||||||
if (response.body)
|
|
||||||
return streamConverter(response.body, (response) => {
|
|
||||||
return {
|
|
||||||
text: this.provider.getTextFromStreamResponse(response),
|
|
||||||
raw: response,
|
|
||||||
};
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
const command = new InvokeModelCommand(input);
|
|
||||||
const response = await this.client.send(command);
|
|
||||||
return {
|
|
||||||
text: this.provider.getTextFromResponse(response),
|
|
||||||
raw: response,
|
|
||||||
};
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
export const TOKENS = {
|
|
||||||
TOOL_CALL: "<|python_tag|>",
|
|
||||||
};
|
|
||||||
@@ -1,153 +0,0 @@
|
|||||||
import type {
|
|
||||||
InvokeModelCommandInput,
|
|
||||||
InvokeModelWithResponseStreamCommandInput,
|
|
||||||
ResponseStream,
|
|
||||||
} from "@aws-sdk/client-bedrock-runtime";
|
|
||||||
import type {
|
|
||||||
BaseTool,
|
|
||||||
ChatMessage,
|
|
||||||
LLMMetadata,
|
|
||||||
ToolCall,
|
|
||||||
ToolCallLLMMessageOptions,
|
|
||||||
} from "@llamaindex/core/llms";
|
|
||||||
import { toUtf8 } from "../utils";
|
|
||||||
import type { MetaNoneStreamingResponse, MetaStreamEvent } from "./types";
|
|
||||||
|
|
||||||
import { randomUUID } from "@llamaindex/env";
|
|
||||||
import { Provider, type BedrockChatStreamResponse } from "../provider";
|
|
||||||
import { TOKENS } from "./constants";
|
|
||||||
import {
|
|
||||||
mapChatMessagesToMetaLlama2Messages,
|
|
||||||
mapChatMessagesToMetaLlama3Messages,
|
|
||||||
} from "./utils";
|
|
||||||
|
|
||||||
export class MetaProvider extends Provider<MetaStreamEvent> {
|
|
||||||
getResultFromResponse(
|
|
||||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
||||||
response: Record<string, any>,
|
|
||||||
): MetaNoneStreamingResponse {
|
|
||||||
return JSON.parse(toUtf8(response.body));
|
|
||||||
}
|
|
||||||
|
|
||||||
getToolsFromResponse<ToolContent>(
|
|
||||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
||||||
response: Record<string, any>,
|
|
||||||
): ToolContent[] {
|
|
||||||
const result = this.getResultFromResponse(response);
|
|
||||||
if (!result.generation.trim().startsWith(TOKENS.TOOL_CALL)) return [];
|
|
||||||
const tool = JSON.parse(
|
|
||||||
result.generation.trim().split(TOKENS.TOOL_CALL)[1]!,
|
|
||||||
);
|
|
||||||
return [
|
|
||||||
{
|
|
||||||
id: randomUUID(),
|
|
||||||
name: tool.name,
|
|
||||||
input: tool.parameters,
|
|
||||||
} as ToolContent,
|
|
||||||
];
|
|
||||||
}
|
|
||||||
|
|
||||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
||||||
getTextFromResponse(response: Record<string, any>): string {
|
|
||||||
const result = this.getResultFromResponse(response);
|
|
||||||
if (result.generation.trim().startsWith(TOKENS.TOOL_CALL)) return "";
|
|
||||||
return result.generation;
|
|
||||||
}
|
|
||||||
|
|
||||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
||||||
getTextFromStreamResponse(response: Record<string, any>): string {
|
|
||||||
const event = this.getStreamingEventResponse(response);
|
|
||||||
if (event?.generation) {
|
|
||||||
return event.generation;
|
|
||||||
}
|
|
||||||
return "";
|
|
||||||
}
|
|
||||||
|
|
||||||
async *reduceStream(
|
|
||||||
stream: AsyncIterable<ResponseStream>,
|
|
||||||
): BedrockChatStreamResponse {
|
|
||||||
const collecting: string[] = [];
|
|
||||||
let toolId: string | undefined = undefined;
|
|
||||||
for await (const response of stream) {
|
|
||||||
const event = this.getStreamingEventResponse(response);
|
|
||||||
const delta = this.getTextFromStreamResponse(response);
|
|
||||||
|
|
||||||
// odd quirk of llama3.1, start token is \n\n
|
|
||||||
if (
|
|
||||||
!toolId &&
|
|
||||||
!event?.generation.trim() &&
|
|
||||||
event?.generation_token_count === 1 &&
|
|
||||||
event?.prompt_token_count !== null
|
|
||||||
)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
if (delta.startsWith(TOKENS.TOOL_CALL)) {
|
|
||||||
toolId = randomUUID();
|
|
||||||
const parts = delta.split(TOKENS.TOOL_CALL).filter((part) => part);
|
|
||||||
collecting.push(...parts);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
let options: undefined | ToolCallLLMMessageOptions = undefined;
|
|
||||||
if (toolId && event?.stop_reason === "stop") {
|
|
||||||
if (delta) collecting.push(delta);
|
|
||||||
const tool = JSON.parse(collecting.join(""));
|
|
||||||
options = {
|
|
||||||
toolCall: [
|
|
||||||
{
|
|
||||||
id: toolId,
|
|
||||||
name: tool.name,
|
|
||||||
input: tool.parameters,
|
|
||||||
} as ToolCall,
|
|
||||||
],
|
|
||||||
};
|
|
||||||
} else if (toolId && !event?.stop_reason) {
|
|
||||||
collecting.push(delta);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!delta && !options) continue;
|
|
||||||
|
|
||||||
yield {
|
|
||||||
delta: options ? "" : delta,
|
|
||||||
options,
|
|
||||||
raw: response,
|
|
||||||
};
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
getRequestBody<T extends ChatMessage>(
|
|
||||||
metadata: LLMMetadata,
|
|
||||||
messages: T[],
|
|
||||||
tools: BaseTool[] = [],
|
|
||||||
): InvokeModelCommandInput | InvokeModelWithResponseStreamCommandInput {
|
|
||||||
let prompt: string = "";
|
|
||||||
let images: string[] = [];
|
|
||||||
if (metadata.model.startsWith("meta.llama3")) {
|
|
||||||
const mapped = mapChatMessagesToMetaLlama3Messages({
|
|
||||||
messages,
|
|
||||||
tools,
|
|
||||||
model: metadata.model,
|
|
||||||
});
|
|
||||||
prompt = mapped.prompt;
|
|
||||||
images = mapped.images;
|
|
||||||
} else if (metadata.model.startsWith("meta.llama2")) {
|
|
||||||
prompt = mapChatMessagesToMetaLlama2Messages(messages);
|
|
||||||
} else {
|
|
||||||
throw new Error(`Meta model ${metadata.model} is not supported`);
|
|
||||||
}
|
|
||||||
|
|
||||||
return {
|
|
||||||
modelId: metadata.model,
|
|
||||||
contentType: "application/json",
|
|
||||||
accept: "application/json",
|
|
||||||
body: JSON.stringify({
|
|
||||||
prompt,
|
|
||||||
images: images.length ? images : undefined,
|
|
||||||
max_gen_len: metadata.maxTokens,
|
|
||||||
temperature: metadata.temperature,
|
|
||||||
top_p: metadata.topP,
|
|
||||||
}),
|
|
||||||
};
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,21 +0,0 @@
|
|||||||
import type { InvocationMetrics } from "../types";
|
|
||||||
|
|
||||||
export type MetaTextContent = string;
|
|
||||||
|
|
||||||
export type MetaMessage = {
|
|
||||||
role: "user" | "assistant" | "system" | "ipython";
|
|
||||||
content: MetaTextContent;
|
|
||||||
};
|
|
||||||
|
|
||||||
type MetaResponse = {
|
|
||||||
generation: string;
|
|
||||||
prompt_token_count: number;
|
|
||||||
generation_token_count: number;
|
|
||||||
stop_reason: "stop" | "length";
|
|
||||||
};
|
|
||||||
|
|
||||||
export type MetaStreamEvent = MetaResponse & {
|
|
||||||
"amazon-bedrock-invocationMetrics": InvocationMetrics;
|
|
||||||
};
|
|
||||||
|
|
||||||
export type MetaNoneStreamingResponse = MetaResponse;
|
|
||||||
@@ -1,273 +0,0 @@
|
|||||||
import type {
|
|
||||||
BaseTool,
|
|
||||||
ChatMessage,
|
|
||||||
LLMMetadata,
|
|
||||||
MessageContentTextDetail,
|
|
||||||
ToolCallLLMMessageOptions,
|
|
||||||
} from "@llamaindex/core/llms";
|
|
||||||
import { extractDataUrlComponents } from "../utils";
|
|
||||||
import { TOKENS } from "./constants";
|
|
||||||
import type { MetaMessage } from "./types";
|
|
||||||
|
|
||||||
const getToolCallInstructionString = (tool: BaseTool): string => {
|
|
||||||
return `Use the function '${tool.metadata.name}' to '${tool.metadata.description}'`;
|
|
||||||
};
|
|
||||||
|
|
||||||
const getToolCallParametersString = (tool: BaseTool): string => {
|
|
||||||
return JSON.stringify({
|
|
||||||
name: tool.metadata.name,
|
|
||||||
description: tool.metadata.description,
|
|
||||||
parameters: tool.metadata.parameters
|
|
||||||
? Object.entries(tool.metadata.parameters.properties).map(
|
|
||||||
([name, definition]) => ({ [name]: definition }),
|
|
||||||
)
|
|
||||||
: {},
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
// ported from https://github.com/meta-llama/llama-agentic-system/blob/main/llama_agentic_system/system_prompt.py
|
|
||||||
// NOTE: using json instead of the above xml style tool calling works more reliability
|
|
||||||
export const getToolsPrompt_3_1 = (tools?: BaseTool[]) => {
|
|
||||||
if (!tools?.length) return "";
|
|
||||||
|
|
||||||
const customToolParams = tools.map((tool) => {
|
|
||||||
return [
|
|
||||||
getToolCallInstructionString(tool),
|
|
||||||
getToolCallParametersString(tool),
|
|
||||||
].join("\n\n");
|
|
||||||
});
|
|
||||||
|
|
||||||
return `
|
|
||||||
Environment: node
|
|
||||||
|
|
||||||
# Tool Instructions
|
|
||||||
- Never use ipython, always use javascript in node
|
|
||||||
|
|
||||||
Cutting Knowledge Date: December 2023
|
|
||||||
Today Date: ${new Date().toLocaleString("en-US", { year: "numeric", month: "long" })}
|
|
||||||
|
|
||||||
You have access to the following functions:
|
|
||||||
|
|
||||||
${customToolParams}
|
|
||||||
|
|
||||||
Think very carefully before calling functions.
|
|
||||||
|
|
||||||
If a you choose to call a function ONLY reply in the following json format:
|
|
||||||
{
|
|
||||||
"name": function_name,
|
|
||||||
"parameters": parameters,
|
|
||||||
}
|
|
||||||
where
|
|
||||||
|
|
||||||
{
|
|
||||||
"name": function_name,
|
|
||||||
"parameters": parameters, => a JSON dict with the function argument name as key and function argument value as value.
|
|
||||||
}
|
|
||||||
|
|
||||||
Here is an example,
|
|
||||||
|
|
||||||
{
|
|
||||||
"name": "example_function_name",
|
|
||||||
"parameters": {"example_name": "example_value"}
|
|
||||||
}
|
|
||||||
|
|
||||||
Reminder:
|
|
||||||
- Function calls MUST follow the specified format
|
|
||||||
- Required parameters MUST be specified
|
|
||||||
- Only call one function at a time
|
|
||||||
- Put the entire function call reply on one line
|
|
||||||
- Always add your sources when using search results to answer the user query
|
|
||||||
`;
|
|
||||||
};
|
|
||||||
|
|
||||||
export const getToolsPrompt_3_2 = (tools?: BaseTool[]) => {
|
|
||||||
if (!tools?.length) return "";
|
|
||||||
return `
|
|
||||||
You are an expert in composing functions. You are given a question and a set of possible functions.
|
|
||||||
Based on the question, you will need to make one or more function/tool calls to achieve the purpose.
|
|
||||||
If none of the function can be used, point it out. If the given question lacks the parameters required by the function,
|
|
||||||
also point it out. You should only return the function call in tools call sections.
|
|
||||||
|
|
||||||
If you decide to invoke any of the function(s), you MUST put it in the format of and start with the token: ${TOKENS.TOOL_CALL}:
|
|
||||||
{
|
|
||||||
"name": function_name,
|
|
||||||
"parameters": parameters,
|
|
||||||
}
|
|
||||||
where
|
|
||||||
|
|
||||||
{
|
|
||||||
"name": function_name,
|
|
||||||
"parameters": parameters, => a JSON dict with the function argument name as key and function argument value as value.
|
|
||||||
}
|
|
||||||
|
|
||||||
Here is an example,
|
|
||||||
|
|
||||||
{
|
|
||||||
"name": "example_function_name",
|
|
||||||
"parameters": {"example_name": "example_value"}
|
|
||||||
}
|
|
||||||
|
|
||||||
Reminder:
|
|
||||||
- Function calls MUST follow the specified format
|
|
||||||
- Required parameters MUST be specified
|
|
||||||
- Only call one function at a time
|
|
||||||
- You SHOULD NOT include any other text in the response
|
|
||||||
- Put the entire function call reply on one line
|
|
||||||
|
|
||||||
Here is a list of functions in JSON format that you can invoke.
|
|
||||||
|
|
||||||
${JSON.stringify(tools)}
|
|
||||||
`;
|
|
||||||
};
|
|
||||||
|
|
||||||
export const mapChatRoleToMetaRole = (
|
|
||||||
role: ChatMessage["role"],
|
|
||||||
): MetaMessage["role"] => {
|
|
||||||
if (role === "assistant") return "assistant";
|
|
||||||
if (role === "user") return "user";
|
|
||||||
return "system";
|
|
||||||
};
|
|
||||||
|
|
||||||
export const mapChatMessagesToMetaMessages = <
|
|
||||||
T extends ChatMessage<ToolCallLLMMessageOptions>,
|
|
||||||
>(
|
|
||||||
messages: T[],
|
|
||||||
): MetaMessage[] => {
|
|
||||||
return messages.flatMap((msg) => {
|
|
||||||
if (msg.options && "toolCall" in msg.options) {
|
|
||||||
return msg.options.toolCall.map((call) => ({
|
|
||||||
role: "assistant",
|
|
||||||
content: JSON.stringify({
|
|
||||||
id: call.id,
|
|
||||||
name: call.name,
|
|
||||||
parameters: call.input,
|
|
||||||
}),
|
|
||||||
}));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (msg.options && "toolResult" in msg.options) {
|
|
||||||
return {
|
|
||||||
role: "ipython",
|
|
||||||
content: JSON.stringify(msg.options.toolResult),
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
let content: string = "";
|
|
||||||
if (typeof msg.content === "string") {
|
|
||||||
content = msg.content;
|
|
||||||
} else if (msg.content.length) {
|
|
||||||
content = (msg.content[0] as MessageContentTextDetail).text;
|
|
||||||
}
|
|
||||||
return {
|
|
||||||
role: mapChatRoleToMetaRole(msg.role),
|
|
||||||
content,
|
|
||||||
};
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Documentation at https://llama.meta.com/docs/model-cards-and-prompt-formats/meta-llama-3
|
|
||||||
*/
|
|
||||||
export const mapChatMessagesToMetaLlama3Messages = <T extends ChatMessage>({
|
|
||||||
messages,
|
|
||||||
model,
|
|
||||||
tools,
|
|
||||||
}: {
|
|
||||||
messages: T[];
|
|
||||||
model: LLMMetadata["model"];
|
|
||||||
tools?: BaseTool[];
|
|
||||||
}): { prompt: string; images: string[] } => {
|
|
||||||
const images: string[] = [];
|
|
||||||
const textMessages: T[] = [];
|
|
||||||
|
|
||||||
messages.forEach((message) => {
|
|
||||||
if (Array.isArray(message.content)) {
|
|
||||||
message.content.forEach((content) => {
|
|
||||||
if (content.type === "image_url") {
|
|
||||||
const { base64 } = extractDataUrlComponents(content.image_url.url);
|
|
||||||
images.push(base64);
|
|
||||||
} else {
|
|
||||||
textMessages.push(message);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
} else {
|
|
||||||
textMessages.push(message);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
const parts: string[] = [];
|
|
||||||
|
|
||||||
let toolsPrompt = "";
|
|
||||||
if (model.startsWith("meta.llama3-2")) {
|
|
||||||
toolsPrompt = getToolsPrompt_3_2(tools);
|
|
||||||
} else if (model.startsWith("meta.llama3-1")) {
|
|
||||||
toolsPrompt = getToolsPrompt_3_1(tools);
|
|
||||||
}
|
|
||||||
if (toolsPrompt) {
|
|
||||||
parts.push(
|
|
||||||
"<|begin_of_text|>",
|
|
||||||
"<|start_header_id|>system<|end_header_id|>",
|
|
||||||
toolsPrompt,
|
|
||||||
"<|eot_id|>",
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
const mapped = mapChatMessagesToMetaMessages(messages).map((message) => {
|
|
||||||
return [
|
|
||||||
"<|start_header_id|>",
|
|
||||||
message.role,
|
|
||||||
"<|end_header_id|>",
|
|
||||||
message.content,
|
|
||||||
"<|eot_id|>",
|
|
||||||
].join("\n");
|
|
||||||
});
|
|
||||||
|
|
||||||
parts.push(
|
|
||||||
"<|begin_of_text|>",
|
|
||||||
...mapped,
|
|
||||||
"<|start_header_id|>assistant<|end_header_id|>",
|
|
||||||
);
|
|
||||||
|
|
||||||
const prompt = parts.join("\n");
|
|
||||||
return { prompt, images };
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Documentation at https://llama.meta.com/docs/model-cards-and-prompt-formats/meta-llama-2
|
|
||||||
*/
|
|
||||||
export const mapChatMessagesToMetaLlama2Messages = <T extends ChatMessage>(
|
|
||||||
messages: T[],
|
|
||||||
): string => {
|
|
||||||
const mapped = mapChatMessagesToMetaMessages(messages);
|
|
||||||
let output = "<s>";
|
|
||||||
let insideInst = false;
|
|
||||||
let needsStartAgain = false;
|
|
||||||
for (const message of mapped) {
|
|
||||||
if (needsStartAgain) {
|
|
||||||
output += "<s>";
|
|
||||||
needsStartAgain = false;
|
|
||||||
}
|
|
||||||
const text = message.content;
|
|
||||||
if (message.role === "system") {
|
|
||||||
if (!insideInst) {
|
|
||||||
output += "[INST] ";
|
|
||||||
insideInst = true;
|
|
||||||
}
|
|
||||||
output += `<<SYS>>\n${text}\n<</SYS>>\n`;
|
|
||||||
} else if (message.role === "user") {
|
|
||||||
output += text;
|
|
||||||
if (insideInst) {
|
|
||||||
output += " [/INST]";
|
|
||||||
insideInst = false;
|
|
||||||
}
|
|
||||||
} else if (message.role === "assistant") {
|
|
||||||
if (insideInst) {
|
|
||||||
output += " [/INST]";
|
|
||||||
insideInst = false;
|
|
||||||
}
|
|
||||||
output += ` ${text} </s>\n`;
|
|
||||||
needsStartAgain = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return output;
|
|
||||||
};
|
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user