mirror of
https://github.com/run-llama/LlamaIndexTS.git
synced 2026-07-01 22:14:03 -04:00
Compare commits
49 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| f369d3de4f | |||
| c1850ee370 | |||
| 086a65141d | |||
| d99d598491 | |||
| a0e6f57d9b | |||
| e0f6cc3be1 | |||
| 8386510d86 | |||
| b504303c66 | |||
| cf9a9356e0 | |||
| 335020e242 | |||
| 3d1808b5d2 | |||
| a19cbc7fe0 | |||
| b8f0cbc4e0 | |||
| 7e8230b056 | |||
| 8be45899a7 | |||
| c4800bcf82 | |||
| fd38a253b7 | |||
| 510191cb5d | |||
| 7934ade092 | |||
| a6c1eab762 | |||
| 515f2c1e3d | |||
| dc85649ead | |||
| d2b2722a30 | |||
| a2bbd62399 | |||
| 969365ca0a | |||
| 819af453d6 | |||
| 9db36f7384 | |||
| efa221116f | |||
| 83c3897539 | |||
| e1cbce1f80 | |||
| 02b22da384 | |||
| 0aa61db547 | |||
| 90d265cf47 | |||
| fc2d5ea1cd | |||
| ef4f63d9f4 | |||
| d17450fdfb | |||
| 805d2b0d55 | |||
| 6d22fa2a50 | |||
| 16f0068175 | |||
| 1054c3382a | |||
| e60328b086 | |||
| 3371dfb89f | |||
| 2065a16a07 | |||
| 5dae534f8d | |||
| 3d503cb810 | |||
| daf8522bec | |||
| 223f3136b4 | |||
| c6bad7d951 | |||
| 630b425545 |
@@ -23,7 +23,7 @@ jobs:
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
node-version: [20.x, 22.x, 23.x]
|
||||
node-version: [18.x, 20.x, 22.x, 23.x]
|
||||
name: E2E on Node.js ${{ matrix.node-version }}
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
@@ -53,7 +53,7 @@ jobs:
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
node-version: [20.x, 22.x, 23.x]
|
||||
node-version: [18.x, 20.x, 22.x, 23.x]
|
||||
name: Test on Node.js ${{ matrix.node-version }}
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
|
||||
@@ -1,5 +1,113 @@
|
||||
# docs
|
||||
|
||||
## 0.0.133
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- c1850ee: feat: Amazon Nova support via Bedrock
|
||||
- Updated dependencies [b504303]
|
||||
- Updated dependencies [a0e6f57]
|
||||
- llamaindex@0.8.27
|
||||
- @llamaindex/examples@0.0.20
|
||||
|
||||
## 0.0.132
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [3d1808b]
|
||||
- llamaindex@0.8.26
|
||||
- @llamaindex/examples@0.0.19
|
||||
|
||||
## 0.0.131
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.8.25
|
||||
- @llamaindex/examples@0.0.18
|
||||
|
||||
## 0.0.130
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [fd38a25]
|
||||
- @llamaindex/examples@0.0.17
|
||||
|
||||
## 0.0.129
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [515f2c1]
|
||||
- llamaindex@0.8.24
|
||||
|
||||
## 0.0.128
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.8.23
|
||||
|
||||
## 0.0.127
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [819af45]
|
||||
- llamaindex@0.8.22
|
||||
|
||||
## 0.0.126
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [83c3897]
|
||||
- Updated dependencies [efa2211]
|
||||
- llamaindex@0.8.21
|
||||
|
||||
## 0.0.125
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [02b22da]
|
||||
- llamaindex@0.8.20
|
||||
|
||||
## 0.0.124
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [90d265c]
|
||||
- llamaindex@0.8.19
|
||||
|
||||
## 0.0.123
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [d17450f]
|
||||
- llamaindex@0.8.18
|
||||
|
||||
## 0.0.122
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.8.17
|
||||
|
||||
## 0.0.121
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.8.16
|
||||
|
||||
## 0.0.120
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [3d503cb]
|
||||
- Updated dependencies [5dae534]
|
||||
- llamaindex@0.8.15
|
||||
|
||||
## 0.0.119
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [630b425]
|
||||
- llamaindex@0.8.14
|
||||
|
||||
## 0.0.118
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -37,6 +37,9 @@ 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_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
|
||||
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";
|
||||
```
|
||||
|
||||
You can also use Bedrock's Inference endpoints by using the model names:
|
||||
@@ -53,6 +56,9 @@ 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_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
|
||||
EU_ANTHROPIC_CLAUDE_3_HAIKU = "eu.anthropic.claude-3-haiku-20240307-v1:0";
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "docs",
|
||||
"version": "0.0.118",
|
||||
"version": "0.0.133",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"docusaurus": "docusaurus",
|
||||
@@ -15,23 +15,23 @@
|
||||
"typecheck": "tsc"
|
||||
},
|
||||
"dependencies": {
|
||||
"@docusaurus/core": "3.6.0",
|
||||
"@docusaurus/remark-plugin-npm2yarn": "3.6.0",
|
||||
"@docusaurus/core": "3.6.1",
|
||||
"@docusaurus/remark-plugin-npm2yarn": "3.6.1",
|
||||
"@llamaindex/examples": "workspace:*",
|
||||
"@mdx-js/react": "^3.1.0",
|
||||
"clsx": "^2.1.1",
|
||||
"llamaindex": "workspace:*",
|
||||
"postcss": "^8.4.47",
|
||||
"postcss": "^8.4.49",
|
||||
"prism-react-renderer": "^2.4.0",
|
||||
"raw-loader": "^4.0.2",
|
||||
"react": "^18.3.1",
|
||||
"react-dom": "18.3.1"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@docusaurus/module-type-aliases": "3.6.0",
|
||||
"@docusaurus/preset-classic": "3.6.0",
|
||||
"@docusaurus/theme-classic": "3.6.0",
|
||||
"@docusaurus/types": "3.6.0",
|
||||
"@docusaurus/module-type-aliases": "3.6.1",
|
||||
"@docusaurus/preset-classic": "3.6.1",
|
||||
"@docusaurus/theme-classic": "3.6.1",
|
||||
"@docusaurus/types": "3.6.1",
|
||||
"@tsconfig/docusaurus": "2.0.3",
|
||||
"@types/node": "^22.9.0",
|
||||
"docusaurus-plugin-typedoc": "1.0.5",
|
||||
|
||||
@@ -1,5 +1,157 @@
|
||||
# @llamaindex/doc
|
||||
|
||||
## 0.0.31
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [b504303]
|
||||
- Updated dependencies [e0f6cc3]
|
||||
- Updated dependencies [a0e6f57]
|
||||
- llamaindex@0.8.27
|
||||
- @llamaindex/core@0.4.18
|
||||
- @llamaindex/cloud@2.0.18
|
||||
- @llamaindex/node-parser@0.0.19
|
||||
- @llamaindex/openai@0.1.43
|
||||
- @llamaindex/readers@1.0.20
|
||||
- @llamaindex/workflow@0.0.8
|
||||
|
||||
## 0.0.30
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [3d1808b]
|
||||
- @llamaindex/core@0.4.17
|
||||
- llamaindex@0.8.26
|
||||
- @llamaindex/openai@0.1.42
|
||||
- @llamaindex/cloud@2.0.17
|
||||
- @llamaindex/node-parser@0.0.18
|
||||
- @llamaindex/readers@1.0.19
|
||||
|
||||
## 0.0.29
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [7e8230b]
|
||||
- Updated dependencies [8be4589]
|
||||
- @llamaindex/readers@1.0.18
|
||||
- @llamaindex/cloud@2.0.16
|
||||
- @llamaindex/core@0.4.16
|
||||
- @llamaindex/node-parser@0.0.17
|
||||
- @llamaindex/openai@0.1.41
|
||||
- @llamaindex/workflow@0.0.7
|
||||
- llamaindex@0.8.25
|
||||
|
||||
## 0.0.28
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- fd38a25: Add vercel tool adapter to use query engine tool
|
||||
|
||||
## 0.0.27
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [515f2c1]
|
||||
- llamaindex@0.8.24
|
||||
|
||||
## 0.0.26
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- @llamaindex/cloud@2.0.15
|
||||
- @llamaindex/core@0.4.15
|
||||
- llamaindex@0.8.23
|
||||
- @llamaindex/node-parser@0.0.16
|
||||
- @llamaindex/openai@0.1.40
|
||||
- @llamaindex/readers@1.0.17
|
||||
|
||||
## 0.0.25
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [819af45]
|
||||
- llamaindex@0.8.22
|
||||
- @llamaindex/cloud@2.0.14
|
||||
- @llamaindex/core@0.4.14
|
||||
- @llamaindex/node-parser@0.0.15
|
||||
- @llamaindex/openai@0.1.39
|
||||
- @llamaindex/readers@1.0.16
|
||||
|
||||
## 0.0.24
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [83c3897]
|
||||
- Updated dependencies [efa2211]
|
||||
- llamaindex@0.8.21
|
||||
|
||||
## 0.0.23
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [02b22da]
|
||||
- llamaindex@0.8.20
|
||||
|
||||
## 0.0.22
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [90d265c]
|
||||
- @llamaindex/cloud@2.0.13
|
||||
- @llamaindex/core@0.4.13
|
||||
- llamaindex@0.8.19
|
||||
- @llamaindex/node-parser@0.0.14
|
||||
- @llamaindex/readers@1.0.15
|
||||
- @llamaindex/openai@0.1.38
|
||||
|
||||
## 0.0.21
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [d17450f]
|
||||
- Updated dependencies [ef4f63d]
|
||||
- llamaindex@0.8.18
|
||||
- @llamaindex/core@0.4.12
|
||||
- @llamaindex/cloud@2.0.12
|
||||
- @llamaindex/node-parser@0.0.13
|
||||
- @llamaindex/openai@0.1.37
|
||||
- @llamaindex/readers@1.0.14
|
||||
|
||||
## 0.0.20
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [6d22fa2]
|
||||
- @llamaindex/core@0.4.11
|
||||
- @llamaindex/cloud@2.0.11
|
||||
- llamaindex@0.8.17
|
||||
- @llamaindex/node-parser@0.0.12
|
||||
- @llamaindex/openai@0.1.36
|
||||
- @llamaindex/readers@1.0.13
|
||||
|
||||
## 0.0.19
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [e60328b]
|
||||
- @llamaindex/readers@1.0.12
|
||||
- llamaindex@0.8.16
|
||||
|
||||
## 0.0.18
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [3d503cb]
|
||||
- Updated dependencies [5dae534]
|
||||
- llamaindex@0.8.15
|
||||
|
||||
## 0.0.17
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [630b425]
|
||||
- llamaindex@0.8.14
|
||||
|
||||
## 0.0.16
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -6,6 +6,7 @@ const withMDX = createMDX();
|
||||
const config = {
|
||||
reactStrictMode: true,
|
||||
transpilePackages: ["monaco-editor"],
|
||||
serverExternalPackages: ["@huggingface/transformers"],
|
||||
webpack: (config, { isServer }) => {
|
||||
if (Array.isArray(config.target) && config.target.includes("web")) {
|
||||
config.target = ["web", "es2020"];
|
||||
@@ -26,6 +27,7 @@ const config = {
|
||||
}),
|
||||
);
|
||||
}
|
||||
config.resolve.alias["replicate"] = false;
|
||||
return config;
|
||||
},
|
||||
};
|
||||
|
||||
+24
-24
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@llamaindex/doc",
|
||||
"version": "0.0.16",
|
||||
"version": "0.0.31",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"build": "pnpm run build:docs && next build",
|
||||
@@ -12,7 +12,7 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"@icons-pack/react-simple-icons": "^10.1.0",
|
||||
"@llamaindex/chat-ui": "0.0.5",
|
||||
"@llamaindex/chat-ui": "0.0.9",
|
||||
"@llamaindex/cloud": "workspace:*",
|
||||
"@llamaindex/core": "workspace:*",
|
||||
"@llamaindex/node-parser": "workspace:*",
|
||||
@@ -20,31 +20,31 @@
|
||||
"@llamaindex/readers": "workspace:*",
|
||||
"@llamaindex/workflow": "workspace:*",
|
||||
"@mdx-js/mdx": "^3.1.0",
|
||||
"@number-flow/react": "^0.3.0",
|
||||
"@number-flow/react": "^0.3.4",
|
||||
"@radix-ui/react-dialog": "^1.1.2",
|
||||
"@radix-ui/react-icons": "^1.3.1",
|
||||
"@radix-ui/react-icons": "^1.3.2",
|
||||
"@radix-ui/react-label": "^2.1.0",
|
||||
"@radix-ui/react-slider": "^1.2.1",
|
||||
"@radix-ui/react-slot": "^1.1.0",
|
||||
"@radix-ui/react-tooltip": "^1.1.3",
|
||||
"@radix-ui/react-tooltip": "^1.1.4",
|
||||
"@vercel/functions": "^1.5.0",
|
||||
"ai": "^3.4.31",
|
||||
"ai": "^3.4.33",
|
||||
"class-variance-authority": "^0.7.0",
|
||||
"clsx": "2.1.1",
|
||||
"foxact": "^0.2.40",
|
||||
"framer-motion": "^11.11.11",
|
||||
"fumadocs-core": "14.2.0",
|
||||
"fumadocs-docgen": "^1.3.1",
|
||||
"foxact": "^0.2.41",
|
||||
"framer-motion": "^11.11.17",
|
||||
"fumadocs-core": "14.4.2",
|
||||
"fumadocs-docgen": "^1.3.2",
|
||||
"fumadocs-mdx": "^11.1.1",
|
||||
"fumadocs-openapi": "^5.5.6",
|
||||
"fumadocs-openapi": "^5.7.0",
|
||||
"fumadocs-twoslash": "^2.0.1",
|
||||
"fumadocs-typescript": "^3.0.1",
|
||||
"fumadocs-ui": "14.2.0",
|
||||
"fumadocs-typescript": "^3.0.2",
|
||||
"fumadocs-ui": "14.4.2",
|
||||
"hast-util-to-jsx-runtime": "^2.3.2",
|
||||
"llamaindex": "workspace:*",
|
||||
"lucide-react": "^0.454.0",
|
||||
"next": "15.0.2",
|
||||
"next-themes": "^0.3.0",
|
||||
"lucide-react": "^0.460.0",
|
||||
"next": "15.0.3",
|
||||
"next-themes": "^0.4.3",
|
||||
"react": "^18.3.1",
|
||||
"react-dom": "^18.3.1",
|
||||
"react-icons": "^5.3.0",
|
||||
@@ -54,19 +54,19 @@
|
||||
"rehype-katex": "^7.0.1",
|
||||
"remark-math": "^6.0.0",
|
||||
"rimraf": "^6.0.1",
|
||||
"shiki": "^1.22.2",
|
||||
"shiki": "^1.23.1",
|
||||
"shiki-magic-move": "^0.5.0",
|
||||
"swr": "^2.2.5",
|
||||
"tailwind-merge": "^2.5.2",
|
||||
"tailwindcss-animate": "^1.0.7",
|
||||
"tree-sitter": "^0.22.0",
|
||||
"tree-sitter-typescript": "^0.23.0",
|
||||
"use-stick-to-bottom": "^1.0.41",
|
||||
"web-tree-sitter": "^0.24.3",
|
||||
"tree-sitter": "^0.22.1",
|
||||
"tree-sitter-typescript": "^0.23.2",
|
||||
"use-stick-to-bottom": "^1.0.42",
|
||||
"web-tree-sitter": "^0.24.4",
|
||||
"zod": "^3.23.8"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@next/env": "^15.0.2",
|
||||
"@next/env": "^15.0.3",
|
||||
"@types/mdx": "^2.0.13",
|
||||
"@types/node": "22.9.0",
|
||||
"@types/react": "^18.3.12",
|
||||
@@ -75,12 +75,12 @@
|
||||
"fast-glob": "^3.3.2",
|
||||
"gray-matter": "^4.0.3",
|
||||
"monaco-editor-webpack-plugin": "^7.1.0",
|
||||
"postcss": "^8.4.47",
|
||||
"postcss": "^8.4.49",
|
||||
"remark": "^15.0.1",
|
||||
"remark-gfm": "^4.0.0",
|
||||
"remark-mdx": "^3.1.0",
|
||||
"remark-stringify": "^11.0.0",
|
||||
"tailwindcss": "^3.4.14",
|
||||
"tailwindcss": "^3.4.15",
|
||||
"tsx": "^4.19.2",
|
||||
"typescript": "^5.6.3"
|
||||
}
|
||||
|
||||
@@ -1,7 +1,10 @@
|
||||
import { MockLLM } from "@llamaindex/core/utils";
|
||||
import { LlamaIndexAdapter, type Message } from "ai";
|
||||
import { SimpleChatEngine, type ChatMessage } from "llamaindex";
|
||||
import { Settings, SimpleChatEngine, type ChatMessage } from "llamaindex";
|
||||
import { NextResponse, type NextRequest } from "next/server";
|
||||
|
||||
Settings.llm = new MockLLM(); // config your LLM here
|
||||
|
||||
export async function POST(request: NextRequest) {
|
||||
try {
|
||||
const { messages } = (await request.json()) as { messages: Message[] };
|
||||
|
||||
@@ -1,8 +0,0 @@
|
||||
"use client";
|
||||
import { ChatSection } from "@llamaindex/chat-ui";
|
||||
import { useChat } from "ai/react";
|
||||
|
||||
export const ChatDemo = () => {
|
||||
const handler = useChat();
|
||||
return <ChatSection handler={handler} />;
|
||||
};
|
||||
@@ -0,0 +1,16 @@
|
||||
"use client";
|
||||
import { ChatInput, ChatMessages, ChatSection } from "@llamaindex/chat-ui";
|
||||
import { useChat } from "ai/react";
|
||||
|
||||
export const ChatDemo = () => {
|
||||
const handler = useChat();
|
||||
return (
|
||||
<ChatSection handler={handler}>
|
||||
<ChatMessages>
|
||||
<ChatMessages.List className="h-auto max-h-[400px]" />
|
||||
<ChatMessages.Actions />
|
||||
</ChatMessages>
|
||||
<ChatInput />
|
||||
</ChatSection>
|
||||
);
|
||||
};
|
||||
@@ -0,0 +1,57 @@
|
||||
import { Markdown } from "@llamaindex/chat-ui/widgets";
|
||||
import { MockLLM } from "@llamaindex/core/utils";
|
||||
import { generateId, Message } from "ai";
|
||||
import { createAI, createStreamableUI, getMutableAIState } from "ai/rsc";
|
||||
import { type ChatMessage, Settings, SimpleChatEngine } from "llamaindex";
|
||||
import { ReactNode } from "react";
|
||||
|
||||
type ServerState = Message[];
|
||||
type FrontendState = Array<Message & { display: ReactNode }>;
|
||||
type Actions = {
|
||||
chat: (message: Message) => Promise<Message & { display: ReactNode }>;
|
||||
};
|
||||
|
||||
Settings.llm = new MockLLM(); // config your LLM here
|
||||
|
||||
export const AI = createAI<ServerState, FrontendState, Actions>({
|
||||
initialAIState: [],
|
||||
initialUIState: [],
|
||||
actions: {
|
||||
chat: async (message: Message) => {
|
||||
"use server";
|
||||
|
||||
const aiState = getMutableAIState<typeof AI>();
|
||||
aiState.update((prev) => [...prev, message]);
|
||||
|
||||
const uiStream = createStreamableUI();
|
||||
const chatEngine = new SimpleChatEngine();
|
||||
const assistantMessage: Message = {
|
||||
id: generateId(),
|
||||
role: "assistant",
|
||||
content: "",
|
||||
};
|
||||
|
||||
// run the async function without blocking
|
||||
(async () => {
|
||||
const chatResponse = await chatEngine.chat({
|
||||
stream: true,
|
||||
message: message.content,
|
||||
chatHistory: aiState.get() as ChatMessage[],
|
||||
});
|
||||
|
||||
for await (const chunk of chatResponse) {
|
||||
assistantMessage.content += chunk.delta;
|
||||
uiStream.update(<Markdown content={assistantMessage.content} />);
|
||||
}
|
||||
|
||||
aiState.done([...aiState.get(), assistantMessage]);
|
||||
uiStream.done();
|
||||
})();
|
||||
|
||||
return {
|
||||
...assistantMessage,
|
||||
display: uiStream.value,
|
||||
};
|
||||
},
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,33 @@
|
||||
"use client";
|
||||
|
||||
import {
|
||||
ChatInput,
|
||||
ChatMessage,
|
||||
ChatMessages,
|
||||
ChatSection as ChatSectionUI,
|
||||
} from "@llamaindex/chat-ui";
|
||||
import { useChatRSC } from "./use-chat-rsc";
|
||||
|
||||
export const ChatSectionRSC = () => {
|
||||
const handler = useChatRSC();
|
||||
return (
|
||||
<ChatSectionUI handler={handler}>
|
||||
<ChatMessages>
|
||||
<ChatMessages.List className="h-auto max-h-[400px]">
|
||||
{handler.messages.map((message, index) => (
|
||||
<ChatMessage
|
||||
key={index}
|
||||
message={message}
|
||||
isLast={index === handler.messages.length - 1}
|
||||
>
|
||||
<ChatMessage.Avatar />
|
||||
<ChatMessage.Content>{message.display}</ChatMessage.Content>
|
||||
</ChatMessage>
|
||||
))}
|
||||
<ChatMessages.Loading />
|
||||
</ChatMessages.List>
|
||||
</ChatMessages>
|
||||
<ChatInput />
|
||||
</ChatSectionUI>
|
||||
);
|
||||
};
|
||||
@@ -0,0 +1,8 @@
|
||||
import { AI } from "./ai-action";
|
||||
import { ChatSectionRSC } from "./chat-section";
|
||||
|
||||
export const ChatDemoRSC = () => (
|
||||
<AI>
|
||||
<ChatSectionRSC />
|
||||
</AI>
|
||||
);
|
||||
@@ -0,0 +1,41 @@
|
||||
"use client";
|
||||
|
||||
import { useActions } from "ai/rsc";
|
||||
|
||||
import { generateId, Message } from "ai";
|
||||
import { useUIState } from "ai/rsc";
|
||||
import { useState } from "react";
|
||||
import { AI } from "./ai-action";
|
||||
|
||||
export function useChatRSC() {
|
||||
const [input, setInput] = useState<string>("");
|
||||
const [isLoading, setIsLoading] = useState<boolean>(false);
|
||||
const [messages, setMessages] = useUIState<typeof AI>();
|
||||
const { chat } = useActions<typeof AI>();
|
||||
|
||||
const append = async (message: Omit<Message, "id">) => {
|
||||
const newMsg: Message = { ...message, id: generateId() };
|
||||
|
||||
setIsLoading(true);
|
||||
try {
|
||||
setMessages((prev) => [...prev, { ...newMsg, display: message.content }]);
|
||||
const assistantMsg = await chat(newMsg);
|
||||
setMessages((prev) => [...prev, assistantMsg]);
|
||||
} catch (error) {
|
||||
console.error(error);
|
||||
}
|
||||
setIsLoading(false);
|
||||
setInput("");
|
||||
|
||||
return message.content;
|
||||
};
|
||||
|
||||
return {
|
||||
input,
|
||||
setInput,
|
||||
isLoading,
|
||||
messages,
|
||||
setMessages,
|
||||
append,
|
||||
};
|
||||
}
|
||||
@@ -85,6 +85,33 @@ const Footer = () => {
|
||||
<Text as="span">SharePoint</Text>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a
|
||||
href="https://llamaindex.ai/llamacloud-aws-s3-data-loading-for-generative-ai"
|
||||
data-tracking-variant="link"
|
||||
data-tracking-section="footer"
|
||||
>
|
||||
<Text as="span">AWS S3</Text>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a
|
||||
href="https://llamaindex.ai/llamacloud-azure-blob-storage-data-loading-for-generative-ai"
|
||||
data-tracking-variant="link"
|
||||
data-tracking-section="footer"
|
||||
>
|
||||
<Text as="span">Azure Blob Storage</Text>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a
|
||||
href="https://llamaindex.ai/llamacloud-google-drive-data-loading-for-generative-ai"
|
||||
data-tracking-variant="link"
|
||||
data-tracking-section="footer"
|
||||
>
|
||||
<Text as="span">Google Drive</Text>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div>
|
||||
@@ -171,11 +198,6 @@ const Footer = () => {
|
||||
<Text as="span">SEC Insights</Text>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="https://chat.llamaindex.ai/">
|
||||
<Text as="span">Chat LlamaIndex</Text>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="https://github.com/run-llama/llamabot">
|
||||
<Text as="span">LlamaBot</Text>
|
||||
|
||||
+5
-4
@@ -1,8 +1,8 @@
|
||||
---
|
||||
title: Chat-UI
|
||||
description: Use chat-ui to add a chat interface to your LlamaIndexTS application.
|
||||
title: Using API Route
|
||||
description: Chat interface for your LlamaIndexTS application using API Route
|
||||
---
|
||||
import { ChatDemo } from '../../../../components/demo/chat';
|
||||
import { ChatDemo } from '../../../../../components/demo/chat/api/demo';
|
||||
import "@llamaindex/chat-ui/styles/code.css";
|
||||
import "@llamaindex/chat-ui/styles/katex.css";
|
||||
|
||||
@@ -26,7 +26,7 @@ This is the simplest way to add a chat interface to your application. Copy the f
|
||||
|
||||
```json doc-gen:file
|
||||
{
|
||||
"file": "./src/components/demo/chat.tsx",
|
||||
"file": "./src/components/demo/chat/api/demo.tsx",
|
||||
"codeblock": true
|
||||
}
|
||||
```
|
||||
@@ -37,6 +37,7 @@ Combining both, you're getting a fully functional chat interface:
|
||||
|
||||
<ChatDemo />
|
||||
|
||||
|
||||
## Next Steps
|
||||
|
||||
The steps above are the bare minimum to get a chat interface working. From here, you can go two ways:
|
||||
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"title": "Chat-UI",
|
||||
"description": "Use chat-ui to add a chat interface to your LlamaIndexTS application.",
|
||||
"defaultOpen": false,
|
||||
"pages": ["chat", "rsc"]
|
||||
}
|
||||
@@ -0,0 +1,68 @@
|
||||
---
|
||||
title: Using Next.js RSC
|
||||
description: Chat interface for your LlamaIndexTS application using Next.js RSC
|
||||
---
|
||||
import { ChatDemoRSC } from '../../../../../components/demo/chat/rsc/demo';
|
||||
import "@llamaindex/chat-ui/styles/code.css";
|
||||
import "@llamaindex/chat-ui/styles/katex.css";
|
||||
|
||||
Using [chat-ui](https://github.com/run-llama/chat-ui), it's easy to add a chat interface to your LlamaIndexTS application using [Next.js RSC](https://nextjs.org/docs/app/building-your-application/rendering/server-components) and [Vercel AI RSC](https://sdk.vercel.ai/docs/ai-sdk-rsc/overview).
|
||||
|
||||
With RSC, the chat messages are not returned as JSON from the server (like when using an [API route](./chat)), instead the chat message components are rendered on the server side.
|
||||
This is for example useful for rendering a whole chat history on the server before sending it to the client. [Check here](https://sdk.vercel.ai/docs/getting-started/navigating-the-library#when-to-use-ai-sdk-rsc), for a discussion of when to use use RSC.
|
||||
|
||||
For implementing a chat interface with RSC, you need to create an AI action and then connect the chat interface to use it.
|
||||
|
||||
## Create an AI action
|
||||
|
||||
First, define an [AI context provider](https://sdk.vercel.ai/examples/rsc/state-management/ai-ui-states) with a chat server action:
|
||||
|
||||
```json doc-gen:file
|
||||
{
|
||||
"file": "./src/components/demo/chat/rsc/ai-action.tsx",
|
||||
"codeblock": true
|
||||
}
|
||||
```
|
||||
|
||||
The chat server action is using LlamaIndexTS to generate a response based on the chat history and the user input.
|
||||
|
||||
## Create the chat UI
|
||||
|
||||
The entrypoint of our application initializes the AI provider for the application and adds a `ChatSection` component:
|
||||
|
||||
```json doc-gen:file
|
||||
{
|
||||
"file": "./src/components/demo/chat/rsc/demo.tsx",
|
||||
"codeblock": true
|
||||
}
|
||||
```
|
||||
|
||||
The `ChatSection` component is created by using chat components from @llamaindex/chat-ui:
|
||||
|
||||
```json doc-gen:file
|
||||
{
|
||||
"file": "./src/components/demo/chat/rsc/chat-section.tsx",
|
||||
"codeblock": true
|
||||
}
|
||||
```
|
||||
|
||||
It is using a `useChatRSC` hook to conntect the chat interface to the `chat` AI action that we defined earlier:
|
||||
|
||||
```json doc-gen:file
|
||||
{
|
||||
"file": "./src/components/demo/chat/rsc/use-chat-rsc.tsx",
|
||||
"codeblock": true
|
||||
}
|
||||
```
|
||||
|
||||
## Try RSC Chat ⬇️
|
||||
|
||||
<ChatDemoRSC />
|
||||
|
||||
## Next Steps
|
||||
|
||||
The steps above are the bare minimum to get a chat interface working with RSC. From here, you can go two ways:
|
||||
|
||||
1. Use our [full-stack RSC example](https://github.com/run-llama/nextjs-rsc) based on [create-llama](https://github.com/run-llama/create-llama) to get started quickly with a fully working chat interface or
|
||||
2. Learn more about [AI RSC](https://sdk.vercel.ai/examples/rsc), [chat-ui](https://github.com/run-llama/chat-ui) and [LlamaIndexTS](https://github.com/run-llama/llamaindex-ts) to customize the chat interface and AI actions to your needs.
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"title": "Integration",
|
||||
"description": "See our integrations",
|
||||
"pages": ["open-llm-metry", "lang-trace"]
|
||||
"pages": ["open-llm-metry", "lang-trace", "vercel"]
|
||||
}
|
||||
|
||||
@@ -0,0 +1,101 @@
|
||||
---
|
||||
title: Vercel
|
||||
description: Integrate LlamaIndex with Vercel's AI SDK
|
||||
---
|
||||
|
||||
LlamaIndex provides integration with Vercel's AI SDK, allowing you to create powerful search and retrieval applications. You can:
|
||||
- Use any of Vercel AI's [model providers](https://sdk.vercel.ai/docs/foundations/providers-and-models) as LLMs in LlamaIndex
|
||||
- Use indexes (e.g. VectorStoreIndex, LlamaCloudIndex) from LlamaIndexTS in your Vercel AI applications
|
||||
|
||||
## Setup
|
||||
|
||||
First, install the required dependencies:
|
||||
|
||||
```bash
|
||||
npm install @llamaindex/vercel ai
|
||||
```
|
||||
|
||||
## Using Vercel AI's Model Providers
|
||||
|
||||
Using the `VercelLLM` adapter, it's easy to use any of Vercel AI's [model providers](https://sdk.vercel.ai/docs/foundations/providers-and-models) as LLMs in LlamaIndex. Here's an example of how to use OpenAI's GPT-4o model:
|
||||
|
||||
```typescript
|
||||
const llm = new VercelLLM({ model: openai("gpt-4o") });
|
||||
const result = await llm.complete({
|
||||
prompt: "What is the capital of France?",
|
||||
stream: false, // Set to true if you want streaming responses
|
||||
});
|
||||
console.log(result.text);
|
||||
```
|
||||
|
||||
## Use Indexes
|
||||
|
||||
### Using VectorStoreIndex
|
||||
|
||||
Here's how to create a simple vector store index and query it using Vercel's AI SDK:
|
||||
|
||||
```typescript
|
||||
import { openai } from "@ai-sdk/openai";
|
||||
import { llamaindex } from "@llamaindex/vercel";
|
||||
import { streamText } from "ai";
|
||||
import { Document, VectorStoreIndex } from "llamaindex";
|
||||
|
||||
// Create an index from your documents
|
||||
const document = new Document({ text: yourText, id_: "unique-id" });
|
||||
const index = await VectorStoreIndex.fromDocuments([document]);
|
||||
|
||||
// Create a query tool
|
||||
const queryTool = llamaindex({
|
||||
model: openai("gpt-4"),
|
||||
index,
|
||||
description: "Search through the documents", // optional
|
||||
});
|
||||
|
||||
// Use the tool with Vercel's AI SDK
|
||||
streamText({
|
||||
model: openai("gpt-4"),
|
||||
prompt: "Your question here",
|
||||
tools: { queryTool },
|
||||
onFinish({ response }) {
|
||||
console.log("Response:", response.messages); // log the response
|
||||
},
|
||||
}).toDataStream();
|
||||
```
|
||||
|
||||
> Note: the Vercel AI model referenced in the `llamaindex` function is used by the response synthesizer to generate a response for the tool call.
|
||||
|
||||
### Using LlamaCloud
|
||||
|
||||
For production deployments, you can use LlamaCloud to store and manage your documents:
|
||||
|
||||
```typescript
|
||||
import { LlamaCloudIndex } from "llamaindex";
|
||||
|
||||
// Create a LlamaCloud index
|
||||
const index = await LlamaCloudIndex.fromDocuments({
|
||||
documents: [document],
|
||||
name: "your-index-name",
|
||||
projectName: "your-project",
|
||||
apiKey: process.env.LLAMA_CLOUD_API_KEY,
|
||||
});
|
||||
|
||||
// Use it the same way as VectorStoreIndex
|
||||
const queryTool = llamaindex({
|
||||
model: openai("gpt-4"),
|
||||
index,
|
||||
description: "Search through the documents",
|
||||
});
|
||||
|
||||
// Use the tool with Vercel's AI SDK
|
||||
streamText({
|
||||
model: openai("gpt-4"),
|
||||
prompt: "Your question here",
|
||||
tools: { queryTool },
|
||||
}).toDataStream();
|
||||
```
|
||||
|
||||
## Next Steps
|
||||
|
||||
1. Explore [LlamaCloud](https://cloud.llamaindex.ai/) for managed document storage and retrieval
|
||||
2. Join our [Discord community](https://discord.gg/dGcwcsnxhU) for support and discussions
|
||||
|
||||
@@ -37,6 +37,33 @@ Then, you need create `.dev.vars` and add LLM api keys for the local development
|
||||
|
||||
<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:
|
||||
@@ -46,3 +73,7 @@ In Cloudflare Worker and similar serverless JS environment, you need to be aware
|
||||
- Some of LlamaIndex.TS modules are not available in Cloudflare Worker, for example `SimpleDirectoryReader` (requires `node:fs`), Some multimodal API that relies on [`onnxruntime-node`](https://www.npmjs.com/package/onnxruntime-node)(we might port to HTTP based module in the future).
|
||||
- `@llamaindex/core` 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.
|
||||
|
||||
## Known issues
|
||||
|
||||
- `llamaindex` not work perfectly in Cloudflare Worker, bundle size will be larger than 1MB, which is the limit of Cloudflare Worker. You will need import submodule instead of the whole `llamaindex` module.
|
||||
|
||||
@@ -84,7 +84,7 @@ Imaging you put output file into `/dist/openai.js` but you are importing `llamai
|
||||
}
|
||||
```
|
||||
|
||||
In old module resolution, TypeScript will not be able to find the module because it is not follow the file structure, even you run `node index.js` successfully. (on Node.js >=16)
|
||||
In old module resolution, TypeScript will not be able to find the module because it is not following the file structure, even you run `node index.js` successfully. (on Node.js >=16)
|
||||
|
||||
See more about [moduleResolution](https://www.typescriptlang.org/docs/handbook/modules/theory.html#module-resolution) or
|
||||
[TypeScript 5.0 blog](https://devblogs.microsoft.com/typescript/announcing-typescript-5-0/#--moduleresolution-bundler7).
|
||||
|
||||
@@ -1 +1,4 @@
|
||||
POSTGRES_USER=runner
|
||||
PINECONE_API_KEY=
|
||||
PINECONE_INDEX_NAME=
|
||||
PINECONE_NAMESPACE=
|
||||
|
||||
@@ -0,0 +1,172 @@
|
||||
# Logs
|
||||
|
||||
logs
|
||||
_.log
|
||||
npm-debug.log_
|
||||
yarn-debug.log*
|
||||
yarn-error.log*
|
||||
lerna-debug.log*
|
||||
.pnpm-debug.log*
|
||||
|
||||
# Diagnostic reports (https://nodejs.org/api/report.html)
|
||||
|
||||
report.[0-9]_.[0-9]_.[0-9]_.[0-9]_.json
|
||||
|
||||
# Runtime data
|
||||
|
||||
pids
|
||||
_.pid
|
||||
_.seed
|
||||
\*.pid.lock
|
||||
|
||||
# Directory for instrumented libs generated by jscoverage/JSCover
|
||||
|
||||
lib-cov
|
||||
|
||||
# Coverage directory used by tools like istanbul
|
||||
|
||||
coverage
|
||||
\*.lcov
|
||||
|
||||
# nyc test coverage
|
||||
|
||||
.nyc_output
|
||||
|
||||
# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)
|
||||
|
||||
.grunt
|
||||
|
||||
# Bower dependency directory (https://bower.io/)
|
||||
|
||||
bower_components
|
||||
|
||||
# node-waf configuration
|
||||
|
||||
.lock-wscript
|
||||
|
||||
# Compiled binary addons (https://nodejs.org/api/addons.html)
|
||||
|
||||
build/Release
|
||||
|
||||
# Dependency directories
|
||||
|
||||
node_modules/
|
||||
jspm_packages/
|
||||
|
||||
# Snowpack dependency directory (https://snowpack.dev/)
|
||||
|
||||
web_modules/
|
||||
|
||||
# TypeScript cache
|
||||
|
||||
\*.tsbuildinfo
|
||||
|
||||
# Optional npm cache directory
|
||||
|
||||
.npm
|
||||
|
||||
# Optional eslint cache
|
||||
|
||||
.eslintcache
|
||||
|
||||
# Optional stylelint cache
|
||||
|
||||
.stylelintcache
|
||||
|
||||
# Microbundle cache
|
||||
|
||||
.rpt2_cache/
|
||||
.rts2_cache_cjs/
|
||||
.rts2_cache_es/
|
||||
.rts2_cache_umd/
|
||||
|
||||
# Optional REPL history
|
||||
|
||||
.node_repl_history
|
||||
|
||||
# Output of 'npm pack'
|
||||
|
||||
\*.tgz
|
||||
|
||||
# Yarn Integrity file
|
||||
|
||||
.yarn-integrity
|
||||
|
||||
# dotenv environment variable files
|
||||
|
||||
.env
|
||||
.env.development.local
|
||||
.env.test.local
|
||||
.env.production.local
|
||||
.env.local
|
||||
|
||||
# parcel-bundler cache (https://parceljs.org/)
|
||||
|
||||
.cache
|
||||
.parcel-cache
|
||||
|
||||
# Next.js build output
|
||||
|
||||
.next
|
||||
out
|
||||
|
||||
# Nuxt.js build / generate output
|
||||
|
||||
.nuxt
|
||||
dist
|
||||
|
||||
# Gatsby files
|
||||
|
||||
.cache/
|
||||
|
||||
# Comment in the public line in if your project uses Gatsby and not Next.js
|
||||
|
||||
# https://nextjs.org/blog/next-9-1#public-directory-support
|
||||
|
||||
# public
|
||||
|
||||
# vuepress build output
|
||||
|
||||
.vuepress/dist
|
||||
|
||||
# vuepress v2.x temp and cache directory
|
||||
|
||||
.temp
|
||||
.cache
|
||||
|
||||
# Docusaurus cache and generated files
|
||||
|
||||
.docusaurus
|
||||
|
||||
# Serverless directories
|
||||
|
||||
.serverless/
|
||||
|
||||
# FuseBox cache
|
||||
|
||||
.fusebox/
|
||||
|
||||
# DynamoDB Local files
|
||||
|
||||
.dynamodb/
|
||||
|
||||
# TernJS port file
|
||||
|
||||
.tern-port
|
||||
|
||||
# Stores VSCode versions used for testing VSCode extensions
|
||||
|
||||
.vscode-test
|
||||
|
||||
# yarn v2
|
||||
|
||||
.yarn/cache
|
||||
.yarn/unplugged
|
||||
.yarn/build-state.yml
|
||||
.yarn/install-state.gz
|
||||
.pnp.\*
|
||||
|
||||
# wrangler project
|
||||
|
||||
.dev.vars
|
||||
.wrangler/
|
||||
@@ -0,0 +1,20 @@
|
||||
{
|
||||
"name": "@llamaindex/cloudflare-hono",
|
||||
"version": "0.0.0",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"deploy": "wrangler deploy",
|
||||
"build": "wrangler deploy --dry-run --outdir dist",
|
||||
"dev": "wrangler dev",
|
||||
"start": "wrangler dev",
|
||||
"cf-typegen": "wrangler types"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@cloudflare/workers-types": "^4.20241112.0",
|
||||
"typescript": "^5.5.2",
|
||||
"wrangler": "^3.89.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"hono": "^4.6.11"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,91 @@
|
||||
import { Hono } from "hono";
|
||||
|
||||
type Bindings = {
|
||||
OPENAI_API_KEY: string;
|
||||
PINECONE_API_KEY: string;
|
||||
};
|
||||
|
||||
const app = new Hono<{
|
||||
Bindings: Bindings;
|
||||
}>();
|
||||
|
||||
app.post("/llm", async (c) => {
|
||||
//#region init envs
|
||||
const { setEnvs } = await import("@llamaindex/env");
|
||||
setEnvs(c.env);
|
||||
//#endregion
|
||||
|
||||
const { message } = await c.req.json();
|
||||
|
||||
const { extractText } = await import("@llamaindex/core/utils");
|
||||
|
||||
const {
|
||||
QueryEngineTool,
|
||||
serviceContextFromDefaults,
|
||||
VectorStoreIndex,
|
||||
OpenAIAgent,
|
||||
Settings,
|
||||
OpenAI,
|
||||
OpenAIEmbedding,
|
||||
} = await import("llamaindex");
|
||||
|
||||
const { PineconeVectorStore } = await import(
|
||||
"llamaindex/vector-store/PineconeVectorStore"
|
||||
);
|
||||
|
||||
const llm = new OpenAI({
|
||||
model: "gpt-4o-mini",
|
||||
apiKey: c.env.OPENAI_API_KEY,
|
||||
});
|
||||
|
||||
Settings.embedModel = new OpenAIEmbedding({
|
||||
model: "text-embedding-3-small",
|
||||
apiKey: c.env.OPENAI_API_KEY,
|
||||
});
|
||||
|
||||
const serviceContext = serviceContextFromDefaults({
|
||||
llm,
|
||||
chunkSize: 8191,
|
||||
chunkOverlap: 0,
|
||||
});
|
||||
|
||||
const store = new PineconeVectorStore({
|
||||
namespace: "8xolsn4ulEQGdhnhP76yCzfLHdOZ",
|
||||
});
|
||||
|
||||
const index = await VectorStoreIndex.fromVectorStore(store, serviceContext);
|
||||
|
||||
const retriever = index.asRetriever({
|
||||
similarityTopK: 3,
|
||||
});
|
||||
|
||||
// Create a query engine
|
||||
const queryEngine = index.asQueryEngine({
|
||||
retriever,
|
||||
});
|
||||
|
||||
const tools = [
|
||||
new QueryEngineTool({
|
||||
queryEngine: queryEngine,
|
||||
metadata: {
|
||||
name: "business_info_tool",
|
||||
description:
|
||||
"This tool can answer questions based " +
|
||||
"on business information. Return not found if you" +
|
||||
" can't find the answer in the documents.",
|
||||
},
|
||||
}),
|
||||
];
|
||||
|
||||
const agent = new OpenAIAgent({ tools });
|
||||
|
||||
const response = await agent.chat({
|
||||
message: message,
|
||||
});
|
||||
|
||||
return new Response(extractText(response.message.content));
|
||||
});
|
||||
|
||||
export default {
|
||||
fetch: app.fetch,
|
||||
};
|
||||
@@ -0,0 +1,39 @@
|
||||
{
|
||||
"extends": "../../tsconfig.json",
|
||||
"compilerOptions": {
|
||||
/* Visit https://aka.ms/tsconfig.json to read more about this file */
|
||||
|
||||
/* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */
|
||||
"target": "es2021",
|
||||
/* Specify a set of bundled library declaration files that describe the target runtime environment. */
|
||||
"lib": ["es2021", "DOM.AsyncIterable"],
|
||||
/* Specify what JSX code is generated. */
|
||||
"jsx": "react-jsx",
|
||||
/* Specify what module code is generated. */
|
||||
"module": "es2022",
|
||||
/* Specify how TypeScript looks up a file from a given module specifier. */
|
||||
"moduleResolution": "Bundler",
|
||||
/* Specify type package names to be included without being referenced in a source file. */
|
||||
"types": ["@cloudflare/workers-types/2023-07-01"],
|
||||
/* Enable importing .json files */
|
||||
"resolveJsonModule": true,
|
||||
/* Allow JavaScript files to be a part of your program. Use the `checkJS` option to get errors from these files. */
|
||||
"allowJs": true,
|
||||
/* Enable error reporting in type-checked JavaScript files. */
|
||||
"checkJs": false,
|
||||
/* Disable emitting files from a compilation. */
|
||||
"noEmit": true,
|
||||
/* Ensure that each file can be safely transpiled without relying on other imports. */
|
||||
"isolatedModules": true,
|
||||
/* Allow 'import x from y' when a module doesn't have a default export. */
|
||||
"allowSyntheticDefaultImports": true,
|
||||
/* Ensure that casing is correct in imports. */
|
||||
"forceConsistentCasingInFileNames": true,
|
||||
/* Enable all strict type-checking options. */
|
||||
"strict": true,
|
||||
/* Skip type checking all .d.ts files. */
|
||||
"skipLibCheck": true
|
||||
},
|
||||
"exclude": ["test"],
|
||||
"include": ["vitest.config.mts", "worker-configuration.d.ts", "src/**/*.ts"]
|
||||
}
|
||||
@@ -0,0 +1,4 @@
|
||||
// Generated by Wrangler by running `wrangler types`
|
||||
|
||||
// eslint-disable-next-line @typescript-eslint/no-empty-object-type
|
||||
interface Env {}
|
||||
@@ -0,0 +1,7 @@
|
||||
name = "llamaindex-cloudflare-hono-example"
|
||||
main = "src/index.ts"
|
||||
compatibility_date = "2024-11-12"
|
||||
compatibility_flags = ["nodejs_als"]
|
||||
|
||||
[observability]
|
||||
enabled = true
|
||||
@@ -1,5 +1,102 @@
|
||||
# @llamaindex/cloudflare-worker-agent-test
|
||||
|
||||
## 0.0.123
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [b504303]
|
||||
- Updated dependencies [a0e6f57]
|
||||
- llamaindex@0.8.27
|
||||
|
||||
## 0.0.122
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [3d1808b]
|
||||
- llamaindex@0.8.26
|
||||
|
||||
## 0.0.121
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.8.25
|
||||
|
||||
## 0.0.120
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [515f2c1]
|
||||
- llamaindex@0.8.24
|
||||
|
||||
## 0.0.119
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.8.23
|
||||
|
||||
## 0.0.118
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [819af45]
|
||||
- llamaindex@0.8.22
|
||||
|
||||
## 0.0.117
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [83c3897]
|
||||
- Updated dependencies [efa2211]
|
||||
- llamaindex@0.8.21
|
||||
|
||||
## 0.0.116
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [02b22da]
|
||||
- llamaindex@0.8.20
|
||||
|
||||
## 0.0.115
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [90d265c]
|
||||
- llamaindex@0.8.19
|
||||
|
||||
## 0.0.114
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [d17450f]
|
||||
- llamaindex@0.8.18
|
||||
|
||||
## 0.0.113
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.8.17
|
||||
|
||||
## 0.0.112
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.8.16
|
||||
|
||||
## 0.0.111
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [3d503cb]
|
||||
- Updated dependencies [5dae534]
|
||||
- llamaindex@0.8.15
|
||||
|
||||
## 0.0.110
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [630b425]
|
||||
- llamaindex@0.8.14
|
||||
|
||||
## 0.0.109
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@llamaindex/cloudflare-worker-agent-test",
|
||||
"version": "0.0.109",
|
||||
"version": "0.0.123",
|
||||
"type": "module",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
@@ -12,13 +12,13 @@
|
||||
"cf-typegen": "wrangler types"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@cloudflare/vitest-pool-workers": "^0.5.8",
|
||||
"@cloudflare/workers-types": "^4.20240924.0",
|
||||
"@vitest/runner": "2.1.4",
|
||||
"@vitest/snapshot": "2.1.4",
|
||||
"@cloudflare/vitest-pool-workers": "^0.5.28",
|
||||
"@cloudflare/workers-types": "^4.20241112.0",
|
||||
"@vitest/runner": "2.1.5",
|
||||
"@vitest/snapshot": "2.1.5",
|
||||
"typescript": "^5.6.3",
|
||||
"vitest": "2.1.4",
|
||||
"wrangler": "^3.78.8"
|
||||
"vitest": "2.1.5",
|
||||
"wrangler": "^3.87.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"llamaindex": "workspace:*"
|
||||
|
||||
@@ -1,5 +1,55 @@
|
||||
# @llamaindex/llama-parse-browser-test
|
||||
|
||||
## 0.0.38
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- @llamaindex/cloud@2.0.18
|
||||
|
||||
## 0.0.37
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- @llamaindex/cloud@2.0.17
|
||||
|
||||
## 0.0.36
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [8be4589]
|
||||
- @llamaindex/cloud@2.0.16
|
||||
|
||||
## 0.0.35
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- @llamaindex/cloud@2.0.15
|
||||
|
||||
## 0.0.34
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- @llamaindex/cloud@2.0.14
|
||||
|
||||
## 0.0.33
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [90d265c]
|
||||
- @llamaindex/cloud@2.0.13
|
||||
|
||||
## 0.0.32
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- @llamaindex/cloud@2.0.12
|
||||
|
||||
## 0.0.31
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- @llamaindex/cloud@2.0.11
|
||||
|
||||
## 0.0.30
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "@llamaindex/llama-parse-browser-test",
|
||||
"private": true,
|
||||
"version": "0.0.30",
|
||||
"version": "0.0.38",
|
||||
"type": "module",
|
||||
"scripts": {
|
||||
"dev": "vite",
|
||||
@@ -10,7 +10,7 @@
|
||||
},
|
||||
"devDependencies": {
|
||||
"typescript": "^5.6.3",
|
||||
"vite": "^5.4.1",
|
||||
"vite": "^5.4.11",
|
||||
"vite-plugin-wasm": "^3.3.0"
|
||||
},
|
||||
"dependencies": {
|
||||
|
||||
@@ -1,5 +1,102 @@
|
||||
# @llamaindex/next-agent-test
|
||||
|
||||
## 0.1.123
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [b504303]
|
||||
- Updated dependencies [a0e6f57]
|
||||
- llamaindex@0.8.27
|
||||
|
||||
## 0.1.122
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [3d1808b]
|
||||
- llamaindex@0.8.26
|
||||
|
||||
## 0.1.121
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.8.25
|
||||
|
||||
## 0.1.120
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [515f2c1]
|
||||
- llamaindex@0.8.24
|
||||
|
||||
## 0.1.119
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.8.23
|
||||
|
||||
## 0.1.118
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [819af45]
|
||||
- llamaindex@0.8.22
|
||||
|
||||
## 0.1.117
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [83c3897]
|
||||
- Updated dependencies [efa2211]
|
||||
- llamaindex@0.8.21
|
||||
|
||||
## 0.1.116
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [02b22da]
|
||||
- llamaindex@0.8.20
|
||||
|
||||
## 0.1.115
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [90d265c]
|
||||
- llamaindex@0.8.19
|
||||
|
||||
## 0.1.114
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [d17450f]
|
||||
- llamaindex@0.8.18
|
||||
|
||||
## 0.1.113
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.8.17
|
||||
|
||||
## 0.1.112
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.8.16
|
||||
|
||||
## 0.1.111
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [3d503cb]
|
||||
- Updated dependencies [5dae534]
|
||||
- llamaindex@0.8.15
|
||||
|
||||
## 0.1.110
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [630b425]
|
||||
- llamaindex@0.8.14
|
||||
|
||||
## 0.1.109
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@llamaindex/next-agent-test",
|
||||
"version": "0.1.109",
|
||||
"version": "0.1.123",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"dev": "next dev",
|
||||
@@ -8,9 +8,9 @@
|
||||
"start": "next start"
|
||||
},
|
||||
"dependencies": {
|
||||
"ai": "^3.3.21",
|
||||
"ai": "^4.0.0",
|
||||
"llamaindex": "workspace:*",
|
||||
"next": "15.0.2",
|
||||
"next": "15.0.3",
|
||||
"react": "18.3.1",
|
||||
"react-dom": "18.3.1"
|
||||
},
|
||||
@@ -18,10 +18,10 @@
|
||||
"@types/node": "^22.9.0",
|
||||
"@types/react": "^18.3.12",
|
||||
"@types/react-dom": "^18.3.1",
|
||||
"eslint": "9.14.0",
|
||||
"eslint-config-next": "15.0.2",
|
||||
"postcss": "^8.4.41",
|
||||
"tailwindcss": "^3.4.10",
|
||||
"eslint": "9.15.0",
|
||||
"eslint-config-next": "15.0.3",
|
||||
"postcss": "^8.4.49",
|
||||
"tailwindcss": "^3.4.15",
|
||||
"typescript": "^5.6.3"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,102 @@
|
||||
# test-edge-runtime
|
||||
|
||||
## 0.1.122
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [b504303]
|
||||
- Updated dependencies [a0e6f57]
|
||||
- llamaindex@0.8.27
|
||||
|
||||
## 0.1.121
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [3d1808b]
|
||||
- llamaindex@0.8.26
|
||||
|
||||
## 0.1.120
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.8.25
|
||||
|
||||
## 0.1.119
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [515f2c1]
|
||||
- llamaindex@0.8.24
|
||||
|
||||
## 0.1.118
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.8.23
|
||||
|
||||
## 0.1.117
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [819af45]
|
||||
- llamaindex@0.8.22
|
||||
|
||||
## 0.1.116
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [83c3897]
|
||||
- Updated dependencies [efa2211]
|
||||
- llamaindex@0.8.21
|
||||
|
||||
## 0.1.115
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [02b22da]
|
||||
- llamaindex@0.8.20
|
||||
|
||||
## 0.1.114
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [90d265c]
|
||||
- llamaindex@0.8.19
|
||||
|
||||
## 0.1.113
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [d17450f]
|
||||
- llamaindex@0.8.18
|
||||
|
||||
## 0.1.112
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.8.17
|
||||
|
||||
## 0.1.111
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.8.16
|
||||
|
||||
## 0.1.110
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [3d503cb]
|
||||
- Updated dependencies [5dae534]
|
||||
- llamaindex@0.8.15
|
||||
|
||||
## 0.1.109
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [630b425]
|
||||
- llamaindex@0.8.14
|
||||
|
||||
## 0.1.108
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@llamaindex/nextjs-edge-runtime-test",
|
||||
"version": "0.1.108",
|
||||
"version": "0.1.122",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"dev": "next dev",
|
||||
@@ -9,7 +9,7 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"llamaindex": "workspace:*",
|
||||
"next": "15.0.2",
|
||||
"next": "15.0.3",
|
||||
"react": "^18.3.1",
|
||||
"react-dom": "^18.3.1"
|
||||
},
|
||||
|
||||
@@ -1,5 +1,102 @@
|
||||
# @llamaindex/next-node-runtime
|
||||
|
||||
## 0.0.104
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [b504303]
|
||||
- Updated dependencies [a0e6f57]
|
||||
- llamaindex@0.8.27
|
||||
|
||||
## 0.0.103
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [3d1808b]
|
||||
- llamaindex@0.8.26
|
||||
|
||||
## 0.0.102
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.8.25
|
||||
|
||||
## 0.0.101
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [515f2c1]
|
||||
- llamaindex@0.8.24
|
||||
|
||||
## 0.0.100
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.8.23
|
||||
|
||||
## 0.0.99
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [819af45]
|
||||
- llamaindex@0.8.22
|
||||
|
||||
## 0.0.98
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [83c3897]
|
||||
- Updated dependencies [efa2211]
|
||||
- llamaindex@0.8.21
|
||||
|
||||
## 0.0.97
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [02b22da]
|
||||
- llamaindex@0.8.20
|
||||
|
||||
## 0.0.96
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [90d265c]
|
||||
- llamaindex@0.8.19
|
||||
|
||||
## 0.0.95
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [d17450f]
|
||||
- llamaindex@0.8.18
|
||||
|
||||
## 0.0.94
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.8.17
|
||||
|
||||
## 0.0.93
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.8.16
|
||||
|
||||
## 0.0.92
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [3d503cb]
|
||||
- Updated dependencies [5dae534]
|
||||
- llamaindex@0.8.15
|
||||
|
||||
## 0.0.91
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [630b425]
|
||||
- llamaindex@0.8.14
|
||||
|
||||
## 0.0.90
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@llamaindex/next-node-runtime-test",
|
||||
"version": "0.0.90",
|
||||
"version": "0.0.104",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"dev": "next dev",
|
||||
@@ -9,7 +9,7 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"llamaindex": "workspace:*",
|
||||
"next": "15.0.2",
|
||||
"next": "15.0.3",
|
||||
"react": "18.3.1",
|
||||
"react-dom": "18.3.1"
|
||||
},
|
||||
@@ -17,10 +17,10 @@
|
||||
"@types/node": "^22.9.0",
|
||||
"@types/react": "^18.3.12",
|
||||
"@types/react-dom": "^18.3.1",
|
||||
"eslint": "9.14.0",
|
||||
"eslint-config-next": "15.0.2",
|
||||
"postcss": "^8.4.41",
|
||||
"tailwindcss": "^3.4.10",
|
||||
"eslint": "9.15.0",
|
||||
"eslint-config-next": "15.0.3",
|
||||
"postcss": "^8.4.49",
|
||||
"tailwindcss": "^3.4.15",
|
||||
"typescript": "^5.6.3"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,102 @@
|
||||
# @llamaindex/waku-query-engine-test
|
||||
|
||||
## 0.0.123
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [b504303]
|
||||
- Updated dependencies [a0e6f57]
|
||||
- llamaindex@0.8.27
|
||||
|
||||
## 0.0.122
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [3d1808b]
|
||||
- llamaindex@0.8.26
|
||||
|
||||
## 0.0.121
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.8.25
|
||||
|
||||
## 0.0.120
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [515f2c1]
|
||||
- llamaindex@0.8.24
|
||||
|
||||
## 0.0.119
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.8.23
|
||||
|
||||
## 0.0.118
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [819af45]
|
||||
- llamaindex@0.8.22
|
||||
|
||||
## 0.0.117
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [83c3897]
|
||||
- Updated dependencies [efa2211]
|
||||
- llamaindex@0.8.21
|
||||
|
||||
## 0.0.116
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [02b22da]
|
||||
- llamaindex@0.8.20
|
||||
|
||||
## 0.0.115
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [90d265c]
|
||||
- llamaindex@0.8.19
|
||||
|
||||
## 0.0.114
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [d17450f]
|
||||
- llamaindex@0.8.18
|
||||
|
||||
## 0.0.113
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.8.17
|
||||
|
||||
## 0.0.112
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.8.16
|
||||
|
||||
## 0.0.111
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [3d503cb]
|
||||
- Updated dependencies [5dae534]
|
||||
- llamaindex@0.8.15
|
||||
|
||||
## 0.0.110
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [630b425]
|
||||
- llamaindex@0.8.14
|
||||
|
||||
## 0.0.109
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@llamaindex/waku-query-engine-test",
|
||||
"version": "0.0.109",
|
||||
"version": "0.0.123",
|
||||
"type": "module",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
@@ -10,16 +10,16 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"llamaindex": "workspace:*",
|
||||
"react": "19.0.0-rc-bf7e210c-20241017",
|
||||
"react-dom": "19.0.0-rc-bf7e210c-20241017",
|
||||
"react-server-dom-webpack": "19.0.0-rc-bf7e210c-20241017",
|
||||
"waku": "0.21.4"
|
||||
"react": "19.0.0-rc-5c56b873-20241107",
|
||||
"react-dom": "19.0.0-rc-5c56b873-20241107",
|
||||
"react-server-dom-webpack": "19.0.0-rc-5c56b873-20241107",
|
||||
"waku": "0.21.6"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/react": "18.3.12",
|
||||
"@types/react-dom": "18.3.1",
|
||||
"autoprefixer": "^10.4.20",
|
||||
"tailwindcss": "^3.4.14",
|
||||
"tailwindcss": "^3.4.15",
|
||||
"typescript": "5.6.3"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -21,6 +21,11 @@ test.beforeEach(() => {
|
||||
});
|
||||
|
||||
await test("clip embedding", async (t) => {
|
||||
const major = parseInt(process.versions.node.split(".")[0] ?? "0", 10);
|
||||
if (major < 20) {
|
||||
t.skip("Skip CLIP tests on Node.js < 20");
|
||||
return;
|
||||
}
|
||||
await t.test("should trigger load transformer event", async () => {
|
||||
const nodes = [
|
||||
new ImageNode({
|
||||
|
||||
@@ -0,0 +1,66 @@
|
||||
import { Document, MetadataMode } from "@llamaindex/core/schema";
|
||||
import { config } from "dotenv";
|
||||
import {
|
||||
OpenAIEmbedding,
|
||||
PineconeVectorStore,
|
||||
VectorStoreIndex,
|
||||
} from "llamaindex";
|
||||
import assert from "node:assert";
|
||||
import { test } from "node:test";
|
||||
|
||||
config({ path: [".env.local", ".env", ".env.ci"] });
|
||||
|
||||
await test("pinecone", async (t) => {
|
||||
if (
|
||||
!process.env.PINECONE_API_KEY ||
|
||||
!process.env.PINECONE_NAMESPACE ||
|
||||
!process.env.PINECONE_INDEX_NAME
|
||||
) {
|
||||
return t.skip(
|
||||
"PINECONE_API_KEY, PINECONE_NAMESPACE, and PINECONE_INDEX_NAME must be set to run this test",
|
||||
);
|
||||
}
|
||||
const openaiEmbedding = new OpenAIEmbedding({
|
||||
model: "text-embedding-3-large",
|
||||
});
|
||||
|
||||
const vectorStore = new PineconeVectorStore({
|
||||
embeddingModel: openaiEmbedding,
|
||||
});
|
||||
|
||||
t.after(async () => {
|
||||
await vectorStore.clearIndex();
|
||||
});
|
||||
|
||||
const index = await VectorStoreIndex.fromVectorStore(vectorStore);
|
||||
|
||||
const retriever = index.asRetriever({
|
||||
similarityTopK: 3,
|
||||
});
|
||||
const text = "We are open from 9am to 5pm";
|
||||
|
||||
await vectorStore.add([
|
||||
new Document({
|
||||
text,
|
||||
embedding: await openaiEmbedding.getTextEmbedding(text),
|
||||
}),
|
||||
]);
|
||||
|
||||
const results = await retriever.retrieve({
|
||||
query: "When are you open?",
|
||||
});
|
||||
results.every((result) => {
|
||||
assert.ok(result.node.embedding instanceof Array);
|
||||
result.node.embedding.every((embedding, idx) =>
|
||||
assert.ok(
|
||||
typeof embedding === "number",
|
||||
`Embedding at index ${idx} should be a number`,
|
||||
),
|
||||
);
|
||||
assert.ok(typeof result.score === "number", "Score should be a number");
|
||||
assert.ok(
|
||||
result.node.getContent(MetadataMode.NONE).length > 0,
|
||||
"Content should not be empty",
|
||||
);
|
||||
});
|
||||
});
|
||||
@@ -1,5 +1,49 @@
|
||||
# examples
|
||||
|
||||
## 0.0.20
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [b504303]
|
||||
- Updated dependencies [086a651]
|
||||
- Updated dependencies [e0f6cc3]
|
||||
- Updated dependencies [a0e6f57]
|
||||
- llamaindex@0.8.27
|
||||
- @llamaindex/vercel@0.0.5
|
||||
- @llamaindex/core@0.4.18
|
||||
- @llamaindex/readers@1.0.20
|
||||
- @llamaindex/workflow@0.0.8
|
||||
|
||||
## 0.0.19
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [3d1808b]
|
||||
- @llamaindex/core@0.4.17
|
||||
- llamaindex@0.8.26
|
||||
- @llamaindex/vercel@0.0.4
|
||||
- @llamaindex/readers@1.0.19
|
||||
|
||||
## 0.0.18
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [7e8230b]
|
||||
- Updated dependencies [8be4589]
|
||||
- @llamaindex/readers@1.0.18
|
||||
- @llamaindex/core@0.4.16
|
||||
- @llamaindex/vercel@0.0.3
|
||||
- @llamaindex/workflow@0.0.7
|
||||
- llamaindex@0.8.25
|
||||
|
||||
## 0.0.17
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- fd38a25: Add vercel tool adapter to use query engine tool
|
||||
- Updated dependencies [fd38a25]
|
||||
- @llamaindex/vercel@0.0.2
|
||||
|
||||
## 0.0.16
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -83,14 +83,6 @@ async function query() {
|
||||
});
|
||||
}
|
||||
|
||||
// configure the Azure CosmosDB NoSQL Vector Store
|
||||
const dbConfig: AzureCosmosDBNoSQLConfig = {
|
||||
client: cosmosClient,
|
||||
databaseName,
|
||||
containerName,
|
||||
flatMetadata: false,
|
||||
};
|
||||
|
||||
// use Azure CosmosDB as a vectorStore, docStore, and indexStore
|
||||
const { vectorStore, docStore, indexStore } = await initializeStores();
|
||||
|
||||
|
||||
@@ -1,16 +1,15 @@
|
||||
import fs from "node:fs/promises";
|
||||
|
||||
import {
|
||||
Document,
|
||||
IngestionPipeline,
|
||||
MetadataMode,
|
||||
OpenAIEmbedding,
|
||||
SentenceSplitter,
|
||||
VectorStoreIndex,
|
||||
} from "llamaindex";
|
||||
import fs from "node:fs/promises";
|
||||
|
||||
async function main() {
|
||||
// Load essay from abramov.txt in Node
|
||||
const path = "node_modules/llamaindex/examples/abramov.txt";
|
||||
const path = "../node_modules/llamaindex/examples/abramov.txt";
|
||||
|
||||
const essay = await fs.readFile(path, "utf-8");
|
||||
|
||||
@@ -22,14 +21,23 @@ async function main() {
|
||||
new OpenAIEmbedding(),
|
||||
],
|
||||
});
|
||||
console.time("Pipeline Run Time");
|
||||
|
||||
// run the pipeline
|
||||
const nodes = await pipeline.run({ documents: [document] });
|
||||
|
||||
// print out the result of the pipeline run
|
||||
for (const node of nodes) {
|
||||
console.log(node.getContent(MetadataMode.NONE));
|
||||
}
|
||||
console.timeEnd("Pipeline Run Time");
|
||||
|
||||
// initialize the VectorStoreIndex from nodes
|
||||
const index = await VectorStoreIndex.init({ nodes });
|
||||
|
||||
// Query the index
|
||||
const queryEngine = index.asQueryEngine();
|
||||
|
||||
const { message } = await queryEngine.query({
|
||||
query: "summarize the article in three sentence",
|
||||
});
|
||||
|
||||
console.log(message);
|
||||
}
|
||||
|
||||
main().catch(console.error);
|
||||
@@ -1,24 +1,27 @@
|
||||
{
|
||||
"name": "@llamaindex/examples",
|
||||
"private": true,
|
||||
"version": "0.0.16",
|
||||
"version": "0.0.20",
|
||||
"dependencies": {
|
||||
"@ai-sdk/openai": "^1.0.5",
|
||||
"@aws-crypto/sha256-js": "^5.2.0",
|
||||
"@azure/cosmos": "^4.1.1",
|
||||
"@azure/identity": "^4.4.1",
|
||||
"@datastax/astra-db-ts": "^1.4.1",
|
||||
"@llamaindex/core": "^0.4.10",
|
||||
"@llamaindex/readers": "^1.0.11",
|
||||
"@llamaindex/workflow": "^0.0.6",
|
||||
"@llamaindex/core": "^0.4.18",
|
||||
"@llamaindex/readers": "^1.0.20",
|
||||
"@llamaindex/workflow": "^0.0.8",
|
||||
"@llamaindex/vercel": "^0.0.5",
|
||||
"@notionhq/client": "^2.2.15",
|
||||
"@pinecone-database/pinecone": "^3.0.2",
|
||||
"@pinecone-database/pinecone": "^4.0.0",
|
||||
"@vercel/postgres": "^0.10.0",
|
||||
"@zilliz/milvus2-sdk-node": "^2.4.6",
|
||||
"ai": "^4.0.0",
|
||||
"chromadb": "^1.8.1",
|
||||
"commander": "^12.1.0",
|
||||
"dotenv": "^16.4.5",
|
||||
"js-tiktoken": "^1.0.14",
|
||||
"llamaindex": "^0.8.13",
|
||||
"llamaindex": "^0.8.27",
|
||||
"mongodb": "^6.7.0",
|
||||
"pathe": "^1.1.2",
|
||||
"postgres": "^3.4.4"
|
||||
|
||||
@@ -15,7 +15,8 @@
|
||||
"start:llamaparse-dir": "node --import tsx ./src/simple-directory-reader-with-llamaparse.ts",
|
||||
"start:llamaparse-json": "node --import tsx ./src/llamaparse-json.ts",
|
||||
"start:discord": "node --import tsx ./src/discord.ts",
|
||||
"start:json": "node --import tsx ./src/json.ts"
|
||||
"start:json": "node --import tsx ./src/json.ts",
|
||||
"start:obsidian": "node --import tsx ./src/obsidian.ts"
|
||||
},
|
||||
"dependencies": {
|
||||
"@llamaindex/readers": "*",
|
||||
|
||||
@@ -0,0 +1,12 @@
|
||||
import { ObsidianReader } from "@llamaindex/readers/obsidian";
|
||||
|
||||
const obsidianReader = new ObsidianReader(
|
||||
"/Users/jingyi/Documents/jingyi-vault",
|
||||
);
|
||||
|
||||
obsidianReader.loadData().then((documents) => {
|
||||
console.log("documents:", documents.length);
|
||||
documents.forEach((doc) => {
|
||||
console.log(`document (${doc.id_}):`, doc.getText());
|
||||
});
|
||||
});
|
||||
@@ -0,0 +1,60 @@
|
||||
# Vercel Examples
|
||||
|
||||
These examples demonstrate how to integrate LlamaIndexTS with Vercel's AI SDK. The examples show how to use LlamaIndex for search and retrieval in both local vector store and LlamaCloud environments.
|
||||
|
||||
## Setup
|
||||
|
||||
To run these examples, first install the required dependencies from the parent folder `examples`:
|
||||
|
||||
```bash
|
||||
npm i
|
||||
```
|
||||
|
||||
## Running the Examples
|
||||
|
||||
Make sure to run the examples from the parent folder called `examples`. The following examples are available:
|
||||
|
||||
### Vercel LLM Example
|
||||
|
||||
Run the Vercel LLM example with:
|
||||
|
||||
```bash
|
||||
npx tsx vercel/llm.ts
|
||||
```
|
||||
|
||||
This example demonstrates using the `VercelLLM` adapter with Vercel's OpenAI model provider
|
||||
|
||||
### Vector Store Example
|
||||
|
||||
Run the local vector store example with:
|
||||
|
||||
```bash
|
||||
npx tsx vercel/vector-store.ts
|
||||
```
|
||||
|
||||
This example demonstrates:
|
||||
|
||||
- Creating a vector store index from one document
|
||||
- Using Vercel's AI SDK with LlamaIndex for streaming responses
|
||||
|
||||
### LlamaCloud Example
|
||||
|
||||
To run the LlamaCloud example:
|
||||
|
||||
```bash
|
||||
npx tsx vercel/llamacloud.ts
|
||||
```
|
||||
|
||||
This example requires a LlamaCloud API key set in your environment and an embedding model set in the `EMBEDDING_MODEL` environment variable:
|
||||
|
||||
```bash
|
||||
export LLAMA_CLOUD_API_KEY=your_api_key_here
|
||||
export EMBEDDING_MODEL="text-embedding-3-small"
|
||||
```
|
||||
|
||||
The example demonstrates:
|
||||
|
||||
- Creating a LlamaCloud index from one document
|
||||
- Streaming responses using Vercel's AI SDK
|
||||
|
||||
For more detailed information about the Vercel integration, check out [the documentation](https://ts.llamaindex.ai/docs/llamaindex/integration/vercel).
|
||||
@@ -0,0 +1,39 @@
|
||||
import { openai } from "@ai-sdk/openai";
|
||||
import { llamaindex } from "@llamaindex/vercel";
|
||||
import { streamText } from "ai";
|
||||
import { Document, LlamaCloudIndex } from "llamaindex";
|
||||
import fs from "node:fs/promises";
|
||||
|
||||
async function main() {
|
||||
const path = "node_modules/llamaindex/examples/abramov.txt";
|
||||
const essay = await fs.readFile(path, "utf-8");
|
||||
const document = new Document({ text: essay, id_: path });
|
||||
|
||||
const index = await LlamaCloudIndex.fromDocuments({
|
||||
documents: [document],
|
||||
name: "test-pipeline",
|
||||
projectName: "Default",
|
||||
apiKey: process.env.LLAMA_CLOUD_API_KEY,
|
||||
});
|
||||
console.log("Successfully created index");
|
||||
|
||||
const result = streamText({
|
||||
model: openai("gpt-4o"),
|
||||
prompt: "Cost of moving cat from Russia to UK?",
|
||||
tools: {
|
||||
queryTool: llamaindex({
|
||||
model: openai("gpt-4o"),
|
||||
index,
|
||||
description:
|
||||
"get information from your knowledge base to answer questions.", // optional description
|
||||
}),
|
||||
},
|
||||
maxSteps: 5,
|
||||
});
|
||||
|
||||
for await (const textPart of result.textStream) {
|
||||
process.stdout.write(textPart);
|
||||
}
|
||||
}
|
||||
|
||||
main().catch(console.error);
|
||||
@@ -0,0 +1,45 @@
|
||||
import { openai } from "@ai-sdk/openai";
|
||||
import { VercelLLM } from "@llamaindex/vercel";
|
||||
import { LLMAgent, WikipediaTool } from "llamaindex";
|
||||
|
||||
async function main() {
|
||||
// Create an instance of VercelLLM with the OpenAI model
|
||||
const vercelLLM = new VercelLLM({ model: openai("gpt-4o") });
|
||||
|
||||
console.log("\n=== Test 1: Using complete() for single response ===");
|
||||
const result = await vercelLLM.complete({
|
||||
prompt: "What is the capital of France?",
|
||||
stream: false, // Set to true if you want streaming responses
|
||||
});
|
||||
console.log(result.text);
|
||||
|
||||
console.log("\n=== Test 2: Using chat() for streaming response ===");
|
||||
const stream = await vercelLLM.chat({
|
||||
messages: [
|
||||
{ content: "You want to talk in rhymes.", role: "system" },
|
||||
{
|
||||
content:
|
||||
"How much wood would a woodchuck chuck if a woodchuck could chuck wood?",
|
||||
role: "user",
|
||||
},
|
||||
],
|
||||
stream: true,
|
||||
});
|
||||
for await (const chunk of stream) {
|
||||
process.stdout.write(chunk.delta);
|
||||
}
|
||||
|
||||
console.log("\n=== Test 3: Using LLMAgent with WikipediaTool ===");
|
||||
const agent = new LLMAgent({
|
||||
llm: vercelLLM,
|
||||
tools: [new WikipediaTool()],
|
||||
});
|
||||
|
||||
const { message } = await agent.chat({
|
||||
message: "What's the history of New York from Wikipedia in 3 sentences?",
|
||||
});
|
||||
|
||||
console.log(message);
|
||||
}
|
||||
|
||||
main().catch(console.error);
|
||||
@@ -0,0 +1,35 @@
|
||||
import { openai } from "@ai-sdk/openai";
|
||||
import { llamaindex } from "@llamaindex/vercel";
|
||||
import { streamText } from "ai";
|
||||
import { Document, VectorStoreIndex } from "llamaindex";
|
||||
|
||||
import fs from "node:fs/promises";
|
||||
|
||||
async function main() {
|
||||
const path = "node_modules/llamaindex/examples/abramov.txt";
|
||||
const essay = await fs.readFile(path, "utf-8");
|
||||
const document = new Document({ text: essay, id_: path });
|
||||
|
||||
const index = await VectorStoreIndex.fromDocuments([document]);
|
||||
console.log("Successfully created index");
|
||||
|
||||
const result = streamText({
|
||||
model: openai("gpt-4o"),
|
||||
prompt: "Cost of moving cat from Russia to UK?",
|
||||
tools: {
|
||||
queryTool: llamaindex({
|
||||
model: openai("gpt-4o"),
|
||||
index,
|
||||
description:
|
||||
"get information from your knowledge base to answer questions.", // optional description
|
||||
}),
|
||||
},
|
||||
maxSteps: 5,
|
||||
});
|
||||
|
||||
for await (const textPart of result.textStream) {
|
||||
process.stdout.write(textPart);
|
||||
}
|
||||
}
|
||||
|
||||
main().catch(console.error);
|
||||
+8
-8
@@ -2,8 +2,8 @@
|
||||
"name": "@llamaindex/monorepo",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"build": "turbo run build --filter=\"./packages/*\"",
|
||||
"dev": "turbo run dev --filter=\"./packages/*\"",
|
||||
"build": "turbo run build --filter=\"./packages/*\" --filter=\"./packages/providers/*\"",
|
||||
"dev": "turbo run dev --filter=\"./packages/*\" --filter=\"./packages/providers/*\"",
|
||||
"format": "prettier --ignore-unknown --cache --check .",
|
||||
"format:write": "prettier --ignore-unknown --write .",
|
||||
"lint": "turbo run lint",
|
||||
@@ -19,20 +19,20 @@
|
||||
},
|
||||
"devDependencies": {
|
||||
"@changesets/cli": "^2.27.5",
|
||||
"eslint": "9.14.0",
|
||||
"eslint-config-next": "^15.0.2",
|
||||
"eslint": "9.15.0",
|
||||
"eslint-config-next": "^15.0.3",
|
||||
"eslint-config-prettier": "^9.1.0",
|
||||
"eslint-config-turbo": "^2.2.3",
|
||||
"eslint-config-turbo": "^2.3.0",
|
||||
"eslint-plugin-react": "7.37.2",
|
||||
"globals": "^15.12.0",
|
||||
"husky": "^9.1.6",
|
||||
"husky": "^9.1.7",
|
||||
"lint-staged": "^15.2.10",
|
||||
"madge": "^8.0.0",
|
||||
"prettier": "^3.3.3",
|
||||
"prettier-plugin-organize-imports": "^4.1.0",
|
||||
"turbo": "^2.2.3",
|
||||
"turbo": "^2.3.0",
|
||||
"typescript": "^5.6.3",
|
||||
"typescript-eslint": "^8.13.0"
|
||||
"typescript-eslint": "^8.15.0"
|
||||
},
|
||||
"packageManager": "pnpm@9.12.3",
|
||||
"lint-staged": {
|
||||
|
||||
@@ -1,5 +1,105 @@
|
||||
# @llamaindex/autotool
|
||||
|
||||
## 5.0.27
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [b504303]
|
||||
- Updated dependencies [a0e6f57]
|
||||
- llamaindex@0.8.27
|
||||
|
||||
## 5.0.26
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- 3d1808b: chore: bump version
|
||||
- Updated dependencies [3d1808b]
|
||||
- llamaindex@0.8.26
|
||||
|
||||
## 5.0.25
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- 8be4589: chore: bump version
|
||||
- llamaindex@0.8.25
|
||||
|
||||
## 5.0.24
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [515f2c1]
|
||||
- llamaindex@0.8.24
|
||||
|
||||
## 5.0.23
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.8.23
|
||||
|
||||
## 5.0.22
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [819af45]
|
||||
- llamaindex@0.8.22
|
||||
|
||||
## 5.0.21
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [83c3897]
|
||||
- Updated dependencies [efa2211]
|
||||
- llamaindex@0.8.21
|
||||
|
||||
## 5.0.20
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [02b22da]
|
||||
- llamaindex@0.8.20
|
||||
|
||||
## 5.0.19
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- 90d265c: chore: bump version
|
||||
- Updated dependencies [90d265c]
|
||||
- llamaindex@0.8.19
|
||||
|
||||
## 5.0.18
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [d17450f]
|
||||
- llamaindex@0.8.18
|
||||
|
||||
## 5.0.17
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.8.17
|
||||
|
||||
## 5.0.16
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.8.16
|
||||
|
||||
## 5.0.15
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [3d503cb]
|
||||
- Updated dependencies [5dae534]
|
||||
- llamaindex@0.8.15
|
||||
|
||||
## 5.0.14
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [630b425]
|
||||
- llamaindex@0.8.14
|
||||
|
||||
## 5.0.13
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,5 +1,117 @@
|
||||
# @llamaindex/autotool-01-node-example
|
||||
|
||||
## 0.0.70
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [b504303]
|
||||
- Updated dependencies [a0e6f57]
|
||||
- llamaindex@0.8.27
|
||||
- @llamaindex/autotool@5.0.27
|
||||
|
||||
## 0.0.69
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [3d1808b]
|
||||
- @llamaindex/autotool@5.0.26
|
||||
- llamaindex@0.8.26
|
||||
|
||||
## 0.0.68
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [8be4589]
|
||||
- @llamaindex/autotool@5.0.25
|
||||
- llamaindex@0.8.25
|
||||
|
||||
## 0.0.67
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [515f2c1]
|
||||
- llamaindex@0.8.24
|
||||
- @llamaindex/autotool@5.0.24
|
||||
|
||||
## 0.0.66
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.8.23
|
||||
- @llamaindex/autotool@5.0.23
|
||||
|
||||
## 0.0.65
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [819af45]
|
||||
- llamaindex@0.8.22
|
||||
- @llamaindex/autotool@5.0.22
|
||||
|
||||
## 0.0.64
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [83c3897]
|
||||
- Updated dependencies [efa2211]
|
||||
- llamaindex@0.8.21
|
||||
- @llamaindex/autotool@5.0.21
|
||||
|
||||
## 0.0.63
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [02b22da]
|
||||
- llamaindex@0.8.20
|
||||
- @llamaindex/autotool@5.0.20
|
||||
|
||||
## 0.0.62
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [90d265c]
|
||||
- @llamaindex/autotool@5.0.19
|
||||
- llamaindex@0.8.19
|
||||
|
||||
## 0.0.61
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [d17450f]
|
||||
- llamaindex@0.8.18
|
||||
- @llamaindex/autotool@5.0.18
|
||||
|
||||
## 0.0.60
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.8.17
|
||||
- @llamaindex/autotool@5.0.17
|
||||
|
||||
## 0.0.59
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.8.16
|
||||
- @llamaindex/autotool@5.0.16
|
||||
|
||||
## 0.0.58
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [3d503cb]
|
||||
- Updated dependencies [5dae534]
|
||||
- llamaindex@0.8.15
|
||||
- @llamaindex/autotool@5.0.15
|
||||
|
||||
## 0.0.57
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [630b425]
|
||||
- llamaindex@0.8.14
|
||||
- @llamaindex/autotool@5.0.14
|
||||
|
||||
## 0.0.56
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
"dependencies": {
|
||||
"@llamaindex/autotool": "workspace:*",
|
||||
"llamaindex": "workspace:*",
|
||||
"openai": "^4.57.0"
|
||||
"openai": "^4.73.1"
|
||||
},
|
||||
"devDependencies": {
|
||||
"tsx": "^4.19.0"
|
||||
@@ -13,5 +13,5 @@
|
||||
"scripts": {
|
||||
"start": "node --import tsx --import @llamaindex/autotool/node ./src/index.ts"
|
||||
},
|
||||
"version": "0.0.56"
|
||||
"version": "0.0.70"
|
||||
}
|
||||
|
||||
@@ -1,5 +1,117 @@
|
||||
# @llamaindex/autotool-02-next-example
|
||||
|
||||
## 0.1.114
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [b504303]
|
||||
- Updated dependencies [a0e6f57]
|
||||
- llamaindex@0.8.27
|
||||
- @llamaindex/autotool@5.0.27
|
||||
|
||||
## 0.1.113
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [3d1808b]
|
||||
- @llamaindex/autotool@5.0.26
|
||||
- llamaindex@0.8.26
|
||||
|
||||
## 0.1.112
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [8be4589]
|
||||
- @llamaindex/autotool@5.0.25
|
||||
- llamaindex@0.8.25
|
||||
|
||||
## 0.1.111
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [515f2c1]
|
||||
- llamaindex@0.8.24
|
||||
- @llamaindex/autotool@5.0.24
|
||||
|
||||
## 0.1.110
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.8.23
|
||||
- @llamaindex/autotool@5.0.23
|
||||
|
||||
## 0.1.109
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [819af45]
|
||||
- llamaindex@0.8.22
|
||||
- @llamaindex/autotool@5.0.22
|
||||
|
||||
## 0.1.108
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [83c3897]
|
||||
- Updated dependencies [efa2211]
|
||||
- llamaindex@0.8.21
|
||||
- @llamaindex/autotool@5.0.21
|
||||
|
||||
## 0.1.107
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [02b22da]
|
||||
- llamaindex@0.8.20
|
||||
- @llamaindex/autotool@5.0.20
|
||||
|
||||
## 0.1.106
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [90d265c]
|
||||
- @llamaindex/autotool@5.0.19
|
||||
- llamaindex@0.8.19
|
||||
|
||||
## 0.1.105
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [d17450f]
|
||||
- llamaindex@0.8.18
|
||||
- @llamaindex/autotool@5.0.18
|
||||
|
||||
## 0.1.104
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.8.17
|
||||
- @llamaindex/autotool@5.0.17
|
||||
|
||||
## 0.1.103
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.8.16
|
||||
- @llamaindex/autotool@5.0.16
|
||||
|
||||
## 0.1.102
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [3d503cb]
|
||||
- Updated dependencies [5dae534]
|
||||
- llamaindex@0.8.15
|
||||
- @llamaindex/autotool@5.0.15
|
||||
|
||||
## 0.1.101
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [630b425]
|
||||
- llamaindex@0.8.14
|
||||
- @llamaindex/autotool@5.0.14
|
||||
|
||||
## 0.1.100
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "@llamaindex/autotool-02-next-example",
|
||||
"private": true,
|
||||
"version": "0.1.100",
|
||||
"version": "0.1.114",
|
||||
"scripts": {
|
||||
"dev": "next dev",
|
||||
"build": "next build",
|
||||
@@ -10,17 +10,17 @@
|
||||
"dependencies": {
|
||||
"@llamaindex/autotool": "workspace:*",
|
||||
"@radix-ui/react-slot": "^1.1.0",
|
||||
"ai": "^3.3.21",
|
||||
"ai": "^4.0.0",
|
||||
"class-variance-authority": "^0.7.0",
|
||||
"dotenv": "^16.3.1",
|
||||
"llamaindex": "workspace:*",
|
||||
"lucide-react": "^0.436.0",
|
||||
"next": "15.0.2",
|
||||
"lucide-react": "^0.460.0",
|
||||
"next": "15.0.3",
|
||||
"react": "^18.3.1",
|
||||
"react-dom": "^18.3.1",
|
||||
"react-markdown": "^9.0.1",
|
||||
"react-syntax-highlighter": "^15.5.0",
|
||||
"sonner": "^1.5.0",
|
||||
"sonner": "^1.7.0",
|
||||
"tailwind-merge": "^2.5.2"
|
||||
},
|
||||
"devDependencies": {
|
||||
@@ -30,8 +30,8 @@
|
||||
"@types/react-syntax-highlighter": "^15.5.11",
|
||||
"autoprefixer": "^10.4.20",
|
||||
"cross-env": "^7.0.3",
|
||||
"postcss": "^8.4.41",
|
||||
"tailwindcss": "^3.4.10",
|
||||
"postcss": "^8.4.49",
|
||||
"tailwindcss": "^3.4.15",
|
||||
"typescript": "^5.6.3"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "@llamaindex/autotool",
|
||||
"type": "module",
|
||||
"version": "5.0.13",
|
||||
"version": "5.0.27",
|
||||
"description": "auto transpile your JS function to LLM Agent compatible",
|
||||
"files": [
|
||||
"dist",
|
||||
@@ -45,10 +45,10 @@
|
||||
"dev": "bunchee --watch"
|
||||
},
|
||||
"dependencies": {
|
||||
"@swc/core": "^1.7.22",
|
||||
"jotai": "2.8.4",
|
||||
"@swc/core": "^1.9.2",
|
||||
"jotai": "2.10.2",
|
||||
"typedoc": "^0.26.11",
|
||||
"unplugin": "^1.12.2"
|
||||
"unplugin": "^1.16.0"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"llamaindex": "workspace:*",
|
||||
@@ -72,11 +72,11 @@
|
||||
"@types/node": "^22.9.0",
|
||||
"bunchee": "5.6.1",
|
||||
"llamaindex": "workspace:*",
|
||||
"next": "15.0.2",
|
||||
"rollup": "^4.24.4",
|
||||
"next": "15.0.3",
|
||||
"rollup": "^4.27.3",
|
||||
"tsx": "^4.19.0",
|
||||
"typescript": "^5.6.3",
|
||||
"vitest": "^2.1.4",
|
||||
"vitest": "^2.1.5",
|
||||
"webpack": "^5.94.0"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -22,7 +22,7 @@ export type InfoString = {
|
||||
parameterMapping: Record<string, number>;
|
||||
};
|
||||
|
||||
export const store = createStore();
|
||||
export const store: ReturnType<typeof createStore> = createStore();
|
||||
export const toolMetadataAtom = atom<[ToolMetadata, Info][]>([]);
|
||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||
export const toolsAtom = atom<Record<string, (...args: any[]) => any>>({});
|
||||
|
||||
@@ -1,5 +1,69 @@
|
||||
# @llamaindex/cloud
|
||||
|
||||
## 2.0.18
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [b504303]
|
||||
- Updated dependencies [e0f6cc3]
|
||||
- @llamaindex/env@0.1.25
|
||||
- @llamaindex/core@0.4.18
|
||||
|
||||
## 2.0.17
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [3d1808b]
|
||||
- @llamaindex/core@0.4.17
|
||||
|
||||
## 2.0.16
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- 8be4589: chore: bump version
|
||||
- Updated dependencies [8be4589]
|
||||
- @llamaindex/core@0.4.16
|
||||
- @llamaindex/env@0.1.24
|
||||
|
||||
## 2.0.15
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [d2b2722]
|
||||
- @llamaindex/env@0.1.23
|
||||
- @llamaindex/core@0.4.15
|
||||
|
||||
## 2.0.14
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [969365c]
|
||||
- @llamaindex/env@0.1.22
|
||||
- @llamaindex/core@0.4.14
|
||||
|
||||
## 2.0.13
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- 90d265c: chore: bump version
|
||||
- Updated dependencies [90d265c]
|
||||
- @llamaindex/core@0.4.13
|
||||
- @llamaindex/env@0.1.21
|
||||
|
||||
## 2.0.12
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [ef4f63d]
|
||||
- @llamaindex/core@0.4.12
|
||||
|
||||
## 2.0.11
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [6d22fa2]
|
||||
- @llamaindex/core@0.4.11
|
||||
|
||||
## 2.0.10
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@llamaindex/cloud",
|
||||
"version": "2.0.10",
|
||||
"version": "2.0.18",
|
||||
"type": "module",
|
||||
"license": "MIT",
|
||||
"scripts": {
|
||||
@@ -50,8 +50,8 @@
|
||||
"directory": "packages/cloud"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@hey-api/client-fetch": "^0.4.2",
|
||||
"@hey-api/openapi-ts": "^0.54.3",
|
||||
"@hey-api/client-fetch": "^0.4.4",
|
||||
"@hey-api/openapi-ts": "^0.56.0",
|
||||
"@llamaindex/core": "workspace:*",
|
||||
"@llamaindex/env": "workspace:*",
|
||||
"bunchee": "5.6.1"
|
||||
|
||||
@@ -1,5 +1,70 @@
|
||||
# @llamaindex/community
|
||||
|
||||
## 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
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
|
||||
## Current Features:
|
||||
|
||||
- Bedrock support for Amazon Nova models Pro, Lite and Micro
|
||||
- Bedrock support for the Anthropic Claude Models [usage](https://ts.llamaindex.ai/modules/llms/available_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/modules/llms/available_llms/bedrock)
|
||||
- Meta LLama3.1 405b and Llama3.2 tool call support
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "@llamaindex/community",
|
||||
"description": "Community package for LlamaIndexTS",
|
||||
"version": "0.0.68",
|
||||
"version": "0.0.76",
|
||||
"type": "module",
|
||||
"types": "dist/type/index.d.ts",
|
||||
"main": "dist/cjs/index.js",
|
||||
@@ -46,8 +46,8 @@
|
||||
"bunchee": "5.6.1"
|
||||
},
|
||||
"dependencies": {
|
||||
"@aws-sdk/client-bedrock-agent-runtime": "^3.642.0",
|
||||
"@aws-sdk/client-bedrock-runtime": "^3.642.0",
|
||||
"@aws-sdk/client-bedrock-agent-runtime": "^3.706.0",
|
||||
"@aws-sdk/client-bedrock-runtime": "^3.706.0",
|
||||
"@llamaindex/core": "workspace:*",
|
||||
"@llamaindex/env": "workspace:*"
|
||||
}
|
||||
|
||||
@@ -0,0 +1,133 @@
|
||||
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> {
|
||||
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 {
|
||||
let 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),
|
||||
};
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
import type { ConverseRequest, Message } from "@aws-sdk/client-bedrock-runtime";
|
||||
|
||||
export type AmazonMessages = ConverseRequest["messages"];
|
||||
|
||||
export type AmazonMessage = Message;
|
||||
@@ -0,0 +1,141 @@
|
||||
import type {
|
||||
ImageBlock,
|
||||
ImageFormat,
|
||||
Message,
|
||||
Tool,
|
||||
} from "@aws-sdk/client-bedrock-runtime";
|
||||
import type {
|
||||
BaseTool,
|
||||
ChatMessage,
|
||||
MessageContentDetail,
|
||||
ToolCallLLMMessageOptions,
|
||||
} from "@llamaindex/core/llms";
|
||||
import {
|
||||
extractDataUrlComponents,
|
||||
mapMessageContentToMessageContentDetails,
|
||||
} from "../utils";
|
||||
|
||||
import type { JSONObject } from "@llamaindex/core/global";
|
||||
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-ignore: 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: parameters,
|
||||
},
|
||||
} as Tool;
|
||||
});
|
||||
};
|
||||
@@ -11,13 +11,10 @@ import type {
|
||||
ToolCall,
|
||||
ToolCallLLMMessageOptions,
|
||||
} from "@llamaindex/core/llms";
|
||||
import {
|
||||
type BedrockAdditionalChatOptions,
|
||||
type BedrockChatStreamResponse,
|
||||
Provider,
|
||||
} from "../provider";
|
||||
import { type BedrockChatStreamResponse, Provider } from "../provider";
|
||||
import { toUtf8 } from "../utils";
|
||||
import type {
|
||||
AnthropicAdditionalChatOptions,
|
||||
AnthropicNoneStreamingResponse,
|
||||
AnthropicStreamEvent,
|
||||
AnthropicTextContent,
|
||||
@@ -134,7 +131,7 @@ export class AnthropicProvider extends Provider<AnthropicStreamEvent> {
|
||||
metadata: LLMMetadata,
|
||||
messages: T[],
|
||||
tools?: BaseTool[],
|
||||
options?: BedrockAdditionalChatOptions,
|
||||
options?: AnthropicAdditionalChatOptions,
|
||||
): InvokeModelCommandInput | InvokeModelWithResponseStreamCommandInput {
|
||||
const extra: Record<string, unknown> = {};
|
||||
if (options?.toolChoice) {
|
||||
|
||||
@@ -1,6 +1,13 @@
|
||||
import type { ToolMetadata } from "@llamaindex/core/llms";
|
||||
import type { InvocationMetrics } from "../types";
|
||||
|
||||
export type ToolChoice =
|
||||
| { type: "any" }
|
||||
| { type: "auto" }
|
||||
| { type: "tool"; name: string };
|
||||
|
||||
export type AnthropicAdditionalChatOptions = { toolChoice: ToolChoice };
|
||||
|
||||
type Usage = {
|
||||
input_tokens: number;
|
||||
output_tokens: number;
|
||||
|
||||
@@ -25,6 +25,7 @@ import {
|
||||
import { mapMessageContentToMessageContentDetails } from "./utils";
|
||||
|
||||
import { wrapLLMEvent } from "@llamaindex/core/decorator";
|
||||
import { AmazonProvider } from "./amazon/provider";
|
||||
import { AnthropicProvider } from "./anthropic/provider";
|
||||
import { MetaProvider } from "./meta/provider";
|
||||
|
||||
@@ -32,6 +33,7 @@ import { MetaProvider } from "./meta/provider";
|
||||
export const PROVIDERS: { [key: string]: Provider } = {
|
||||
anthropic: new AnthropicProvider(),
|
||||
meta: new MetaProvider(),
|
||||
amazon: new AmazonProvider(),
|
||||
};
|
||||
|
||||
export type BedrockChatParamsStreaming = LLMChatParamsStreaming<
|
||||
@@ -81,7 +83,11 @@ export const BEDROCK_MODELS = {
|
||||
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_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];
|
||||
|
||||
@@ -98,6 +104,9 @@ export const INFERENCE_BEDROCK_MODELS = {
|
||||
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_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",
|
||||
@@ -189,6 +198,9 @@ const CHAT_ONLY_MODELS = {
|
||||
[BEDROCK_MODELS.MISTRAL_7B_INSTRUCT]: 32000,
|
||||
[BEDROCK_MODELS.MISTRAL_MIXTRAL_7B_INSTRUCT]: 32000,
|
||||
[BEDROCK_MODELS.MISTRAL_MIXTRAL_LARGE_2402]: 32000,
|
||||
[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 };
|
||||
@@ -225,6 +237,9 @@ export const STREAMING_MODELS = new Set([
|
||||
BEDROCK_MODELS.MISTRAL_7B_INSTRUCT,
|
||||
BEDROCK_MODELS.MISTRAL_MIXTRAL_7B_INSTRUCT,
|
||||
BEDROCK_MODELS.MISTRAL_MIXTRAL_LARGE_2402,
|
||||
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[] = [
|
||||
@@ -239,6 +254,9 @@ export const TOOL_CALL_MODELS: BEDROCK_MODELS[] = [
|
||||
BEDROCK_MODELS.META_LLAMA3_2_3B_INSTRUCT,
|
||||
BEDROCK_MODELS.META_LLAMA3_2_11B_INSTRUCT,
|
||||
BEDROCK_MODELS.META_LLAMA3_2_90B_INSTRUCT,
|
||||
BEDROCK_MODELS.AMAZON_NOVA_PRO_1,
|
||||
BEDROCK_MODELS.AMAZON_NOVA_LITE_1,
|
||||
BEDROCK_MODELS.AMAZON_NOVA_MICRO_1,
|
||||
];
|
||||
|
||||
const getProvider = (model: string): Provider => {
|
||||
@@ -320,10 +338,6 @@ export class Bedrock extends ToolCallLLM<BedrockAdditionalChatOptions> {
|
||||
this.temperature = temperature ?? DEFAULT_BEDROCK_PARAMS.temperature;
|
||||
this.topP = topP ?? DEFAULT_BEDROCK_PARAMS.topP;
|
||||
this.client = new BedrockRuntimeClient(params);
|
||||
|
||||
if (!this.supportToolCall) {
|
||||
console.warn(`The model "${this.model}" doesn't support ToolCall`);
|
||||
}
|
||||
}
|
||||
|
||||
get supportToolCall(): boolean {
|
||||
@@ -345,6 +359,9 @@ export class Bedrock extends ToolCallLLM<BedrockAdditionalChatOptions> {
|
||||
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,
|
||||
@@ -378,6 +395,10 @@ export class Bedrock extends ToolCallLLM<BedrockAdditionalChatOptions> {
|
||||
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,
|
||||
@@ -388,7 +409,6 @@ export class Bedrock extends ToolCallLLM<BedrockAdditionalChatOptions> {
|
||||
command.input.modelId = this.actualModel;
|
||||
|
||||
const response = await this.client.send(command);
|
||||
|
||||
if (response.body) yield* this.provider.reduceStream(response.body);
|
||||
}
|
||||
|
||||
|
||||
@@ -11,10 +11,9 @@ import {
|
||||
type ToolCallLLMMessageOptions,
|
||||
} from "@llamaindex/core/llms";
|
||||
import { streamConverter } from "@llamaindex/core/utils";
|
||||
import type { ToolChoice } from "./types";
|
||||
import { toUtf8 } from "./utils";
|
||||
|
||||
export type BedrockAdditionalChatOptions = { toolChoice: ToolChoice };
|
||||
export type BedrockAdditionalChatOptions = Record<string, unknown>;
|
||||
|
||||
export type BedrockChatStreamResponse = AsyncIterable<
|
||||
ChatResponseChunk<ToolCallLLMMessageOptions>
|
||||
|
||||
@@ -4,8 +4,3 @@ export type InvocationMetrics = {
|
||||
invocationLatency: number;
|
||||
firstByteLatency: number;
|
||||
};
|
||||
|
||||
export type ToolChoice =
|
||||
| { type: "any" }
|
||||
| { type: "auto" }
|
||||
| { type: "tool"; name: string };
|
||||
|
||||
@@ -1,5 +1,61 @@
|
||||
# @llamaindex/core
|
||||
|
||||
## 0.4.18
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- e0f6cc3: The compact and refine response synthesizer (retrieved by using `getResponseSynthesizer('compact')`) has been fixed to return the original source nodes that were provided to it in its response. Previous to this it was returning the compacted text chunk documents.
|
||||
- Updated dependencies [b504303]
|
||||
- @llamaindex/env@0.1.25
|
||||
|
||||
## 0.4.17
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- 3d1808b: chore: bump version
|
||||
|
||||
## 0.4.16
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- 8be4589: chore: bump version
|
||||
- Updated dependencies [8be4589]
|
||||
- @llamaindex/env@0.1.24
|
||||
|
||||
## 0.4.15
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [d2b2722]
|
||||
- @llamaindex/env@0.1.23
|
||||
|
||||
## 0.4.14
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [969365c]
|
||||
- @llamaindex/env@0.1.22
|
||||
|
||||
## 0.4.13
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- 90d265c: chore: bump version
|
||||
- Updated dependencies [90d265c]
|
||||
- @llamaindex/env@0.1.21
|
||||
|
||||
## 0.4.12
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- ef4f63d: refactor: move mockLLM to core
|
||||
|
||||
## 0.4.11
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- 6d22fa2: Get PromptTemplate template variables at run-time
|
||||
|
||||
## 0.4.10
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "@llamaindex/core",
|
||||
"type": "module",
|
||||
"version": "0.4.10",
|
||||
"version": "0.4.18",
|
||||
"description": "LlamaIndex Core Module",
|
||||
"exports": {
|
||||
"./agent": {
|
||||
@@ -389,10 +389,10 @@
|
||||
"url": "https://github.com/run-llama/LlamaIndexTS.git"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@edge-runtime/vm": "^4.0.3",
|
||||
"@edge-runtime/vm": "^4.0.4",
|
||||
"ajv": "^8.17.1",
|
||||
"bunchee": "5.6.1",
|
||||
"happy-dom": "^15.11.0",
|
||||
"happy-dom": "^15.11.6",
|
||||
"natural": "^8.0.1"
|
||||
},
|
||||
"dependencies": {
|
||||
|
||||
@@ -369,7 +369,9 @@ export abstract class AgentRunner<
|
||||
verbose: boolean | undefined = undefined,
|
||||
chatHistory?: ChatMessage<AdditionalMessageOptions>[],
|
||||
additionalChatOptions?: AdditionalChatOptions,
|
||||
) {
|
||||
): ReadableStream<
|
||||
TaskStepOutput<AI, Store, AdditionalMessageOptions, AdditionalChatOptions>
|
||||
> {
|
||||
const initialMessages = [...(chatHistory ?? this.#chatHistory)];
|
||||
if (this.#systemPrompt !== null) {
|
||||
const systemPrompt = this.#systemPrompt;
|
||||
@@ -453,14 +455,9 @@ export abstract class AgentRunner<
|
||||
const { output } = stepOutput;
|
||||
if (output instanceof ReadableStream) {
|
||||
return output.pipeThrough(
|
||||
new TransformStream<EngineResponse>({
|
||||
new TransformStream({
|
||||
transform(chunk, controller) {
|
||||
controller.enqueue(
|
||||
EngineResponse.fromChatResponseChunk(
|
||||
chunk,
|
||||
chunk.sourceNodes,
|
||||
),
|
||||
);
|
||||
controller.enqueue(EngineResponse.fromChatResponseChunk(chunk));
|
||||
},
|
||||
}),
|
||||
);
|
||||
|
||||
@@ -32,6 +32,10 @@ export abstract class BasePromptTemplate<
|
||||
const Vars extends readonly string[] = string[],
|
||||
> {
|
||||
metadata: Metadata = {};
|
||||
/**
|
||||
* Set of template variables used in the prompt template. Used for type hints only.
|
||||
* To get the list of template variables used in the prompt at run-time, use the `vars` method.
|
||||
*/
|
||||
templateVars: Set<string> = new Set();
|
||||
options: Partial<Record<TemplatesVar[number] | (string & {}), string>> = {};
|
||||
outputParser: BaseOutputParser | undefined;
|
||||
@@ -223,4 +227,13 @@ export class PromptTemplate<
|
||||
get template(): Template {
|
||||
return this.#template;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns all the template variables used in the prompt template.
|
||||
*/
|
||||
vars(): string[] {
|
||||
const template = this.template;
|
||||
const matches = template.match(/\{([^}]+)\}/g) || [];
|
||||
return [...new Set(matches.map((match) => match.slice(1, -1)))];
|
||||
}
|
||||
}
|
||||
|
||||
@@ -77,6 +77,16 @@ class Refine extends BaseSynthesizer {
|
||||
}
|
||||
}
|
||||
|
||||
async getResponse(
|
||||
query: MessageContent,
|
||||
nodes: NodeWithScore[],
|
||||
stream: true,
|
||||
): Promise<AsyncIterable<EngineResponse>>;
|
||||
async getResponse(
|
||||
query: MessageContent,
|
||||
nodes: NodeWithScore[],
|
||||
stream: false,
|
||||
): Promise<EngineResponse>;
|
||||
async getResponse(
|
||||
query: MessageContent,
|
||||
nodes: NodeWithScore[],
|
||||
@@ -197,6 +207,16 @@ class Refine extends BaseSynthesizer {
|
||||
* CompactAndRefine is a slight variation of Refine that first compacts the text chunks into the smallest possible number of chunks.
|
||||
*/
|
||||
class CompactAndRefine extends Refine {
|
||||
async getResponse(
|
||||
query: MessageContent,
|
||||
nodes: NodeWithScore[],
|
||||
stream: true,
|
||||
): Promise<AsyncIterable<EngineResponse>>;
|
||||
async getResponse(
|
||||
query: MessageContent,
|
||||
nodes: NodeWithScore[],
|
||||
stream: false,
|
||||
): Promise<EngineResponse>;
|
||||
async getResponse(
|
||||
query: MessageContent,
|
||||
nodes: NodeWithScore[],
|
||||
@@ -216,17 +236,24 @@ class CompactAndRefine extends Refine {
|
||||
const newTexts = this.promptHelper.repack(maxPrompt, textChunks);
|
||||
const newNodes = newTexts.map((text) => new TextNode({ text }));
|
||||
if (stream) {
|
||||
return super.getResponse(
|
||||
const streamResponse = await super.getResponse(
|
||||
query,
|
||||
newNodes.map((node) => ({ node })),
|
||||
true,
|
||||
);
|
||||
return streamConverter(streamResponse, (chunk) => {
|
||||
chunk.sourceNodes = nodes;
|
||||
return chunk;
|
||||
});
|
||||
}
|
||||
return super.getResponse(
|
||||
|
||||
const originalResponse = await super.getResponse(
|
||||
query,
|
||||
newNodes.map((node) => ({ node })),
|
||||
false,
|
||||
);
|
||||
originalResponse.sourceNodes = nodes;
|
||||
return originalResponse;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -76,6 +76,7 @@ export {
|
||||
extractText,
|
||||
imageToDataUrl,
|
||||
messagesToHistory,
|
||||
MockLLM,
|
||||
toToolDescriptions,
|
||||
} from "./llms";
|
||||
|
||||
|
||||
@@ -2,6 +2,15 @@ import { fs } from "@llamaindex/env";
|
||||
import { filetypemime } from "magic-bytes.js";
|
||||
import type {
|
||||
ChatMessage,
|
||||
ChatResponse,
|
||||
ChatResponseChunk,
|
||||
CompletionResponse,
|
||||
LLM,
|
||||
LLMChatParamsNonStreaming,
|
||||
LLMChatParamsStreaming,
|
||||
LLMCompletionParamsNonStreaming,
|
||||
LLMCompletionParamsStreaming,
|
||||
LLMMetadata,
|
||||
MessageContent,
|
||||
MessageContentDetail,
|
||||
MessageContentTextDetail,
|
||||
@@ -143,3 +152,82 @@ export async function imageToDataUrl(
|
||||
}
|
||||
return await blobToDataUrl(input);
|
||||
}
|
||||
|
||||
export class MockLLM implements LLM {
|
||||
metadata: LLMMetadata;
|
||||
options: {
|
||||
timeBetweenToken: number;
|
||||
responseMessage: string;
|
||||
};
|
||||
|
||||
constructor(options?: {
|
||||
timeBetweenToken?: number;
|
||||
responseMessage?: string;
|
||||
metadata?: LLMMetadata;
|
||||
}) {
|
||||
this.options = {
|
||||
timeBetweenToken: options?.timeBetweenToken ?? 20,
|
||||
responseMessage: options?.responseMessage ?? "This is a mock response",
|
||||
};
|
||||
this.metadata = options?.metadata ?? {
|
||||
model: "MockLLM",
|
||||
temperature: 0.5,
|
||||
topP: 0.5,
|
||||
contextWindow: 1024,
|
||||
tokenizer: undefined,
|
||||
};
|
||||
}
|
||||
|
||||
chat(
|
||||
params: LLMChatParamsStreaming<object, object>,
|
||||
): Promise<AsyncIterable<ChatResponseChunk>>;
|
||||
chat(
|
||||
params: LLMChatParamsNonStreaming<object, object>,
|
||||
): Promise<ChatResponse<object>>;
|
||||
async chat(
|
||||
params:
|
||||
| LLMChatParamsStreaming<object, object>
|
||||
| LLMChatParamsNonStreaming<object, object>,
|
||||
): Promise<AsyncIterable<ChatResponseChunk> | ChatResponse<object>> {
|
||||
const responseMessage = this.options.responseMessage;
|
||||
const timeBetweenToken = this.options.timeBetweenToken;
|
||||
|
||||
if (params.stream) {
|
||||
return (async function* () {
|
||||
for (const char of responseMessage) {
|
||||
yield { delta: char, raw: {} };
|
||||
await new Promise((resolve) => setTimeout(resolve, timeBetweenToken));
|
||||
}
|
||||
})();
|
||||
}
|
||||
|
||||
return {
|
||||
message: { content: responseMessage, role: "assistant" },
|
||||
raw: {},
|
||||
};
|
||||
}
|
||||
|
||||
async complete(
|
||||
params: LLMCompletionParamsStreaming,
|
||||
): Promise<AsyncIterable<CompletionResponse>>;
|
||||
async complete(
|
||||
params: LLMCompletionParamsNonStreaming,
|
||||
): Promise<CompletionResponse>;
|
||||
async complete(
|
||||
params: LLMCompletionParamsStreaming | LLMCompletionParamsNonStreaming,
|
||||
): Promise<AsyncIterable<CompletionResponse> | CompletionResponse> {
|
||||
const responseMessage = this.options.responseMessage;
|
||||
const timeBetweenToken = this.options.timeBetweenToken;
|
||||
|
||||
if (params.stream) {
|
||||
return (async function* () {
|
||||
for (const char of responseMessage) {
|
||||
yield { delta: char, text: char, raw: {} };
|
||||
await new Promise((resolve) => setTimeout(resolve, timeBetweenToken));
|
||||
}
|
||||
})();
|
||||
}
|
||||
|
||||
return { text: responseMessage, raw: {} };
|
||||
}
|
||||
}
|
||||
|
||||
@@ -7,6 +7,6 @@
|
||||
},
|
||||
"devDependencies": {
|
||||
"@llamaindex/core": "workspace:*",
|
||||
"vitest": "^2.1.4"
|
||||
"vitest": "^2.1.5"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -158,4 +158,15 @@ describe("PromptTemplate", () => {
|
||||
const formatted = prompt.format({ text: "world", foo: "bar" });
|
||||
expect(formatted).toBe("hello world bar\noutput_instruction");
|
||||
});
|
||||
|
||||
test("should return all unique template vars of a prompt", () => {
|
||||
const prompt = new PromptTemplate({
|
||||
template: "Hello {name}! Your age is {age}. Nice to meet you {name}!",
|
||||
});
|
||||
|
||||
const vars = prompt.vars();
|
||||
expect(vars).toHaveLength(2);
|
||||
expect(vars).toContain("name");
|
||||
expect(vars).toContain("age");
|
||||
});
|
||||
});
|
||||
|
||||
@@ -0,0 +1,66 @@
|
||||
import { describe, expect, test, vi } from "vitest";
|
||||
import type { LLMMetadata } from "../../llms/dist/index.js";
|
||||
import { getResponseSynthesizer } from "../../response-synthesizers/dist/index.js";
|
||||
import { Document } from "../../schema/dist/index.js";
|
||||
|
||||
const mockLllm = () => ({
|
||||
complete: vi.fn().mockImplementation(({ stream }) => {
|
||||
const response = { text: "unimportant" };
|
||||
if (!stream) {
|
||||
return response;
|
||||
}
|
||||
|
||||
function* gen() {
|
||||
// yield a few times to make sure each chunk has the sourceNodes
|
||||
yield response;
|
||||
yield response;
|
||||
yield response;
|
||||
}
|
||||
|
||||
return gen();
|
||||
}),
|
||||
chat: vi.fn(),
|
||||
metadata: {} as unknown as LLMMetadata,
|
||||
});
|
||||
|
||||
describe("compact and refine response synthesizer", () => {
|
||||
describe("synthesize", () => {
|
||||
test("should return original sourceNodes with response when stream = false", async () => {
|
||||
const synthesizer = getResponseSynthesizer("compact", {
|
||||
llm: mockLllm(),
|
||||
});
|
||||
|
||||
const sourceNode = { node: new Document({}), score: 1 };
|
||||
|
||||
const response = await synthesizer.synthesize(
|
||||
{
|
||||
query: "test",
|
||||
nodes: [sourceNode],
|
||||
},
|
||||
false,
|
||||
);
|
||||
|
||||
expect(response.sourceNodes).toEqual([sourceNode]);
|
||||
});
|
||||
|
||||
test("should return original sourceNodes with response when stream = true", async () => {
|
||||
const synthesizer = getResponseSynthesizer("compact", {
|
||||
llm: mockLllm(),
|
||||
});
|
||||
|
||||
const sourceNode = { node: new Document({}), score: 1 };
|
||||
|
||||
const response = await synthesizer.synthesize(
|
||||
{
|
||||
query: "test",
|
||||
nodes: [sourceNode],
|
||||
},
|
||||
true,
|
||||
);
|
||||
|
||||
for await (const chunk of response) {
|
||||
expect(chunk.sourceNodes).toEqual([sourceNode]);
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
Vendored
+30
@@ -1,5 +1,35 @@
|
||||
# @llamaindex/env
|
||||
|
||||
## 0.1.25
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- b504303: Allow Node 18 again (throw run-time error if not possible) to make Stackblitz work
|
||||
|
||||
## 0.1.24
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- 8be4589: chore: bump version
|
||||
|
||||
## 0.1.23
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- d2b2722: fix: switch tokenizer in cloudflare
|
||||
|
||||
## 0.1.22
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- 969365c: fix: async local storage on cloudflare worker
|
||||
|
||||
## 0.1.21
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- 90d265c: chore: bump version
|
||||
|
||||
## 0.1.20
|
||||
|
||||
### Patch Changes
|
||||
|
||||
Vendored
+4
-4
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "@llamaindex/env",
|
||||
"description": "environment wrapper, supports all JS environment including node, deno, bun, edge runtime, and cloudflare worker",
|
||||
"version": "0.1.20",
|
||||
"version": "0.1.25",
|
||||
"type": "module",
|
||||
"types": "dist/index.d.ts",
|
||||
"module": "dist/index.js",
|
||||
@@ -122,13 +122,13 @@
|
||||
"test": "vitest"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@huggingface/transformers": "^3.0.2",
|
||||
"@types/node": "^22.9.0",
|
||||
"@types/readable-stream": "^4.0.15",
|
||||
"@huggingface/transformers": "^3.0.2",
|
||||
"bunchee": "5.6.1",
|
||||
"gpt-tokenizer": "^2.6.0",
|
||||
"gpt-tokenizer": "^2.6.2",
|
||||
"pathe": "^1.1.2",
|
||||
"vitest": "^2.1.4"
|
||||
"vitest": "^2.1.5"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@aws-crypto/sha256-js": "^5.2.0",
|
||||
|
||||
+1
@@ -0,0 +1 @@
|
||||
export { AsyncLocalStorage } from "node:async_hooks";
|
||||
Vendored
+1
-1
@@ -7,7 +7,7 @@
|
||||
*/
|
||||
import { INTERNAL_ENV } from "./utils/index.js";
|
||||
|
||||
export * from "./als/index.non-node.js";
|
||||
export * from "./als/index.workerd.js";
|
||||
export { NotSupportCurrentRuntimeClass } from "./utils/shared.js";
|
||||
|
||||
export * from "./node-polyfill.js";
|
||||
|
||||
@@ -7,6 +7,13 @@ export {
|
||||
} from "./shared.js";
|
||||
|
||||
export async function loadTransformers(onLoad: OnLoad) {
|
||||
const nodeVersions = process.versions.node.split(".");
|
||||
if (nodeVersions[0] && parseInt(nodeVersions[0], 10) < 20) {
|
||||
throw new Error(
|
||||
"@huggingface/transformers is not supported on Node.js versions below 20",
|
||||
);
|
||||
}
|
||||
|
||||
if (getTransformers() === null) {
|
||||
setTransformers(await import("@huggingface/transformers"));
|
||||
} else {
|
||||
|
||||
+1
-1
@@ -2,4 +2,4 @@ export {
|
||||
Tokenizers,
|
||||
tokenizers,
|
||||
type Tokenizer,
|
||||
} from "./internal/tokenizers/js.js";
|
||||
} from "./internal/tokenizers/node.js";
|
||||
|
||||
@@ -1,5 +1,104 @@
|
||||
# @llamaindex/experimental
|
||||
|
||||
## 0.0.139
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [b504303]
|
||||
- Updated dependencies [a0e6f57]
|
||||
- llamaindex@0.8.27
|
||||
|
||||
## 0.0.138
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [3d1808b]
|
||||
- llamaindex@0.8.26
|
||||
|
||||
## 0.0.137
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- 8be4589: chore: bump version
|
||||
- llamaindex@0.8.25
|
||||
|
||||
## 0.0.136
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [515f2c1]
|
||||
- llamaindex@0.8.24
|
||||
|
||||
## 0.0.135
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.8.23
|
||||
|
||||
## 0.0.134
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [819af45]
|
||||
- llamaindex@0.8.22
|
||||
|
||||
## 0.0.133
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [83c3897]
|
||||
- Updated dependencies [efa2211]
|
||||
- llamaindex@0.8.21
|
||||
|
||||
## 0.0.132
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [02b22da]
|
||||
- llamaindex@0.8.20
|
||||
|
||||
## 0.0.131
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- 90d265c: chore: bump version
|
||||
- Updated dependencies [90d265c]
|
||||
- llamaindex@0.8.19
|
||||
|
||||
## 0.0.130
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [d17450f]
|
||||
- llamaindex@0.8.18
|
||||
|
||||
## 0.0.129
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.8.17
|
||||
|
||||
## 0.0.128
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.8.16
|
||||
|
||||
## 0.0.127
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [3d503cb]
|
||||
- Updated dependencies [5dae534]
|
||||
- llamaindex@0.8.15
|
||||
|
||||
## 0.0.126
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [630b425]
|
||||
- llamaindex@0.8.14
|
||||
|
||||
## 0.0.125
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "@llamaindex/experimental",
|
||||
"description": "Experimental package for LlamaIndexTS",
|
||||
"version": "0.0.125",
|
||||
"version": "0.0.139",
|
||||
"type": "module",
|
||||
"types": "dist/type/index.d.ts",
|
||||
"main": "dist/cjs/index.js",
|
||||
@@ -57,7 +57,7 @@
|
||||
"devDependencies": {
|
||||
"@aws-crypto/sha256-js": "^5.2.0",
|
||||
"@swc/cli": "^0.5.0",
|
||||
"@swc/core": "^1.7.22",
|
||||
"@swc/core": "^1.9.2",
|
||||
"@types/jsonpath": "^0.2.4",
|
||||
"concurrently": "^9.1.0",
|
||||
"pathe": "^1.1.2"
|
||||
|
||||
@@ -1,5 +1,217 @@
|
||||
# llamaindex
|
||||
|
||||
## 0.8.27
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- b504303: Allow Node 18 again (throw run-time error if not possible) to make Stackblitz work
|
||||
- a0e6f57: withLlamaIndex now passes through webpack options to the passed in customized NextJS webpack config. Before it was only passing through the config.
|
||||
- Updated dependencies [b504303]
|
||||
- Updated dependencies [e0f6cc3]
|
||||
- @llamaindex/env@0.1.25
|
||||
- @llamaindex/core@0.4.18
|
||||
- @llamaindex/cloud@2.0.18
|
||||
- @llamaindex/node-parser@0.0.19
|
||||
- @llamaindex/anthropic@0.0.27
|
||||
- @llamaindex/clip@0.0.27
|
||||
- @llamaindex/deepinfra@0.0.27
|
||||
- @llamaindex/groq@0.0.42
|
||||
- @llamaindex/huggingface@0.0.27
|
||||
- @llamaindex/ollama@0.0.34
|
||||
- @llamaindex/openai@0.1.43
|
||||
- @llamaindex/portkey-ai@0.0.27
|
||||
- @llamaindex/replicate@0.0.27
|
||||
- @llamaindex/readers@1.0.20
|
||||
- @llamaindex/vllm@0.0.13
|
||||
|
||||
## 0.8.26
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- 3d1808b: chore: bump version
|
||||
- Updated dependencies [3d1808b]
|
||||
- @llamaindex/core@0.4.17
|
||||
- @llamaindex/openai@0.1.42
|
||||
- @llamaindex/cloud@2.0.17
|
||||
- @llamaindex/node-parser@0.0.18
|
||||
- @llamaindex/anthropic@0.0.26
|
||||
- @llamaindex/clip@0.0.26
|
||||
- @llamaindex/deepinfra@0.0.26
|
||||
- @llamaindex/huggingface@0.0.26
|
||||
- @llamaindex/ollama@0.0.33
|
||||
- @llamaindex/portkey-ai@0.0.26
|
||||
- @llamaindex/replicate@0.0.26
|
||||
- @llamaindex/readers@1.0.19
|
||||
- @llamaindex/groq@0.0.41
|
||||
- @llamaindex/vllm@0.0.12
|
||||
|
||||
## 0.8.25
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [7e8230b]
|
||||
- Updated dependencies [8be4589]
|
||||
- @llamaindex/readers@1.0.18
|
||||
- @llamaindex/cloud@2.0.16
|
||||
- @llamaindex/core@0.4.16
|
||||
- @llamaindex/env@0.1.24
|
||||
- @llamaindex/node-parser@0.0.17
|
||||
- @llamaindex/anthropic@0.0.25
|
||||
- @llamaindex/clip@0.0.25
|
||||
- @llamaindex/deepinfra@0.0.25
|
||||
- @llamaindex/groq@0.0.40
|
||||
- @llamaindex/huggingface@0.0.25
|
||||
- @llamaindex/ollama@0.0.32
|
||||
- @llamaindex/openai@0.1.41
|
||||
- @llamaindex/portkey-ai@0.0.25
|
||||
- @llamaindex/replicate@0.0.25
|
||||
- @llamaindex/vllm@0.0.11
|
||||
|
||||
## 0.8.24
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- 515f2c1: Add vector store for CosmosDB
|
||||
|
||||
## 0.8.23
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [d2b2722]
|
||||
- @llamaindex/env@0.1.23
|
||||
- @llamaindex/cloud@2.0.15
|
||||
- @llamaindex/core@0.4.15
|
||||
- @llamaindex/node-parser@0.0.16
|
||||
- @llamaindex/anthropic@0.0.24
|
||||
- @llamaindex/clip@0.0.24
|
||||
- @llamaindex/deepinfra@0.0.24
|
||||
- @llamaindex/groq@0.0.39
|
||||
- @llamaindex/huggingface@0.0.24
|
||||
- @llamaindex/ollama@0.0.31
|
||||
- @llamaindex/openai@0.1.40
|
||||
- @llamaindex/portkey-ai@0.0.24
|
||||
- @llamaindex/replicate@0.0.24
|
||||
- @llamaindex/readers@1.0.17
|
||||
- @llamaindex/vllm@0.0.10
|
||||
|
||||
## 0.8.22
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- 819af45: feat: add Azure Cosmos DB Mongo vCore ChatStore
|
||||
- Updated dependencies [969365c]
|
||||
- @llamaindex/env@0.1.22
|
||||
- @llamaindex/cloud@2.0.14
|
||||
- @llamaindex/core@0.4.14
|
||||
- @llamaindex/node-parser@0.0.15
|
||||
- @llamaindex/anthropic@0.0.23
|
||||
- @llamaindex/clip@0.0.23
|
||||
- @llamaindex/deepinfra@0.0.23
|
||||
- @llamaindex/groq@0.0.38
|
||||
- @llamaindex/huggingface@0.0.23
|
||||
- @llamaindex/ollama@0.0.30
|
||||
- @llamaindex/openai@0.1.39
|
||||
- @llamaindex/portkey-ai@0.0.23
|
||||
- @llamaindex/replicate@0.0.23
|
||||
- @llamaindex/readers@1.0.16
|
||||
- @llamaindex/vllm@0.0.9
|
||||
|
||||
## 0.8.21
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- 83c3897: fix: pinecone vector store search
|
||||
- efa2211: feat: add Azure Cosmos DB mongo vCore DocumentStore, IndexStore, KVStore
|
||||
|
||||
## 0.8.20
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- 02b22da: fix: supports Vercel bundling
|
||||
|
||||
## 0.8.19
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- 90d265c: chore: bump version
|
||||
- Updated dependencies [90d265c]
|
||||
- @llamaindex/cloud@2.0.13
|
||||
- @llamaindex/core@0.4.13
|
||||
- @llamaindex/env@0.1.21
|
||||
- @llamaindex/node-parser@0.0.14
|
||||
- @llamaindex/readers@1.0.15
|
||||
- @llamaindex/anthropic@0.0.22
|
||||
- @llamaindex/groq@0.0.37
|
||||
- @llamaindex/ollama@0.0.29
|
||||
- @llamaindex/openai@0.1.38
|
||||
- @llamaindex/portkey-ai@0.0.22
|
||||
- @llamaindex/clip@0.0.22
|
||||
- @llamaindex/deepinfra@0.0.22
|
||||
- @llamaindex/huggingface@0.0.22
|
||||
- @llamaindex/replicate@0.0.22
|
||||
- @llamaindex/vllm@0.0.8
|
||||
|
||||
## 0.8.18
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- d17450f: fix: rename from serverComponentsExternalPackages to serverExternalPackages
|
||||
- Updated dependencies [ef4f63d]
|
||||
- @llamaindex/core@0.4.12
|
||||
- @llamaindex/cloud@2.0.12
|
||||
- @llamaindex/node-parser@0.0.13
|
||||
- @llamaindex/anthropic@0.0.21
|
||||
- @llamaindex/clip@0.0.21
|
||||
- @llamaindex/deepinfra@0.0.21
|
||||
- @llamaindex/huggingface@0.0.21
|
||||
- @llamaindex/ollama@0.0.28
|
||||
- @llamaindex/openai@0.1.37
|
||||
- @llamaindex/portkey-ai@0.0.21
|
||||
- @llamaindex/replicate@0.0.21
|
||||
- @llamaindex/readers@1.0.14
|
||||
- @llamaindex/groq@0.0.36
|
||||
- @llamaindex/vllm@0.0.7
|
||||
|
||||
## 0.8.17
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [6d22fa2]
|
||||
- @llamaindex/core@0.4.11
|
||||
- @llamaindex/cloud@2.0.11
|
||||
- @llamaindex/node-parser@0.0.12
|
||||
- @llamaindex/anthropic@0.0.20
|
||||
- @llamaindex/clip@0.0.20
|
||||
- @llamaindex/deepinfra@0.0.20
|
||||
- @llamaindex/huggingface@0.0.20
|
||||
- @llamaindex/ollama@0.0.27
|
||||
- @llamaindex/openai@0.1.36
|
||||
- @llamaindex/portkey-ai@0.0.20
|
||||
- @llamaindex/replicate@0.0.20
|
||||
- @llamaindex/readers@1.0.13
|
||||
- @llamaindex/groq@0.0.35
|
||||
- @llamaindex/vllm@0.0.6
|
||||
|
||||
## 0.8.16
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [e60328b]
|
||||
- @llamaindex/readers@1.0.12
|
||||
|
||||
## 0.8.15
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- 3d503cb: Update azure cosmos db
|
||||
- 5dae534: fix: propagate queryStr to concrete vectorStore
|
||||
|
||||
## 0.8.14
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- 630b425: feat: add Azure CosmosDB NoSql Chat store
|
||||
|
||||
## 0.8.13
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "llamaindex",
|
||||
"version": "0.8.13",
|
||||
"version": "0.8.27",
|
||||
"license": "MIT",
|
||||
"type": "module",
|
||||
"keywords": [
|
||||
@@ -20,15 +20,15 @@
|
||||
"llamaindex"
|
||||
],
|
||||
"dependencies": {
|
||||
"@anthropic-ai/sdk": "0.27.1",
|
||||
"@anthropic-ai/sdk": "0.32.1",
|
||||
"@aws-crypto/sha256-js": "^5.2.0",
|
||||
"@aws-sdk/client-sso-oidc": "^3.679.0",
|
||||
"@aws-sdk/client-sso-oidc": "^3.693.0",
|
||||
"@azure/cosmos": "^4.1.1",
|
||||
"@azure/identity": "^4.4.1",
|
||||
"@datastax/astra-db-ts": "^1.4.1",
|
||||
"@discoveryjs/json-ext": "^0.6.1",
|
||||
"@google-cloud/vertexai": "1.2.0",
|
||||
"@google/generative-ai": "0.12.0",
|
||||
"@google-cloud/vertexai": "1.9.0",
|
||||
"@google/generative-ai": "0.21.0",
|
||||
"@grpc/grpc-js": "^1.12.2",
|
||||
"@llamaindex/anthropic": "workspace:*",
|
||||
"@llamaindex/clip": "workspace:*",
|
||||
@@ -45,9 +45,9 @@
|
||||
"@llamaindex/readers": "workspace:*",
|
||||
"@llamaindex/replicate": "workspace:*",
|
||||
"@llamaindex/vllm": "workspace:*",
|
||||
"@mistralai/mistralai": "^1.0.4",
|
||||
"@mistralai/mistralai": "^1.3.4",
|
||||
"@mixedbread-ai/sdk": "^2.2.11",
|
||||
"@pinecone-database/pinecone": "^3.0.2",
|
||||
"@pinecone-database/pinecone": "^4.0.0",
|
||||
"@qdrant/js-client-rest": "^1.11.0",
|
||||
"@types/lodash": "^4.17.7",
|
||||
"@types/node": "^22.9.0",
|
||||
@@ -55,20 +55,20 @@
|
||||
"@upstash/vector": "^1.1.5",
|
||||
"@zilliz/milvus2-sdk-node": "^2.4.6",
|
||||
"ajv": "^8.17.1",
|
||||
"assemblyai": "^4.7.0",
|
||||
"assemblyai": "^4.8.0",
|
||||
"chromadb": "1.9.2",
|
||||
"chromadb-default-embed": "^2.13.2",
|
||||
"cohere-ai": "7.13.0",
|
||||
"gpt-tokenizer": "^2.6.0",
|
||||
"groq-sdk": "^0.6.1",
|
||||
"cohere-ai": "7.14.0",
|
||||
"gpt-tokenizer": "^2.6.2",
|
||||
"groq-sdk": "^0.8.0",
|
||||
"js-tiktoken": "^1.0.14",
|
||||
"lodash": "^4.17.21",
|
||||
"magic-bytes.js": "^1.10.0",
|
||||
"mongodb": "^6.7.0",
|
||||
"openai": "^4.60.0",
|
||||
"openai": "^4.73.1",
|
||||
"pathe": "^1.1.2",
|
||||
"rake-modified": "^1.0.8",
|
||||
"weaviate-client": "^3.1.4",
|
||||
"weaviate-client": "^3.2.3",
|
||||
"wikipedia": "^2.1.2",
|
||||
"wink-nlp": "^2.3.0",
|
||||
"zod": "^3.23.8"
|
||||
@@ -86,9 +86,8 @@
|
||||
}
|
||||
},
|
||||
"devDependencies": {
|
||||
"@huggingface/transformers": "^3.0.2",
|
||||
"@swc/cli": "^0.5.0",
|
||||
"@swc/core": "^1.7.22",
|
||||
"@swc/core": "^1.9.2",
|
||||
"@vercel/postgres": "^0.10.0",
|
||||
"concurrently": "^9.1.0",
|
||||
"glob": "^11.0.0",
|
||||
@@ -98,7 +97,7 @@
|
||||
"typescript": "^5.6.3"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=20.0.0"
|
||||
"node": ">=18.0.0"
|
||||
},
|
||||
"types": "./dist/type/index.d.ts",
|
||||
"main": "./dist/cjs/index.js",
|
||||
@@ -125,6 +124,16 @@
|
||||
"default": "./dist/cjs/index.js"
|
||||
}
|
||||
},
|
||||
"./next": {
|
||||
"import": {
|
||||
"types": "./dist/type/next.d.ts",
|
||||
"default": "./dist/next.js"
|
||||
},
|
||||
"require": {
|
||||
"types": "./dist/type/next.d.ts",
|
||||
"default": "./dist/cjs/next.js"
|
||||
}
|
||||
},
|
||||
"./register": "./register.js",
|
||||
"./internal/*": {
|
||||
"import": "./dist/not-allow.js",
|
||||
|
||||
@@ -18,6 +18,7 @@ import {
|
||||
type NodeWithScore,
|
||||
} from "@llamaindex/core/schema";
|
||||
import type { BaseIndexStore } from "@llamaindex/core/storage/index-store";
|
||||
import { extractText } from "@llamaindex/core/utils";
|
||||
import type { ServiceContext } from "../../ServiceContext.js";
|
||||
import { nodeParserFromSettingsOrContext } from "../../Settings.js";
|
||||
import { RetrieverQueryEngine } from "../../engines/query/RetrieverQueryEngine.js";
|
||||
@@ -449,8 +450,13 @@ export class VectorIndexRetriever extends BaseRetriever {
|
||||
filters?: MetadataFilters,
|
||||
): Promise<NodeWithScore[]> {
|
||||
// convert string message to multi-modal format
|
||||
|
||||
let queryStr = query;
|
||||
if (typeof query === "string") {
|
||||
query = [{ type: "text", text: query }];
|
||||
queryStr = query;
|
||||
query = [{ type: "text", text: queryStr }];
|
||||
} else {
|
||||
queryStr = extractText(query);
|
||||
}
|
||||
// overwrite embed model if specified, otherwise use the one from the vector store
|
||||
const embedModel = this.index.embedModel ?? vectorStore.embedModel;
|
||||
@@ -460,6 +466,7 @@ export class VectorIndexRetriever extends BaseRetriever {
|
||||
const queryEmbedding = await embedModel.getQueryEmbedding(item);
|
||||
if (queryEmbedding) {
|
||||
const result = await vectorStore.query({
|
||||
queryStr,
|
||||
queryEmbedding,
|
||||
mode: VectorStoreQueryMode.DEFAULT,
|
||||
similarityTopK: this.topK[type]!,
|
||||
|
||||
@@ -4,6 +4,7 @@ import {
|
||||
HarmBlockThreshold,
|
||||
HarmCategory,
|
||||
type SafetySetting,
|
||||
SchemaType,
|
||||
} from "@google/generative-ai";
|
||||
|
||||
import { type GenerateContentResponse } from "@google-cloud/vertexai";
|
||||
@@ -161,7 +162,7 @@ export const mapBaseToolToGeminiFunctionDeclaration = (
|
||||
tool: BaseTool,
|
||||
): FunctionDeclaration => {
|
||||
const parameters: FunctionDeclarationSchema = {
|
||||
type: tool.metadata.parameters?.type.toUpperCase(),
|
||||
type: tool.metadata.parameters?.type.toLowerCase() as SchemaType,
|
||||
properties: tool.metadata.parameters?.properties,
|
||||
description: tool.metadata.parameters?.description,
|
||||
required: tool.metadata.parameters?.required,
|
||||
|
||||
@@ -15,20 +15,33 @@
|
||||
*
|
||||
* @module
|
||||
*/
|
||||
import { createRequire } from "node:module";
|
||||
|
||||
const require = createRequire(import.meta.url);
|
||||
|
||||
const nextJsVersion: string = require("next/package.json").version;
|
||||
const is14OrLower =
|
||||
nextJsVersion.startsWith("14.") || nextJsVersion.startsWith("13.");
|
||||
|
||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||
export default function withLlamaIndex(config: any) {
|
||||
config.experimental = config.experimental ?? {};
|
||||
// needed for transformers, see https://huggingface.co/docs/transformers.js/en/tutorials/next#step-2-install-and-configure-transformersjs
|
||||
config.experimental.serverComponentsExternalPackages =
|
||||
config.experimental.serverComponentsExternalPackages ?? [];
|
||||
config.experimental.serverComponentsExternalPackages.push(
|
||||
"@huggingface/transformers",
|
||||
);
|
||||
if (is14OrLower) {
|
||||
config.experimental.serverComponentsExternalPackages =
|
||||
config.experimental.serverComponentsExternalPackages ?? [];
|
||||
config.experimental.serverComponentsExternalPackages.push(
|
||||
"@huggingface/transformers",
|
||||
);
|
||||
} else {
|
||||
config.serverExternalPackages = config.serverExternalPackages ?? [];
|
||||
config.serverExternalPackages.push("@huggingface/transformers");
|
||||
}
|
||||
|
||||
const userWebpack = config.webpack;
|
||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||
config.webpack = function (webpackConfig: any, options: any) {
|
||||
if (userWebpack) {
|
||||
webpackConfig = userWebpack(webpackConfig);
|
||||
webpackConfig = userWebpack(webpackConfig, options);
|
||||
}
|
||||
webpackConfig.resolve.alias = {
|
||||
...webpackConfig.resolve.alias,
|
||||
|
||||
@@ -15,5 +15,6 @@ export * from "@llamaindex/readers/json";
|
||||
export * from "@llamaindex/readers/markdown";
|
||||
export * from "@llamaindex/readers/mongo";
|
||||
export * from "@llamaindex/readers/notion";
|
||||
export * from "@llamaindex/readers/obsidian";
|
||||
export * from "@llamaindex/readers/pdf";
|
||||
export * from "@llamaindex/readers/text";
|
||||
|
||||
@@ -0,0 +1,186 @@
|
||||
/* eslint-disable @typescript-eslint/no-explicit-any */
|
||||
import type {
|
||||
ChatMessage,
|
||||
MessageContent,
|
||||
MessageType,
|
||||
} from "@llamaindex/core/llms";
|
||||
import { BaseChatStore } from "@llamaindex/core/storage/chat-store";
|
||||
import type { Collection } from "mongodb";
|
||||
import { MongoClient } from "mongodb";
|
||||
const DEFAULT_CHAT_DATABASE = "ChatStoreDB";
|
||||
const DEFAULT_CHAT_Collection = "ChatStoreCollection";
|
||||
|
||||
export interface AzureCosmosVCoreChatStoreConfig {
|
||||
mongoClient?: MongoClient;
|
||||
dbName?: string;
|
||||
collectionName?: string;
|
||||
}
|
||||
|
||||
export class AzureCosmosVCoreChatStore<
|
||||
AdditionalMessageOptions extends object = object,
|
||||
> extends BaseChatStore<AdditionalMessageOptions> {
|
||||
private mongoClient: MongoClient;
|
||||
|
||||
private dbName: string;
|
||||
private collectionName: string;
|
||||
|
||||
private collection?: Collection;
|
||||
|
||||
/**
|
||||
* Create a new AzureCosmosVCoreChatStore instance.
|
||||
*/
|
||||
constructor({
|
||||
mongoClient,
|
||||
dbName = DEFAULT_CHAT_DATABASE,
|
||||
collectionName = DEFAULT_CHAT_Collection,
|
||||
}: AzureCosmosVCoreChatStoreConfig) {
|
||||
super();
|
||||
if (!mongoClient) {
|
||||
throw new Error(
|
||||
"MongoClient is required for AzureCosmosVCoreChatStore initialization",
|
||||
);
|
||||
}
|
||||
this.mongoClient = mongoClient;
|
||||
this.dbName = dbName;
|
||||
this.collectionName = collectionName;
|
||||
}
|
||||
|
||||
static fromMongoClient(
|
||||
mongoClient: MongoClient,
|
||||
dbName: string = DEFAULT_CHAT_DATABASE,
|
||||
collectionName: string = DEFAULT_CHAT_Collection,
|
||||
) {
|
||||
return new AzureCosmosVCoreChatStore({
|
||||
mongoClient,
|
||||
dbName,
|
||||
collectionName,
|
||||
});
|
||||
}
|
||||
|
||||
client(): MongoClient {
|
||||
return this.mongoClient;
|
||||
}
|
||||
|
||||
private convertToChatMessage(
|
||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||
message: any,
|
||||
): ChatMessage<AdditionalMessageOptions> {
|
||||
return {
|
||||
content: message.content as MessageContent,
|
||||
role: message.role as MessageType,
|
||||
options: message.options as AdditionalMessageOptions,
|
||||
} as ChatMessage<AdditionalMessageOptions>;
|
||||
}
|
||||
|
||||
private convertTovCoreMessage(
|
||||
message: ChatMessage<AdditionalMessageOptions>,
|
||||
): // eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||
any {
|
||||
return {
|
||||
content: message.content,
|
||||
role: message.role,
|
||||
options: message.options,
|
||||
};
|
||||
}
|
||||
|
||||
private async ensureCollection(): Promise<Collection> {
|
||||
if (!this.collection) {
|
||||
this.collection = this.mongoClient
|
||||
.db(this.dbName)
|
||||
.collection(this.collectionName);
|
||||
}
|
||||
return this.collection;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set messages for a given key.
|
||||
*/
|
||||
async setMessages(
|
||||
key: string,
|
||||
messages: ChatMessage<AdditionalMessageOptions>[],
|
||||
): Promise<void> {
|
||||
const collection = await this.ensureCollection();
|
||||
const inputMessages = messages.map(this.convertTovCoreMessage);
|
||||
await collection.updateOne(
|
||||
{ id: key },
|
||||
{ $set: { messages: inputMessages } },
|
||||
{ upsert: true },
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get messages for a given key.
|
||||
*/
|
||||
async getMessages(
|
||||
key: string,
|
||||
): Promise<ChatMessage<AdditionalMessageOptions>[]> {
|
||||
const collection = await this.ensureCollection();
|
||||
const res = await collection.findOne({
|
||||
id: key,
|
||||
});
|
||||
const messageHistory = res?.messages ?? [];
|
||||
const result = messageHistory.map(this.convertToChatMessage);
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Add a message for a given key.
|
||||
*/
|
||||
async addMessage(
|
||||
key: string,
|
||||
message: ChatMessage<AdditionalMessageOptions>,
|
||||
idx?: number,
|
||||
): Promise<void> {
|
||||
const collection = await this.ensureCollection();
|
||||
const res = await this.getMessages(key);
|
||||
const messageHistory = res.map(this.convertTovCoreMessage) ?? [];
|
||||
messageHistory.splice(
|
||||
idx ?? messageHistory.length,
|
||||
0,
|
||||
this.convertTovCoreMessage(message),
|
||||
);
|
||||
await collection.updateOne(
|
||||
{ id: key },
|
||||
{ $set: { messages: messageHistory } },
|
||||
{ upsert: true },
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Deletes all messages for a given key.
|
||||
*/
|
||||
async deleteMessages(key: string): Promise<void> {
|
||||
const collection = await this.ensureCollection();
|
||||
try {
|
||||
await collection.deleteOne({ id: key });
|
||||
// eslint-disable-next-line no-empty
|
||||
} catch (e) {}
|
||||
}
|
||||
|
||||
/**
|
||||
* Deletes one message at idx index for a given key.
|
||||
*/
|
||||
async deleteMessage(key: string, idx: number): Promise<void> {
|
||||
// const collection = await this.ensureCollection();
|
||||
const messageHistory = await this.getMessages(key);
|
||||
if (idx >= 0 && idx < messageHistory.length) {
|
||||
messageHistory.splice(idx, 1);
|
||||
await this.setMessages(key, messageHistory);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Get all keys.
|
||||
*/
|
||||
async getKeys(): Promise<IterableIterator<string>> {
|
||||
const collection = await this.ensureCollection();
|
||||
const keys = await collection.distinct("id");
|
||||
|
||||
function* keyGenerator(): IterableIterator<string> {
|
||||
for (const key of keys) {
|
||||
yield key;
|
||||
}
|
||||
}
|
||||
return keyGenerator();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,345 @@
|
||||
import { CosmosClient, type Container, type Database } from "@azure/cosmos";
|
||||
import { DefaultAzureCredential, type TokenCredential } from "@azure/identity";
|
||||
import type {
|
||||
ChatMessage,
|
||||
MessageContent,
|
||||
MessageType,
|
||||
} from "@llamaindex/core/llms";
|
||||
import { BaseChatStore } from "@llamaindex/core/storage/chat-store";
|
||||
import { getEnv } from "@llamaindex/env";
|
||||
|
||||
const USER_AGENT_SUFFIX = "llamaindex-cdbnosql-chatstore-javascript";
|
||||
const DEFAULT_CHAT_DATABASE = "ChatMessagesDB";
|
||||
const DEFAULT_CHAT_CONTAINER = "ChatMessagesContainer";
|
||||
const DEFAULT_OFFER_THROUGHPUT = 400;
|
||||
|
||||
function parseConnectionString(connectionString: string): {
|
||||
endpoint: string;
|
||||
key: string;
|
||||
} {
|
||||
const parts = connectionString.split(";");
|
||||
let endpoint = "";
|
||||
let accountKey = "";
|
||||
|
||||
parts.forEach((part) => {
|
||||
const [key, value] = part.split("=");
|
||||
if (key && key.trim() === "AccountEndpoint") {
|
||||
endpoint = value?.trim() ?? "";
|
||||
} else if ((key ?? "").trim() === "AccountKey") {
|
||||
accountKey = value?.trim() ?? "";
|
||||
}
|
||||
});
|
||||
|
||||
if (!endpoint || !accountKey) {
|
||||
throw new Error(
|
||||
"Invalid connection string: missing AccountEndpoint or AccountKey.",
|
||||
);
|
||||
}
|
||||
return { endpoint, key: accountKey };
|
||||
}
|
||||
|
||||
export interface AzureCosmosChatDatabaseProperties {
|
||||
throughput?: number;
|
||||
}
|
||||
|
||||
export interface AzureCosmosChatContainerProperties {
|
||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||
[key: string]: any;
|
||||
}
|
||||
|
||||
export interface AzureCosmosNoSqlChatStoreConfig {
|
||||
cosmosClient?: CosmosClient;
|
||||
dbName?: string;
|
||||
containerName?: string;
|
||||
userId?: string;
|
||||
sessionId?: string;
|
||||
cosmosContainerProperties?: AzureCosmosChatContainerProperties;
|
||||
cosmosDatabaseProperties?: AzureCosmosChatDatabaseProperties;
|
||||
ttlInSeconds?: number;
|
||||
}
|
||||
|
||||
export class AzureCosmosNoSqlChatStore<
|
||||
AdditionalMessageOptions extends object = object,
|
||||
> extends BaseChatStore<AdditionalMessageOptions> {
|
||||
private userId: string;
|
||||
private ttl: number;
|
||||
private cosmosClient: CosmosClient;
|
||||
private database!: Database;
|
||||
private container!: Container;
|
||||
private initPromise?: Promise<void>;
|
||||
|
||||
private dbName: string;
|
||||
private containerName: string;
|
||||
private cosmosContainerProperties: AzureCosmosChatContainerProperties;
|
||||
private cosmosDatabaseProperties: AzureCosmosChatDatabaseProperties;
|
||||
private initialize: () => Promise<void>;
|
||||
|
||||
constructor({
|
||||
cosmosClient,
|
||||
dbName = DEFAULT_CHAT_DATABASE,
|
||||
containerName = DEFAULT_CHAT_CONTAINER,
|
||||
cosmosContainerProperties = { partitionKey: "/userId" },
|
||||
cosmosDatabaseProperties = {},
|
||||
ttlInSeconds = -1,
|
||||
}: AzureCosmosNoSqlChatStoreConfig) {
|
||||
super();
|
||||
if (!cosmosClient) {
|
||||
throw new Error(
|
||||
"CosmosClient is required for AzureCosmosDBNoSQLChatStore initialization",
|
||||
);
|
||||
}
|
||||
this.ttl = ttlInSeconds;
|
||||
this.userId = cosmosContainerProperties.userId || "anonymous";
|
||||
this.cosmosClient = cosmosClient;
|
||||
this.dbName = dbName;
|
||||
this.containerName = containerName;
|
||||
this.cosmosContainerProperties = cosmosContainerProperties;
|
||||
this.cosmosDatabaseProperties = cosmosDatabaseProperties;
|
||||
|
||||
this.initialize = () => {
|
||||
if (this.initPromise === undefined) {
|
||||
this.initPromise = this.init().catch((error) => {
|
||||
console.error(
|
||||
"Error during AzureCosmosDBNoSQLChatStore initialization",
|
||||
error,
|
||||
);
|
||||
});
|
||||
}
|
||||
return this.initPromise;
|
||||
};
|
||||
}
|
||||
|
||||
client(): CosmosClient {
|
||||
return this.cosmosClient;
|
||||
}
|
||||
|
||||
// Asynchronous initialization method to create database and container
|
||||
private async init(): Promise<void> {
|
||||
// Set default throughput if not provided
|
||||
const throughput =
|
||||
this.cosmosDatabaseProperties?.throughput || DEFAULT_OFFER_THROUGHPUT;
|
||||
|
||||
// Create the database if it doesn't exist
|
||||
const { database } = await this.cosmosClient.databases.createIfNotExists({
|
||||
id: this.dbName,
|
||||
throughput,
|
||||
});
|
||||
this.database = database;
|
||||
|
||||
// Create the container if it doesn't exist
|
||||
const { container } = await this.database.containers.createIfNotExists({
|
||||
id: this.containerName,
|
||||
throughput: this.cosmosContainerProperties?.throughput,
|
||||
partitionKey: "/userId",
|
||||
indexingPolicy: this.cosmosContainerProperties?.indexingPolicy,
|
||||
defaultTtl: this.ttl,
|
||||
uniqueKeyPolicy: this.cosmosContainerProperties?.uniqueKeyPolicy,
|
||||
conflictResolutionPolicy:
|
||||
this.cosmosContainerProperties?.conflictResolutionPolicy,
|
||||
computedProperties: this.cosmosContainerProperties?.computedProperties,
|
||||
});
|
||||
this.container = container;
|
||||
}
|
||||
/**
|
||||
* Static method for creating an instance using a connection string.
|
||||
* If no connection string is provided, it will attempt to use the env variable `AZURE_COSMOSDB_NOSQL_CONNECTION_STRING` as connection string.
|
||||
* @returns Instance of AzureCosmosNoSqlKVStore
|
||||
*/
|
||||
static fromConnectionString(
|
||||
config: {
|
||||
connectionString?: string;
|
||||
} & AzureCosmosNoSqlChatStoreConfig = {},
|
||||
): AzureCosmosNoSqlChatStore {
|
||||
const cosmosConnectionString =
|
||||
config.connectionString ||
|
||||
(getEnv("AZURE_COSMOSDB_NOSQL_CONNECTION_STRING") as string);
|
||||
if (!cosmosConnectionString) {
|
||||
throw new Error("Azure CosmosDB connection string must be provided");
|
||||
}
|
||||
const { endpoint, key } = parseConnectionString(cosmosConnectionString);
|
||||
const cosmosClient = new CosmosClient({
|
||||
endpoint,
|
||||
key,
|
||||
userAgentSuffix: USER_AGENT_SUFFIX,
|
||||
});
|
||||
return new AzureCosmosNoSqlChatStore({
|
||||
...config,
|
||||
cosmosClient,
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Static method for creating an instance using a account endpoint and key.
|
||||
* If no endpoint and key is provided, it will attempt to use the env variable `AZURE_COSMOSDB_NOSQL_ACCOUNT_ENDPOINT` as enpoint and `AZURE_COSMOSDB_NOSQL_ACCOUNT_KEY` as key.
|
||||
* @returns Instance of AzureCosmosNoSqlKVStore
|
||||
*/
|
||||
static fromAccountAndKey(
|
||||
config: {
|
||||
endpoint?: string;
|
||||
key?: string;
|
||||
} & AzureCosmosNoSqlChatStoreConfig = {},
|
||||
): AzureCosmosNoSqlChatStore {
|
||||
const cosmosEndpoint =
|
||||
config.endpoint ||
|
||||
(getEnv("AZURE_COSMOSDB_NOSQL_ACCOUNT_ENDPOINT") as string);
|
||||
const cosmosKey =
|
||||
config.key || (getEnv("AZURE_COSMOSDB_NOSQL_ACCOUNT_KEY") as string);
|
||||
|
||||
if (!cosmosEndpoint || !cosmosKey) {
|
||||
throw new Error(
|
||||
"Azure CosmosDB account endpoint and key must be provided",
|
||||
);
|
||||
}
|
||||
const cosmosClient = new CosmosClient({
|
||||
endpoint: cosmosEndpoint,
|
||||
key: cosmosKey,
|
||||
userAgentSuffix: USER_AGENT_SUFFIX,
|
||||
});
|
||||
return new AzureCosmosNoSqlChatStore({
|
||||
...config,
|
||||
cosmosClient,
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Static method for creating an instance using AAD token.
|
||||
* If no endpoint and credentials are provided, it will attempt to use the env variable `AZURE_COSMOSDB_NOSQL_ACCOUNT_ENDPOINT` as endpoint and use DefaultAzureCredential() as credentials.
|
||||
* @returns Instance of AzureCosmosNoSqlKVStore
|
||||
*/
|
||||
static fromAadToken(
|
||||
config: {
|
||||
endpoint?: string;
|
||||
credential?: TokenCredential;
|
||||
} & AzureCosmosNoSqlChatStoreConfig = {},
|
||||
): AzureCosmosNoSqlChatStore {
|
||||
const cosmosEndpoint =
|
||||
config.endpoint ||
|
||||
(getEnv("AZURE_COSMOSDB_NOSQL_CONNECTION_STRING") as string);
|
||||
|
||||
if (!cosmosEndpoint) {
|
||||
throw new Error("Azure CosmosDB account endpoint must be provided");
|
||||
}
|
||||
const credentials = config.credential ?? new DefaultAzureCredential();
|
||||
const cosmosClient = new CosmosClient({
|
||||
endpoint: cosmosEndpoint,
|
||||
aadCredentials: credentials,
|
||||
userAgentSuffix: USER_AGENT_SUFFIX,
|
||||
});
|
||||
return new AzureCosmosNoSqlChatStore({
|
||||
...config,
|
||||
cosmosClient,
|
||||
});
|
||||
}
|
||||
|
||||
private convertToChatMessage(
|
||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||
message: any,
|
||||
): ChatMessage<AdditionalMessageOptions> {
|
||||
return {
|
||||
content: message.content as MessageContent,
|
||||
role: message.role as MessageType,
|
||||
options: message.options as AdditionalMessageOptions,
|
||||
} as ChatMessage<AdditionalMessageOptions>;
|
||||
}
|
||||
|
||||
private convertToCosmosMessage(
|
||||
message: ChatMessage<AdditionalMessageOptions>,
|
||||
): // eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||
any {
|
||||
return {
|
||||
content: message.content,
|
||||
role: message.role,
|
||||
options: message.options,
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Set messages for a given key.
|
||||
*/
|
||||
async setMessages(
|
||||
key: string,
|
||||
messages: ChatMessage<AdditionalMessageOptions>[],
|
||||
): Promise<void> {
|
||||
await this.initialize();
|
||||
const inputMessages = messages.map(this.convertToCosmosMessage);
|
||||
await this.container.items.upsert({
|
||||
id: key,
|
||||
messages: inputMessages,
|
||||
userId: this.userId,
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Get messages for a given key.
|
||||
*/
|
||||
async getMessages(
|
||||
key: string,
|
||||
): Promise<ChatMessage<AdditionalMessageOptions>[]> {
|
||||
await this.initialize();
|
||||
const res = await this.container.item(key, this.userId).read();
|
||||
const messageHistory = res?.resource?.messages ?? [];
|
||||
const result = messageHistory.map(this.convertToChatMessage);
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Add a message for a given key.
|
||||
*/
|
||||
async addMessage(
|
||||
key: string,
|
||||
message: ChatMessage<AdditionalMessageOptions>,
|
||||
idx?: number,
|
||||
): Promise<void> {
|
||||
await this.initialize();
|
||||
const res = await this.container.item(key, this.userId).read();
|
||||
const messageHistory = res?.resource?.messages ?? [];
|
||||
if (idx === undefined) {
|
||||
messageHistory.push(this.convertToCosmosMessage(message));
|
||||
} else {
|
||||
messageHistory.splice(idx, 0, this.convertToCosmosMessage(message));
|
||||
}
|
||||
await this.setMessages(key, messageHistory);
|
||||
}
|
||||
|
||||
/**
|
||||
* Deletes all messages for a given key.
|
||||
*/
|
||||
async deleteMessages(key: string): Promise<void> {
|
||||
await this.initialize();
|
||||
try {
|
||||
await this.container.item(key, this.userId).delete();
|
||||
// eslint-disable-next-line no-empty
|
||||
} catch (e) {}
|
||||
}
|
||||
|
||||
/**
|
||||
* Deletes one message at idx index for a given key.
|
||||
*/
|
||||
async deleteMessage(key: string, idx: number): Promise<void> {
|
||||
await this.initialize();
|
||||
const res = await this.container.item(key, this.userId).read();
|
||||
const messageHistory = res?.resource?.messages ?? [];
|
||||
if (idx >= 0 && idx < messageHistory.length) {
|
||||
messageHistory.splice(idx, 1);
|
||||
await this.setMessages(key, messageHistory);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Get all keys.
|
||||
*/
|
||||
async getKeys(): Promise<IterableIterator<string>> {
|
||||
await this.initialize();
|
||||
const result = await this.container.items
|
||||
.query("Select c.id from c")
|
||||
.fetchAll();
|
||||
const keys = result.resources.map((res: { id: string }) => res.id);
|
||||
|
||||
function* keyGenerator(): IterableIterator<string> {
|
||||
for (const key of keys) {
|
||||
yield key;
|
||||
}
|
||||
}
|
||||
return keyGenerator();
|
||||
}
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user