Compare commits

..

1 Commits

Author SHA1 Message Date
Alex Yang fb46648855 fix: steaming chat in ollama 2024-11-10 23:10:44 -08:00
172 changed files with 3332 additions and 10122 deletions
+10
View File
@@ -0,0 +1,10 @@
---
"@llamaindex/env": patch
"llamaindex": patch
"@llamaindex/clip": patch
"@llamaindex/huggingface": patch
---
chore: bump `@huggingface/transformers`
Upgrade to v3, please read https://github.com/huggingface/transformers.js/releases/tag/3.0.0 for more information.
+8
View File
@@ -0,0 +1,8 @@
---
"llamaindex": patch
"@llamaindex/ollama": patch
---
feat: support ollama tool call
Note that `OllamaEmbedding` now is not the subclass of `Ollama`.
+3 -7
View File
@@ -1,16 +1,12 @@
<p align="center">
<img height="100" width="100" alt="LlamaIndex logo" src="https://ts.llamaindex.ai/square.svg" />
</p>
<h1 align="center">LlamaIndex.TS</h1>
<h3 align="center">
Data framework for your LLM application.
</h3>
# LlamaIndex.TS
[![NPM Version](https://img.shields.io/npm/v/llamaindex)](https://www.npmjs.com/package/llamaindex)
[![NPM License](https://img.shields.io/npm/l/llamaindex)](https://www.npmjs.com/package/llamaindex)
[![NPM Downloads](https://img.shields.io/npm/dm/llamaindex)](https://www.npmjs.com/package/llamaindex)
[![Discord](https://img.shields.io/discord/1059199217496772688)](https://discord.com/invite/eN6D2HQ4aX)
LlamaIndex is a data framework for your LLM application.
Use your own data with large language models (LLMs, OpenAI ChatGPT and others) in JS runtime environments with TypeScript support.
Documentation: https://ts.llamaindex.ai/
-131
View File
@@ -1,136 +1,5 @@
# docs
## 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
- llamaindex@0.8.13
- @llamaindex/examples@0.0.16
## 0.0.117
### Patch Changes
- @llamaindex/examples@0.0.15
## 0.0.116
### Patch Changes
- llamaindex@0.8.12
## 0.0.115
### Patch Changes
- llamaindex@0.8.11
## 0.0.114
### Patch Changes
- Updated dependencies [f066e50]
- llamaindex@0.8.10
- @llamaindex/examples@0.0.14
## 0.0.113
### Patch Changes
- Updated dependencies [4fc001c]
- Updated dependencies [4d4cd8a]
- llamaindex@0.8.9
## 0.0.112
### Patch Changes
-6
View File
@@ -62,12 +62,6 @@ const config = {
({
// Replace with your project's social card
image: "img/favicon.png", // TODO change this
announcementBar: {
id: "migrate_to_next",
content:
'We are migrating to Next.js based documentation. Check it out <a href="https://ts.llamaindex.ai/docs/llamaindex">here</a>!',
isCloseable: false,
},
navbar: {
title: "LlamaIndex.TS",
logo: {
+8 -8
View File
@@ -1,6 +1,6 @@
{
"name": "docs",
"version": "0.0.131",
"version": "0.0.112",
"private": true,
"scripts": {
"docusaurus": "docusaurus",
@@ -15,23 +15,23 @@
"typecheck": "tsc"
},
"dependencies": {
"@docusaurus/core": "3.6.1",
"@docusaurus/remark-plugin-npm2yarn": "3.6.1",
"@docusaurus/core": "3.6.0",
"@docusaurus/remark-plugin-npm2yarn": "3.6.0",
"@llamaindex/examples": "workspace:*",
"@mdx-js/react": "^3.1.0",
"clsx": "^2.1.1",
"llamaindex": "workspace:*",
"postcss": "^8.4.49",
"postcss": "^8.4.47",
"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.1",
"@docusaurus/preset-classic": "3.6.1",
"@docusaurus/theme-classic": "3.6.1",
"@docusaurus/types": "3.6.1",
"@docusaurus/module-type-aliases": "3.6.0",
"@docusaurus/preset-classic": "3.6.0",
"@docusaurus/theme-classic": "3.6.0",
"@docusaurus/types": "3.6.0",
"@tsconfig/docusaurus": "2.0.3",
"@types/node": "^22.9.0",
"docusaurus-plugin-typedoc": "1.0.5",
-201
View File
@@ -1,206 +1,5 @@
# @llamaindex/doc
## 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
- Updated dependencies [a7b0ac3]
- Updated dependencies [ee20c44]
- Updated dependencies [c69605f]
- @llamaindex/core@0.4.10
- @llamaindex/workflow@0.0.6
- llamaindex@0.8.13
- @llamaindex/cloud@2.0.10
- @llamaindex/node-parser@0.0.11
- @llamaindex/openai@0.1.35
- @llamaindex/readers@1.0.11
## 0.0.15
### Patch Changes
- Updated dependencies [ea92b69]
- Updated dependencies [fadc8b8]
- @llamaindex/workflow@0.0.5
## 0.0.14
### Patch Changes
- Updated dependencies [7ae6eaa]
- @llamaindex/core@0.4.9
- @llamaindex/openai@0.1.34
- @llamaindex/cloud@2.0.9
- llamaindex@0.8.12
- @llamaindex/node-parser@0.0.10
- @llamaindex/readers@1.0.10
## 0.0.13
### Patch Changes
- Updated dependencies [f865c98]
- @llamaindex/core@0.4.8
- @llamaindex/cloud@2.0.8
- llamaindex@0.8.11
- @llamaindex/node-parser@0.0.9
- @llamaindex/openai@0.1.33
- @llamaindex/readers@1.0.9
## 0.0.12
### Patch Changes
- Updated dependencies [f066e50]
- Updated dependencies [d89ebe0]
- Updated dependencies [fd8c882]
- Updated dependencies [fd8c882]
- llamaindex@0.8.10
- @llamaindex/core@0.4.7
- @llamaindex/workflow@0.0.4
- @llamaindex/cloud@2.0.7
- @llamaindex/node-parser@0.0.8
- @llamaindex/openai@0.1.32
- @llamaindex/readers@1.0.8
## 0.0.11
### Patch Changes
- Updated dependencies [4fc001c]
- Updated dependencies [4d4cd8a]
- llamaindex@0.8.9
- @llamaindex/cloud@2.0.6
- @llamaindex/core@0.4.6
- @llamaindex/node-parser@0.0.7
- @llamaindex/openai@0.1.31
- @llamaindex/readers@1.0.7
## 0.0.10
### Patch Changes
-2
View File
@@ -6,7 +6,6 @@ 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"];
@@ -27,7 +26,6 @@ const config = {
}),
);
}
config.resolve.alias["replicate"] = false;
return config;
},
};
+24 -24
View File
@@ -1,6 +1,6 @@
{
"name": "@llamaindex/doc",
"version": "0.0.29",
"version": "0.0.10",
"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.9",
"@llamaindex/chat-ui": "0.0.5",
"@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.4",
"@number-flow/react": "^0.3.0",
"@radix-ui/react-dialog": "^1.1.2",
"@radix-ui/react-icons": "^1.3.2",
"@radix-ui/react-icons": "^1.3.1",
"@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.4",
"@radix-ui/react-tooltip": "^1.1.3",
"@vercel/functions": "^1.5.0",
"ai": "^3.4.33",
"ai": "^3.4.31",
"class-variance-authority": "^0.7.0",
"clsx": "2.1.1",
"foxact": "^0.2.41",
"framer-motion": "^11.11.17",
"fumadocs-core": "14.4.2",
"fumadocs-docgen": "^1.3.2",
"foxact": "^0.2.40",
"framer-motion": "^11.11.11",
"fumadocs-core": "14.2.0",
"fumadocs-docgen": "^1.3.1",
"fumadocs-mdx": "^11.1.1",
"fumadocs-openapi": "^5.7.0",
"fumadocs-openapi": "^5.5.6",
"fumadocs-twoslash": "^2.0.1",
"fumadocs-typescript": "^3.0.2",
"fumadocs-ui": "14.4.2",
"fumadocs-typescript": "^3.0.1",
"fumadocs-ui": "14.2.0",
"hast-util-to-jsx-runtime": "^2.3.2",
"llamaindex": "workspace:*",
"lucide-react": "^0.460.0",
"next": "15.0.3",
"next-themes": "^0.4.3",
"lucide-react": "^0.454.0",
"next": "15.0.2",
"next-themes": "^0.3.0",
"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.23.1",
"shiki": "^1.22.2",
"shiki-magic-move": "^0.5.0",
"swr": "^2.2.5",
"tailwind-merge": "^2.5.2",
"tailwindcss-animate": "^1.0.7",
"tree-sitter": "^0.22.1",
"tree-sitter-typescript": "^0.23.2",
"use-stick-to-bottom": "^1.0.42",
"web-tree-sitter": "^0.24.4",
"tree-sitter": "^0.22.0",
"tree-sitter-typescript": "^0.23.0",
"use-stick-to-bottom": "^1.0.41",
"web-tree-sitter": "^0.24.3",
"zod": "^3.23.8"
},
"devDependencies": {
"@next/env": "^15.0.3",
"@next/env": "^15.0.2",
"@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.49",
"postcss": "^8.4.47",
"remark": "^15.0.1",
"remark-gfm": "^4.0.0",
"remark-mdx": "^3.1.0",
"remark-stringify": "^11.0.0",
"tailwindcss": "^3.4.15",
"tailwindcss": "^3.4.14",
"tsx": "^4.19.2",
"typescript": "^5.6.3"
}
File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 6.3 KiB

+1 -4
View File
@@ -1,10 +1,7 @@
import { MockLLM } from "@llamaindex/core/utils";
import { LlamaIndexAdapter, type Message } from "ai";
import { Settings, SimpleChatEngine, type ChatMessage } from "llamaindex";
import { 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[] };
+8
View File
@@ -0,0 +1,8 @@
"use client";
import { ChatSection } from "@llamaindex/chat-ui";
import { useChat } from "ai/react";
export const ChatDemo = () => {
const handler = useChat();
return <ChatSection handler={handler} />;
};
@@ -1,16 +0,0 @@
"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>
);
};
@@ -1,57 +0,0 @@
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,
};
},
},
});
@@ -1,33 +0,0 @@
"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>
);
};
@@ -1,8 +0,0 @@
import { AI } from "./ai-action";
import { ChatSectionRSC } from "./chat-section";
export const ChatDemoRSC = () => (
<AI>
<ChatSectionRSC />
</AI>
);
@@ -1,41 +0,0 @@
"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,
};
}
+5 -27
View File
@@ -85,33 +85,6 @@ 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>
@@ -198,6 +171,11 @@ 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>
@@ -1,8 +1,8 @@
---
title: Using API Route
description: Chat interface for your LlamaIndexTS application using API Route
title: Chat-UI
description: Use chat-ui to add a chat interface to your LlamaIndexTS application.
---
import { ChatDemo } from '../../../../../components/demo/chat/api/demo';
import { ChatDemo } from '../../../../components/demo/chat';
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/api/demo.tsx",
"file": "./src/components/demo/chat.tsx",
"codeblock": true
}
```
@@ -37,7 +37,6 @@ 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:
@@ -1,6 +0,0 @@
{
"title": "Chat-UI",
"description": "Use chat-ui to add a chat interface to your LlamaIndexTS application.",
"defaultOpen": false,
"pages": ["chat", "rsc"]
}
@@ -1,68 +0,0 @@
---
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", "vercel"]
"pages": ["open-llm-metry", "lang-trace"]
}
@@ -1,80 +0,0 @@
---
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. Below are examples of how to use LlamaIndex with `streamText` from the Vercel AI SDK.
## Setup
First, install the required dependencies:
```bash
npm install @llamaindex/vercel ai
```
## Using Local Vector Store
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({
index,
description: "Search through the documents", // optional
});
// Use the tool with Vercel's AI SDK
streamText({
tools: { queryTool },
prompt: "Your question here",
model: openai("gpt-4"),
onFinish({ response }) {
console.log("Response:", response.messages); // log the response
},
}).toDataStream();
```
## 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({
index,
description: "Search through the documents",
});
// Use the tool with Vercel's AI SDK
streamText({
tools: { queryTool },
prompt: "Your question here",
model: openai("gpt-4"),
}).toDataStream();
```
## Next Steps
1. Explore [LlamaCloud](https://cloud.llamaindex.ai/) for managed document storage and retrieval
2. Join our [Discord community](https://discord.gg/llamaindex) for support and discussions
@@ -37,33 +37,6 @@ 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:
@@ -73,7 +46,3 @@ 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.
-8
View File
@@ -1,14 +1,6 @@
{
"extends": ["//"],
"tasks": {
"build": {
"outputs": [
".next",
".source",
"next-env.d.ts",
"src/content/docs/cloud/api/**"
]
},
"dev": {
"dependsOn": ["^build"]
}
-3
View File
@@ -1,4 +1 @@
POSTGRES_USER=runner
PINECONE_API_KEY=
PINECONE_INDEX_NAME=
PINECONE_NAMESPACE=
-172
View File
@@ -1,172 +0,0 @@
# 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/
-20
View File
@@ -1,20 +0,0 @@
{
"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"
}
}
-91
View File
@@ -1,91 +0,0 @@
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,
};
@@ -1,39 +0,0 @@
{
"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"]
}
@@ -1,4 +0,0 @@
// Generated by Wrangler by running `wrangler types`
// eslint-disable-next-line @typescript-eslint/no-empty-object-type
interface Env {}
@@ -1,7 +0,0 @@
name = "llamaindex-cloudflare-hono-example"
main = "src/index.ts"
compatibility_date = "2024-11-12"
compatibility_flags = ["nodejs_als"]
[observability]
enabled = true
@@ -1,120 +1,5 @@
# @llamaindex/cloudflare-worker-agent-test
## 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
- llamaindex@0.8.13
## 0.0.108
### Patch Changes
- llamaindex@0.8.12
## 0.0.107
### Patch Changes
- llamaindex@0.8.11
## 0.0.106
### Patch Changes
- Updated dependencies [f066e50]
- llamaindex@0.8.10
## 0.0.105
### Patch Changes
- Updated dependencies [4fc001c]
- Updated dependencies [4d4cd8a]
- llamaindex@0.8.9
## 0.0.104
### Patch Changes
@@ -1,6 +1,6 @@
{
"name": "@llamaindex/cloudflare-worker-agent-test",
"version": "0.0.121",
"version": "0.0.104",
"type": "module",
"private": true,
"scripts": {
@@ -12,13 +12,13 @@
"cf-typegen": "wrangler types"
},
"devDependencies": {
"@cloudflare/vitest-pool-workers": "^0.5.28",
"@cloudflare/workers-types": "^4.20241112.0",
"@vitest/runner": "2.1.5",
"@vitest/snapshot": "2.1.5",
"@cloudflare/vitest-pool-workers": "^0.5.8",
"@cloudflare/workers-types": "^4.20240924.0",
"@vitest/runner": "2.1.4",
"@vitest/snapshot": "2.1.4",
"typescript": "^5.6.3",
"vitest": "2.1.5",
"wrangler": "^3.87.0"
"vitest": "2.1.4",
"wrangler": "^3.78.8"
},
"dependencies": {
"llamaindex": "workspace:*"
@@ -1,73 +1,5 @@
# @llamaindex/llama-parse-browser-test
## 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
- @llamaindex/cloud@2.0.10
## 0.0.29
### Patch Changes
- @llamaindex/cloud@2.0.9
## 0.0.28
### Patch Changes
- @llamaindex/cloud@2.0.8
## 0.0.27
### Patch Changes
- @llamaindex/cloud@2.0.7
## 0.0.26
### Patch Changes
- @llamaindex/cloud@2.0.6
## 0.0.25
### Patch Changes
@@ -1,7 +1,7 @@
{
"name": "@llamaindex/llama-parse-browser-test",
"private": true,
"version": "0.0.36",
"version": "0.0.25",
"type": "module",
"scripts": {
"dev": "vite",
@@ -10,7 +10,7 @@
},
"devDependencies": {
"typescript": "^5.6.3",
"vite": "^5.4.11",
"vite": "^5.4.1",
"vite-plugin-wasm": "^3.3.0"
},
"dependencies": {
-115
View File
@@ -1,120 +1,5 @@
# @llamaindex/next-agent-test
## 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
- llamaindex@0.8.13
## 0.1.108
### Patch Changes
- llamaindex@0.8.12
## 0.1.107
### Patch Changes
- llamaindex@0.8.11
## 0.1.106
### Patch Changes
- Updated dependencies [f066e50]
- llamaindex@0.8.10
## 0.1.105
### Patch Changes
- Updated dependencies [4fc001c]
- Updated dependencies [4d4cd8a]
- llamaindex@0.8.9
## 0.1.104
### Patch Changes
+7 -7
View File
@@ -1,6 +1,6 @@
{
"name": "@llamaindex/next-agent-test",
"version": "0.1.121",
"version": "0.1.104",
"private": true,
"scripts": {
"dev": "next dev",
@@ -8,9 +8,9 @@
"start": "next start"
},
"dependencies": {
"ai": "^4.0.0",
"ai": "^3.3.21",
"llamaindex": "workspace:*",
"next": "15.0.3",
"next": "15.0.2",
"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.15.0",
"eslint-config-next": "15.0.3",
"postcss": "^8.4.49",
"tailwindcss": "^3.4.15",
"eslint": "9.14.0",
"eslint-config-next": "15.0.2",
"postcss": "^8.4.41",
"tailwindcss": "^3.4.10",
"typescript": "^5.6.3"
}
}
@@ -1,120 +1,5 @@
# test-edge-runtime
## 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
- llamaindex@0.8.13
## 0.1.107
### Patch Changes
- llamaindex@0.8.12
## 0.1.106
### Patch Changes
- llamaindex@0.8.11
## 0.1.105
### Patch Changes
- Updated dependencies [f066e50]
- llamaindex@0.8.10
## 0.1.104
### Patch Changes
- Updated dependencies [4fc001c]
- Updated dependencies [4d4cd8a]
- llamaindex@0.8.9
## 0.1.103
### Patch Changes
@@ -1,6 +1,6 @@
{
"name": "@llamaindex/nextjs-edge-runtime-test",
"version": "0.1.120",
"version": "0.1.103",
"private": true,
"scripts": {
"dev": "next dev",
@@ -9,7 +9,7 @@
},
"dependencies": {
"llamaindex": "workspace:*",
"next": "15.0.3",
"next": "15.0.2",
"react": "^18.3.1",
"react-dom": "^18.3.1"
},
@@ -1,120 +1,5 @@
# @llamaindex/next-node-runtime
## 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
- llamaindex@0.8.13
## 0.0.89
### Patch Changes
- llamaindex@0.8.12
## 0.0.88
### Patch Changes
- llamaindex@0.8.11
## 0.0.87
### Patch Changes
- Updated dependencies [f066e50]
- llamaindex@0.8.10
## 0.0.86
### Patch Changes
- Updated dependencies [4fc001c]
- Updated dependencies [4d4cd8a]
- llamaindex@0.8.9
## 0.0.85
### Patch Changes
@@ -1,6 +1,6 @@
{
"name": "@llamaindex/next-node-runtime-test",
"version": "0.0.102",
"version": "0.0.85",
"private": true,
"scripts": {
"dev": "next dev",
@@ -9,7 +9,7 @@
},
"dependencies": {
"llamaindex": "workspace:*",
"next": "15.0.3",
"next": "15.0.2",
"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.15.0",
"eslint-config-next": "15.0.3",
"postcss": "^8.4.49",
"tailwindcss": "^3.4.15",
"eslint": "9.14.0",
"eslint-config-next": "15.0.2",
"postcss": "^8.4.41",
"tailwindcss": "^3.4.10",
"typescript": "^5.6.3"
}
}
-115
View File
@@ -1,120 +1,5 @@
# @llamaindex/waku-query-engine-test
## 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
- llamaindex@0.8.13
## 0.0.108
### Patch Changes
- llamaindex@0.8.12
## 0.0.107
### Patch Changes
- llamaindex@0.8.11
## 0.0.106
### Patch Changes
- Updated dependencies [f066e50]
- llamaindex@0.8.10
## 0.0.105
### Patch Changes
- Updated dependencies [4fc001c]
- Updated dependencies [4d4cd8a]
- llamaindex@0.8.9
## 0.0.104
### Patch Changes
+6 -6
View File
@@ -1,6 +1,6 @@
{
"name": "@llamaindex/waku-query-engine-test",
"version": "0.0.121",
"version": "0.0.104",
"type": "module",
"private": true,
"scripts": {
@@ -10,16 +10,16 @@
},
"dependencies": {
"llamaindex": "workspace:*",
"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"
"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"
},
"devDependencies": {
"@types/react": "18.3.12",
"@types/react-dom": "18.3.1",
"autoprefixer": "^10.4.20",
"tailwindcss": "^3.4.15",
"tailwindcss": "^3.4.14",
"typescript": "5.6.3"
}
}
-1
View File
@@ -167,7 +167,6 @@ For questions about more specific sections, please use the vector_tool.`,
const mockCall = t.mock.fn(({ query }: { query: string }) => {
return originalCall({ query });
});
// @ts-expect-error what?
queryEngineTools[1]!.call = mockCall;
const toolMapping = SimpleToolNodeMapping.fromObjects(queryEngineTools);
-66
View File
@@ -1,66 +0,0 @@
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",
);
});
});
-53
View File
@@ -1,58 +1,5 @@
# examples
## 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
- Updated dependencies [a7b0ac3]
- Updated dependencies [ee20c44]
- Updated dependencies [c69605f]
- @llamaindex/core@0.4.10
- @llamaindex/workflow@0.0.6
- llamaindex@0.8.13
- @llamaindex/readers@1.0.11
## 0.0.15
### Patch Changes
- Updated dependencies [ea92b69]
- Updated dependencies [fadc8b8]
- @llamaindex/workflow@0.0.5
## 0.0.14
### Patch Changes
- Updated dependencies [f066e50]
- Updated dependencies [d89ebe0]
- Updated dependencies [fd8c882]
- Updated dependencies [fd8c882]
- llamaindex@0.8.10
- @llamaindex/core@0.4.7
- @llamaindex/workflow@0.0.4
- @llamaindex/readers@1.0.8
## 0.0.13
### Patch Changes
-38
View File
@@ -1,38 +0,0 @@
import { Anthropic } from "llamaindex";
async function main() {
const anthropic = new Anthropic({
model: "claude-3-5-sonnet-20241022",
});
const entireBook = await fetch(
"https://www.gutenberg.org/files/1342/1342-0.txt",
).then((response) => response.text());
const response = await anthropic.chat({
messages: [
{
content:
"You are an AI assistant tasked with analyzing literary works. Your goal is to provide insightful commentary on themes, characters, and writing style.\n",
role: "system",
},
{
content: entireBook,
role: "system",
options: {
cache_control: {
type: "ephemeral",
},
},
},
{
content: "analyze the major themes in Pride and Prejudice.",
role: "user",
},
],
});
console.log(response.message.content);
}
main().catch(console.error);
+8
View File
@@ -83,6 +83,14 @@ 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();
+6 -9
View File
@@ -1,27 +1,24 @@
{
"name": "@llamaindex/examples",
"private": true,
"version": "0.0.18",
"version": "0.0.13",
"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.16",
"@llamaindex/readers": "^1.0.18",
"@llamaindex/workflow": "^0.0.7",
"@llamaindex/vercel": "^0.0.3",
"@llamaindex/core": "^0.4.5",
"@llamaindex/readers": "^1.0.6",
"@llamaindex/workflow": "^0.0.3",
"@notionhq/client": "^2.2.15",
"@pinecone-database/pinecone": "^4.0.0",
"@pinecone-database/pinecone": "^3.0.2",
"@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.25",
"llamaindex": "^0.8.8",
"mongodb": "^6.7.0",
"pathe": "^1.1.2",
"postgres": "^3.4.4"
+1 -2
View File
@@ -15,8 +15,7 @@
"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:obsidian": "node --import tsx ./src/obsidian.ts"
"start:json": "node --import tsx ./src/json.ts"
},
"dependencies": {
"@llamaindex/readers": "*",
-12
View File
@@ -1,12 +0,0 @@
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());
});
});
-50
View File
@@ -1,50 +0,0 @@
# 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:
### 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).
-38
View File
@@ -1,38 +0,0 @@
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({
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);
-34
View File
@@ -1,34 +0,0 @@
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({
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);
-16
View File
@@ -1,16 +0,0 @@
import { VLLM } from "llamaindex";
const llm = new VLLM({
model: "NousResearch/Meta-Llama-3-8B-Instruct",
});
const response = await llm.chat({
messages: [
{
role: "user",
content: "Hello?",
},
],
});
console.log(response.message.content);
+30 -65
View File
@@ -1,19 +1,14 @@
import {
HandlerContext,
Context,
StartEvent,
StopEvent,
Workflow,
WorkflowEvent,
} from "@llamaindex/workflow";
} from "@llamaindex/core/workflow";
import { OpenAI } from "llamaindex";
const MAX_REVIEWS = 3;
type Context = {
specification: string;
numberReviews: number;
};
// Using the o1-preview model (see https://platform.openai.com/docs/guides/reasoning?reasoning-prompt-examples=coding-planning)
const llm = new OpenAI({ model: "o1-preview", temperature: 1 });
@@ -25,9 +20,7 @@ stores the question/answer pair in the database.`;
// Create custom event types
export class MessageEvent extends WorkflowEvent<{ msg: string }> {}
export class CodeEvent extends WorkflowEvent<{ code: string }> {}
export class ReviewEvent extends WorkflowEvent<{
review: string;
code: string;
@@ -41,13 +34,12 @@ const truncate = (str: string) => {
};
// the architect is responsible for writing the structure and the initial code based on the specification
const architect = async (
context: HandlerContext<Context>,
_: StartEvent<string>,
) => {
const spec = context.data.specification;
const architect = async (context: Context, ev: StartEvent) => {
// get the specification from the start event and save it to context
context.set("specification", ev.data.input);
const spec = context.get("specification");
// write a message to send an update to the user
context.sendEvent(
context.writeEventToStream(
new MessageEvent({
msg: `Writing app using this specification: ${truncate(spec)}`,
}),
@@ -58,13 +50,13 @@ const architect = async (
};
// the coder is responsible for updating the code based on the review
const coder = async (context: HandlerContext<Context>, ev: ReviewEvent) => {
const coder = async (context: Context, ev: ReviewEvent) => {
// get the specification from the context
const spec = context.data.specification;
const spec = context.get("specification");
// get the latest review and code
const { review, code } = ev.data;
// write a message to send an update to the user
context.sendEvent(
context.writeEventToStream(
new MessageEvent({
msg: `Update code based on review: ${truncate(review)}`,
}),
@@ -75,35 +67,32 @@ const coder = async (context: HandlerContext<Context>, ev: ReviewEvent) => {
};
// the reviewer is responsible for reviewing the code and providing feedback
const reviewer = async (context: HandlerContext<Context>, ev: CodeEvent) => {
const reviewer = async (context: Context, ev: CodeEvent) => {
// get the specification from the context
const spec = context.data.specification;
const spec = context.get("specification");
// get latest code from the event
const { code } = ev.data;
// update and check the number of reviews
context.data.numberReviews++;
if (context.data.numberReviews > MAX_REVIEWS) {
const numberReviews = context.get("numberReviews", 0) + 1;
context.set("numberReviews", numberReviews);
if (numberReviews > MAX_REVIEWS) {
// the we've done this too many times - return the code
context.sendEvent(
context.writeEventToStream(
new MessageEvent({
msg: `Already reviewed ${
context.data.numberReviews - 1
} times, stopping!`,
msg: `Already reviewed ${numberReviews - 1} times, stopping!`,
}),
);
return new StopEvent({ result: code });
}
// write a message to send an update to the user
context.sendEvent(
new MessageEvent({
msg: `Review #${context.data.numberReviews}: ${truncate(code)}`,
}),
context.writeEventToStream(
new MessageEvent({ msg: `Review #${numberReviews}: ${truncate(code)}` }),
);
const prompt = `Review this code: <code>${code}</code>. Check if the code quality and whether it correctly implements this specification: <spec>${spec}</spec>. If you're satisfied, just return 'Looks great', nothing else. If not, return a review with a list of changes you'd like to see.`;
const review = (await llm.complete({ prompt })).text;
if (review.includes("Looks great")) {
// the reviewer is satisfied with the code, let's return the review
context.sendEvent(
context.writeEventToStream(
new MessageEvent({
msg: `Reviewer says: ${review}`,
}),
@@ -114,44 +103,20 @@ const reviewer = async (context: HandlerContext<Context>, ev: CodeEvent) => {
return new ReviewEvent({ review, code });
};
const codeAgent = new Workflow<Context, string, string>();
codeAgent.addStep(
{
inputs: [StartEvent<string>],
outputs: [CodeEvent],
},
architect,
);
codeAgent.addStep(
{
inputs: [ReviewEvent],
outputs: [CodeEvent],
},
coder,
);
codeAgent.addStep(
{
inputs: [CodeEvent],
outputs: [ReviewEvent, StopEvent],
},
reviewer,
);
const codeAgent = new Workflow({ validate: true });
codeAgent.addStep(StartEvent, architect, { outputs: CodeEvent });
codeAgent.addStep(ReviewEvent, coder, { outputs: CodeEvent });
codeAgent.addStep(CodeEvent, reviewer, { outputs: ReviewEvent });
// Usage
async function main() {
const run = codeAgent.run(specification).with({
specification,
numberReviews: 0,
});
for await (const event of run) {
if (event instanceof MessageEvent) {
const msg = (event as MessageEvent).data.msg;
console.log(`${msg}\n`);
} else if (event instanceof StopEvent) {
const result = (event as StopEvent<string>).data;
console.log("Final code:\n", result);
}
const run = codeAgent.run(specification);
for await (const event of codeAgent.streamEvents()) {
const msg = (event as MessageEvent).data.msg;
console.log(`${msg}\n`);
}
const result = await run;
console.log("Final code:\n", result.data.result);
}
main().catch(console.error);
@@ -1,10 +1,10 @@
import {
HandlerContext,
Context,
StartEvent,
StopEvent,
Workflow,
WorkflowEvent,
} from "@llamaindex/workflow";
} from "@llamaindex/core/workflow";
import { OpenAI } from "llamaindex";
// Create LLM instance
@@ -12,77 +12,59 @@ const llm = new OpenAI();
// Create custom event types
export class JokeEvent extends WorkflowEvent<{ joke: string }> {}
export class CritiqueEvent extends WorkflowEvent<{ critique: string }> {}
export class AnalysisEvent extends WorkflowEvent<{ analysis: string }> {}
const generateJoke = async (_: unknown, ev: StartEvent<string>) => {
const prompt = `Write your best joke about ${ev.data}.`;
const generateJoke = async (_context: Context, ev: StartEvent) => {
const prompt = `Write your best joke about ${ev.data.input}.`;
const response = await llm.complete({ prompt });
return new JokeEvent({ joke: response.text });
};
const critiqueJoke = async (_: unknown, ev: JokeEvent) => {
const critiqueJoke = async (_context: Context, ev: JokeEvent) => {
const prompt = `Give a thorough critique of the following joke: ${ev.data.joke}`;
const response = await llm.complete({ prompt });
return new CritiqueEvent({ critique: response.text });
};
const analyzeJoke = async (_: unknown, ev: JokeEvent) => {
const analyzeJoke = async (_context: Context, ev: JokeEvent) => {
const prompt = `Give a thorough analysis of the following joke: ${ev.data.joke}`;
const response = await llm.complete({ prompt });
return new AnalysisEvent({ analysis: response.text });
};
const reportJoke = async (
context: HandlerContext,
ev1: AnalysisEvent,
ev2: CritiqueEvent,
context: Context,
ev: AnalysisEvent | CritiqueEvent,
) => {
const subPrompts = [ev1.data.analysis, ev2.data.critique];
const events = context.collectEvents(ev, [AnalysisEvent, CritiqueEvent]);
if (!events) {
return;
}
const subPrompts = events.map((event) => {
if (event instanceof AnalysisEvent) {
return `Analysis: ${event.data.analysis}`;
} else if (event instanceof CritiqueEvent) {
return `Critique: ${event.data.critique}`;
}
return "";
});
const prompt = `Based on the following information about a joke:\n${subPrompts.join(
"\n",
)}\nProvide a comprehensive report on the joke's quality and impact.`;
const prompt = `Based on the following information about a joke:\n${subPrompts.join("\n")}\nProvide a comprehensive report on the joke's quality and impact.`;
const response = await llm.complete({ prompt });
return new StopEvent(response.text);
return new StopEvent({ result: response.text });
};
const jokeFlow = new Workflow<unknown, string, string>();
jokeFlow.addStep(
{
inputs: [StartEvent<string>],
outputs: [JokeEvent],
},
generateJoke,
);
jokeFlow.addStep(
{
inputs: [JokeEvent],
outputs: [CritiqueEvent],
},
critiqueJoke,
);
jokeFlow.addStep(
{
inputs: [JokeEvent],
outputs: [AnalysisEvent],
},
analyzeJoke,
);
jokeFlow.addStep(
{
inputs: [AnalysisEvent, CritiqueEvent],
outputs: [StopEvent<string>],
},
reportJoke,
);
const jokeFlow = new Workflow();
jokeFlow.addStep(StartEvent, generateJoke);
jokeFlow.addStep(JokeEvent, critiqueJoke);
jokeFlow.addStep(JokeEvent, analyzeJoke);
jokeFlow.addStep([AnalysisEvent, CritiqueEvent], reportJoke);
// Usage
async function main() {
const result = await jokeFlow.run("pirates");
console.log(result.data);
console.log(result.data.result);
}
main().catch(console.error);
+10 -21
View File
@@ -1,9 +1,10 @@
import {
Context,
StartEvent,
StopEvent,
Workflow,
WorkflowEvent,
} from "@llamaindex/workflow";
} from "@llamaindex/core/workflow";
import { OpenAI } from "llamaindex";
// Create LLM instance
@@ -12,38 +13,26 @@ const llm = new OpenAI();
// Create a custom event type
export class JokeEvent extends WorkflowEvent<{ joke: string }> {}
const generateJoke = async (_: unknown, ev: StartEvent<string>) => {
const prompt = `Write your best joke about ${ev.data}.`;
const generateJoke = async (_context: Context, ev: StartEvent) => {
const prompt = `Write your best joke about ${ev.data.input}.`;
const response = await llm.complete({ prompt });
return new JokeEvent({ joke: response.text });
};
const critiqueJoke = async (_: unknown, ev: JokeEvent) => {
const critiqueJoke = async (_context: Context, ev: JokeEvent) => {
const prompt = `Give a thorough critique of the following joke: ${ev.data.joke}`;
const response = await llm.complete({ prompt });
return new StopEvent(response.text);
return new StopEvent({ result: response.text });
};
const jokeFlow = new Workflow<unknown, string, string>();
jokeFlow.addStep(
{
inputs: [StartEvent<string>],
outputs: [JokeEvent],
},
generateJoke,
);
jokeFlow.addStep(
{
inputs: [JokeEvent],
outputs: [StopEvent<string>],
},
critiqueJoke,
);
const jokeFlow = new Workflow({ verbose: true });
jokeFlow.addStep(StartEvent, generateJoke);
jokeFlow.addStep(JokeEvent, critiqueJoke);
// Usage
async function main() {
const result = await jokeFlow.run("pirates");
console.log(result.data);
console.log(result.data.result);
}
main().catch(console.error);
+15 -32
View File
@@ -1,10 +1,10 @@
import {
HandlerContext,
Context,
StartEvent,
StopEvent,
Workflow,
WorkflowEvent,
} from "@llamaindex/workflow";
} from "@llamaindex/core/workflow";
import { OpenAI } from "llamaindex";
// Create LLM instance
@@ -12,55 +12,38 @@ const llm = new OpenAI();
// Create custom event types
export class JokeEvent extends WorkflowEvent<{ joke: string }> {}
export class MessageEvent extends WorkflowEvent<{ msg: string }> {}
const generateJoke = async (context: HandlerContext, ev: StartEvent) => {
context.sendEvent(
new MessageEvent({ msg: `Generating a joke about: ${ev.data}` }),
const generateJoke = async (context: Context, ev: StartEvent) => {
context.writeEventToStream(
new MessageEvent({ msg: `Generating a joke about: ${ev.data.input}` }),
);
const prompt = `Write your best joke about ${ev.data}.`;
const prompt = `Write your best joke about ${ev.data.input}.`;
const response = await llm.complete({ prompt });
return new JokeEvent({ joke: response.text });
};
const critiqueJoke = async (context: HandlerContext, ev: JokeEvent) => {
context.sendEvent(
const critiqueJoke = async (context: Context, ev: JokeEvent) => {
context.writeEventToStream(
new MessageEvent({ msg: `Write a critique of this joke: ${ev.data.joke}` }),
);
const prompt = `Give a thorough critique of the following joke: ${ev.data.joke}`;
const response = await llm.complete({ prompt });
return new StopEvent(response.text);
return new StopEvent({ result: response.text });
};
const jokeFlow = new Workflow();
jokeFlow.addStep(
{
inputs: [StartEvent<string>],
outputs: [JokeEvent],
},
generateJoke,
);
jokeFlow.addStep(
{
inputs: [JokeEvent],
outputs: [StopEvent<string>],
},
critiqueJoke,
);
jokeFlow.addStep(StartEvent, generateJoke);
jokeFlow.addStep(JokeEvent, critiqueJoke);
// Usage
async function main() {
const run = jokeFlow.run("pirates");
for await (const event of run) {
if (event instanceof MessageEvent) {
console.log("Message:");
console.log((event as MessageEvent).data.msg);
} else if (event instanceof StopEvent) {
console.log("Result:");
console.log((event as StopEvent<string>).data);
}
for await (const event of jokeFlow.streamEvents()) {
console.log((event as MessageEvent).data.msg);
}
const result = await run;
console.log(result.data.result);
}
main().catch(console.error);
+14 -25
View File
@@ -1,21 +1,19 @@
import { StartEvent, StopEvent, Workflow } from "@llamaindex/workflow";
import {
Context,
StartEvent,
StopEvent,
Workflow,
} from "@llamaindex/core/workflow";
const longRunning = async (_: unknown, ev: StartEvent<string>) => {
const longRunning = async (_context: Context, ev: StartEvent) => {
await new Promise((resolve) => setTimeout(resolve, 2000)); // Wait for 2 seconds
return new StopEvent("We waited 2 seconds");
return new StopEvent({ result: "We waited 2 seconds" });
};
async function timeout() {
const workflow = new Workflow<unknown, string, string>({
timeout: 1,
});
workflow.addStep(
{
inputs: [StartEvent<string>],
outputs: [StopEvent<string>],
},
longRunning,
);
const workflow = new Workflow({ verbose: true, timeout: 1 });
workflow.addStep(StartEvent, longRunning);
// This will timeout
try {
await workflow.run("Let's start");
} catch (error) {
@@ -25,23 +23,14 @@ async function timeout() {
async function notimeout() {
// Increase timeout to 3 seconds - no timeout
const workflow = new Workflow<unknown, string, string>({
timeout: 3,
});
workflow.addStep(
{
inputs: [StartEvent<string>],
outputs: [StopEvent<string>],
},
longRunning,
);
const workflow = new Workflow({ verbose: true, timeout: 3 });
workflow.addStep(StartEvent, longRunning);
const result = await workflow.run("Let's start");
console.log(result.data);
console.log(result.data.result);
}
async function main() {
await timeout();
console.log("---");
await notimeout();
}
+15 -40
View File
@@ -1,9 +1,10 @@
import {
Context,
StartEvent,
StopEvent,
Workflow,
WorkflowEvent,
} from "@llamaindex/workflow";
} from "@llamaindex/core/workflow";
import { OpenAI } from "llamaindex";
// Create LLM instance
@@ -12,66 +13,40 @@ const llm = new OpenAI();
// Create a custom event type
export class JokeEvent extends WorkflowEvent<{ joke: string }> {}
const generateJoke = async (_: unknown, ev: StartEvent<string>) => {
const prompt = `Write your best joke about ${ev.data}.`;
const generateJoke = async (_context: Context, ev: StartEvent) => {
const prompt = `Write your best joke about ${ev.data.input}.`;
const response = await llm.complete({ prompt });
return new JokeEvent({ joke: response.text });
};
const critiqueJoke = async (_: unknown, ev: JokeEvent) => {
const critiqueJoke = async (_context: Context, ev: JokeEvent) => {
const prompt = `Give a thorough critique of the following joke: ${ev.data.joke}`;
const response = await llm.complete({ prompt });
return new StopEvent(response.text);
return new StopEvent({ result: response.text });
};
async function validateFails() {
try {
const jokeFlow = new Workflow();
jokeFlow.addStep(
{
inputs: [StartEvent<string>],
outputs: [StopEvent<string>],
},
// @ts-expect-error outputs should be JokeEvent
generateJoke,
);
jokeFlow.addStep(
{
inputs: [JokeEvent],
outputs: [StopEvent],
},
critiqueJoke,
);
await jokeFlow.run("pirates").strict();
const jokeFlow = new Workflow({ verbose: true, validate: true });
jokeFlow.addStep(StartEvent, generateJoke, { outputs: StopEvent });
jokeFlow.addStep(JokeEvent, critiqueJoke, { outputs: StopEvent });
await jokeFlow.run("pirates");
} catch (e) {
console.error("Validation failed:", e);
}
}
async function validate() {
const jokeFlow = new Workflow();
jokeFlow.addStep(
{
inputs: [StartEvent<string>],
outputs: [JokeEvent],
},
generateJoke,
);
jokeFlow.addStep(
{
inputs: [JokeEvent],
outputs: [StopEvent<string>],
},
critiqueJoke,
);
const result = await jokeFlow.run("pirates").strict();
console.log(result.data);
const jokeFlow = new Workflow({ verbose: true, validate: true });
jokeFlow.addStep(StartEvent, generateJoke, { outputs: JokeEvent });
jokeFlow.addStep(JokeEvent, critiqueJoke, { outputs: StopEvent });
const result = await jokeFlow.run("pirates");
console.log(result.data.result);
}
// Usage
async function main() {
await validateFails();
console.log("---");
await validate();
}
+6 -6
View File
@@ -19,20 +19,20 @@
},
"devDependencies": {
"@changesets/cli": "^2.27.5",
"eslint": "9.15.0",
"eslint-config-next": "^15.0.3",
"eslint": "9.14.0",
"eslint-config-next": "^15.0.2",
"eslint-config-prettier": "^9.1.0",
"eslint-config-turbo": "^2.3.0",
"eslint-config-turbo": "^2.2.3",
"eslint-plugin-react": "7.37.2",
"globals": "^15.12.0",
"husky": "^9.1.7",
"husky": "^9.1.6",
"lint-staged": "^15.2.10",
"madge": "^8.0.0",
"prettier": "^3.3.3",
"prettier-plugin-organize-imports": "^4.1.0",
"turbo": "^2.3.0",
"turbo": "^2.2.3",
"typescript": "^5.6.3",
"typescript-eslint": "^8.15.0"
"typescript-eslint": "^8.13.0"
},
"packageManager": "pnpm@9.12.3",
"lint-staged": {
-117
View File
@@ -1,122 +1,5 @@
# @llamaindex/autotool
## 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
- llamaindex@0.8.13
## 5.0.12
### Patch Changes
- llamaindex@0.8.12
## 5.0.11
### Patch Changes
- llamaindex@0.8.11
## 5.0.10
### Patch Changes
- Updated dependencies [f066e50]
- llamaindex@0.8.10
## 5.0.9
### Patch Changes
- Updated dependencies [4fc001c]
- Updated dependencies [4d4cd8a]
- llamaindex@0.8.9
## 5.0.8
### Patch Changes
@@ -1,138 +1,5 @@
# @llamaindex/autotool-01-node-example
## 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
- llamaindex@0.8.13
- @llamaindex/autotool@5.0.13
## 0.0.55
### Patch Changes
- llamaindex@0.8.12
- @llamaindex/autotool@5.0.12
## 0.0.54
### Patch Changes
- llamaindex@0.8.11
- @llamaindex/autotool@5.0.11
## 0.0.53
### Patch Changes
- Updated dependencies [f066e50]
- llamaindex@0.8.10
- @llamaindex/autotool@5.0.10
## 0.0.52
### Patch Changes
- Updated dependencies [4fc001c]
- Updated dependencies [4d4cd8a]
- llamaindex@0.8.9
- @llamaindex/autotool@5.0.9
## 0.0.51
### Patch Changes
@@ -5,7 +5,7 @@
"dependencies": {
"@llamaindex/autotool": "workspace:*",
"llamaindex": "workspace:*",
"openai": "^4.72.0"
"openai": "^4.57.0"
},
"devDependencies": {
"tsx": "^4.19.0"
@@ -13,5 +13,5 @@
"scripts": {
"start": "node --import tsx --import @llamaindex/autotool/node ./src/index.ts"
},
"version": "0.0.68"
"version": "0.0.51"
}
@@ -1,138 +1,5 @@
# @llamaindex/autotool-02-next-example
## 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
- llamaindex@0.8.13
- @llamaindex/autotool@5.0.13
## 0.1.99
### Patch Changes
- llamaindex@0.8.12
- @llamaindex/autotool@5.0.12
## 0.1.98
### Patch Changes
- llamaindex@0.8.11
- @llamaindex/autotool@5.0.11
## 0.1.97
### Patch Changes
- Updated dependencies [f066e50]
- llamaindex@0.8.10
- @llamaindex/autotool@5.0.10
## 0.1.96
### Patch Changes
- Updated dependencies [4fc001c]
- Updated dependencies [4d4cd8a]
- llamaindex@0.8.9
- @llamaindex/autotool@5.0.9
## 0.1.95
### Patch Changes
@@ -1,7 +1,7 @@
{
"name": "@llamaindex/autotool-02-next-example",
"private": true,
"version": "0.1.112",
"version": "0.1.95",
"scripts": {
"dev": "next dev",
"build": "next build",
@@ -10,17 +10,17 @@
"dependencies": {
"@llamaindex/autotool": "workspace:*",
"@radix-ui/react-slot": "^1.1.0",
"ai": "^4.0.0",
"ai": "^3.3.21",
"class-variance-authority": "^0.7.0",
"dotenv": "^16.3.1",
"llamaindex": "workspace:*",
"lucide-react": "^0.460.0",
"next": "15.0.3",
"lucide-react": "^0.436.0",
"next": "15.0.2",
"react": "^18.3.1",
"react-dom": "^18.3.1",
"react-markdown": "^9.0.1",
"react-syntax-highlighter": "^15.5.0",
"sonner": "^1.7.0",
"sonner": "^1.5.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.49",
"tailwindcss": "^3.4.15",
"postcss": "^8.4.41",
"tailwindcss": "^3.4.10",
"typescript": "^5.6.3"
}
}
+7 -7
View File
@@ -1,7 +1,7 @@
{
"name": "@llamaindex/autotool",
"type": "module",
"version": "5.0.25",
"version": "5.0.8",
"description": "auto transpile your JS function to LLM Agent compatible",
"files": [
"dist",
@@ -45,10 +45,10 @@
"dev": "bunchee --watch"
},
"dependencies": {
"@swc/core": "^1.9.2",
"jotai": "2.10.2",
"@swc/core": "^1.7.22",
"jotai": "2.8.4",
"typedoc": "^0.26.11",
"unplugin": "^1.16.0"
"unplugin": "^1.12.2"
},
"peerDependencies": {
"llamaindex": "workspace:*",
@@ -72,11 +72,11 @@
"@types/node": "^22.9.0",
"bunchee": "5.6.1",
"llamaindex": "workspace:*",
"next": "15.0.3",
"rollup": "^4.27.3",
"next": "15.0.2",
"rollup": "^4.24.4",
"tsx": "^4.19.0",
"typescript": "^5.6.3",
"vitest": "^2.1.5",
"vitest": "^2.1.4",
"webpack": "^5.94.0"
}
}
+1 -1
View File
@@ -22,7 +22,7 @@ export type InfoString = {
parameterMapping: Record<string, number>;
};
export const store: ReturnType<typeof createStore> = createStore();
export const store = 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>>({});
-86
View File
@@ -1,91 +1,5 @@
# @llamaindex/cloud
## 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
- Updated dependencies [a7b0ac3]
- Updated dependencies [c69605f]
- @llamaindex/core@0.4.10
## 2.0.9
### Patch Changes
- Updated dependencies [7ae6eaa]
- @llamaindex/core@0.4.9
## 2.0.8
### Patch Changes
- Updated dependencies [f865c98]
- @llamaindex/core@0.4.8
## 2.0.7
### Patch Changes
- Updated dependencies [d89ebe0]
- Updated dependencies [fd8c882]
- @llamaindex/core@0.4.7
## 2.0.6
### Patch Changes
- Updated dependencies [4fc001c]
- @llamaindex/env@0.1.20
- @llamaindex/core@0.4.6
## 2.0.5
### Patch Changes
+3 -3
View File
@@ -1,6 +1,6 @@
{
"name": "@llamaindex/cloud",
"version": "2.0.16",
"version": "2.0.5",
"type": "module",
"license": "MIT",
"scripts": {
@@ -50,8 +50,8 @@
"directory": "packages/cloud"
},
"devDependencies": {
"@hey-api/client-fetch": "^0.4.4",
"@hey-api/openapi-ts": "^0.56.0",
"@hey-api/client-fetch": "^0.4.2",
"@hey-api/openapi-ts": "^0.54.3",
"@llamaindex/core": "workspace:*",
"@llamaindex/env": "workspace:*",
"bunchee": "5.6.1"
-86
View File
@@ -1,91 +1,5 @@
# @llamaindex/community
## 0.0.74
### Patch Changes
- 8be4589: chore: bump version
- Updated dependencies [8be4589]
- @llamaindex/core@0.4.16
- @llamaindex/env@0.1.24
## 0.0.73
### Patch Changes
- Updated dependencies [d2b2722]
- @llamaindex/env@0.1.23
- @llamaindex/core@0.4.15
## 0.0.72
### Patch Changes
- Updated dependencies [969365c]
- @llamaindex/env@0.1.22
- @llamaindex/core@0.4.14
## 0.0.71
### Patch Changes
- 90d265c: chore: bump version
- Updated dependencies [90d265c]
- @llamaindex/core@0.4.13
- @llamaindex/env@0.1.21
## 0.0.70
### Patch Changes
- Updated dependencies [ef4f63d]
- @llamaindex/core@0.4.12
## 0.0.69
### Patch Changes
- Updated dependencies [6d22fa2]
- @llamaindex/core@0.4.11
## 0.0.68
### Patch Changes
- Updated dependencies [a7b0ac3]
- Updated dependencies [c69605f]
- @llamaindex/core@0.4.10
## 0.0.67
### Patch Changes
- Updated dependencies [7ae6eaa]
- @llamaindex/core@0.4.9
## 0.0.66
### Patch Changes
- Updated dependencies [f865c98]
- @llamaindex/core@0.4.8
## 0.0.65
### Patch Changes
- Updated dependencies [d89ebe0]
- Updated dependencies [fd8c882]
- @llamaindex/core@0.4.7
## 0.0.64
### Patch Changes
- Updated dependencies [4fc001c]
- @llamaindex/env@0.1.20
- @llamaindex/core@0.4.6
## 0.0.63
### Patch Changes
+3 -3
View File
@@ -1,7 +1,7 @@
{
"name": "@llamaindex/community",
"description": "Community package for LlamaIndexTS",
"version": "0.0.74",
"version": "0.0.63",
"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.693.0",
"@aws-sdk/client-bedrock-runtime": "^3.693.0",
"@aws-sdk/client-bedrock-agent-runtime": "^3.642.0",
"@aws-sdk/client-bedrock-runtime": "^3.642.0",
"@llamaindex/core": "workspace:*",
"@llamaindex/env": "workspace:*"
}
-75
View File
@@ -1,80 +1,5 @@
# @llamaindex/core
## 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
- a7b0ac3: fix: update tool call llm type
- c69605f: feat: add async support to BaseChatStore and BaseChatStoreMemory
## 0.4.9
### Patch Changes
- 7ae6eaa: feat: allow pass `additionalChatOptions` to agent
## 0.4.8
### Patch Changes
- f865c98: feat: async get message on chat store
## 0.4.7
### Patch Changes
- d89ebe0: feat: better support for zod schema
- fd8c882: chore: add warning on legacy workflow API
## 0.4.6
### Patch Changes
- Updated dependencies [4fc001c]
- @llamaindex/env@0.1.20
## 0.4.5
### Patch Changes
+3 -3
View File
@@ -1,7 +1,7 @@
{
"name": "@llamaindex/core",
"type": "module",
"version": "0.4.16",
"version": "0.4.5",
"description": "LlamaIndex Core Module",
"exports": {
"./agent": {
@@ -389,10 +389,10 @@
"url": "https://github.com/run-llama/LlamaIndexTS.git"
},
"devDependencies": {
"@edge-runtime/vm": "^4.0.4",
"@edge-runtime/vm": "^4.0.3",
"ajv": "^8.17.1",
"bunchee": "5.6.1",
"happy-dom": "^15.11.6",
"happy-dom": "^15.11.0",
"natural": "^8.0.1"
},
"dependencies": {
+14 -71
View File
@@ -106,17 +106,11 @@ export type AgentRunnerParams<
>
? AdditionalMessageOptions
: never,
AdditionalChatOptions extends object = object,
> = {
llm: AI;
chatHistory: ChatMessage<AdditionalMessageOptions>[];
systemPrompt: MessageContent | null;
runner: AgentWorker<
AI,
Store,
AdditionalMessageOptions,
AdditionalChatOptions
>;
runner: AgentWorker<AI, Store, AdditionalMessageOptions>;
tools:
| BaseToolWithCall[]
| ((query: MessageContent) => Promise<BaseToolWithCall[]>);
@@ -131,7 +125,6 @@ export type AgentParamsBase<
>
? AdditionalMessageOptions
: never,
AdditionalChatOptions extends object = object,
> =
| {
llm?: AI;
@@ -139,7 +132,6 @@ export type AgentParamsBase<
systemPrompt?: MessageContent;
verbose?: boolean;
tools: BaseToolWithCall[];
additionalChatOptions?: AdditionalChatOptions;
}
| {
llm?: AI;
@@ -147,7 +139,6 @@ export type AgentParamsBase<
systemPrompt?: MessageContent;
verbose?: boolean;
toolRetriever: ObjectRetriever<BaseToolWithCall>;
additionalChatOptions?: AdditionalChatOptions;
};
/**
@@ -162,36 +153,21 @@ export abstract class AgentWorker<
>
? AdditionalMessageOptions
: never,
AdditionalChatOptions extends object = object,
> {
#taskSet = new Set<
TaskStep<AI, Store, AdditionalMessageOptions, AdditionalChatOptions>
>();
abstract taskHandler: TaskHandler<
AI,
Store,
AdditionalMessageOptions,
AdditionalChatOptions
>;
#taskSet = new Set<TaskStep<AI, Store, AdditionalMessageOptions>>();
abstract taskHandler: TaskHandler<AI, Store, AdditionalMessageOptions>;
public createTask(
query: MessageContent,
context: AgentTaskContext<
AI,
Store,
AdditionalMessageOptions,
AdditionalChatOptions
>,
): ReadableStream<
TaskStepOutput<AI, Store, AdditionalMessageOptions, AdditionalChatOptions>
> {
context: AgentTaskContext<AI, Store, AdditionalMessageOptions>,
): ReadableStream<TaskStepOutput<AI, Store, AdditionalMessageOptions>> {
context.store.messages.push({
role: "user",
content: query,
});
const taskOutputStream = createTaskOutputStream(this.taskHandler, context);
return new ReadableStream<
TaskStepOutput<AI, Store, AdditionalMessageOptions, AdditionalChatOptions>
TaskStepOutput<AI, Store, AdditionalMessageOptions>
>({
start: async (controller) => {
for await (const stepOutput of taskOutputStream) {
@@ -200,8 +176,7 @@ export abstract class AgentWorker<
let currentStep: TaskStep<
AI,
Store,
AdditionalMessageOptions,
AdditionalChatOptions
AdditionalMessageOptions
> | null = stepOutput.taskStep;
while (currentStep) {
this.#taskSet.delete(currentStep);
@@ -252,7 +227,6 @@ export abstract class AgentRunner<
>
? AdditionalMessageOptions
: never,
AdditionalChatOptions extends object = object,
> extends BaseChatEngine {
readonly #llm: AI;
readonly #tools:
@@ -260,12 +234,7 @@ export abstract class AgentRunner<
| ((query: MessageContent) => Promise<BaseToolWithCall[]>);
readonly #systemPrompt: MessageContent | null = null;
#chatHistory: ChatMessage<AdditionalMessageOptions>[];
readonly #runner: AgentWorker<
AI,
Store,
AdditionalMessageOptions,
AdditionalChatOptions
>;
readonly #runner: AgentWorker<AI, Store, AdditionalMessageOptions>;
readonly #verbose: boolean;
// create extra store
@@ -276,7 +245,7 @@ export abstract class AgentRunner<
}
static defaultTaskHandler: TaskHandler<LLM> = async (step, enqueueOutput) => {
const { llm, getTools, stream, additionalChatOptions } = step.context;
const { llm, getTools, stream } = step.context;
const lastMessage = step.context.store.messages.at(-1)!.content;
const tools = await getTools(lastMessage);
if (!stream) {
@@ -284,9 +253,8 @@ export abstract class AgentRunner<
stream,
tools,
messages: [...step.context.store.messages],
additionalChatOptions,
});
await stepTools({
await stepTools<LLM>({
response,
tools,
step,
@@ -297,7 +265,6 @@ export abstract class AgentRunner<
stream,
tools,
messages: [...step.context.store.messages],
additionalChatOptions,
});
await stepToolsStreaming<LLM>({
response,
@@ -309,12 +276,7 @@ export abstract class AgentRunner<
};
protected constructor(
params: AgentRunnerParams<
AI,
Store,
AdditionalMessageOptions,
AdditionalChatOptions
>,
params: AgentRunnerParams<AI, Store, AdditionalMessageOptions>,
) {
super();
const { llm, chatHistory, systemPrompt, runner, tools, verbose } = params;
@@ -368,7 +330,6 @@ export abstract class AgentRunner<
stream: boolean = false,
verbose: boolean | undefined = undefined,
chatHistory?: ChatMessage<AdditionalMessageOptions>[],
additionalChatOptions?: AdditionalChatOptions,
) {
const initialMessages = [...(chatHistory ?? this.#chatHistory)];
if (this.#systemPrompt !== null) {
@@ -387,7 +348,6 @@ export abstract class AgentRunner<
stream,
toolCallCount: 0,
llm: this.#llm,
additionalChatOptions: additionalChatOptions ?? {},
getTools: (message) => this.getTools(message),
store: {
...this.createStore(),
@@ -405,29 +365,13 @@ export abstract class AgentRunner<
});
}
async chat(params: NonStreamingChatEngineParams): Promise<EngineResponse>;
async chat(
params: NonStreamingChatEngineParams<
AdditionalMessageOptions,
AdditionalChatOptions
>,
): Promise<EngineResponse>;
async chat(
params: StreamingChatEngineParams<
AdditionalMessageOptions,
AdditionalChatOptions
>,
params: StreamingChatEngineParams,
): Promise<ReadableStream<EngineResponse>>;
@wrapEventCaller
async chat(
params:
| NonStreamingChatEngineParams<
AdditionalMessageOptions,
AdditionalChatOptions
>
| StreamingChatEngineParams<
AdditionalMessageOptions,
AdditionalChatOptions
>,
params: NonStreamingChatEngineParams | StreamingChatEngineParams,
): Promise<EngineResponse | ReadableStream<EngineResponse>> {
let chatHistory: ChatMessage<AdditionalMessageOptions>[] = [];
@@ -444,7 +388,6 @@ export abstract class AgentRunner<
!!params.stream,
false,
chatHistory,
params.chatOptions,
);
for await (const stepOutput of task) {
// update chat history for each round
+5 -47
View File
@@ -4,66 +4,24 @@ import { ObjectRetriever } from "../objects";
import { AgentRunner, AgentWorker, type AgentParamsBase } from "./base.js";
import { validateAgentParams } from "./utils.js";
type LLMParamsBase<
AI extends LLM,
AdditionalMessageOptions extends object = AI extends LLM<
object,
infer AdditionalMessageOptions
>
? AdditionalMessageOptions
: never,
AdditionalChatOptions extends object = object,
> = AgentParamsBase<AI, AdditionalMessageOptions, AdditionalChatOptions>;
type LLMParamsBase = AgentParamsBase<LLM>;
type LLMParamsWithTools<
AI extends LLM,
AdditionalMessageOptions extends object = AI extends LLM<
object,
infer AdditionalMessageOptions
>
? AdditionalMessageOptions
: never,
AdditionalChatOptions extends object = object,
> = LLMParamsBase<AI, AdditionalMessageOptions, AdditionalChatOptions> & {
type LLMParamsWithTools = LLMParamsBase & {
tools: BaseToolWithCall[];
};
type LLMParamsWithToolRetriever<
AI extends LLM,
AdditionalMessageOptions extends object = AI extends LLM<
object,
infer AdditionalMessageOptions
>
? AdditionalMessageOptions
: never,
AdditionalChatOptions extends object = object,
> = LLMParamsBase<AI, AdditionalMessageOptions, AdditionalChatOptions> & {
type LLMParamsWithToolRetriever = LLMParamsBase & {
toolRetriever: ObjectRetriever<BaseToolWithCall>;
};
export type LLMAgentParams<
AI extends LLM,
AdditionalMessageOptions extends object = AI extends LLM<
object,
infer AdditionalMessageOptions
>
? AdditionalMessageOptions
: never,
AdditionalChatOptions extends object = object,
> =
| LLMParamsWithTools<AI, AdditionalMessageOptions, AdditionalChatOptions>
| LLMParamsWithToolRetriever<
AI,
AdditionalMessageOptions,
AdditionalChatOptions
>;
export type LLMAgentParams = LLMParamsWithTools | LLMParamsWithToolRetriever;
export class LLMAgentWorker extends AgentWorker<LLM> {
taskHandler = AgentRunner.defaultTaskHandler;
}
export class LLMAgent extends AgentRunner<LLM> {
constructor(params: LLMAgentParams<LLM>) {
constructor(params: LLMAgentParams) {
validateAgentParams(params);
const llm = params.llm ?? (Settings.llm ? (Settings.llm as LLM) : null);
if (!llm)
+6 -33
View File
@@ -19,7 +19,6 @@ export type AgentTaskContext<
>
? AdditionalMessageOptions
: never,
AdditionalChatOptions extends object = object,
> = {
readonly stream: boolean;
readonly toolCallCount: number;
@@ -27,7 +26,6 @@ export type AgentTaskContext<
readonly getTools: (
input: MessageContent,
) => BaseToolWithCall[] | Promise<BaseToolWithCall[]>;
readonly additionalChatOptions: Partial<AdditionalChatOptions>;
shouldContinue: (
taskStep: Readonly<TaskStep<Model, Store, AdditionalMessageOptions>>,
) => boolean;
@@ -47,26 +45,13 @@ export type TaskStep<
>
? AdditionalMessageOptions
: never,
AdditionalChatOptions extends object = object,
> = {
id: UUID;
context: AgentTaskContext<
Model,
Store,
AdditionalMessageOptions,
AdditionalChatOptions
>;
context: AgentTaskContext<Model, Store, AdditionalMessageOptions>;
// linked list
prevStep: TaskStep<
Model,
Store,
AdditionalMessageOptions,
AdditionalChatOptions
> | null;
nextSteps: Set<
TaskStep<Model, Store, AdditionalMessageOptions, AdditionalChatOptions>
>;
prevStep: TaskStep<Model, Store, AdditionalMessageOptions> | null;
nextSteps: Set<TaskStep<Model, Store, AdditionalMessageOptions>>;
};
export type TaskStepOutput<
@@ -78,14 +63,8 @@ export type TaskStepOutput<
>
? AdditionalMessageOptions
: never,
AdditionalChatOptions extends object = object,
> = {
taskStep: TaskStep<
Model,
Store,
AdditionalMessageOptions,
AdditionalChatOptions
>;
taskStep: TaskStep<Model, Store, AdditionalMessageOptions>;
// output shows the response to the user
output:
| ChatResponse<AdditionalMessageOptions>
@@ -102,16 +81,10 @@ export type TaskHandler<
>
? AdditionalMessageOptions
: never,
AdditionalChatOptions extends object = object,
> = (
step: TaskStep<Model, Store, AdditionalMessageOptions, AdditionalChatOptions>,
step: TaskStep<Model, Store, AdditionalMessageOptions>,
enqueueOutput: (
taskOutput: TaskStepOutput<
Model,
Store,
AdditionalMessageOptions,
AdditionalChatOptions
>,
taskOutput: TaskStepOutput<Model, Store, AdditionalMessageOptions>,
) => void,
) => Promise<void>;
-4
View File
@@ -16,18 +16,14 @@ export interface BaseChatEngineParams<
export interface StreamingChatEngineParams<
AdditionalMessageOptions extends object = object,
AdditionalChatOptions extends object = object,
> extends BaseChatEngineParams<AdditionalMessageOptions> {
stream: true;
chatOptions?: AdditionalChatOptions;
}
export interface NonStreamingChatEngineParams<
AdditionalMessageOptions extends object = object,
AdditionalChatOptions extends object = object,
> extends BaseChatEngineParams<AdditionalMessageOptions> {
stream?: false;
chatOptions?: AdditionalChatOptions;
}
export abstract class BaseChatEngine {
+1 -3
View File
@@ -66,8 +66,6 @@ export abstract class BaseLLM<
export abstract class ToolCallLLM<
AdditionalChatOptions extends object = object,
AdditionalMessageOptions extends
ToolCallLLMMessageOptions = ToolCallLLMMessageOptions,
> extends BaseLLM<AdditionalChatOptions, AdditionalMessageOptions> {
> extends BaseLLM<AdditionalChatOptions, ToolCallLLMMessageOptions> {
abstract supportToolCall: boolean;
}
+4 -6
View File
@@ -65,21 +65,19 @@ export abstract class BaseChatStoreMemory<
super();
}
getAllMessages():
| ChatMessage<AdditionalMessageOptions>[]
| Promise<ChatMessage<AdditionalMessageOptions>[]> {
getAllMessages(): ChatMessage<AdditionalMessageOptions>[] {
return this.chatStore.getMessages(this.chatStoreKey);
}
put(messages: ChatMessage<AdditionalMessageOptions>): void | Promise<void> {
put(messages: ChatMessage<AdditionalMessageOptions>) {
this.chatStore.addMessage(this.chatStoreKey, messages);
}
set(messages: ChatMessage<AdditionalMessageOptions>[]): void | Promise<void> {
set(messages: ChatMessage<AdditionalMessageOptions>[]) {
this.chatStore.setMessages(this.chatStoreKey, messages);
}
reset(): void | Promise<void> {
reset() {
this.chatStore.deleteMessages(this.chatStoreKey);
}
}
@@ -33,11 +33,11 @@ export class ChatMemoryBuffer<
}
}
async getMessages(
getMessages(
transientMessages?: ChatMessage<AdditionalMessageOptions>[] | undefined,
initialTokenCount: number = 0,
) {
const messages = await this.getAllMessages();
const messages = this.getAllMessages();
if (initialTokenCount > this.tokenLimit) {
throw new Error("Initial token count exceeds token limit");
-13
View File
@@ -32,10 +32,6 @@ 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;
@@ -227,13 +223,4 @@ 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)))];
}
}
@@ -7,11 +7,7 @@ export abstract class BaseChatStore<
key: string,
messages: ChatMessage<AdditionalMessageOptions>[],
): void;
abstract getMessages(
key: string,
):
| ChatMessage<AdditionalMessageOptions>[]
| Promise<ChatMessage<AdditionalMessageOptions>[]>;
abstract getMessages(key: string): ChatMessage<AdditionalMessageOptions>[];
abstract addMessage(
key: string,
message: ChatMessage<AdditionalMessageOptions>,
@@ -19,7 +15,5 @@ export abstract class BaseChatStore<
): void;
abstract deleteMessages(key: string): void;
abstract deleteMessage(key: string, idx: number): void;
abstract getKeys():
| IterableIterator<string>
| Promise<IterableIterator<string>>;
abstract getKeys(): IterableIterator<string>;
}
+13 -21
View File
@@ -4,12 +4,18 @@ import { zodToJsonSchema } from "zod-to-json-schema";
import type { JSONValue } from "../global";
import type { BaseTool, ToolMetadata } from "../llms";
const kOriginalFn = Symbol("originalFn");
export class FunctionTool<T, R extends JSONValue | Promise<JSONValue>>
implements BaseTool<T>
{
[kOriginalFn]?: (input: T) => R;
#fn: (input: T) => R;
readonly #metadata: ToolMetadata<JSONSchemaType<T>>;
readonly #zodType: z.ZodType<T> | null = null;
#metadata: ToolMetadata<JSONSchemaType<T>>;
// todo: for the future, we can use zod to validate the input parameters
// eslint-disable-next-line no-unused-private-class-members
#zodType: z.ZodType<T> | null = null;
constructor(
fn: (input: T) => R,
metadata: ToolMetadata<JSONSchemaType<T>>,
@@ -26,12 +32,6 @@ export class FunctionTool<T, R extends JSONValue | Promise<JSONValue>>
fn: (input: T) => JSONValue | Promise<JSONValue>,
schema: ToolMetadata<JSONSchemaType<T>>,
): FunctionTool<T, JSONValue | Promise<JSONValue>>;
static from<R extends z.ZodType>(
fn: (input: z.infer<R>) => JSONValue | Promise<JSONValue>,
schema: Omit<ToolMetadata, "parameters"> & {
parameters: R;
},
): FunctionTool<z.infer<R>, JSONValue | Promise<JSONValue>>;
static from<T, R extends z.ZodType<T>>(
fn: (input: T) => JSONValue | Promise<JSONValue>,
schema: Omit<ToolMetadata, "parameters"> & {
@@ -40,15 +40,15 @@ export class FunctionTool<T, R extends JSONValue | Promise<JSONValue>>
): FunctionTool<T, JSONValue>;
// eslint-disable-next-line @typescript-eslint/no-explicit-any
static from(fn: any, schema: any): any {
if (schema.parameters instanceof z.ZodSchema) {
const jsonSchema = zodToJsonSchema(schema.parameters);
if (schema.parameter instanceof z.ZodSchema) {
const jsonSchema = zodToJsonSchema(schema.parameter);
return new FunctionTool(
fn,
{
...schema,
parameters: jsonSchema,
},
schema.parameters,
schema.parameter,
);
}
return new FunctionTool(fn, schema);
@@ -58,15 +58,7 @@ export class FunctionTool<T, R extends JSONValue | Promise<JSONValue>>
return this.#metadata as BaseTool<T>["metadata"];
}
call = (input: T) => {
if (this.#zodType) {
const result = this.#zodType.safeParse(input);
if (result.success) {
return this.#fn.call(null, result.data);
} else {
console.warn(result.error.errors);
}
}
call(input: T) {
return this.#fn.call(null, input);
};
}
}
-1
View File
@@ -76,7 +76,6 @@ export {
extractText,
imageToDataUrl,
messagesToHistory,
MockLLM,
toToolDescriptions,
} from "./llms";
-88
View File
@@ -2,15 +2,6 @@ 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,
@@ -152,82 +143,3 @@ 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: {} };
}
}
-14
View File
@@ -13,8 +13,6 @@ export type StepFunction<T extends WorkflowEvent = WorkflowEvent> = (
type EventTypeParam = EventTypes | EventTypes[];
let once = false;
export class Workflow {
#steps: Map<
// eslint-disable-next-line @typescript-eslint/no-explicit-any
@@ -31,20 +29,8 @@ export class Workflow {
verbose?: boolean;
timeout?: number;
validate?: boolean;
ignoreDeprecatedWarning?: boolean;
} = {},
) {
if (!once && !params.ignoreDeprecatedWarning) {
console.warn(
"@llamaindex/core/workflow is going to use the new workflow API in the next major version.",
"Please update your imports to @llamaindex/workflow",
);
console.warn(
"See https://ts.llamaindex.ai/docs/llamaindex/guide/workflow for more information",
);
once = true;
}
this.#verbose = params.verbose ?? false;
this.#timeout = params.timeout ?? null;
this.#validate = params.validate ?? false;
@@ -19,7 +19,7 @@ describe("ChatMemoryBuffer", () => {
expect(buffer.tokenLimit).toBe(500);
});
test("getMessages returns all messages when under token limit", async () => {
test("getMessages returns all messages when under token limit", () => {
const messages: ChatMessage[] = [
{ role: "user", content: "Hello" },
{ role: "assistant", content: "Hi there!" },
@@ -30,11 +30,11 @@ describe("ChatMemoryBuffer", () => {
chatHistory: messages,
});
const result = await buffer.getMessages();
const result = buffer.getMessages();
expect(result).toEqual(messages);
});
test("getMessages truncates messages when over token limit", async () => {
test("getMessages truncates messages when over token limit", () => {
const messages: ChatMessage[] = [
{ role: "user", content: "This is a long message" },
{ role: "assistant", content: "This is also a long reply" },
@@ -45,11 +45,11 @@ describe("ChatMemoryBuffer", () => {
chatHistory: messages,
});
const result = await buffer.getMessages();
const result = buffer.getMessages();
expect(result).toEqual([{ role: "user", content: "Short" }]);
});
test("getMessages handles input messages", async () => {
test("getMessages handles input messages", () => {
const storedMessages: ChatMessage[] = [
{ role: "user", content: "Hello" },
{ role: "assistant", content: "Hi there!" },
@@ -62,13 +62,13 @@ describe("ChatMemoryBuffer", () => {
const inputMessages: ChatMessage[] = [
{ role: "user", content: "New message" },
];
const result = await buffer.getMessages(inputMessages);
const result = buffer.getMessages(inputMessages);
expect(result).toEqual([...inputMessages, ...storedMessages]);
});
test("getMessages throws error when initial token count exceeds limit", () => {
const buffer = new ChatMemoryBuffer({ tokenLimit: 10 });
expect(async () => buffer.getMessages(undefined, 20)).rejects.toThrow(
expect(() => buffer.getMessages(undefined, 20)).toThrow(
"Initial token count exceeds token limit",
);
});
+1 -1
View File
@@ -7,6 +7,6 @@
},
"devDependencies": {
"@llamaindex/core": "workspace:*",
"vitest": "^2.1.5"
"vitest": "^2.1.4"
}
}
-11
View File
@@ -158,15 +158,4 @@ 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");
});
});
-32
View File
@@ -1,37 +1,5 @@
# @llamaindex/env
## 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
- 4fc001c: chore: bump `@huggingface/transformers`
Upgrade to v3, please read https://github.com/huggingface/transformers.js/releases/tag/3.0.0 for more information.
## 0.1.19
### Patch Changes
+4 -4
View File
@@ -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.24",
"version": "0.1.19",
"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.2",
"gpt-tokenizer": "^2.6.0",
"pathe": "^1.1.2",
"vitest": "^2.1.5"
"vitest": "^2.1.4"
},
"peerDependencies": {
"@aws-crypto/sha256-js": "^5.2.0",
-1
View File
@@ -1 +0,0 @@
export { AsyncLocalStorage } from "node:async_hooks";
+1 -1
View File
@@ -7,7 +7,7 @@
*/
import { INTERNAL_ENV } from "./utils/index.js";
export * from "./als/index.workerd.js";
export * from "./als/index.non-node.js";
export { NotSupportCurrentRuntimeClass } from "./utils/shared.js";
export * from "./node-polyfill.js";
+1 -1
View File
@@ -2,4 +2,4 @@ export {
Tokenizers,
tokenizers,
type Tokenizer,
} from "./internal/tokenizers/node.js";
} from "./internal/tokenizers/js.js";
-117
View File
@@ -1,122 +1,5 @@
# @llamaindex/experimental
## 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
- llamaindex@0.8.13
## 0.0.124
### Patch Changes
- llamaindex@0.8.12
## 0.0.123
### Patch Changes
- llamaindex@0.8.11
## 0.0.122
### Patch Changes
- Updated dependencies [f066e50]
- llamaindex@0.8.10
## 0.0.121
### Patch Changes
- Updated dependencies [4fc001c]
- Updated dependencies [4d4cd8a]
- llamaindex@0.8.9
## 0.0.120
### Patch Changes
+2 -2
View File
@@ -1,7 +1,7 @@
{
"name": "@llamaindex/experimental",
"description": "Experimental package for LlamaIndexTS",
"version": "0.0.137",
"version": "0.0.120",
"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.9.2",
"@swc/core": "^1.7.22",
"@types/jsonpath": "^0.2.4",
"concurrently": "^9.1.0",
"pathe": "^1.1.2"
-281
View File
@@ -1,286 +1,5 @@
# llamaindex
## 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
- Updated dependencies [a7b0ac3]
- Updated dependencies [a7b0ac3]
- Updated dependencies [c69605f]
- @llamaindex/anthropic@0.0.19
- @llamaindex/core@0.4.10
- @llamaindex/cloud@2.0.10
- @llamaindex/node-parser@0.0.11
- @llamaindex/clip@0.0.19
- @llamaindex/deepinfra@0.0.19
- @llamaindex/huggingface@0.0.19
- @llamaindex/ollama@0.0.26
- @llamaindex/openai@0.1.35
- @llamaindex/portkey-ai@0.0.19
- @llamaindex/replicate@0.0.19
- @llamaindex/readers@1.0.11
- @llamaindex/groq@0.0.34
- @llamaindex/vllm@0.0.5
## 0.8.12
### Patch Changes
- Updated dependencies [7ae6eaa]
- @llamaindex/core@0.4.9
- @llamaindex/openai@0.1.34
- @llamaindex/cloud@2.0.9
- @llamaindex/node-parser@0.0.10
- @llamaindex/anthropic@0.0.18
- @llamaindex/clip@0.0.18
- @llamaindex/deepinfra@0.0.18
- @llamaindex/huggingface@0.0.18
- @llamaindex/ollama@0.0.25
- @llamaindex/portkey-ai@0.0.18
- @llamaindex/replicate@0.0.18
- @llamaindex/readers@1.0.10
- @llamaindex/groq@0.0.33
- @llamaindex/vllm@0.0.4
## 0.8.11
### Patch Changes
- Updated dependencies [f865c98]
- @llamaindex/core@0.4.8
- @llamaindex/cloud@2.0.8
- @llamaindex/node-parser@0.0.9
- @llamaindex/anthropic@0.0.17
- @llamaindex/clip@0.0.17
- @llamaindex/deepinfra@0.0.17
- @llamaindex/huggingface@0.0.17
- @llamaindex/ollama@0.0.24
- @llamaindex/openai@0.1.33
- @llamaindex/portkey-ai@0.0.17
- @llamaindex/replicate@0.0.17
- @llamaindex/readers@1.0.9
- @llamaindex/groq@0.0.32
- @llamaindex/vllm@0.0.3
## 0.8.10
### Patch Changes
- f066e50: feat: vllm support
- Updated dependencies [f066e50]
- Updated dependencies [d89ebe0]
- Updated dependencies [fd8c882]
- @llamaindex/vllm@0.0.2
- @llamaindex/core@0.4.7
- @llamaindex/cloud@2.0.7
- @llamaindex/node-parser@0.0.8
- @llamaindex/anthropic@0.0.16
- @llamaindex/clip@0.0.16
- @llamaindex/deepinfra@0.0.16
- @llamaindex/huggingface@0.0.16
- @llamaindex/ollama@0.0.23
- @llamaindex/openai@0.1.32
- @llamaindex/portkey-ai@0.0.16
- @llamaindex/replicate@0.0.16
- @llamaindex/readers@1.0.8
- @llamaindex/groq@0.0.31
## 0.8.9
### Patch Changes
- 4fc001c: chore: bump `@huggingface/transformers`
Upgrade to v3, please read https://github.com/huggingface/transformers.js/releases/tag/3.0.0 for more information.
- 4d4cd8a: feat: support ollama tool call
Note that `OllamaEmbedding` now is not the subclass of `Ollama`.
- Updated dependencies [4fc001c]
- Updated dependencies [4d4cd8a]
- @llamaindex/env@0.1.20
- @llamaindex/clip@0.0.15
- @llamaindex/huggingface@0.0.15
- @llamaindex/ollama@0.0.22
- @llamaindex/cloud@2.0.6
- @llamaindex/core@0.4.6
- @llamaindex/node-parser@0.0.7
- @llamaindex/anthropic@0.0.15
- @llamaindex/deepinfra@0.0.15
- @llamaindex/groq@0.0.30
- @llamaindex/openai@0.1.31
- @llamaindex/portkey-ai@0.0.15
- @llamaindex/replicate@0.0.15
- @llamaindex/readers@1.0.7
## 0.8.8
### Patch Changes

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