Compare commits

..

32 Commits

Author SHA1 Message Date
github-actions[bot] fc2d5ea1cd Release 0.8.18 (#1506)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2024-11-18 13:08:32 -08:00
Thuc Pham ef4f63d9f4 refactor: move mockLLM to core (#1493)
Co-authored-by: Alex Yang <himself65@outlook.com>
2024-11-18 11:39:46 -08:00
Thuc Pham d17450fdfb fix: next.js 15 compatibility (#1474)
Co-authored-by: Alex Yang <himself65@outlook.com>
2024-11-18 11:34:05 -08:00
github-actions[bot] 805d2b0d55 Release 0.8.17 (#1504)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2024-11-18 10:28:15 -08:00
Marcus Schiesser 6d22fa2a50 feat: Get PromptTemplate template variables at run-time (#1502) 2024-11-18 09:34:26 -08:00
Aman Rao 16f0068175 chore: update azure cosmos db no sql vector store (#1503) 2024-11-18 09:33:20 -08:00
github-actions[bot] 1054c3382a Release 0.8.16 (#1499)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2024-11-17 22:28:02 -08:00
Alex Yang e60328b086 fix: import error in cjs (#1498) 2024-11-17 22:24:09 -08:00
Laurie Voss 3371dfb89f Syncing footer to match main site (#1496) 2024-11-16 00:43:44 -08:00
github-actions[bot] 2065a16a07 Release 0.8.15 (#1494)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2024-11-15 11:27:52 -08:00
Wassim Chegham 5dae534f8d fix: propagate queryStr to concrete vectorStore (#1495)
Co-authored-by: Alex Yang <himself65@outlook.com>
2024-11-15 11:16:32 -08:00
Aman Rao 3d503cb810 chore: update azure cosmos db (#1484)
Co-authored-by: Alex Yang <himself65@outlook.com>
2024-11-15 00:55:32 -08:00
Thuc Pham daf8522bec feat: use mock llm (#1492) 2024-11-15 14:50:49 +08:00
github-actions[bot] 223f3136b4 Release 0.8.14 (#1491)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2024-11-14 21:49:37 -08:00
Thuc Pham c6bad7d951 docs(next): chat UI with rsc example (#1481)
Co-authored-by: Marcus Schiesser <mail@marcusschiesser.de>
2024-11-14 21:33:30 -08:00
Aman Rao 630b425545 feat: add Azure CosmosDB NoSql Chat store (#1490)
Co-authored-by: Alex Yang <himself65@outlook.com>
2024-11-14 21:30:55 -08:00
github-actions[bot] 4c7b891446 Release 0.8.13 (#1480)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: himself65 <himself65@users.noreply.github.com>
2024-11-14 18:25:19 -08:00
Alex Yang a9c5b4899b docs: update docusaurus.config.js (#1489) 2024-11-14 17:36:52 -08:00
Alex Yang a7b0ac3cb7 feat(anthropic): support prompt caching (#1488) 2024-11-14 17:35:21 -08:00
Alex Yang a7540ff47b docs: update (#1486) 2024-11-14 15:46:48 -08:00
Aman Rao c69605f406 feat: add async support to BaseChatStore and BaseChatStoreMemory (#1483)
Co-authored-by: Alex Yang <himself65@outlook.com>
2024-11-14 13:45:50 -08:00
Alex Yang ee20c44d9b feat(workflow): allow send event with no output (#1479) 2024-11-14 00:17:53 -08:00
Alex Yang 1d470363df docs: add banner for legacy (#1478) 2024-11-13 18:16:13 -08:00
github-actions[bot] b39f40dbd8 Release (#1477)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: himself65 <himself65@users.noreply.github.com>
2024-11-13 01:25:40 -08:00
Alex Yang fadc8b8ea0 feat: recoverable data with error handling (#1476) 2024-11-13 01:15:50 -08:00
Alex Yang ea92b6986d chore: update changeset 2024-11-13 01:15:28 -08:00
Alex Yang 17f9022d22 fix: output event check (#1475) 2024-11-13 00:46:35 -08:00
github-actions[bot] 14792cd8b4 Release 0.8.12 (#1473)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2024-11-12 16:20:25 -08:00
Alex Yang 7ae6eaa0a2 chore: update changeset 2024-11-12 12:49:17 -08:00
Alex Yang dbb5bd9f23 feat: allow tool_choice for OpenAIAgent (#1472) 2024-11-12 12:46:57 -08:00
github-actions[bot] aacd606204 Release 0.8.11 (#1471)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2024-11-12 11:49:22 -08:00
Alex Yang f865c984d3 feat: async get message on chat store (#1470) 2024-11-12 10:59:44 -08:00
108 changed files with 3037 additions and 389 deletions
+7 -3
View File
@@ -1,12 +1,16 @@
# LlamaIndex.TS <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>
[![NPM Version](https://img.shields.io/npm/v/llamaindex)](https://www.npmjs.com/package/llamaindex) [![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 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) [![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) [![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. 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/ Documentation: https://ts.llamaindex.ai/
+59
View File
@@ -1,5 +1,64 @@
# docs # docs
## 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 ## 0.0.114
### Patch Changes ### Patch Changes
+6
View File
@@ -62,6 +62,12 @@ const config = {
({ ({
// Replace with your project's social card // Replace with your project's social card
image: "img/favicon.png", // TODO change this 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: { navbar: {
title: "LlamaIndex.TS", title: "LlamaIndex.TS",
logo: { logo: {
+1 -1
View File
@@ -1,6 +1,6 @@
{ {
"name": "docs", "name": "docs",
"version": "0.0.114", "version": "0.0.123",
"private": true, "private": true,
"scripts": { "scripts": {
"docusaurus": "docusaurus", "docusaurus": "docusaurus",
+95
View File
@@ -1,5 +1,100 @@
# @llamaindex/doc # @llamaindex/doc
## 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 ## 0.0.12
### Patch Changes ### Patch Changes
+2
View File
@@ -6,6 +6,7 @@ const withMDX = createMDX();
const config = { const config = {
reactStrictMode: true, reactStrictMode: true,
transpilePackages: ["monaco-editor"], transpilePackages: ["monaco-editor"],
serverExternalPackages: ["@huggingface/transformers"],
webpack: (config, { isServer }) => { webpack: (config, { isServer }) => {
if (Array.isArray(config.target) && config.target.includes("web")) { if (Array.isArray(config.target) && config.target.includes("web")) {
config.target = ["web", "es2020"]; config.target = ["web", "es2020"];
@@ -26,6 +27,7 @@ const config = {
}), }),
); );
} }
config.resolve.alias["replicate"] = false;
return config; return config;
}, },
}; };
+2 -2
View File
@@ -1,6 +1,6 @@
{ {
"name": "@llamaindex/doc", "name": "@llamaindex/doc",
"version": "0.0.12", "version": "0.0.21",
"private": true, "private": true,
"scripts": { "scripts": {
"build": "pnpm run build:docs && next build", "build": "pnpm run build:docs && next build",
@@ -12,7 +12,7 @@
}, },
"dependencies": { "dependencies": {
"@icons-pack/react-simple-icons": "^10.1.0", "@icons-pack/react-simple-icons": "^10.1.0",
"@llamaindex/chat-ui": "0.0.5", "@llamaindex/chat-ui": "0.0.8",
"@llamaindex/cloud": "workspace:*", "@llamaindex/cloud": "workspace:*",
"@llamaindex/core": "workspace:*", "@llamaindex/core": "workspace:*",
"@llamaindex/node-parser": "workspace:*", "@llamaindex/node-parser": "workspace:*",
File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 6.3 KiB

+4 -1
View File
@@ -1,7 +1,10 @@
import { MockLLM } from "@llamaindex/core/utils";
import { LlamaIndexAdapter, type Message } from "ai"; import { LlamaIndexAdapter, type Message } from "ai";
import { SimpleChatEngine, type ChatMessage } from "llamaindex"; import { Settings, SimpleChatEngine, type ChatMessage } from "llamaindex";
import { NextResponse, type NextRequest } from "next/server"; import { NextResponse, type NextRequest } from "next/server";
Settings.llm = new MockLLM(); // config your LLM here
export async function POST(request: NextRequest) { export async function POST(request: NextRequest) {
try { try {
const { messages } = (await request.json()) as { messages: Message[] }; const { messages } = (await request.json()) as { messages: Message[] };
-8
View File
@@ -1,8 +0,0 @@
"use client";
import { ChatSection } from "@llamaindex/chat-ui";
import { useChat } from "ai/react";
export const ChatDemo = () => {
const handler = useChat();
return <ChatSection handler={handler} />;
};
@@ -0,0 +1,16 @@
"use client";
import { ChatInput, ChatMessages, ChatSection } from "@llamaindex/chat-ui";
import { useChat } from "ai/react";
export const ChatDemo = () => {
const handler = useChat();
return (
<ChatSection handler={handler}>
<ChatMessages>
<ChatMessages.List className="h-auto max-h-[400px]" />
<ChatMessages.Actions />
</ChatMessages>
<ChatInput />
</ChatSection>
);
};
@@ -0,0 +1,57 @@
import { Markdown } from "@llamaindex/chat-ui/widgets";
import { MockLLM } from "@llamaindex/core/utils";
import { generateId, Message } from "ai";
import { createAI, createStreamableUI, getMutableAIState } from "ai/rsc";
import { type ChatMessage, Settings, SimpleChatEngine } from "llamaindex";
import { ReactNode } from "react";
type ServerState = Message[];
type FrontendState = Array<Message & { display: ReactNode }>;
type Actions = {
chat: (message: Message) => Promise<Message & { display: ReactNode }>;
};
Settings.llm = new MockLLM(); // config your LLM here
export const AI = createAI<ServerState, FrontendState, Actions>({
initialAIState: [],
initialUIState: [],
actions: {
chat: async (message: Message) => {
"use server";
const aiState = getMutableAIState<typeof AI>();
aiState.update((prev) => [...prev, message]);
const uiStream = createStreamableUI();
const chatEngine = new SimpleChatEngine();
const assistantMessage: Message = {
id: generateId(),
role: "assistant",
content: "",
};
// run the async function without blocking
(async () => {
const chatResponse = await chatEngine.chat({
stream: true,
message: message.content,
chatHistory: aiState.get() as ChatMessage[],
});
for await (const chunk of chatResponse) {
assistantMessage.content += chunk.delta;
uiStream.update(<Markdown content={assistantMessage.content} />);
}
aiState.done([...aiState.get(), assistantMessage]);
uiStream.done();
})();
return {
...assistantMessage,
display: uiStream.value,
};
},
},
});
@@ -0,0 +1,33 @@
"use client";
import {
ChatInput,
ChatMessage,
ChatMessages,
ChatSection as ChatSectionUI,
} from "@llamaindex/chat-ui";
import { useChatRSC } from "./use-chat-rsc";
export const ChatSectionRSC = () => {
const handler = useChatRSC();
return (
<ChatSectionUI handler={handler}>
<ChatMessages>
<ChatMessages.List className="h-auto max-h-[400px]">
{handler.messages.map((message, index) => (
<ChatMessage
key={index}
message={message}
isLast={index === handler.messages.length - 1}
>
<ChatMessage.Avatar />
<ChatMessage.Content>{message.display}</ChatMessage.Content>
</ChatMessage>
))}
<ChatMessages.Loading />
</ChatMessages.List>
</ChatMessages>
<ChatInput />
</ChatSectionUI>
);
};
@@ -0,0 +1,8 @@
import { AI } from "./ai-action";
import { ChatSectionRSC } from "./chat-section";
export const ChatDemoRSC = () => (
<AI>
<ChatSectionRSC />
</AI>
);
@@ -0,0 +1,41 @@
"use client";
import { useActions } from "ai/rsc";
import { generateId, Message } from "ai";
import { useUIState } from "ai/rsc";
import { useState } from "react";
import { AI } from "./ai-action";
export function useChatRSC() {
const [input, setInput] = useState<string>("");
const [isLoading, setIsLoading] = useState<boolean>(false);
const [messages, setMessages] = useUIState<typeof AI>();
const { chat } = useActions<typeof AI>();
const append = async (message: Omit<Message, "id">) => {
const newMsg: Message = { ...message, id: generateId() };
setIsLoading(true);
try {
setMessages((prev) => [...prev, { ...newMsg, display: message.content }]);
const assistantMsg = await chat(newMsg);
setMessages((prev) => [...prev, assistantMsg]);
} catch (error) {
console.error(error);
}
setIsLoading(false);
setInput("");
return message.content;
};
return {
input,
setInput,
isLoading,
messages,
setMessages,
append,
};
}
+27 -5
View File
@@ -85,6 +85,33 @@ const Footer = () => {
<Text as="span">SharePoint</Text> <Text as="span">SharePoint</Text>
</a> </a>
</li> </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> </ul>
</div> </div>
<div> <div>
@@ -171,11 +198,6 @@ const Footer = () => {
<Text as="span">SEC Insights</Text> <Text as="span">SEC Insights</Text>
</a> </a>
</li> </li>
<li>
<a href="https://chat.llamaindex.ai/">
<Text as="span">Chat LlamaIndex</Text>
</a>
</li>
<li> <li>
<a href="https://github.com/run-llama/llamabot"> <a href="https://github.com/run-llama/llamabot">
<Text as="span">LlamaBot</Text> <Text as="span">LlamaBot</Text>
@@ -1,8 +1,8 @@
--- ---
title: Chat-UI title: Using API Route
description: Use chat-ui to add a chat interface to your LlamaIndexTS application. description: Chat interface for your LlamaIndexTS application using API Route
--- ---
import { ChatDemo } from '../../../../components/demo/chat'; import { ChatDemo } from '../../../../../components/demo/chat/api/demo';
import "@llamaindex/chat-ui/styles/code.css"; import "@llamaindex/chat-ui/styles/code.css";
import "@llamaindex/chat-ui/styles/katex.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 ```json doc-gen:file
{ {
"file": "./src/components/demo/chat.tsx", "file": "./src/components/demo/chat/api/demo.tsx",
"codeblock": true "codeblock": true
} }
``` ```
@@ -37,6 +37,7 @@ Combining both, you're getting a fully functional chat interface:
<ChatDemo /> <ChatDemo />
## Next Steps ## Next Steps
The steps above are the bare minimum to get a chat interface working. From here, you can go two ways: The steps above are the bare minimum to get a chat interface working. From here, you can go two ways:
@@ -0,0 +1,6 @@
{
"title": "Chat-UI",
"description": "Use chat-ui to add a chat interface to your LlamaIndexTS application.",
"defaultOpen": false,
"pages": ["chat", "rsc"]
}
@@ -0,0 +1,68 @@
---
title: Using Next.js RSC
description: Chat interface for your LlamaIndexTS application using Next.js RSC
---
import { ChatDemoRSC } from '../../../../../components/demo/chat/rsc/demo';
import "@llamaindex/chat-ui/styles/code.css";
import "@llamaindex/chat-ui/styles/katex.css";
Using [chat-ui](https://github.com/run-llama/chat-ui), it's easy to add a chat interface to your LlamaIndexTS application using [Next.js RSC](https://nextjs.org/docs/app/building-your-application/rendering/server-components) and [Vercel AI RSC](https://sdk.vercel.ai/docs/ai-sdk-rsc/overview).
With RSC, the chat messages are not returned as JSON from the server (like when using an [API route](./chat)), instead the chat message components are rendered on the server side.
This is for example useful for rendering a whole chat history on the server before sending it to the client. [Check here](https://sdk.vercel.ai/docs/getting-started/navigating-the-library#when-to-use-ai-sdk-rsc), for a discussion of when to use use RSC.
For implementing a chat interface with RSC, you need to create an AI action and then connect the chat interface to use it.
## Create an AI action
First, define an [AI context provider](https://sdk.vercel.ai/examples/rsc/state-management/ai-ui-states) with a chat server action:
```json doc-gen:file
{
"file": "./src/components/demo/chat/rsc/ai-action.tsx",
"codeblock": true
}
```
The chat server action is using LlamaIndexTS to generate a response based on the chat history and the user input.
## Create the chat UI
The entrypoint of our application initializes the AI provider for the application and adds a `ChatSection` component:
```json doc-gen:file
{
"file": "./src/components/demo/chat/rsc/demo.tsx",
"codeblock": true
}
```
The `ChatSection` component is created by using chat components from @llamaindex/chat-ui:
```json doc-gen:file
{
"file": "./src/components/demo/chat/rsc/chat-section.tsx",
"codeblock": true
}
```
It is using a `useChatRSC` hook to conntect the chat interface to the `chat` AI action that we defined earlier:
```json doc-gen:file
{
"file": "./src/components/demo/chat/rsc/use-chat-rsc.tsx",
"codeblock": true
}
```
## Try RSC Chat ⬇️
<ChatDemoRSC />
## Next Steps
The steps above are the bare minimum to get a chat interface working with RSC. From here, you can go two ways:
1. Use our [full-stack RSC example](https://github.com/run-llama/nextjs-rsc) based on [create-llama](https://github.com/run-llama/create-llama) to get started quickly with a fully working chat interface or
2. Learn more about [AI RSC](https://sdk.vercel.ai/examples/rsc), [chat-ui](https://github.com/run-llama/chat-ui) and [LlamaIndexTS](https://github.com/run-llama/llamaindex-ts) to customize the chat interface and AI actions to your needs.
@@ -1,5 +1,57 @@
# @llamaindex/cloudflare-worker-agent-test # @llamaindex/cloudflare-worker-agent-test
## 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 ## 0.0.106
### Patch Changes ### Patch Changes
@@ -1,6 +1,6 @@
{ {
"name": "@llamaindex/cloudflare-worker-agent-test", "name": "@llamaindex/cloudflare-worker-agent-test",
"version": "0.0.106", "version": "0.0.114",
"type": "module", "type": "module",
"private": true, "private": true,
"scripts": { "scripts": {
@@ -1,5 +1,35 @@
# @llamaindex/llama-parse-browser-test # @llamaindex/llama-parse-browser-test
## 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 ## 0.0.27
### Patch Changes ### Patch Changes
@@ -1,7 +1,7 @@
{ {
"name": "@llamaindex/llama-parse-browser-test", "name": "@llamaindex/llama-parse-browser-test",
"private": true, "private": true,
"version": "0.0.27", "version": "0.0.32",
"type": "module", "type": "module",
"scripts": { "scripts": {
"dev": "vite", "dev": "vite",
+52
View File
@@ -1,5 +1,57 @@
# @llamaindex/next-agent-test # @llamaindex/next-agent-test
## 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 ## 0.1.106
### Patch Changes ### Patch Changes
+1 -1
View File
@@ -1,6 +1,6 @@
{ {
"name": "@llamaindex/next-agent-test", "name": "@llamaindex/next-agent-test",
"version": "0.1.106", "version": "0.1.114",
"private": true, "private": true,
"scripts": { "scripts": {
"dev": "next dev", "dev": "next dev",
@@ -1,5 +1,57 @@
# test-edge-runtime # test-edge-runtime
## 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 ## 0.1.105
### Patch Changes ### Patch Changes
@@ -1,6 +1,6 @@
{ {
"name": "@llamaindex/nextjs-edge-runtime-test", "name": "@llamaindex/nextjs-edge-runtime-test",
"version": "0.1.105", "version": "0.1.113",
"private": true, "private": true,
"scripts": { "scripts": {
"dev": "next dev", "dev": "next dev",
@@ -1,5 +1,57 @@
# @llamaindex/next-node-runtime # @llamaindex/next-node-runtime
## 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 ## 0.0.87
### Patch Changes ### Patch Changes
@@ -1,6 +1,6 @@
{ {
"name": "@llamaindex/next-node-runtime-test", "name": "@llamaindex/next-node-runtime-test",
"version": "0.0.87", "version": "0.0.95",
"private": true, "private": true,
"scripts": { "scripts": {
"dev": "next dev", "dev": "next dev",
@@ -1,5 +1,57 @@
# @llamaindex/waku-query-engine-test # @llamaindex/waku-query-engine-test
## 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 ## 0.0.106
### Patch Changes ### Patch Changes
+1 -1
View File
@@ -1,6 +1,6 @@
{ {
"name": "@llamaindex/waku-query-engine-test", "name": "@llamaindex/waku-query-engine-test",
"version": "0.0.106", "version": "0.0.114",
"type": "module", "type": "module",
"private": true, "private": true,
"scripts": { "scripts": {
+20
View File
@@ -1,5 +1,25 @@
# examples # examples
## 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 ## 0.0.14
### Patch Changes ### Patch Changes
+38
View File
@@ -0,0 +1,38 @@
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,14 +83,6 @@ async function query() {
}); });
} }
// configure the Azure CosmosDB NoSQL Vector Store
const dbConfig: AzureCosmosDBNoSQLConfig = {
client: cosmosClient,
databaseName,
containerName,
flatMetadata: false,
};
// use Azure CosmosDB as a vectorStore, docStore, and indexStore // use Azure CosmosDB as a vectorStore, docStore, and indexStore
const { vectorStore, docStore, indexStore } = await initializeStores(); const { vectorStore, docStore, indexStore } = await initializeStores();
+5 -5
View File
@@ -1,15 +1,15 @@
{ {
"name": "@llamaindex/examples", "name": "@llamaindex/examples",
"private": true, "private": true,
"version": "0.0.14", "version": "0.0.16",
"dependencies": { "dependencies": {
"@aws-crypto/sha256-js": "^5.2.0", "@aws-crypto/sha256-js": "^5.2.0",
"@azure/cosmos": "^4.1.1", "@azure/cosmos": "^4.1.1",
"@azure/identity": "^4.4.1", "@azure/identity": "^4.4.1",
"@datastax/astra-db-ts": "^1.4.1", "@datastax/astra-db-ts": "^1.4.1",
"@llamaindex/core": "^0.4.7", "@llamaindex/core": "^0.4.10",
"@llamaindex/readers": "^1.0.8", "@llamaindex/readers": "^1.0.11",
"@llamaindex/workflow": "^0.0.4", "@llamaindex/workflow": "^0.0.6",
"@notionhq/client": "^2.2.15", "@notionhq/client": "^2.2.15",
"@pinecone-database/pinecone": "^3.0.2", "@pinecone-database/pinecone": "^3.0.2",
"@vercel/postgres": "^0.10.0", "@vercel/postgres": "^0.10.0",
@@ -18,7 +18,7 @@
"commander": "^12.1.0", "commander": "^12.1.0",
"dotenv": "^16.4.5", "dotenv": "^16.4.5",
"js-tiktoken": "^1.0.14", "js-tiktoken": "^1.0.14",
"llamaindex": "^0.8.10", "llamaindex": "^0.8.13",
"mongodb": "^6.7.0", "mongodb": "^6.7.0",
"pathe": "^1.1.2", "pathe": "^1.1.2",
"postgres": "^3.4.4" "postgres": "^3.4.4"
+52
View File
@@ -1,5 +1,57 @@
# @llamaindex/autotool # @llamaindex/autotool
## 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 ## 5.0.10
### Patch Changes ### Patch Changes
@@ -1,5 +1,65 @@
# @llamaindex/autotool-01-node-example # @llamaindex/autotool-01-node-example
## 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 ## 0.0.53
### Patch Changes ### Patch Changes
@@ -13,5 +13,5 @@
"scripts": { "scripts": {
"start": "node --import tsx --import @llamaindex/autotool/node ./src/index.ts" "start": "node --import tsx --import @llamaindex/autotool/node ./src/index.ts"
}, },
"version": "0.0.53" "version": "0.0.61"
} }
@@ -1,5 +1,65 @@
# @llamaindex/autotool-02-next-example # @llamaindex/autotool-02-next-example
## 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 ## 0.1.97
### Patch Changes ### Patch Changes
@@ -1,7 +1,7 @@
{ {
"name": "@llamaindex/autotool-02-next-example", "name": "@llamaindex/autotool-02-next-example",
"private": true, "private": true,
"version": "0.1.97", "version": "0.1.105",
"scripts": { "scripts": {
"dev": "next dev", "dev": "next dev",
"build": "next build", "build": "next build",
+1 -1
View File
@@ -1,7 +1,7 @@
{ {
"name": "@llamaindex/autotool", "name": "@llamaindex/autotool",
"type": "module", "type": "module",
"version": "5.0.10", "version": "5.0.18",
"description": "auto transpile your JS function to LLM Agent compatible", "description": "auto transpile your JS function to LLM Agent compatible",
"files": [ "files": [
"dist", "dist",
+36
View File
@@ -1,5 +1,41 @@
# @llamaindex/cloud # @llamaindex/cloud
## 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 ## 2.0.7
### Patch Changes ### Patch Changes
+1 -1
View File
@@ -1,6 +1,6 @@
{ {
"name": "@llamaindex/cloud", "name": "@llamaindex/cloud",
"version": "2.0.7", "version": "2.0.12",
"type": "module", "type": "module",
"license": "MIT", "license": "MIT",
"scripts": { "scripts": {
+36
View File
@@ -1,5 +1,41 @@
# @llamaindex/community # @llamaindex/community
## 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 ## 0.0.65
### Patch Changes ### Patch Changes
+1 -1
View File
@@ -1,7 +1,7 @@
{ {
"name": "@llamaindex/community", "name": "@llamaindex/community",
"description": "Community package for LlamaIndexTS", "description": "Community package for LlamaIndexTS",
"version": "0.0.65", "version": "0.0.70",
"type": "module", "type": "module",
"types": "dist/type/index.d.ts", "types": "dist/type/index.d.ts",
"main": "dist/cjs/index.js", "main": "dist/cjs/index.js",
+31
View File
@@ -1,5 +1,36 @@
# @llamaindex/core # @llamaindex/core
## 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 ## 0.4.7
### Patch Changes ### Patch Changes
+1 -1
View File
@@ -1,7 +1,7 @@
{ {
"name": "@llamaindex/core", "name": "@llamaindex/core",
"type": "module", "type": "module",
"version": "0.4.7", "version": "0.4.12",
"description": "LlamaIndex Core Module", "description": "LlamaIndex Core Module",
"exports": { "exports": {
"./agent": { "./agent": {
+71 -14
View File
@@ -106,11 +106,17 @@ export type AgentRunnerParams<
> >
? AdditionalMessageOptions ? AdditionalMessageOptions
: never, : never,
AdditionalChatOptions extends object = object,
> = { > = {
llm: AI; llm: AI;
chatHistory: ChatMessage<AdditionalMessageOptions>[]; chatHistory: ChatMessage<AdditionalMessageOptions>[];
systemPrompt: MessageContent | null; systemPrompt: MessageContent | null;
runner: AgentWorker<AI, Store, AdditionalMessageOptions>; runner: AgentWorker<
AI,
Store,
AdditionalMessageOptions,
AdditionalChatOptions
>;
tools: tools:
| BaseToolWithCall[] | BaseToolWithCall[]
| ((query: MessageContent) => Promise<BaseToolWithCall[]>); | ((query: MessageContent) => Promise<BaseToolWithCall[]>);
@@ -125,6 +131,7 @@ export type AgentParamsBase<
> >
? AdditionalMessageOptions ? AdditionalMessageOptions
: never, : never,
AdditionalChatOptions extends object = object,
> = > =
| { | {
llm?: AI; llm?: AI;
@@ -132,6 +139,7 @@ export type AgentParamsBase<
systemPrompt?: MessageContent; systemPrompt?: MessageContent;
verbose?: boolean; verbose?: boolean;
tools: BaseToolWithCall[]; tools: BaseToolWithCall[];
additionalChatOptions?: AdditionalChatOptions;
} }
| { | {
llm?: AI; llm?: AI;
@@ -139,6 +147,7 @@ export type AgentParamsBase<
systemPrompt?: MessageContent; systemPrompt?: MessageContent;
verbose?: boolean; verbose?: boolean;
toolRetriever: ObjectRetriever<BaseToolWithCall>; toolRetriever: ObjectRetriever<BaseToolWithCall>;
additionalChatOptions?: AdditionalChatOptions;
}; };
/** /**
@@ -153,21 +162,36 @@ export abstract class AgentWorker<
> >
? AdditionalMessageOptions ? AdditionalMessageOptions
: never, : never,
AdditionalChatOptions extends object = object,
> { > {
#taskSet = new Set<TaskStep<AI, Store, AdditionalMessageOptions>>(); #taskSet = new Set<
abstract taskHandler: TaskHandler<AI, Store, AdditionalMessageOptions>; TaskStep<AI, Store, AdditionalMessageOptions, AdditionalChatOptions>
>();
abstract taskHandler: TaskHandler<
AI,
Store,
AdditionalMessageOptions,
AdditionalChatOptions
>;
public createTask( public createTask(
query: MessageContent, query: MessageContent,
context: AgentTaskContext<AI, Store, AdditionalMessageOptions>, context: AgentTaskContext<
): ReadableStream<TaskStepOutput<AI, Store, AdditionalMessageOptions>> { AI,
Store,
AdditionalMessageOptions,
AdditionalChatOptions
>,
): ReadableStream<
TaskStepOutput<AI, Store, AdditionalMessageOptions, AdditionalChatOptions>
> {
context.store.messages.push({ context.store.messages.push({
role: "user", role: "user",
content: query, content: query,
}); });
const taskOutputStream = createTaskOutputStream(this.taskHandler, context); const taskOutputStream = createTaskOutputStream(this.taskHandler, context);
return new ReadableStream< return new ReadableStream<
TaskStepOutput<AI, Store, AdditionalMessageOptions> TaskStepOutput<AI, Store, AdditionalMessageOptions, AdditionalChatOptions>
>({ >({
start: async (controller) => { start: async (controller) => {
for await (const stepOutput of taskOutputStream) { for await (const stepOutput of taskOutputStream) {
@@ -176,7 +200,8 @@ export abstract class AgentWorker<
let currentStep: TaskStep< let currentStep: TaskStep<
AI, AI,
Store, Store,
AdditionalMessageOptions AdditionalMessageOptions,
AdditionalChatOptions
> | null = stepOutput.taskStep; > | null = stepOutput.taskStep;
while (currentStep) { while (currentStep) {
this.#taskSet.delete(currentStep); this.#taskSet.delete(currentStep);
@@ -227,6 +252,7 @@ export abstract class AgentRunner<
> >
? AdditionalMessageOptions ? AdditionalMessageOptions
: never, : never,
AdditionalChatOptions extends object = object,
> extends BaseChatEngine { > extends BaseChatEngine {
readonly #llm: AI; readonly #llm: AI;
readonly #tools: readonly #tools:
@@ -234,7 +260,12 @@ export abstract class AgentRunner<
| ((query: MessageContent) => Promise<BaseToolWithCall[]>); | ((query: MessageContent) => Promise<BaseToolWithCall[]>);
readonly #systemPrompt: MessageContent | null = null; readonly #systemPrompt: MessageContent | null = null;
#chatHistory: ChatMessage<AdditionalMessageOptions>[]; #chatHistory: ChatMessage<AdditionalMessageOptions>[];
readonly #runner: AgentWorker<AI, Store, AdditionalMessageOptions>; readonly #runner: AgentWorker<
AI,
Store,
AdditionalMessageOptions,
AdditionalChatOptions
>;
readonly #verbose: boolean; readonly #verbose: boolean;
// create extra store // create extra store
@@ -245,7 +276,7 @@ export abstract class AgentRunner<
} }
static defaultTaskHandler: TaskHandler<LLM> = async (step, enqueueOutput) => { static defaultTaskHandler: TaskHandler<LLM> = async (step, enqueueOutput) => {
const { llm, getTools, stream } = step.context; const { llm, getTools, stream, additionalChatOptions } = step.context;
const lastMessage = step.context.store.messages.at(-1)!.content; const lastMessage = step.context.store.messages.at(-1)!.content;
const tools = await getTools(lastMessage); const tools = await getTools(lastMessage);
if (!stream) { if (!stream) {
@@ -253,8 +284,9 @@ export abstract class AgentRunner<
stream, stream,
tools, tools,
messages: [...step.context.store.messages], messages: [...step.context.store.messages],
additionalChatOptions,
}); });
await stepTools<LLM>({ await stepTools({
response, response,
tools, tools,
step, step,
@@ -265,6 +297,7 @@ export abstract class AgentRunner<
stream, stream,
tools, tools,
messages: [...step.context.store.messages], messages: [...step.context.store.messages],
additionalChatOptions,
}); });
await stepToolsStreaming<LLM>({ await stepToolsStreaming<LLM>({
response, response,
@@ -276,7 +309,12 @@ export abstract class AgentRunner<
}; };
protected constructor( protected constructor(
params: AgentRunnerParams<AI, Store, AdditionalMessageOptions>, params: AgentRunnerParams<
AI,
Store,
AdditionalMessageOptions,
AdditionalChatOptions
>,
) { ) {
super(); super();
const { llm, chatHistory, systemPrompt, runner, tools, verbose } = params; const { llm, chatHistory, systemPrompt, runner, tools, verbose } = params;
@@ -330,6 +368,7 @@ export abstract class AgentRunner<
stream: boolean = false, stream: boolean = false,
verbose: boolean | undefined = undefined, verbose: boolean | undefined = undefined,
chatHistory?: ChatMessage<AdditionalMessageOptions>[], chatHistory?: ChatMessage<AdditionalMessageOptions>[],
additionalChatOptions?: AdditionalChatOptions,
) { ) {
const initialMessages = [...(chatHistory ?? this.#chatHistory)]; const initialMessages = [...(chatHistory ?? this.#chatHistory)];
if (this.#systemPrompt !== null) { if (this.#systemPrompt !== null) {
@@ -348,6 +387,7 @@ export abstract class AgentRunner<
stream, stream,
toolCallCount: 0, toolCallCount: 0,
llm: this.#llm, llm: this.#llm,
additionalChatOptions: additionalChatOptions ?? {},
getTools: (message) => this.getTools(message), getTools: (message) => this.getTools(message),
store: { store: {
...this.createStore(), ...this.createStore(),
@@ -365,13 +405,29 @@ export abstract class AgentRunner<
}); });
} }
async chat(params: NonStreamingChatEngineParams): Promise<EngineResponse>;
async chat( async chat(
params: StreamingChatEngineParams, params: NonStreamingChatEngineParams<
AdditionalMessageOptions,
AdditionalChatOptions
>,
): Promise<EngineResponse>;
async chat(
params: StreamingChatEngineParams<
AdditionalMessageOptions,
AdditionalChatOptions
>,
): Promise<ReadableStream<EngineResponse>>; ): Promise<ReadableStream<EngineResponse>>;
@wrapEventCaller @wrapEventCaller
async chat( async chat(
params: NonStreamingChatEngineParams | StreamingChatEngineParams, params:
| NonStreamingChatEngineParams<
AdditionalMessageOptions,
AdditionalChatOptions
>
| StreamingChatEngineParams<
AdditionalMessageOptions,
AdditionalChatOptions
>,
): Promise<EngineResponse | ReadableStream<EngineResponse>> { ): Promise<EngineResponse | ReadableStream<EngineResponse>> {
let chatHistory: ChatMessage<AdditionalMessageOptions>[] = []; let chatHistory: ChatMessage<AdditionalMessageOptions>[] = [];
@@ -388,6 +444,7 @@ export abstract class AgentRunner<
!!params.stream, !!params.stream,
false, false,
chatHistory, chatHistory,
params.chatOptions,
); );
for await (const stepOutput of task) { for await (const stepOutput of task) {
// update chat history for each round // update chat history for each round
+47 -5
View File
@@ -4,24 +4,66 @@ import { ObjectRetriever } from "../objects";
import { AgentRunner, AgentWorker, type AgentParamsBase } from "./base.js"; import { AgentRunner, AgentWorker, type AgentParamsBase } from "./base.js";
import { validateAgentParams } from "./utils.js"; import { validateAgentParams } from "./utils.js";
type LLMParamsBase = AgentParamsBase<LLM>; 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 LLMParamsWithTools = LLMParamsBase & { type LLMParamsWithTools<
AI extends LLM,
AdditionalMessageOptions extends object = AI extends LLM<
object,
infer AdditionalMessageOptions
>
? AdditionalMessageOptions
: never,
AdditionalChatOptions extends object = object,
> = LLMParamsBase<AI, AdditionalMessageOptions, AdditionalChatOptions> & {
tools: BaseToolWithCall[]; tools: BaseToolWithCall[];
}; };
type LLMParamsWithToolRetriever = LLMParamsBase & { type LLMParamsWithToolRetriever<
AI extends LLM,
AdditionalMessageOptions extends object = AI extends LLM<
object,
infer AdditionalMessageOptions
>
? AdditionalMessageOptions
: never,
AdditionalChatOptions extends object = object,
> = LLMParamsBase<AI, AdditionalMessageOptions, AdditionalChatOptions> & {
toolRetriever: ObjectRetriever<BaseToolWithCall>; toolRetriever: ObjectRetriever<BaseToolWithCall>;
}; };
export type LLMAgentParams = LLMParamsWithTools | LLMParamsWithToolRetriever; 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 class LLMAgentWorker extends AgentWorker<LLM> { export class LLMAgentWorker extends AgentWorker<LLM> {
taskHandler = AgentRunner.defaultTaskHandler; taskHandler = AgentRunner.defaultTaskHandler;
} }
export class LLMAgent extends AgentRunner<LLM> { export class LLMAgent extends AgentRunner<LLM> {
constructor(params: LLMAgentParams) { constructor(params: LLMAgentParams<LLM>) {
validateAgentParams(params); validateAgentParams(params);
const llm = params.llm ?? (Settings.llm ? (Settings.llm as LLM) : null); const llm = params.llm ?? (Settings.llm ? (Settings.llm as LLM) : null);
if (!llm) if (!llm)
+33 -6
View File
@@ -19,6 +19,7 @@ export type AgentTaskContext<
> >
? AdditionalMessageOptions ? AdditionalMessageOptions
: never, : never,
AdditionalChatOptions extends object = object,
> = { > = {
readonly stream: boolean; readonly stream: boolean;
readonly toolCallCount: number; readonly toolCallCount: number;
@@ -26,6 +27,7 @@ export type AgentTaskContext<
readonly getTools: ( readonly getTools: (
input: MessageContent, input: MessageContent,
) => BaseToolWithCall[] | Promise<BaseToolWithCall[]>; ) => BaseToolWithCall[] | Promise<BaseToolWithCall[]>;
readonly additionalChatOptions: Partial<AdditionalChatOptions>;
shouldContinue: ( shouldContinue: (
taskStep: Readonly<TaskStep<Model, Store, AdditionalMessageOptions>>, taskStep: Readonly<TaskStep<Model, Store, AdditionalMessageOptions>>,
) => boolean; ) => boolean;
@@ -45,13 +47,26 @@ export type TaskStep<
> >
? AdditionalMessageOptions ? AdditionalMessageOptions
: never, : never,
AdditionalChatOptions extends object = object,
> = { > = {
id: UUID; id: UUID;
context: AgentTaskContext<Model, Store, AdditionalMessageOptions>; context: AgentTaskContext<
Model,
Store,
AdditionalMessageOptions,
AdditionalChatOptions
>;
// linked list // linked list
prevStep: TaskStep<Model, Store, AdditionalMessageOptions> | null; prevStep: TaskStep<
nextSteps: Set<TaskStep<Model, Store, AdditionalMessageOptions>>; Model,
Store,
AdditionalMessageOptions,
AdditionalChatOptions
> | null;
nextSteps: Set<
TaskStep<Model, Store, AdditionalMessageOptions, AdditionalChatOptions>
>;
}; };
export type TaskStepOutput< export type TaskStepOutput<
@@ -63,8 +78,14 @@ export type TaskStepOutput<
> >
? AdditionalMessageOptions ? AdditionalMessageOptions
: never, : never,
AdditionalChatOptions extends object = object,
> = { > = {
taskStep: TaskStep<Model, Store, AdditionalMessageOptions>; taskStep: TaskStep<
Model,
Store,
AdditionalMessageOptions,
AdditionalChatOptions
>;
// output shows the response to the user // output shows the response to the user
output: output:
| ChatResponse<AdditionalMessageOptions> | ChatResponse<AdditionalMessageOptions>
@@ -81,10 +102,16 @@ export type TaskHandler<
> >
? AdditionalMessageOptions ? AdditionalMessageOptions
: never, : never,
AdditionalChatOptions extends object = object,
> = ( > = (
step: TaskStep<Model, Store, AdditionalMessageOptions>, step: TaskStep<Model, Store, AdditionalMessageOptions, AdditionalChatOptions>,
enqueueOutput: ( enqueueOutput: (
taskOutput: TaskStepOutput<Model, Store, AdditionalMessageOptions>, taskOutput: TaskStepOutput<
Model,
Store,
AdditionalMessageOptions,
AdditionalChatOptions
>,
) => void, ) => void,
) => Promise<void>; ) => Promise<void>;
+4
View File
@@ -16,14 +16,18 @@ export interface BaseChatEngineParams<
export interface StreamingChatEngineParams< export interface StreamingChatEngineParams<
AdditionalMessageOptions extends object = object, AdditionalMessageOptions extends object = object,
AdditionalChatOptions extends object = object,
> extends BaseChatEngineParams<AdditionalMessageOptions> { > extends BaseChatEngineParams<AdditionalMessageOptions> {
stream: true; stream: true;
chatOptions?: AdditionalChatOptions;
} }
export interface NonStreamingChatEngineParams< export interface NonStreamingChatEngineParams<
AdditionalMessageOptions extends object = object, AdditionalMessageOptions extends object = object,
AdditionalChatOptions extends object = object,
> extends BaseChatEngineParams<AdditionalMessageOptions> { > extends BaseChatEngineParams<AdditionalMessageOptions> {
stream?: false; stream?: false;
chatOptions?: AdditionalChatOptions;
} }
export abstract class BaseChatEngine { export abstract class BaseChatEngine {
+3 -1
View File
@@ -66,6 +66,8 @@ export abstract class BaseLLM<
export abstract class ToolCallLLM< export abstract class ToolCallLLM<
AdditionalChatOptions extends object = object, AdditionalChatOptions extends object = object,
> extends BaseLLM<AdditionalChatOptions, ToolCallLLMMessageOptions> { AdditionalMessageOptions extends
ToolCallLLMMessageOptions = ToolCallLLMMessageOptions,
> extends BaseLLM<AdditionalChatOptions, AdditionalMessageOptions> {
abstract supportToolCall: boolean; abstract supportToolCall: boolean;
} }
+6 -4
View File
@@ -65,19 +65,21 @@ export abstract class BaseChatStoreMemory<
super(); super();
} }
getAllMessages(): ChatMessage<AdditionalMessageOptions>[] { getAllMessages():
| ChatMessage<AdditionalMessageOptions>[]
| Promise<ChatMessage<AdditionalMessageOptions>[]> {
return this.chatStore.getMessages(this.chatStoreKey); return this.chatStore.getMessages(this.chatStoreKey);
} }
put(messages: ChatMessage<AdditionalMessageOptions>) { put(messages: ChatMessage<AdditionalMessageOptions>): void | Promise<void> {
this.chatStore.addMessage(this.chatStoreKey, messages); this.chatStore.addMessage(this.chatStoreKey, messages);
} }
set(messages: ChatMessage<AdditionalMessageOptions>[]) { set(messages: ChatMessage<AdditionalMessageOptions>[]): void | Promise<void> {
this.chatStore.setMessages(this.chatStoreKey, messages); this.chatStore.setMessages(this.chatStoreKey, messages);
} }
reset() { reset(): void | Promise<void> {
this.chatStore.deleteMessages(this.chatStoreKey); this.chatStore.deleteMessages(this.chatStoreKey);
} }
} }
@@ -33,11 +33,11 @@ export class ChatMemoryBuffer<
} }
} }
getMessages( async getMessages(
transientMessages?: ChatMessage<AdditionalMessageOptions>[] | undefined, transientMessages?: ChatMessage<AdditionalMessageOptions>[] | undefined,
initialTokenCount: number = 0, initialTokenCount: number = 0,
) { ) {
const messages = this.getAllMessages(); const messages = await this.getAllMessages();
if (initialTokenCount > this.tokenLimit) { if (initialTokenCount > this.tokenLimit) {
throw new Error("Initial token count exceeds token limit"); throw new Error("Initial token count exceeds token limit");
+13
View File
@@ -32,6 +32,10 @@ export abstract class BasePromptTemplate<
const Vars extends readonly string[] = string[], const Vars extends readonly string[] = string[],
> { > {
metadata: Metadata = {}; 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(); templateVars: Set<string> = new Set();
options: Partial<Record<TemplatesVar[number] | (string & {}), string>> = {}; options: Partial<Record<TemplatesVar[number] | (string & {}), string>> = {};
outputParser: BaseOutputParser | undefined; outputParser: BaseOutputParser | undefined;
@@ -223,4 +227,13 @@ export class PromptTemplate<
get template(): Template { get template(): Template {
return this.#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,7 +7,11 @@ export abstract class BaseChatStore<
key: string, key: string,
messages: ChatMessage<AdditionalMessageOptions>[], messages: ChatMessage<AdditionalMessageOptions>[],
): void; ): void;
abstract getMessages(key: string): ChatMessage<AdditionalMessageOptions>[]; abstract getMessages(
key: string,
):
| ChatMessage<AdditionalMessageOptions>[]
| Promise<ChatMessage<AdditionalMessageOptions>[]>;
abstract addMessage( abstract addMessage(
key: string, key: string,
message: ChatMessage<AdditionalMessageOptions>, message: ChatMessage<AdditionalMessageOptions>,
@@ -15,5 +19,7 @@ export abstract class BaseChatStore<
): void; ): void;
abstract deleteMessages(key: string): void; abstract deleteMessages(key: string): void;
abstract deleteMessage(key: string, idx: number): void; abstract deleteMessage(key: string, idx: number): void;
abstract getKeys(): IterableIterator<string>; abstract getKeys():
| IterableIterator<string>
| Promise<IterableIterator<string>>;
} }
+1
View File
@@ -76,6 +76,7 @@ export {
extractText, extractText,
imageToDataUrl, imageToDataUrl,
messagesToHistory, messagesToHistory,
MockLLM,
toToolDescriptions, toToolDescriptions,
} from "./llms"; } from "./llms";
+88
View File
@@ -2,6 +2,15 @@ import { fs } from "@llamaindex/env";
import { filetypemime } from "magic-bytes.js"; import { filetypemime } from "magic-bytes.js";
import type { import type {
ChatMessage, ChatMessage,
ChatResponse,
ChatResponseChunk,
CompletionResponse,
LLM,
LLMChatParamsNonStreaming,
LLMChatParamsStreaming,
LLMCompletionParamsNonStreaming,
LLMCompletionParamsStreaming,
LLMMetadata,
MessageContent, MessageContent,
MessageContentDetail, MessageContentDetail,
MessageContentTextDetail, MessageContentTextDetail,
@@ -143,3 +152,82 @@ export async function imageToDataUrl(
} }
return await blobToDataUrl(input); 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: {} };
}
}
@@ -19,7 +19,7 @@ describe("ChatMemoryBuffer", () => {
expect(buffer.tokenLimit).toBe(500); expect(buffer.tokenLimit).toBe(500);
}); });
test("getMessages returns all messages when under token limit", () => { test("getMessages returns all messages when under token limit", async () => {
const messages: ChatMessage[] = [ const messages: ChatMessage[] = [
{ role: "user", content: "Hello" }, { role: "user", content: "Hello" },
{ role: "assistant", content: "Hi there!" }, { role: "assistant", content: "Hi there!" },
@@ -30,11 +30,11 @@ describe("ChatMemoryBuffer", () => {
chatHistory: messages, chatHistory: messages,
}); });
const result = buffer.getMessages(); const result = await buffer.getMessages();
expect(result).toEqual(messages); expect(result).toEqual(messages);
}); });
test("getMessages truncates messages when over token limit", () => { test("getMessages truncates messages when over token limit", async () => {
const messages: ChatMessage[] = [ const messages: ChatMessage[] = [
{ role: "user", content: "This is a long message" }, { role: "user", content: "This is a long message" },
{ role: "assistant", content: "This is also a long reply" }, { role: "assistant", content: "This is also a long reply" },
@@ -45,11 +45,11 @@ describe("ChatMemoryBuffer", () => {
chatHistory: messages, chatHistory: messages,
}); });
const result = buffer.getMessages(); const result = await buffer.getMessages();
expect(result).toEqual([{ role: "user", content: "Short" }]); expect(result).toEqual([{ role: "user", content: "Short" }]);
}); });
test("getMessages handles input messages", () => { test("getMessages handles input messages", async () => {
const storedMessages: ChatMessage[] = [ const storedMessages: ChatMessage[] = [
{ role: "user", content: "Hello" }, { role: "user", content: "Hello" },
{ role: "assistant", content: "Hi there!" }, { role: "assistant", content: "Hi there!" },
@@ -62,13 +62,13 @@ describe("ChatMemoryBuffer", () => {
const inputMessages: ChatMessage[] = [ const inputMessages: ChatMessage[] = [
{ role: "user", content: "New message" }, { role: "user", content: "New message" },
]; ];
const result = buffer.getMessages(inputMessages); const result = await buffer.getMessages(inputMessages);
expect(result).toEqual([...inputMessages, ...storedMessages]); expect(result).toEqual([...inputMessages, ...storedMessages]);
}); });
test("getMessages throws error when initial token count exceeds limit", () => { test("getMessages throws error when initial token count exceeds limit", () => {
const buffer = new ChatMemoryBuffer({ tokenLimit: 10 }); const buffer = new ChatMemoryBuffer({ tokenLimit: 10 });
expect(() => buffer.getMessages(undefined, 20)).toThrow( expect(async () => buffer.getMessages(undefined, 20)).rejects.toThrow(
"Initial token count exceeds token limit", "Initial token count exceeds token limit",
); );
}); });
+11
View File
@@ -158,4 +158,15 @@ describe("PromptTemplate", () => {
const formatted = prompt.format({ text: "world", foo: "bar" }); const formatted = prompt.format({ text: "world", foo: "bar" });
expect(formatted).toBe("hello world bar\noutput_instruction"); 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");
});
}); });
+52
View File
@@ -1,5 +1,57 @@
# @llamaindex/experimental # @llamaindex/experimental
## 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 ## 0.0.122
### Patch Changes ### Patch Changes
+1 -1
View File
@@ -1,7 +1,7 @@
{ {
"name": "@llamaindex/experimental", "name": "@llamaindex/experimental",
"description": "Experimental package for LlamaIndexTS", "description": "Experimental package for LlamaIndexTS",
"version": "0.0.122", "version": "0.0.130",
"type": "module", "type": "module",
"types": "dist/type/index.d.ts", "types": "dist/type/index.d.ts",
"main": "dist/cjs/index.js", "main": "dist/cjs/index.js",
+123
View File
@@ -1,5 +1,128 @@
# llamaindex # llamaindex
## 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 ## 0.8.10
### Patch Changes ### Patch Changes
+11 -1
View File
@@ -1,6 +1,6 @@
{ {
"name": "llamaindex", "name": "llamaindex",
"version": "0.8.10", "version": "0.8.18",
"license": "MIT", "license": "MIT",
"type": "module", "type": "module",
"keywords": [ "keywords": [
@@ -125,6 +125,16 @@
"default": "./dist/cjs/index.js" "default": "./dist/cjs/index.js"
} }
}, },
"./next": {
"import": {
"types": "./dist/type/next.d.ts",
"default": "./dist/next.js"
},
"require": {
"types": "./dist/type/next.d.ts",
"default": "./dist/cjs/next.js"
}
},
"./register": "./register.js", "./register": "./register.js",
"./internal/*": { "./internal/*": {
"import": "./dist/not-allow.js", "import": "./dist/not-allow.js",
@@ -18,6 +18,7 @@ import {
type NodeWithScore, type NodeWithScore,
} from "@llamaindex/core/schema"; } from "@llamaindex/core/schema";
import type { BaseIndexStore } from "@llamaindex/core/storage/index-store"; import type { BaseIndexStore } from "@llamaindex/core/storage/index-store";
import { extractText } from "@llamaindex/core/utils";
import type { ServiceContext } from "../../ServiceContext.js"; import type { ServiceContext } from "../../ServiceContext.js";
import { nodeParserFromSettingsOrContext } from "../../Settings.js"; import { nodeParserFromSettingsOrContext } from "../../Settings.js";
import { RetrieverQueryEngine } from "../../engines/query/RetrieverQueryEngine.js"; import { RetrieverQueryEngine } from "../../engines/query/RetrieverQueryEngine.js";
@@ -449,8 +450,13 @@ export class VectorIndexRetriever extends BaseRetriever {
filters?: MetadataFilters, filters?: MetadataFilters,
): Promise<NodeWithScore[]> { ): Promise<NodeWithScore[]> {
// convert string message to multi-modal format // convert string message to multi-modal format
let queryStr = query;
if (typeof query === "string") { if (typeof query === "string") {
query = [{ type: "text", text: query }]; queryStr = query;
query = [{ type: "text", text: queryStr }];
} else {
queryStr = extractText(query);
} }
// overwrite embed model if specified, otherwise use the one from the vector store // overwrite embed model if specified, otherwise use the one from the vector store
const embedModel = this.index.embedModel ?? vectorStore.embedModel; const embedModel = this.index.embedModel ?? vectorStore.embedModel;
@@ -460,6 +466,7 @@ export class VectorIndexRetriever extends BaseRetriever {
const queryEmbedding = await embedModel.getQueryEmbedding(item); const queryEmbedding = await embedModel.getQueryEmbedding(item);
if (queryEmbedding) { if (queryEmbedding) {
const result = await vectorStore.query({ const result = await vectorStore.query({
queryStr,
queryEmbedding, queryEmbedding,
mode: VectorStoreQueryMode.DEFAULT, mode: VectorStoreQueryMode.DEFAULT,
similarityTopK: this.topK[type]!, similarityTopK: this.topK[type]!,
+19 -6
View File
@@ -15,15 +15,28 @@
* *
* @module * @module
*/ */
import { createRequire } from "node:module";
const require = createRequire(import.meta.url);
const nextJsVersion: string = require("next/package.json").version;
const is14OrLower =
nextJsVersion.startsWith("14.") || nextJsVersion.startsWith("13.");
// eslint-disable-next-line @typescript-eslint/no-explicit-any // eslint-disable-next-line @typescript-eslint/no-explicit-any
export default function withLlamaIndex(config: any) { export default function withLlamaIndex(config: any) {
config.experimental = config.experimental ?? {};
// needed for transformers, see https://huggingface.co/docs/transformers.js/en/tutorials/next#step-2-install-and-configure-transformersjs // needed for transformers, see https://huggingface.co/docs/transformers.js/en/tutorials/next#step-2-install-and-configure-transformersjs
config.experimental.serverComponentsExternalPackages = if (is14OrLower) {
config.experimental.serverComponentsExternalPackages ?? []; config.experimental.serverComponentsExternalPackages =
config.experimental.serverComponentsExternalPackages.push( config.experimental.serverComponentsExternalPackages ?? [];
"@huggingface/transformers", config.experimental.serverComponentsExternalPackages.push(
); "@huggingface/transformers",
);
} else {
config.serverExternalPackages = config.serverExternalPackages ?? [];
config.serverExternalPackages.push("@huggingface/transformers");
}
const userWebpack = config.webpack; const userWebpack = config.webpack;
// eslint-disable-next-line @typescript-eslint/no-explicit-any // eslint-disable-next-line @typescript-eslint/no-explicit-any
config.webpack = function (webpackConfig: any, options: any) { config.webpack = function (webpackConfig: any, options: any) {
@@ -0,0 +1,345 @@
import { CosmosClient, type Container, type Database } from "@azure/cosmos";
import { DefaultAzureCredential, type TokenCredential } from "@azure/identity";
import type {
ChatMessage,
MessageContent,
MessageType,
} from "@llamaindex/core/llms";
import { BaseChatStore } from "@llamaindex/core/storage/chat-store";
import { getEnv } from "@llamaindex/env";
const USER_AGENT_SUFFIX = "llamaindex-cdbnosql-chatstore-javascript";
const DEFAULT_CHAT_DATABASE = "ChatMessagesDB";
const DEFAULT_CHAT_CONTAINER = "ChatMessagesContainer";
const DEFAULT_OFFER_THROUGHPUT = 400;
function parseConnectionString(connectionString: string): {
endpoint: string;
key: string;
} {
const parts = connectionString.split(";");
let endpoint = "";
let accountKey = "";
parts.forEach((part) => {
const [key, value] = part.split("=");
if (key && key.trim() === "AccountEndpoint") {
endpoint = value?.trim() ?? "";
} else if ((key ?? "").trim() === "AccountKey") {
accountKey = value?.trim() ?? "";
}
});
if (!endpoint || !accountKey) {
throw new Error(
"Invalid connection string: missing AccountEndpoint or AccountKey.",
);
}
return { endpoint, key: accountKey };
}
export interface AzureCosmosChatDatabaseProperties {
throughput?: number;
}
export interface AzureCosmosChatContainerProperties {
// eslint-disable-next-line @typescript-eslint/no-explicit-any
[key: string]: any;
}
export interface AzureCosmosNoSqlChatStoreConfig {
cosmosClient?: CosmosClient;
dbName?: string;
containerName?: string;
userId?: string;
sessionId?: string;
cosmosContainerProperties?: AzureCosmosChatContainerProperties;
cosmosDatabaseProperties?: AzureCosmosChatDatabaseProperties;
ttlInSeconds?: number;
}
export class AzureCosmosNoSqlChatStore<
AdditionalMessageOptions extends object = object,
> extends BaseChatStore<AdditionalMessageOptions> {
private userId: string;
private ttl: number;
private cosmosClient: CosmosClient;
private database!: Database;
private container!: Container;
private initPromise?: Promise<void>;
private dbName: string;
private containerName: string;
private cosmosContainerProperties: AzureCosmosChatContainerProperties;
private cosmosDatabaseProperties: AzureCosmosChatDatabaseProperties;
private initialize: () => Promise<void>;
constructor({
cosmosClient,
dbName = DEFAULT_CHAT_DATABASE,
containerName = DEFAULT_CHAT_CONTAINER,
cosmosContainerProperties = { partitionKey: "/userId" },
cosmosDatabaseProperties = {},
ttlInSeconds = -1,
}: AzureCosmosNoSqlChatStoreConfig) {
super();
if (!cosmosClient) {
throw new Error(
"CosmosClient is required for AzureCosmosDBNoSQLChatStore initialization",
);
}
this.ttl = ttlInSeconds;
this.userId = cosmosContainerProperties.userId || "anonymous";
this.cosmosClient = cosmosClient;
this.dbName = dbName;
this.containerName = containerName;
this.cosmosContainerProperties = cosmosContainerProperties;
this.cosmosDatabaseProperties = cosmosDatabaseProperties;
this.initialize = () => {
if (this.initPromise === undefined) {
this.initPromise = this.init().catch((error) => {
console.error(
"Error during AzureCosmosDBNoSQLChatStore initialization",
error,
);
});
}
return this.initPromise;
};
}
client(): CosmosClient {
return this.cosmosClient;
}
// Asynchronous initialization method to create database and container
private async init(): Promise<void> {
// Set default throughput if not provided
const throughput =
this.cosmosDatabaseProperties?.throughput || DEFAULT_OFFER_THROUGHPUT;
// Create the database if it doesn't exist
const { database } = await this.cosmosClient.databases.createIfNotExists({
id: this.dbName,
throughput,
});
this.database = database;
// Create the container if it doesn't exist
const { container } = await this.database.containers.createIfNotExists({
id: this.containerName,
throughput: this.cosmosContainerProperties?.throughput,
partitionKey: "/userId",
indexingPolicy: this.cosmosContainerProperties?.indexingPolicy,
defaultTtl: this.ttl,
uniqueKeyPolicy: this.cosmosContainerProperties?.uniqueKeyPolicy,
conflictResolutionPolicy:
this.cosmosContainerProperties?.conflictResolutionPolicy,
computedProperties: this.cosmosContainerProperties?.computedProperties,
});
this.container = container;
}
/**
* Static method for creating an instance using a connection string.
* If no connection string is provided, it will attempt to use the env variable `AZURE_COSMOSDB_NOSQL_CONNECTION_STRING` as connection string.
* @returns Instance of AzureCosmosNoSqlKVStore
*/
static fromConnectionString(
config: {
connectionString?: string;
} & AzureCosmosNoSqlChatStoreConfig = {},
): AzureCosmosNoSqlChatStore {
const cosmosConnectionString =
config.connectionString ||
(getEnv("AZURE_COSMOSDB_NOSQL_CONNECTION_STRING") as string);
if (!cosmosConnectionString) {
throw new Error("Azure CosmosDB connection string must be provided");
}
const { endpoint, key } = parseConnectionString(cosmosConnectionString);
const cosmosClient = new CosmosClient({
endpoint,
key,
userAgentSuffix: USER_AGENT_SUFFIX,
});
return new AzureCosmosNoSqlChatStore({
...config,
cosmosClient,
});
}
/**
* Static method for creating an instance using a account endpoint and key.
* If no endpoint and key is provided, it will attempt to use the env variable `AZURE_COSMOSDB_NOSQL_ACCOUNT_ENDPOINT` as enpoint and `AZURE_COSMOSDB_NOSQL_ACCOUNT_KEY` as key.
* @returns Instance of AzureCosmosNoSqlKVStore
*/
static fromAccountAndKey(
config: {
endpoint?: string;
key?: string;
} & AzureCosmosNoSqlChatStoreConfig = {},
): AzureCosmosNoSqlChatStore {
const cosmosEndpoint =
config.endpoint ||
(getEnv("AZURE_COSMOSDB_NOSQL_ACCOUNT_ENDPOINT") as string);
const cosmosKey =
config.key || (getEnv("AZURE_COSMOSDB_NOSQL_ACCOUNT_KEY") as string);
if (!cosmosEndpoint || !cosmosKey) {
throw new Error(
"Azure CosmosDB account endpoint and key must be provided",
);
}
const cosmosClient = new CosmosClient({
endpoint: cosmosEndpoint,
key: cosmosKey,
userAgentSuffix: USER_AGENT_SUFFIX,
});
return new AzureCosmosNoSqlChatStore({
...config,
cosmosClient,
});
}
/**
* Static method for creating an instance using AAD token.
* If no endpoint and credentials are provided, it will attempt to use the env variable `AZURE_COSMOSDB_NOSQL_ACCOUNT_ENDPOINT` as endpoint and use DefaultAzureCredential() as credentials.
* @returns Instance of AzureCosmosNoSqlKVStore
*/
static fromAadToken(
config: {
endpoint?: string;
credential?: TokenCredential;
} & AzureCosmosNoSqlChatStoreConfig = {},
): AzureCosmosNoSqlChatStore {
const cosmosEndpoint =
config.endpoint ||
(getEnv("AZURE_COSMOSDB_NOSQL_CONNECTION_STRING") as string);
if (!cosmosEndpoint) {
throw new Error("Azure CosmosDB account endpoint must be provided");
}
const credentials = config.credential ?? new DefaultAzureCredential();
const cosmosClient = new CosmosClient({
endpoint: cosmosEndpoint,
aadCredentials: credentials,
userAgentSuffix: USER_AGENT_SUFFIX,
});
return new AzureCosmosNoSqlChatStore({
...config,
cosmosClient,
});
}
private convertToChatMessage(
// eslint-disable-next-line @typescript-eslint/no-explicit-any
message: any,
): ChatMessage<AdditionalMessageOptions> {
return {
content: message.content as MessageContent,
role: message.role as MessageType,
options: message.options as AdditionalMessageOptions,
} as ChatMessage<AdditionalMessageOptions>;
}
private convertToCosmosMessage(
message: ChatMessage<AdditionalMessageOptions>,
): // eslint-disable-next-line @typescript-eslint/no-explicit-any
any {
return {
content: message.content,
role: message.role,
options: message.options,
};
}
/**
* Set messages for a given key.
*/
async setMessages(
key: string,
messages: ChatMessage<AdditionalMessageOptions>[],
): Promise<void> {
await this.initialize();
const inputMessages = messages.map(this.convertToCosmosMessage);
await this.container.items.upsert({
id: key,
messages: inputMessages,
userId: this.userId,
});
}
/**
* Get messages for a given key.
*/
async getMessages(
key: string,
): Promise<ChatMessage<AdditionalMessageOptions>[]> {
await this.initialize();
const res = await this.container.item(key, this.userId).read();
const messageHistory = res?.resource?.messages ?? [];
const result = messageHistory.map(this.convertToChatMessage);
return result;
}
/**
* Add a message for a given key.
*/
async addMessage(
key: string,
message: ChatMessage<AdditionalMessageOptions>,
idx?: number,
): Promise<void> {
await this.initialize();
const res = await this.container.item(key, this.userId).read();
const messageHistory = res?.resource?.messages ?? [];
if (idx === undefined) {
messageHistory.push(this.convertToCosmosMessage(message));
} else {
messageHistory.splice(idx, 0, this.convertToCosmosMessage(message));
}
await this.setMessages(key, messageHistory);
}
/**
* Deletes all messages for a given key.
*/
async deleteMessages(key: string): Promise<void> {
await this.initialize();
try {
await this.container.item(key, this.userId).delete();
// eslint-disable-next-line no-empty
} catch (e) {}
}
/**
* Deletes one message at idx index for a given key.
*/
async deleteMessage(key: string, idx: number): Promise<void> {
await this.initialize();
const res = await this.container.item(key, this.userId).read();
const messageHistory = res?.resource?.messages ?? [];
if (idx >= 0 && idx < messageHistory.length) {
messageHistory.splice(idx, 1);
await this.setMessages(key, messageHistory);
}
}
/**
* Get all keys.
*/
async getKeys(): Promise<IterableIterator<string>> {
await this.initialize();
const result = await this.container.items
.query("Select c.id from c")
.fetchAll();
const keys = result.resources.map((res: { id: string }) => res.id);
function* keyGenerator(): IterableIterator<string> {
for (const key of keys) {
yield key;
}
}
return keyGenerator();
}
}
+1
View File
@@ -2,6 +2,7 @@ export * from "@llamaindex/core/storage/chat-store";
export * from "@llamaindex/core/storage/doc-store"; export * from "@llamaindex/core/storage/doc-store";
export * from "@llamaindex/core/storage/index-store"; export * from "@llamaindex/core/storage/index-store";
export * from "@llamaindex/core/storage/kv-store"; export * from "@llamaindex/core/storage/kv-store";
export * from "./chatStore/AzureCosmosNoSqlChatStore.js";
export * from "./docStore/AzureCosmosNoSqlDocumentStore.js"; export * from "./docStore/AzureCosmosNoSqlDocumentStore.js";
export { PostgresDocumentStore } from "./docStore/PostgresDocumentStore.js"; export { PostgresDocumentStore } from "./docStore/PostgresDocumentStore.js";
export { SimpleDocumentStore } from "./docStore/SimpleDocumentStore.js"; export { SimpleDocumentStore } from "./docStore/SimpleDocumentStore.js";
@@ -3,7 +3,7 @@ import { Container, CosmosClient, Database } from "@azure/cosmos";
import { DefaultAzureCredential, type TokenCredential } from "@azure/identity"; import { DefaultAzureCredential, type TokenCredential } from "@azure/identity";
import { BaseKVStore } from "@llamaindex/core/storage/kv-store"; import { BaseKVStore } from "@llamaindex/core/storage/kv-store";
import { getEnv } from "@llamaindex/env"; import { getEnv } from "@llamaindex/env";
const USER_AGENT_SUFFIX = "LlamaIndex-CDBNoSQL-KVStore-JavaScript"; const USER_AGENT_SUFFIX = "llamaindex-cdbnosql-kvstore-javascript";
const DEFAULT_CHAT_DATABASE = "KVStoreDB"; const DEFAULT_CHAT_DATABASE = "KVStoreDB";
const DEFAULT_CHAT_CONTAINER = "KVStoreContainer"; const DEFAULT_CHAT_CONTAINER = "KVStoreContainer";
const DEFAULT_OFFER_THROUGHPUT = 400; const DEFAULT_OFFER_THROUGHPUT = 400;
@@ -82,7 +82,7 @@ export class AzureCosmosNoSqlKVStore extends BaseKVStore {
super(); super();
if (!cosmosClient) { if (!cosmosClient) {
throw new Error( throw new Error(
"CosmosClient is required for AzureCosmosDBNoSQLVectorStore initialization", "CosmosClient is required for AzureCosmosDBNoSQLKVStore initialization",
); );
} }
this.cosmosClient = cosmosClient; this.cosmosClient = cosmosClient;
@@ -55,8 +55,18 @@ export interface AzureCosmosDBNoSQLConfig
readonly flatMetadata?: boolean; readonly flatMetadata?: boolean;
readonly idKey?: string; readonly idKey?: string;
} }
/**
* Query options for the `AzureCosmosDBNoSQLVectorStore.query` method.
* @property includeEmbeddings - Whether to include the embeddings in the result. Default false
* @property includeVectorDistance - Whether to include the vector distance in the result. Default true
* @property whereClause - The where clause to use in the query. While writing this clause, use `c` as the alias for the container and do not include the `WHERE` keyword.
*/
export interface AzureCosmosQueryOptions {
includeVectorDistance?: boolean;
whereClause?: string;
}
const USER_AGENT_SUFFIX = "LlamaIndex-CDBNoSQL-VectorStore-JavaScript"; const USER_AGENT_SUFFIX = "llamaindex-cdbnosql-vectorstore-javascript";
const DEFAULT_VECTOR_EMBEDDING_POLICY = { const DEFAULT_VECTOR_EMBEDDING_POLICY = {
vectorEmbeddings: [ vectorEmbeddings: [
@@ -98,6 +108,22 @@ function parseConnectionString(connectionString: string): {
return { endpoint, key: accountKey }; return { endpoint, key: accountKey };
} }
/**
* utility function to build the query string for the CosmosDB query
*/
function queryBuilder(options: AzureCosmosQueryOptions): string {
let initialQuery =
"SELECT TOP @k c[@id] as id, c[@text] as text, c[@metadata] as metadata";
if (options.includeVectorDistance !== false) {
initialQuery += `, VectorDistance(c[@embeddingKey],@embedding) AS SimilarityScore`;
}
initialQuery += ` FROM c`;
if (options.whereClause) {
initialQuery += ` WHERE ${options.whereClause}`;
}
initialQuery += ` ORDER BY VectorDistance(c[@embeddingKey],@embedding)`;
return initialQuery;
}
export class AzureCosmosDBNoSqlVectorStore extends BaseVectorStore { export class AzureCosmosDBNoSqlVectorStore extends BaseVectorStore {
storesText: boolean = true; storesText: boolean = true;
@@ -334,21 +360,25 @@ export class AzureCosmosDBNoSqlVectorStore extends BaseVectorStore {
*/ */
async query( async query(
query: VectorStoreQuery, query: VectorStoreQuery,
options?: object, options: AzureCosmosQueryOptions = {},
): Promise<VectorStoreQueryResult> { ): Promise<VectorStoreQueryResult> {
await this.initialize(); await this.initialize();
if (!query.queryEmbedding || query.queryEmbedding.length === 0) {
throw new Error(
"queryEmbedding is required for AzureCosmosDBNoSqlVectorStore query",
);
}
const params = { const params = {
vector: query.queryEmbedding!, vector: query.queryEmbedding!,
k: query.similarityTopK, k: query.similarityTopK,
}; };
const builtQuery = queryBuilder(options);
const nodes: BaseNode[] = []; const nodes: BaseNode[] = [];
const ids: string[] = []; const ids: string[] = [];
const similarities: number[] = []; const similarities: number[] = [];
const queryResults = await this.container.items const queryResults = await this.container.items
.query({ .query({
query: query: builtQuery,
"SELECT TOP @k c[@id] as id, c[@text] as text, c[@metadata] as metadata, VectorDistance(c[@embeddingKey],@embedding) AS SimilarityScore FROM c ORDER BY VectorDistance(c[@embeddingKey],@embedding)",
parameters: [ parameters: [
{ name: "@k", value: params.k }, { name: "@k", value: params.k },
{ name: "@id", value: this.idKey }, { name: "@id", value: this.idKey },
@@ -14,9 +14,10 @@ import {
Settings, Settings,
VectorStoreQueryMode, VectorStoreQueryMode,
type AzureCosmosDBNoSQLConfig, type AzureCosmosDBNoSQLConfig,
type AzureCosmosQueryOptions,
type VectorStoreQueryResult, type VectorStoreQueryResult,
} from "llamaindex"; } from "llamaindex";
import { beforeEach, describe, expect, it } from "vitest"; import { beforeAll, describe, expect, it } from "vitest";
dotenv.config(); dotenv.config();
/* /*
* To run this test, you need have an Azure Cosmos DB for NoSQL instance * To run this test, you need have an Azure Cosmos DB for NoSQL instance
@@ -64,7 +65,10 @@ Settings.llm = new OpenAI(llmInit);
Settings.embedModel = new OpenAIEmbedding(embedModelInit); Settings.embedModel = new OpenAIEmbedding(embedModelInit);
// This test is skipped because it requires an Azure Cosmos DB instance and OpenAI API keys // This test is skipped because it requires an Azure Cosmos DB instance and OpenAI API keys
describe.skip("AzureCosmosDBNoSQLVectorStore", () => { describe.skip("AzureCosmosDBNoSQLVectorStore", () => {
beforeEach(async () => { let vectorStore: AzureCosmosDBNoSqlVectorStore;
// eslint-disable-next-line @typescript-eslint/no-explicit-any
let embeddings: any = [];
beforeAll(async () => {
if (process.env.AZURE_COSMOSDB_NOSQL_CONNECTION_STRING) { if (process.env.AZURE_COSMOSDB_NOSQL_CONNECTION_STRING) {
client = new CosmosClient( client = new CosmosClient(
process.env.AZURE_COSMOSDB_NOSQL_CONNECTION_STRING, process.env.AZURE_COSMOSDB_NOSQL_CONNECTION_STRING,
@@ -79,15 +83,12 @@ describe.skip("AzureCosmosDBNoSQLVectorStore", () => {
"Please set the environment variable AZURE_COSMOSDB_NOSQL_CONNECTION_STRING or AZURE_COSMOSDB_NOSQL_ENDPOINT", "Please set the environment variable AZURE_COSMOSDB_NOSQL_CONNECTION_STRING or AZURE_COSMOSDB_NOSQL_ENDPOINT",
); );
} }
// Make sure the database does not exists // Make sure the database does not exists
try { try {
await client.database(DATABASE_NAME).delete(); await client.database(DATABASE_NAME).delete();
} catch { } catch {
// Ignore error if the database does not exist // Ignore error if the database does not exist
} }
});
it("perform query", async () => {
const config: AzureCosmosDBNoSQLConfig = { const config: AzureCosmosDBNoSQLConfig = {
idKey: "name", idKey: "name",
textKey: "customText", textKey: "customText",
@@ -134,9 +135,9 @@ describe.skip("AzureCosmosDBNoSQLVectorStore", () => {
}, },
}; };
const vectorStore = new AzureCosmosDBNoSqlVectorStore(config); vectorStore = new AzureCosmosDBNoSqlVectorStore(config);
const embeddings = await Settings.embedModel.getTextEmbeddings([ embeddings = await Settings.embedModel.getTextEmbeddings([
"This book is about politics", "This book is about politics",
"Cats sleeps a lot.", "Cats sleeps a lot.",
"Sandwiches taste good.", "Sandwiches taste good.",
@@ -150,28 +151,29 @@ describe.skip("AzureCosmosDBNoSQLVectorStore", () => {
id_: "1", id_: "1",
text: "This book is about politics", text: "This book is about politics",
embedding: embeddings[0], embedding: embeddings[0],
metadata: { key: "politics" }, metadata: { key: "politics", number: 1 },
}), }),
new Document({ new Document({
id_: "2", id_: "2",
text: "Cats sleeps a lot.", text: "Cats sleeps a lot.",
embedding: embeddings[1], embedding: embeddings[1],
metadata: { key: "cats" }, metadata: { key: "cats", number: 2 },
}), }),
new Document({ new Document({
id_: "3", id_: "3",
text: "Sandwiches taste good.", text: "Sandwiches taste good.",
embedding: embeddings[2], embedding: embeddings[2],
metadata: { key: "sandwiches" }, metadata: { key: "sandwiches", number: 3 },
}), }),
new Document({ new Document({
id_: "4", id_: "4",
text: "The house is open", text: "The house is open",
embedding: embeddings[3], embedding: embeddings[3],
metadata: { key: "house" }, metadata: { key: "house", number: 4 },
}), }),
]); ]);
});
it("perform query", async () => {
const results: VectorStoreQueryResult = await vectorStore.query({ const results: VectorStoreQueryResult = await vectorStore.query({
queryEmbedding: embeddings[4] || [], queryEmbedding: embeddings[4] || [],
similarityTopK: 1, similarityTopK: 1,
@@ -179,5 +181,62 @@ describe.skip("AzureCosmosDBNoSQLVectorStore", () => {
}); });
expect(results.ids.length).toEqual(1); expect(results.ids.length).toEqual(1);
expect(results.ids[0]).toEqual("3"); expect(results.ids[0]).toEqual("3");
expect(results.similarities).toBeDefined();
expect(results.similarities[0]).toBeDefined();
}, 1000000);
it("perform query with where clause", async () => {
const options: AzureCosmosQueryOptions = {
whereClause: "c.customMetadata.number > 3",
};
const results: VectorStoreQueryResult = await vectorStore.query(
{
queryEmbedding: embeddings[4] || [],
similarityTopK: 1,
mode: VectorStoreQueryMode.DEFAULT,
},
options,
);
expect(results.ids.length).toEqual(1);
expect(results.ids[0]).toEqual("4");
expect(results.similarities).toBeDefined();
expect(results.similarities[0]).toBeDefined();
}, 1000000);
it("perform query with includeVectorDistance false", async () => {
const options: AzureCosmosQueryOptions = {
includeVectorDistance: false,
};
const results: VectorStoreQueryResult = await vectorStore.query(
{
queryEmbedding: embeddings[4] || [],
similarityTopK: 1,
mode: VectorStoreQueryMode.DEFAULT,
},
options,
);
expect(results.ids.length).toEqual(1);
expect(results.ids[0]).toEqual("3");
expect(results.similarities).toBeDefined();
expect(results.similarities[0]).toBeUndefined();
}, 1000000);
it("perform query with includeVectorDistance false and whereClause", async () => {
const options: AzureCosmosQueryOptions = {
includeVectorDistance: false,
whereClause: "c.customMetadata.number > 3",
};
const results: VectorStoreQueryResult = await vectorStore.query(
{
queryEmbedding: embeddings[4] || [],
similarityTopK: 1,
mode: VectorStoreQueryMode.DEFAULT,
},
options,
);
expect(results.ids.length).toEqual(1);
expect(results.ids[0]).toEqual("4");
expect(results.similarities).toBeDefined();
expect(results.similarities[0]).toBeUndefined();
}, 1000000); }, 1000000);
}); });
@@ -1,6 +1,7 @@
/* eslint-disable @typescript-eslint/no-explicit-any */ /* eslint-disable @typescript-eslint/no-explicit-any */
import type { BaseNode } from "@llamaindex/core/schema"; import type { BaseNode } from "@llamaindex/core/schema";
import { beforeEach, describe, expect, it, vi } from "vitest"; import { beforeEach, describe, expect, it, vi } from "vitest";
import { VectorStoreQueryMode } from "../../src/vector-store.js";
import { TestableAzureCosmosDBNoSqlVectorStore } from "../mocks/TestableAzureCosmosDBNoSqlVectorStore.js"; import { TestableAzureCosmosDBNoSqlVectorStore } from "../mocks/TestableAzureCosmosDBNoSqlVectorStore.js";
import { createMockClient } from "../utility/mockCosmosClient.js"; // Import the mock client import { createMockClient } from "../utility/mockCosmosClient.js"; // Import the mock client
@@ -95,4 +96,27 @@ describe("AzureCosmosDBNoSqlVectorStore Tests", () => {
expect(client.databases.containers.items.create).toHaveBeenCalledTimes(2); expect(client.databases.containers.items.create).toHaveBeenCalledTimes(2);
expect(result).toEqual(["node-0", "node-1"]); expect(result).toEqual(["node-0", "node-1"]);
}); });
it("should throw error if no query embedding is provided", async () => {
const client = createMockClient();
const store = new TestableAzureCosmosDBNoSqlVectorStore({
client: client as any,
endpoint: "https://example.com",
idKey: "id",
textKey: "text",
metadataKey: "metadata",
});
expect(store).toBeDefined();
await expect(
store.query({
queryEmbedding: [],
similarityTopK: 4,
mode: VectorStoreQueryMode.DEFAULT,
}),
).rejects.toThrowError(
"queryEmbedding is required for AzureCosmosDBNoSqlVectorStore query",
);
});
}); });
+36
View File
@@ -1,5 +1,41 @@
# @llamaindex/node-parser # @llamaindex/node-parser
## 0.0.13
### Patch Changes
- Updated dependencies [ef4f63d]
- @llamaindex/core@0.4.12
## 0.0.12
### Patch Changes
- Updated dependencies [6d22fa2]
- @llamaindex/core@0.4.11
## 0.0.11
### Patch Changes
- Updated dependencies [a7b0ac3]
- Updated dependencies [c69605f]
- @llamaindex/core@0.4.10
## 0.0.10
### Patch Changes
- Updated dependencies [7ae6eaa]
- @llamaindex/core@0.4.9
## 0.0.9
### Patch Changes
- Updated dependencies [f865c98]
- @llamaindex/core@0.4.8
## 0.0.8 ## 0.0.8
### Patch Changes ### Patch Changes
+1 -1
View File
@@ -1,6 +1,6 @@
{ {
"name": "@llamaindex/node-parser", "name": "@llamaindex/node-parser",
"version": "0.0.8", "version": "0.0.13",
"description": "Node parser for LlamaIndex", "description": "Node parser for LlamaIndex",
"type": "module", "type": "module",
"exports": { "exports": {
+37
View File
@@ -1,5 +1,42 @@
# @llamaindex/anthropic # @llamaindex/anthropic
## 0.0.21
### Patch Changes
- Updated dependencies [ef4f63d]
- @llamaindex/core@0.4.12
## 0.0.20
### Patch Changes
- Updated dependencies [6d22fa2]
- @llamaindex/core@0.4.11
## 0.0.19
### Patch Changes
- a7b0ac3: feat(anthropic): support prompt caching
- Updated dependencies [a7b0ac3]
- Updated dependencies [c69605f]
- @llamaindex/core@0.4.10
## 0.0.18
### Patch Changes
- Updated dependencies [7ae6eaa]
- @llamaindex/core@0.4.9
## 0.0.17
### Patch Changes
- Updated dependencies [f865c98]
- @llamaindex/core@0.4.8
## 0.0.16 ## 0.0.16
### Patch Changes ### Patch Changes
+2 -2
View File
@@ -1,7 +1,7 @@
{ {
"name": "@llamaindex/anthropic", "name": "@llamaindex/anthropic",
"description": "Anthropic Adapter for LlamaIndex", "description": "Anthropic Adapter for LlamaIndex",
"version": "0.0.16", "version": "0.0.21",
"type": "module", "type": "module",
"main": "./dist/index.cjs", "main": "./dist/index.cjs",
"module": "./dist/index.js", "module": "./dist/index.js",
@@ -33,7 +33,7 @@
"bunchee": "5.6.1" "bunchee": "5.6.1"
}, },
"dependencies": { "dependencies": {
"@anthropic-ai/sdk": "0.27.1", "@anthropic-ai/sdk": "0.32.1",
"@llamaindex/core": "workspace:*", "@llamaindex/core": "workspace:*",
"@llamaindex/env": "workspace:*", "@llamaindex/env": "workspace:*",
"remeda": "^2.12.0" "remeda": "^2.12.0"
+1 -1
View File
@@ -11,7 +11,7 @@ import { Settings } from "@llamaindex/core/global";
import type { EngineResponse } from "@llamaindex/core/schema"; import type { EngineResponse } from "@llamaindex/core/schema";
import { Anthropic } from "./llm.js"; import { Anthropic } from "./llm.js";
export type AnthropicAgentParams = LLMAgentParams; export type AnthropicAgentParams = LLMAgentParams<Anthropic>;
export class AnthropicAgentWorker extends LLMAgentWorker {} export class AnthropicAgentWorker extends LLMAgentWorker {}
+76 -23
View File
@@ -1,5 +1,9 @@
import type { ClientOptions } from "@anthropic-ai/sdk"; import type { ClientOptions } from "@anthropic-ai/sdk";
import { Anthropic as SDKAnthropic } from "@anthropic-ai/sdk"; import { Anthropic as SDKAnthropic } from "@anthropic-ai/sdk";
import type {
BetaCacheControlEphemeral,
BetaTextBlockParam,
} from "@anthropic-ai/sdk/resources/beta/index";
import type { import type {
TextBlock, TextBlock,
TextBlockParam, TextBlockParam,
@@ -8,6 +12,7 @@ import type {
ImageBlockParam, ImageBlockParam,
MessageCreateParamsNonStreaming, MessageCreateParamsNonStreaming,
MessageParam, MessageParam,
Model,
Tool, Tool,
ToolResultBlockParam, ToolResultBlockParam,
ToolUseBlock, ToolUseBlock,
@@ -75,6 +80,9 @@ export const ALL_AVAILABLE_ANTHROPIC_LEGACY_MODELS = {
"claude-2.1": { "claude-2.1": {
contextWindow: 200000, contextWindow: 200000,
}, },
"claude-2.0": {
contextWindow: 100000,
},
"claude-instant-1.2": { "claude-instant-1.2": {
contextWindow: 100000, contextWindow: 100000,
}, },
@@ -82,18 +90,30 @@ export const ALL_AVAILABLE_ANTHROPIC_LEGACY_MODELS = {
export const ALL_AVAILABLE_V3_MODELS = { export const ALL_AVAILABLE_V3_MODELS = {
"claude-3-opus": { contextWindow: 200000 }, "claude-3-opus": { contextWindow: 200000 },
"claude-3-opus-latest": { contextWindow: 200000 },
"claude-3-opus-20240229": { contextWindow: 200000 },
"claude-3-sonnet": { contextWindow: 200000 }, "claude-3-sonnet": { contextWindow: 200000 },
"claude-3-sonnet-20240229": { contextWindow: 200000 },
"claude-3-haiku": { contextWindow: 200000 }, "claude-3-haiku": { contextWindow: 200000 },
"claude-3-haiku-20240307": { contextWindow: 200000 },
}; };
export const ALL_AVAILABLE_V3_5_MODELS = { export const ALL_AVAILABLE_V3_5_MODELS = {
"claude-3-5-sonnet": { contextWindow: 200000 }, "claude-3-5-sonnet": { contextWindow: 200000 },
"claude-3-5-sonnet-20241022": { contextWindow: 200000 },
"claude-3-5-sonnet-20240620": { contextWindow: 200000 },
"claude-3-5-sonnet-latest": { contextWindow: 200000 },
"claude-3-5-haiku": { contextWindow: 200000 },
"claude-3-5-haiku-latest": { contextWindow: 200000 },
"claude-3-5-haiku-20241022": { contextWindow: 200000 },
}; };
export const ALL_AVAILABLE_ANTHROPIC_MODELS = { export const ALL_AVAILABLE_ANTHROPIC_MODELS = {
...ALL_AVAILABLE_ANTHROPIC_LEGACY_MODELS, ...ALL_AVAILABLE_ANTHROPIC_LEGACY_MODELS,
...ALL_AVAILABLE_V3_MODELS, ...ALL_AVAILABLE_V3_MODELS,
...ALL_AVAILABLE_V3_5_MODELS, ...ALL_AVAILABLE_V3_5_MODELS,
} satisfies {
[key in Model]: { contextWindow: number };
}; };
const AVAILABLE_ANTHROPIC_MODELS_WITHOUT_DATE: { [key: string]: string } = { const AVAILABLE_ANTHROPIC_MODELS_WITHOUT_DATE: { [key: string]: string } = {
@@ -104,10 +124,16 @@ const AVAILABLE_ANTHROPIC_MODELS_WITHOUT_DATE: { [key: string]: string } = {
} as { [key in keyof typeof ALL_AVAILABLE_ANTHROPIC_MODELS]: string }; } as { [key in keyof typeof ALL_AVAILABLE_ANTHROPIC_MODELS]: string };
export type AnthropicAdditionalChatOptions = object; export type AnthropicAdditionalChatOptions = object;
export type AnthropicToolCallLLMMessageOptions = ToolCallLLMMessageOptions & {
cache_control?: BetaCacheControlEphemeral | null;
};
export class Anthropic extends ToolCallLLM<AnthropicAdditionalChatOptions> { export class Anthropic extends ToolCallLLM<
AnthropicAdditionalChatOptions,
AnthropicToolCallLLMMessageOptions
> {
// Per completion Anthropic params // Per completion Anthropic params
model: keyof typeof ALL_AVAILABLE_ANTHROPIC_MODELS; model: keyof typeof ALL_AVAILABLE_ANTHROPIC_MODELS | ({} & string);
temperature: number; temperature: number;
topP: number; topP: number;
maxTokens?: number | undefined; maxTokens?: number | undefined;
@@ -147,7 +173,12 @@ export class Anthropic extends ToolCallLLM<AnthropicAdditionalChatOptions> {
temperature: this.temperature, temperature: this.temperature,
topP: this.topP, topP: this.topP,
maxTokens: this.maxTokens, maxTokens: this.maxTokens,
contextWindow: ALL_AVAILABLE_ANTHROPIC_MODELS[this.model].contextWindow, contextWindow:
this.model in ALL_AVAILABLE_ANTHROPIC_MODELS
? ALL_AVAILABLE_ANTHROPIC_MODELS[
this.model as keyof typeof ALL_AVAILABLE_ANTHROPIC_MODELS
].contextWindow
: 200000,
tokenizer: undefined, tokenizer: undefined,
}; };
} }
@@ -291,56 +322,74 @@ export class Anthropic extends ToolCallLLM<AnthropicAdditionalChatOptions> {
chat( chat(
params: LLMChatParamsStreaming< params: LLMChatParamsStreaming<
AnthropicAdditionalChatOptions, AnthropicAdditionalChatOptions,
ToolCallLLMMessageOptions AnthropicToolCallLLMMessageOptions
>, >,
): Promise<AsyncIterable<ChatResponseChunk<ToolCallLLMMessageOptions>>>; ): Promise<
AsyncIterable<ChatResponseChunk<AnthropicToolCallLLMMessageOptions>>
>;
chat( chat(
params: LLMChatParamsNonStreaming< params: LLMChatParamsNonStreaming<
AnthropicAdditionalChatOptions, AnthropicAdditionalChatOptions,
ToolCallLLMMessageOptions AnthropicToolCallLLMMessageOptions
>, >,
): Promise<ChatResponse<ToolCallLLMMessageOptions>>; ): Promise<ChatResponse<AnthropicToolCallLLMMessageOptions>>;
@wrapLLMEvent @wrapLLMEvent
async chat( async chat(
params: params:
| LLMChatParamsNonStreaming< | LLMChatParamsNonStreaming<
AnthropicAdditionalChatOptions, AnthropicAdditionalChatOptions,
ToolCallLLMMessageOptions AnthropicToolCallLLMMessageOptions
> >
| LLMChatParamsStreaming< | LLMChatParamsStreaming<
AnthropicAdditionalChatOptions, AnthropicAdditionalChatOptions,
ToolCallLLMMessageOptions AnthropicToolCallLLMMessageOptions
>, >,
): Promise< ): Promise<
| ChatResponse<ToolCallLLMMessageOptions> | ChatResponse<AnthropicToolCallLLMMessageOptions>
| AsyncIterable<ChatResponseChunk<ToolCallLLMMessageOptions>> | AsyncIterable<ChatResponseChunk<AnthropicToolCallLLMMessageOptions>>
> { > {
let { messages } = params; let { messages } = params;
const { stream, tools } = params; const { stream, tools } = params;
let systemPrompt: string | null = null; let systemPrompt: string | Array<BetaTextBlockParam> | null = null;
const systemMessages = messages.filter( const systemMessages = messages.filter(
(message) => message.role === "system", (message) => message.role === "system",
); );
if (systemMessages.length > 0) { if (systemMessages.length > 0) {
systemPrompt = systemMessages systemPrompt = systemMessages.map((message) =>
.map((message) => message.content) message.options && "cache_control" in message.options
.join("\n"); ? {
type: "text",
text: extractText(message.content),
cache_control: message.options.cache_control,
}
: {
type: "text",
text: extractText(message.content),
},
);
messages = messages.filter((message) => message.role !== "system"); messages = messages.filter((message) => message.role !== "system");
} }
const beta =
systemPrompt?.find((message) => "cache_control" in message) !== undefined;
// case: Non-streaming
let anthropic = this.session.anthropic;
if (beta) {
// @ts-expect-error type casting
anthropic = anthropic.beta.promptCaching;
}
// case: Streaming // case: Streaming
if (stream) { if (stream) {
if (tools) { if (tools) {
console.error("Tools are not supported in streaming mode"); console.error("Tools are not supported in streaming mode");
} }
return this.streamChat(messages, systemPrompt); return this.streamChat(messages, systemPrompt, anthropic);
} }
// case: Non-streaming
const anthropic = this.session.anthropic;
if (tools) { if (tools) {
const params: MessageCreateParamsNonStreaming = { const params: MessageCreateParamsNonStreaming = {
@@ -378,7 +427,10 @@ export class Anthropic extends ToolCallLLM<AnthropicAdditionalChatOptions> {
toolCall: toolUseBlock.map((block) => ({ toolCall: toolUseBlock.map((block) => ({
id: block.id, id: block.id,
name: block.name, name: block.name,
input: block.input, input:
typeof block.input === "object"
? JSON.stringify(block.input)
: `${block.input}`,
})), })),
} }
: {}, : {},
@@ -411,10 +463,11 @@ export class Anthropic extends ToolCallLLM<AnthropicAdditionalChatOptions> {
} }
protected async *streamChat( protected async *streamChat(
messages: ChatMessage<ToolCallLLMMessageOptions>[], messages: ChatMessage<AnthropicToolCallLLMMessageOptions>[],
systemPrompt?: string | null, systemPrompt: string | Array<BetaTextBlockParam> | null,
): AsyncIterable<ChatResponseChunk<ToolCallLLMMessageOptions>> { anthropic: SDKAnthropic,
const stream = await this.session.anthropic.messages.create({ ): AsyncIterable<ChatResponseChunk<AnthropicToolCallLLMMessageOptions>> {
const stream = await anthropic.messages.create({
model: this.getModelName(this.model), model: this.getModelName(this.model),
messages: this.formatMessages(messages), messages: this.formatMessages(messages),
max_tokens: this.maxTokens ?? 4096, max_tokens: this.maxTokens ?? 4096,
+41
View File
@@ -1,5 +1,46 @@
# @llamaindex/clip # @llamaindex/clip
## 0.0.21
### Patch Changes
- Updated dependencies [ef4f63d]
- @llamaindex/core@0.4.12
- @llamaindex/openai@0.1.37
## 0.0.20
### Patch Changes
- Updated dependencies [6d22fa2]
- @llamaindex/core@0.4.11
- @llamaindex/openai@0.1.36
## 0.0.19
### Patch Changes
- Updated dependencies [a7b0ac3]
- Updated dependencies [c69605f]
- @llamaindex/core@0.4.10
- @llamaindex/openai@0.1.35
## 0.0.18
### Patch Changes
- Updated dependencies [7ae6eaa]
- @llamaindex/core@0.4.9
- @llamaindex/openai@0.1.34
## 0.0.17
### Patch Changes
- Updated dependencies [f865c98]
- @llamaindex/core@0.4.8
- @llamaindex/openai@0.1.33
## 0.0.16 ## 0.0.16
### Patch Changes ### Patch Changes
+1 -1
View File
@@ -1,7 +1,7 @@
{ {
"name": "@llamaindex/clip", "name": "@llamaindex/clip",
"description": "Clip Embedding Adapter for LlamaIndex", "description": "Clip Embedding Adapter for LlamaIndex",
"version": "0.0.16", "version": "0.0.21",
"type": "module", "type": "module",
"types": "dist/index.d.ts", "types": "dist/index.d.ts",
"main": "dist/index.cjs", "main": "dist/index.cjs",
+41
View File
@@ -1,5 +1,46 @@
# @llamaindex/deepinfra # @llamaindex/deepinfra
## 0.0.21
### Patch Changes
- Updated dependencies [ef4f63d]
- @llamaindex/core@0.4.12
- @llamaindex/openai@0.1.37
## 0.0.20
### Patch Changes
- Updated dependencies [6d22fa2]
- @llamaindex/core@0.4.11
- @llamaindex/openai@0.1.36
## 0.0.19
### Patch Changes
- Updated dependencies [a7b0ac3]
- Updated dependencies [c69605f]
- @llamaindex/core@0.4.10
- @llamaindex/openai@0.1.35
## 0.0.18
### Patch Changes
- Updated dependencies [7ae6eaa]
- @llamaindex/core@0.4.9
- @llamaindex/openai@0.1.34
## 0.0.17
### Patch Changes
- Updated dependencies [f865c98]
- @llamaindex/core@0.4.8
- @llamaindex/openai@0.1.33
## 0.0.16 ## 0.0.16
### Patch Changes ### Patch Changes
+1 -1
View File
@@ -1,7 +1,7 @@
{ {
"name": "@llamaindex/deepinfra", "name": "@llamaindex/deepinfra",
"description": "Deepinfra Adapter for LlamaIndex", "description": "Deepinfra Adapter for LlamaIndex",
"version": "0.0.16", "version": "0.0.21",
"type": "module", "type": "module",
"main": "./dist/index.cjs", "main": "./dist/index.cjs",
"module": "./dist/index.js", "module": "./dist/index.js",
+31
View File
@@ -1,5 +1,36 @@
# @llamaindex/groq # @llamaindex/groq
## 0.0.36
### Patch Changes
- @llamaindex/openai@0.1.37
## 0.0.35
### Patch Changes
- @llamaindex/openai@0.1.36
## 0.0.34
### Patch Changes
- @llamaindex/openai@0.1.35
## 0.0.33
### Patch Changes
- Updated dependencies [7ae6eaa]
- @llamaindex/openai@0.1.34
## 0.0.32
### Patch Changes
- @llamaindex/openai@0.1.33
## 0.0.31 ## 0.0.31
### Patch Changes ### Patch Changes
+1 -1
View File
@@ -1,7 +1,7 @@
{ {
"name": "@llamaindex/groq", "name": "@llamaindex/groq",
"description": "Groq Adapter for LlamaIndex", "description": "Groq Adapter for LlamaIndex",
"version": "0.0.31", "version": "0.0.36",
"type": "module", "type": "module",
"main": "./dist/index.cjs", "main": "./dist/index.cjs",
"module": "./dist/index.js", "module": "./dist/index.js",
@@ -1,5 +1,46 @@
# @llamaindex/huggingface # @llamaindex/huggingface
## 0.0.21
### Patch Changes
- Updated dependencies [ef4f63d]
- @llamaindex/core@0.4.12
- @llamaindex/openai@0.1.37
## 0.0.20
### Patch Changes
- Updated dependencies [6d22fa2]
- @llamaindex/core@0.4.11
- @llamaindex/openai@0.1.36
## 0.0.19
### Patch Changes
- Updated dependencies [a7b0ac3]
- Updated dependencies [c69605f]
- @llamaindex/core@0.4.10
- @llamaindex/openai@0.1.35
## 0.0.18
### Patch Changes
- Updated dependencies [7ae6eaa]
- @llamaindex/core@0.4.9
- @llamaindex/openai@0.1.34
## 0.0.17
### Patch Changes
- Updated dependencies [f865c98]
- @llamaindex/core@0.4.8
- @llamaindex/openai@0.1.33
## 0.0.16 ## 0.0.16
### Patch Changes ### Patch Changes
+1 -1
View File
@@ -1,7 +1,7 @@
{ {
"name": "@llamaindex/huggingface", "name": "@llamaindex/huggingface",
"description": "Huggingface Adapter for LlamaIndex", "description": "Huggingface Adapter for LlamaIndex",
"version": "0.0.16", "version": "0.0.21",
"type": "module", "type": "module",
"types": "dist/index.d.ts", "types": "dist/index.d.ts",
"main": "dist/index.cjs", "main": "dist/index.cjs",
+36
View File
@@ -1,5 +1,41 @@
# @llamaindex/ollama # @llamaindex/ollama
## 0.0.28
### Patch Changes
- Updated dependencies [ef4f63d]
- @llamaindex/core@0.4.12
## 0.0.27
### Patch Changes
- Updated dependencies [6d22fa2]
- @llamaindex/core@0.4.11
## 0.0.26
### Patch Changes
- Updated dependencies [a7b0ac3]
- Updated dependencies [c69605f]
- @llamaindex/core@0.4.10
## 0.0.25
### Patch Changes
- Updated dependencies [7ae6eaa]
- @llamaindex/core@0.4.9
## 0.0.24
### Patch Changes
- Updated dependencies [f865c98]
- @llamaindex/core@0.4.8
## 0.0.23 ## 0.0.23
### Patch Changes ### Patch Changes
+1 -1
View File
@@ -1,7 +1,7 @@
{ {
"name": "@llamaindex/ollama", "name": "@llamaindex/ollama",
"description": "Ollama Adapter for LlamaIndex", "description": "Ollama Adapter for LlamaIndex",
"version": "0.0.23", "version": "0.0.28",
"type": "module", "type": "module",
"main": "./dist/index.cjs", "main": "./dist/index.cjs",
"module": "./dist/index.js", "module": "./dist/index.js",
+1 -1
View File
@@ -8,7 +8,7 @@ import { Ollama } from "./llm";
// This is likely not necessary anymore but leaving it here just incase it's in use elsewhere // This is likely not necessary anymore but leaving it here just incase it's in use elsewhere
export type OllamaAgentParams = LLMAgentParams & { export type OllamaAgentParams = LLMAgentParams<Ollama> & {
model?: string; model?: string;
}; };
+37
View File
@@ -1,5 +1,42 @@
# @llamaindex/openai # @llamaindex/openai
## 0.1.37
### Patch Changes
- Updated dependencies [ef4f63d]
- @llamaindex/core@0.4.12
## 0.1.36
### Patch Changes
- Updated dependencies [6d22fa2]
- @llamaindex/core@0.4.11
## 0.1.35
### Patch Changes
- Updated dependencies [a7b0ac3]
- Updated dependencies [c69605f]
- @llamaindex/core@0.4.10
## 0.1.34
### Patch Changes
- 7ae6eaa: feat: allow pass `additionalChatOptions` to agent
- Updated dependencies [7ae6eaa]
- @llamaindex/core@0.4.9
## 0.1.33
### Patch Changes
- Updated dependencies [f865c98]
- @llamaindex/core@0.4.8
## 0.1.32 ## 0.1.32
### Patch Changes ### Patch Changes
+2 -3
View File
@@ -1,7 +1,7 @@
{ {
"name": "@llamaindex/openai", "name": "@llamaindex/openai",
"description": "OpenAI Adapter for LlamaIndex", "description": "OpenAI Adapter for LlamaIndex",
"version": "0.1.32", "version": "0.1.37",
"type": "module", "type": "module",
"main": "./dist/index.cjs", "main": "./dist/index.cjs",
"module": "./dist/index.js", "module": "./dist/index.js",
@@ -35,7 +35,6 @@
"dependencies": { "dependencies": {
"@llamaindex/core": "workspace:*", "@llamaindex/core": "workspace:*",
"@llamaindex/env": "workspace:*", "@llamaindex/env": "workspace:*",
"openai": "^4.68.1", "openai": "^4.68.1"
"remeda": "^2.12.0"
} }
} }
+8 -3
View File
@@ -4,11 +4,16 @@ import {
type LLMAgentParams, type LLMAgentParams,
} from "@llamaindex/core/agent"; } from "@llamaindex/core/agent";
import { Settings } from "@llamaindex/core/global"; import { Settings } from "@llamaindex/core/global";
import { OpenAI } from "./llm"; import type { ToolCallLLMMessageOptions } from "@llamaindex/core/llms";
import { OpenAI, type OpenAIAdditionalChatOptions } from "./llm";
// This is likely not necessary anymore but leaving it here just incase it's in use elsewhere // This is likely not necessary anymore but leaving it here just in case it's in use elsewhere
export type OpenAIAgentParams = LLMAgentParams; export type OpenAIAgentParams = LLMAgentParams<
OpenAI,
ToolCallLLMMessageOptions,
OpenAIAdditionalChatOptions
>;
export class OpenAIAgentWorker extends LLMAgentWorker {} export class OpenAIAgentWorker extends LLMAgentWorker {}
@@ -1,5 +1,41 @@
# @llamaindex/portkey-ai # @llamaindex/portkey-ai
## 0.0.21
### Patch Changes
- Updated dependencies [ef4f63d]
- @llamaindex/core@0.4.12
## 0.0.20
### Patch Changes
- Updated dependencies [6d22fa2]
- @llamaindex/core@0.4.11
## 0.0.19
### Patch Changes
- Updated dependencies [a7b0ac3]
- Updated dependencies [c69605f]
- @llamaindex/core@0.4.10
## 0.0.18
### Patch Changes
- Updated dependencies [7ae6eaa]
- @llamaindex/core@0.4.9
## 0.0.17
### Patch Changes
- Updated dependencies [f865c98]
- @llamaindex/core@0.4.8
## 0.0.16 ## 0.0.16
### Patch Changes ### Patch Changes
+1 -1
View File
@@ -1,7 +1,7 @@
{ {
"name": "@llamaindex/portkey-ai", "name": "@llamaindex/portkey-ai",
"description": "Portkey Adapter for LlamaIndex", "description": "Portkey Adapter for LlamaIndex",
"version": "0.0.16", "version": "0.0.21",
"type": "module", "type": "module",
"main": "./dist/index.cjs", "main": "./dist/index.cjs",
"module": "./dist/index.js", "module": "./dist/index.js",
+36
View File
@@ -1,5 +1,41 @@
# @llamaindex/replicate # @llamaindex/replicate
## 0.0.21
### Patch Changes
- Updated dependencies [ef4f63d]
- @llamaindex/core@0.4.12
## 0.0.20
### Patch Changes
- Updated dependencies [6d22fa2]
- @llamaindex/core@0.4.11
## 0.0.19
### Patch Changes
- Updated dependencies [a7b0ac3]
- Updated dependencies [c69605f]
- @llamaindex/core@0.4.10
## 0.0.18
### Patch Changes
- Updated dependencies [7ae6eaa]
- @llamaindex/core@0.4.9
## 0.0.17
### Patch Changes
- Updated dependencies [f865c98]
- @llamaindex/core@0.4.8
## 0.0.16 ## 0.0.16
### Patch Changes ### Patch Changes
+1 -1
View File
@@ -1,7 +1,7 @@
{ {
"name": "@llamaindex/replicate", "name": "@llamaindex/replicate",
"description": "Replicate Adapter for LlamaIndex", "description": "Replicate Adapter for LlamaIndex",
"version": "0.0.16", "version": "0.0.21",
"type": "module", "type": "module",
"main": "./dist/index.cjs", "main": "./dist/index.cjs",
"module": "./dist/index.js", "module": "./dist/index.js",
+31
View File
@@ -1,5 +1,36 @@
# @llamaindex/vllm # @llamaindex/vllm
## 0.0.7
### Patch Changes
- @llamaindex/openai@0.1.37
## 0.0.6
### Patch Changes
- @llamaindex/openai@0.1.36
## 0.0.5
### Patch Changes
- @llamaindex/openai@0.1.35
## 0.0.4
### Patch Changes
- Updated dependencies [7ae6eaa]
- @llamaindex/openai@0.1.34
## 0.0.3
### Patch Changes
- @llamaindex/openai@0.1.33
## 0.0.2 ## 0.0.2
### Patch Changes ### Patch Changes
+1 -1
View File
@@ -1,7 +1,7 @@
{ {
"name": "@llamaindex/vllm", "name": "@llamaindex/vllm",
"description": "vLLM Adapter for LlamaIndex", "description": "vLLM Adapter for LlamaIndex",
"version": "0.0.2", "version": "0.0.7",
"type": "module", "type": "module",
"main": "./dist/index.cjs", "main": "./dist/index.cjs",
"module": "./dist/index.js", "module": "./dist/index.js",
+42
View File
@@ -1,5 +1,47 @@
# @llamaindex/readers # @llamaindex/readers
## 1.0.14
### Patch Changes
- Updated dependencies [ef4f63d]
- @llamaindex/core@0.4.12
## 1.0.13
### Patch Changes
- Updated dependencies [6d22fa2]
- @llamaindex/core@0.4.11
## 1.0.12
### Patch Changes
- e60328b: fix: import error in cjs
## 1.0.11
### Patch Changes
- Updated dependencies [a7b0ac3]
- Updated dependencies [c69605f]
- @llamaindex/core@0.4.10
## 1.0.10
### Patch Changes
- Updated dependencies [7ae6eaa]
- @llamaindex/core@0.4.9
## 1.0.9
### Patch Changes
- Updated dependencies [f865c98]
- @llamaindex/core@0.4.8
## 1.0.8 ## 1.0.8
### Patch Changes ### Patch Changes
+1 -97
View File
@@ -1,20 +1,12 @@
{ {
"name": "@llamaindex/readers", "name": "@llamaindex/readers",
"description": "LlamaIndex Readers", "description": "LlamaIndex Readers",
"version": "1.0.8", "version": "1.0.14",
"type": "module", "type": "module",
"exports": { "exports": {
"./node/hook": "./node/dist/hook.js", "./node/hook": "./node/dist/hook.js",
"./node": "./node/dist/index.js", "./node": "./node/dist/index.js",
"./assembly-ai": { "./assembly-ai": {
"edge-light": {
"types": "./assembly-ai/dist/index.edge-light.d.ts",
"default": "./assembly-ai/dist/index.edge-light.js"
},
"workerd": {
"types": "./assembly-ai/dist/index.workerd.d.ts",
"default": "./assembly-ai/dist/index.workerd.js"
},
"require": { "require": {
"types": "./assembly-ai/dist/index.d.cts", "types": "./assembly-ai/dist/index.d.cts",
"default": "./assembly-ai/dist/index.cjs" "default": "./assembly-ai/dist/index.cjs"
@@ -25,14 +17,6 @@
} }
}, },
"./cosmosdb": { "./cosmosdb": {
"edge-light": {
"types": "./cosmosdb/dist/index.edge-light.d.ts",
"default": "./cosmosdb/dist/index.edge-light.js"
},
"workerd": {
"types": "./cosmosdb/dist/index.workerd.d.ts",
"default": "./cosmosdb/dist/index.workerd.js"
},
"require": { "require": {
"types": "./cosmosdb/dist/index.d.cts", "types": "./cosmosdb/dist/index.d.cts",
"default": "./cosmosdb/dist/index.cjs" "default": "./cosmosdb/dist/index.cjs"
@@ -79,14 +63,6 @@
} }
}, },
"./discord": { "./discord": {
"edge-light": {
"types": "./discord/dist/index.edge-light.d.ts",
"default": "./discord/dist/index.edge-light.js"
},
"workerd": {
"types": "./discord/dist/index.workerd.d.ts",
"default": "./discord/dist/index.workerd.js"
},
"require": { "require": {
"types": "./discord/dist/index.d.cts", "types": "./discord/dist/index.d.cts",
"default": "./discord/dist/index.cjs" "default": "./discord/dist/index.cjs"
@@ -97,14 +73,6 @@
} }
}, },
"./docx": { "./docx": {
"edge-light": {
"types": "./docx/dist/index.edge-light.d.ts",
"default": "./docx/dist/index.edge-light.js"
},
"workerd": {
"types": "./docx/dist/index.workerd.d.ts",
"default": "./docx/dist/index.workerd.js"
},
"require": { "require": {
"types": "./docx/dist/index.d.cts", "types": "./docx/dist/index.d.cts",
"default": "./docx/dist/index.cjs" "default": "./docx/dist/index.cjs"
@@ -115,14 +83,6 @@
} }
}, },
"./html": { "./html": {
"edge-light": {
"types": "./html/dist/index.edge-light.d.ts",
"default": "./html/dist/index.edge-light.js"
},
"workerd": {
"types": "./html/dist/index.workerd.d.ts",
"default": "./html/dist/index.workerd.js"
},
"require": { "require": {
"types": "./html/dist/index.d.cts", "types": "./html/dist/index.d.cts",
"default": "./html/dist/index.cjs" "default": "./html/dist/index.cjs"
@@ -133,14 +93,6 @@
} }
}, },
"./image": { "./image": {
"edge-light": {
"types": "./image/dist/index.edge-light.d.ts",
"default": "./image/dist/index.edge-light.js"
},
"workerd": {
"types": "./image/dist/index.workerd.d.ts",
"default": "./image/dist/index.workerd.js"
},
"require": { "require": {
"types": "./image/dist/index.d.cts", "types": "./image/dist/index.d.cts",
"default": "./image/dist/index.cjs" "default": "./image/dist/index.cjs"
@@ -151,14 +103,6 @@
} }
}, },
"./json": { "./json": {
"edge-light": {
"types": "./json/dist/index.edge-light.d.ts",
"default": "./json/dist/index.edge-light.js"
},
"workerd": {
"types": "./json/dist/index.workerd.d.ts",
"default": "./json/dist/index.workerd.js"
},
"require": { "require": {
"types": "./json/dist/index.d.cts", "types": "./json/dist/index.d.cts",
"default": "./json/dist/index.cjs" "default": "./json/dist/index.cjs"
@@ -169,14 +113,6 @@
} }
}, },
"./markdown": { "./markdown": {
"edge-light": {
"types": "./markdown/dist/index.edge-light.d.ts",
"default": "./markdown/dist/index.edge-light.js"
},
"workerd": {
"types": "./markdown/dist/index.workerd.d.ts",
"default": "./markdown/dist/index.workerd.js"
},
"require": { "require": {
"types": "./markdown/dist/index.d.cts", "types": "./markdown/dist/index.d.cts",
"default": "./markdown/dist/index.cjs" "default": "./markdown/dist/index.cjs"
@@ -187,14 +123,6 @@
} }
}, },
"./mongo": { "./mongo": {
"edge-light": {
"types": "./mongo/dist/index.edge-light.d.ts",
"default": "./mongo/dist/index.edge-light.js"
},
"workerd": {
"types": "./mongo/dist/index.workerd.d.ts",
"default": "./mongo/dist/index.workerd.js"
},
"require": { "require": {
"types": "./mongo/dist/index.d.cts", "types": "./mongo/dist/index.d.cts",
"default": "./mongo/dist/index.cjs" "default": "./mongo/dist/index.cjs"
@@ -205,14 +133,6 @@
} }
}, },
"./notion": { "./notion": {
"edge-light": {
"types": "./notion/dist/index.edge-light.d.ts",
"default": "./notion/dist/index.edge-light.js"
},
"workerd": {
"types": "./notion/dist/index.workerd.d.ts",
"default": "./notion/dist/index.workerd.js"
},
"require": { "require": {
"types": "./notion/dist/index.d.cts", "types": "./notion/dist/index.d.cts",
"default": "./notion/dist/index.cjs" "default": "./notion/dist/index.cjs"
@@ -223,14 +143,6 @@
} }
}, },
"./pdf": { "./pdf": {
"edge-light": {
"types": "./pdf/dist/index.edge-light.d.ts",
"default": "./pdf/dist/index.edge-light.js"
},
"workerd": {
"types": "./pdf/dist/index.workerd.d.ts",
"default": "./pdf/dist/index.workerd.js"
},
"require": { "require": {
"types": "./pdf/dist/index.d.cts", "types": "./pdf/dist/index.d.cts",
"default": "./pdf/dist/index.cjs" "default": "./pdf/dist/index.cjs"
@@ -241,14 +153,6 @@
} }
}, },
"./text": { "./text": {
"edge-light": {
"types": "./text/dist/index.edge-light.d.ts",
"default": "./text/dist/index.edge-light.js"
},
"workerd": {
"types": "./text/dist/index.workerd.d.ts",
"default": "./text/dist/index.workerd.js"
},
"require": { "require": {
"types": "./text/dist/index.d.cts", "types": "./text/dist/index.d.cts",
"default": "./text/dist/index.cjs" "default": "./text/dist/index.cjs"

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