mirror of
https://github.com/run-llama/LlamaIndexTS.git
synced 2026-07-02 20:13:52 -04:00
Compare commits
19 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 223f3136b4 | |||
| c6bad7d951 | |||
| 630b425545 | |||
| 4c7b891446 | |||
| a9c5b4899b | |||
| a7b0ac3cb7 | |||
| a7540ff47b | |||
| c69605f406 | |||
| ee20c44d9b | |||
| 1d470363df | |||
| b39f40dbd8 | |||
| fadc8b8ea0 | |||
| ea92b6986d | |||
| 17f9022d22 | |||
| 14792cd8b4 | |||
| 7ae6eaa0a2 | |||
| dbb5bd9f23 | |||
| aacd606204 | |||
| f865c984d3 |
@@ -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>
|
||||
|
||||
[](https://www.npmjs.com/package/llamaindex)
|
||||
[](https://www.npmjs.com/package/llamaindex)
|
||||
[](https://www.npmjs.com/package/llamaindex)
|
||||
[](https://discord.com/invite/eN6D2HQ4aX)
|
||||
|
||||
LlamaIndex is a data framework for your LLM application.
|
||||
|
||||
Use your own data with large language models (LLMs, OpenAI ChatGPT and others) in JS runtime environments with TypeScript support.
|
||||
|
||||
Documentation: https://ts.llamaindex.ai/
|
||||
|
||||
@@ -1,5 +1,37 @@
|
||||
# docs
|
||||
|
||||
## 0.0.119
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [630b425]
|
||||
- llamaindex@0.8.14
|
||||
|
||||
## 0.0.118
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.8.13
|
||||
- @llamaindex/examples@0.0.16
|
||||
|
||||
## 0.0.117
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- @llamaindex/examples@0.0.15
|
||||
|
||||
## 0.0.116
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.8.12
|
||||
|
||||
## 0.0.115
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.8.11
|
||||
|
||||
## 0.0.114
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -62,6 +62,12 @@ const config = {
|
||||
({
|
||||
// Replace with your project's social card
|
||||
image: "img/favicon.png", // TODO change this
|
||||
announcementBar: {
|
||||
id: "migrate_to_next",
|
||||
content:
|
||||
'We are migrating to Next.js based documentation. Check it out <a href="https://ts.llamaindex.ai/docs/llamaindex">here</a>!',
|
||||
isCloseable: false,
|
||||
},
|
||||
navbar: {
|
||||
title: "LlamaIndex.TS",
|
||||
logo: {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "docs",
|
||||
"version": "0.0.114",
|
||||
"version": "0.0.119",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"docusaurus": "docusaurus",
|
||||
|
||||
@@ -1,5 +1,59 @@
|
||||
# @llamaindex/doc
|
||||
|
||||
## 0.0.17
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [630b425]
|
||||
- llamaindex@0.8.14
|
||||
|
||||
## 0.0.16
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [a7b0ac3]
|
||||
- Updated dependencies [ee20c44]
|
||||
- Updated dependencies [c69605f]
|
||||
- @llamaindex/core@0.4.10
|
||||
- @llamaindex/workflow@0.0.6
|
||||
- llamaindex@0.8.13
|
||||
- @llamaindex/cloud@2.0.10
|
||||
- @llamaindex/node-parser@0.0.11
|
||||
- @llamaindex/openai@0.1.35
|
||||
- @llamaindex/readers@1.0.11
|
||||
|
||||
## 0.0.15
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [ea92b69]
|
||||
- Updated dependencies [fadc8b8]
|
||||
- @llamaindex/workflow@0.0.5
|
||||
|
||||
## 0.0.14
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [7ae6eaa]
|
||||
- @llamaindex/core@0.4.9
|
||||
- @llamaindex/openai@0.1.34
|
||||
- @llamaindex/cloud@2.0.9
|
||||
- llamaindex@0.8.12
|
||||
- @llamaindex/node-parser@0.0.10
|
||||
- @llamaindex/readers@1.0.10
|
||||
|
||||
## 0.0.13
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [f865c98]
|
||||
- @llamaindex/core@0.4.8
|
||||
- @llamaindex/cloud@2.0.8
|
||||
- llamaindex@0.8.11
|
||||
- @llamaindex/node-parser@0.0.9
|
||||
- @llamaindex/openai@0.1.33
|
||||
- @llamaindex/readers@1.0.9
|
||||
|
||||
## 0.0.12
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@llamaindex/doc",
|
||||
"version": "0.0.12",
|
||||
"version": "0.0.17",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"build": "pnpm run build:docs && next build",
|
||||
@@ -12,7 +12,7 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"@icons-pack/react-simple-icons": "^10.1.0",
|
||||
"@llamaindex/chat-ui": "0.0.5",
|
||||
"@llamaindex/chat-ui": "0.0.8",
|
||||
"@llamaindex/cloud": "workspace:*",
|
||||
"@llamaindex/core": "workspace:*",
|
||||
"@llamaindex/node-parser": "workspace:*",
|
||||
|
||||
File diff suppressed because one or more lines are too long
|
After Width: | Height: | Size: 6.3 KiB |
@@ -1,6 +1,6 @@
|
||||
import { LlamaIndexAdapter, type Message } from "ai";
|
||||
import { SimpleChatEngine, type ChatMessage } from "llamaindex";
|
||||
import { NextResponse, type NextRequest } from "next/server";
|
||||
import { Message } from "ai";
|
||||
import { simulateReadableStream } from "ai/test";
|
||||
import { NextRequest, NextResponse } from "next/server";
|
||||
|
||||
export async function POST(request: NextRequest) {
|
||||
try {
|
||||
@@ -12,16 +12,19 @@ export async function POST(request: NextRequest) {
|
||||
{ status: 400 },
|
||||
);
|
||||
}
|
||||
|
||||
const chatEngine = new SimpleChatEngine();
|
||||
|
||||
return LlamaIndexAdapter.toDataStreamResponse(
|
||||
await chatEngine.chat({
|
||||
message: userMessage.content,
|
||||
chatHistory: messages as ChatMessage[],
|
||||
stream: true,
|
||||
}),
|
||||
{},
|
||||
const mockResponse = `Hello! This is a mock response to: ${userMessage.content}`;
|
||||
return new Response(
|
||||
simulateReadableStream({
|
||||
chunkDelayInMs: 20,
|
||||
values: mockResponse.split(" ").map((t) => `0:"${t} "\n`),
|
||||
}).pipeThrough(new TextEncoderStream()),
|
||||
{
|
||||
status: 200,
|
||||
headers: {
|
||||
"X-Vercel-AI-Data-Stream": "v1",
|
||||
"Content-Type": "text/plain; charset=utf-8",
|
||||
},
|
||||
},
|
||||
);
|
||||
} catch (error) {
|
||||
const detail = (error as Error).message;
|
||||
|
||||
@@ -1,8 +0,0 @@
|
||||
"use client";
|
||||
import { ChatSection } from "@llamaindex/chat-ui";
|
||||
import { useChat } from "ai/react";
|
||||
|
||||
export const ChatDemo = () => {
|
||||
const handler = useChat();
|
||||
return <ChatSection handler={handler} />;
|
||||
};
|
||||
@@ -0,0 +1,16 @@
|
||||
"use client";
|
||||
import { ChatInput, ChatMessages, ChatSection } from "@llamaindex/chat-ui";
|
||||
import { useChat } from "ai/react";
|
||||
|
||||
export const ChatDemo = () => {
|
||||
const handler = useChat();
|
||||
return (
|
||||
<ChatSection handler={handler}>
|
||||
<ChatMessages>
|
||||
<ChatMessages.List className="h-auto max-h-[400px]" />
|
||||
<ChatMessages.Actions />
|
||||
</ChatMessages>
|
||||
<ChatInput />
|
||||
</ChatSection>
|
||||
);
|
||||
};
|
||||
@@ -0,0 +1,55 @@
|
||||
import { Markdown } from "@llamaindex/chat-ui/widgets";
|
||||
import { generateId, Message, parseStreamPart } from "ai";
|
||||
import { createAI, createStreamableUI, getMutableAIState } from "ai/rsc";
|
||||
import { simulateReadableStream } from "ai/test";
|
||||
import { ReactNode } from "react";
|
||||
|
||||
type ServerState = Message[];
|
||||
type FrontendState = Array<Message & { display: ReactNode }>;
|
||||
type Actions = {
|
||||
chat: (message: Message) => Promise<Message & { display: ReactNode }>;
|
||||
};
|
||||
|
||||
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 mockResponse = `Hello! This is a mock response to: ${message.content}`;
|
||||
const responseStream = simulateReadableStream({
|
||||
chunkDelayInMs: 20,
|
||||
values: mockResponse.split(" ").map((t) => `0:"${t} "\n`),
|
||||
});
|
||||
|
||||
const uiStream = createStreamableUI();
|
||||
const assistantMessage: Message = {
|
||||
id: generateId(),
|
||||
role: "assistant",
|
||||
content: "",
|
||||
};
|
||||
|
||||
responseStream.pipeTo(
|
||||
new WritableStream({
|
||||
write: async (message) => {
|
||||
assistantMessage.content += parseStreamPart(message).value;
|
||||
uiStream.update(<Markdown content={assistantMessage.content} />);
|
||||
},
|
||||
close: () => {
|
||||
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,
|
||||
};
|
||||
}
|
||||
+5
-4
@@ -1,8 +1,8 @@
|
||||
---
|
||||
title: Chat-UI
|
||||
description: Use chat-ui to add a chat interface to your LlamaIndexTS application.
|
||||
title: Using API Route
|
||||
description: Chat interface for your LlamaIndexTS application using API Route
|
||||
---
|
||||
import { ChatDemo } from '../../../../components/demo/chat';
|
||||
import { ChatDemo } from '../../../../../components/demo/chat/api/demo';
|
||||
import "@llamaindex/chat-ui/styles/code.css";
|
||||
import "@llamaindex/chat-ui/styles/katex.css";
|
||||
|
||||
@@ -26,7 +26,7 @@ This is the simplest way to add a chat interface to your application. Copy the f
|
||||
|
||||
```json doc-gen:file
|
||||
{
|
||||
"file": "./src/components/demo/chat.tsx",
|
||||
"file": "./src/components/demo/chat/api/demo.tsx",
|
||||
"codeblock": true
|
||||
}
|
||||
```
|
||||
@@ -37,6 +37,7 @@ Combining both, you're getting a fully functional chat interface:
|
||||
|
||||
<ChatDemo />
|
||||
|
||||
|
||||
## Next Steps
|
||||
|
||||
The steps above are the bare minimum to get a chat interface working. From here, you can go two ways:
|
||||
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"title": "Chat-UI",
|
||||
"description": "Use chat-ui to add a chat interface to your LlamaIndexTS application.",
|
||||
"defaultOpen": false,
|
||||
"pages": ["chat", "rsc"]
|
||||
}
|
||||
@@ -0,0 +1,68 @@
|
||||
---
|
||||
title: Using Next.js RSC
|
||||
description: Chat interface for your LlamaIndexTS application using Next.js RSC
|
||||
---
|
||||
import { ChatDemoRSC } from '../../../../../components/demo/chat/rsc/demo';
|
||||
import "@llamaindex/chat-ui/styles/code.css";
|
||||
import "@llamaindex/chat-ui/styles/katex.css";
|
||||
|
||||
Using [chat-ui](https://github.com/run-llama/chat-ui), it's easy to add a chat interface to your LlamaIndexTS application using [Next.js RSC](https://nextjs.org/docs/app/building-your-application/rendering/server-components) and [Vercel AI RSC](https://sdk.vercel.ai/docs/ai-sdk-rsc/overview).
|
||||
|
||||
With RSC, the chat messages are not returned as JSON from the server (like when using an [API route](./chat)), instead the chat message components are rendered on the server side.
|
||||
This is for example useful for rendering a whole chat history on the server before sending it to the client. [Check here](https://sdk.vercel.ai/docs/getting-started/navigating-the-library#when-to-use-ai-sdk-rsc), for a discussion of when to use use RSC.
|
||||
|
||||
For implementing a chat interface with RSC, you need to create an AI action and then connect the chat interface to use it.
|
||||
|
||||
## Create an AI action
|
||||
|
||||
First, define an [AI context provider](https://sdk.vercel.ai/examples/rsc/state-management/ai-ui-states) with a chat server action:
|
||||
|
||||
```json doc-gen:file
|
||||
{
|
||||
"file": "./src/components/demo/chat/rsc/ai-action.tsx",
|
||||
"codeblock": true
|
||||
}
|
||||
```
|
||||
|
||||
The chat server action is using LlamaIndexTS to generate a response based on the chat history and the user input.
|
||||
|
||||
## Create the chat UI
|
||||
|
||||
The entrypoint of our application initializes the AI provider for the application and adds a `ChatSection` component:
|
||||
|
||||
```json doc-gen:file
|
||||
{
|
||||
"file": "./src/components/demo/chat/rsc/demo.tsx",
|
||||
"codeblock": true
|
||||
}
|
||||
```
|
||||
|
||||
The `ChatSection` component is created by using chat components from @llamaindex/chat-ui:
|
||||
|
||||
```json doc-gen:file
|
||||
{
|
||||
"file": "./src/components/demo/chat/rsc/chat-section.tsx",
|
||||
"codeblock": true
|
||||
}
|
||||
```
|
||||
|
||||
It is using a `useChatRSC` hook to conntect the chat interface to the `chat` AI action that we defined earlier:
|
||||
|
||||
```json doc-gen:file
|
||||
{
|
||||
"file": "./src/components/demo/chat/rsc/use-chat-rsc.tsx",
|
||||
"codeblock": true
|
||||
}
|
||||
```
|
||||
|
||||
## Try RSC Chat ⬇️
|
||||
|
||||
<ChatDemoRSC />
|
||||
|
||||
## Next Steps
|
||||
|
||||
The steps above are the bare minimum to get a chat interface working with RSC. From here, you can go two ways:
|
||||
|
||||
1. Use our [full-stack RSC example](https://github.com/run-llama/nextjs-rsc) based on [create-llama](https://github.com/run-llama/create-llama) to get started quickly with a fully working chat interface or
|
||||
2. Learn more about [AI RSC](https://sdk.vercel.ai/examples/rsc), [chat-ui](https://github.com/run-llama/chat-ui) and [LlamaIndexTS](https://github.com/run-llama/llamaindex-ts) to customize the chat interface and AI actions to your needs.
|
||||
|
||||
@@ -1,5 +1,30 @@
|
||||
# @llamaindex/cloudflare-worker-agent-test
|
||||
|
||||
## 0.0.110
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [630b425]
|
||||
- llamaindex@0.8.14
|
||||
|
||||
## 0.0.109
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.8.13
|
||||
|
||||
## 0.0.108
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.8.12
|
||||
|
||||
## 0.0.107
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.8.11
|
||||
|
||||
## 0.0.106
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@llamaindex/cloudflare-worker-agent-test",
|
||||
"version": "0.0.106",
|
||||
"version": "0.0.110",
|
||||
"type": "module",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
|
||||
@@ -1,5 +1,23 @@
|
||||
# @llamaindex/llama-parse-browser-test
|
||||
|
||||
## 0.0.30
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- @llamaindex/cloud@2.0.10
|
||||
|
||||
## 0.0.29
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- @llamaindex/cloud@2.0.9
|
||||
|
||||
## 0.0.28
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- @llamaindex/cloud@2.0.8
|
||||
|
||||
## 0.0.27
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "@llamaindex/llama-parse-browser-test",
|
||||
"private": true,
|
||||
"version": "0.0.27",
|
||||
"version": "0.0.30",
|
||||
"type": "module",
|
||||
"scripts": {
|
||||
"dev": "vite",
|
||||
|
||||
@@ -1,5 +1,30 @@
|
||||
# @llamaindex/next-agent-test
|
||||
|
||||
## 0.1.110
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [630b425]
|
||||
- llamaindex@0.8.14
|
||||
|
||||
## 0.1.109
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.8.13
|
||||
|
||||
## 0.1.108
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.8.12
|
||||
|
||||
## 0.1.107
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.8.11
|
||||
|
||||
## 0.1.106
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@llamaindex/next-agent-test",
|
||||
"version": "0.1.106",
|
||||
"version": "0.1.110",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"dev": "next dev",
|
||||
|
||||
@@ -1,5 +1,30 @@
|
||||
# test-edge-runtime
|
||||
|
||||
## 0.1.109
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [630b425]
|
||||
- llamaindex@0.8.14
|
||||
|
||||
## 0.1.108
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.8.13
|
||||
|
||||
## 0.1.107
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.8.12
|
||||
|
||||
## 0.1.106
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.8.11
|
||||
|
||||
## 0.1.105
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@llamaindex/nextjs-edge-runtime-test",
|
||||
"version": "0.1.105",
|
||||
"version": "0.1.109",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"dev": "next dev",
|
||||
|
||||
@@ -1,5 +1,30 @@
|
||||
# @llamaindex/next-node-runtime
|
||||
|
||||
## 0.0.91
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [630b425]
|
||||
- llamaindex@0.8.14
|
||||
|
||||
## 0.0.90
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.8.13
|
||||
|
||||
## 0.0.89
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.8.12
|
||||
|
||||
## 0.0.88
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.8.11
|
||||
|
||||
## 0.0.87
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@llamaindex/next-node-runtime-test",
|
||||
"version": "0.0.87",
|
||||
"version": "0.0.91",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"dev": "next dev",
|
||||
|
||||
@@ -1,5 +1,30 @@
|
||||
# @llamaindex/waku-query-engine-test
|
||||
|
||||
## 0.0.110
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [630b425]
|
||||
- llamaindex@0.8.14
|
||||
|
||||
## 0.0.109
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.8.13
|
||||
|
||||
## 0.0.108
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.8.12
|
||||
|
||||
## 0.0.107
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.8.11
|
||||
|
||||
## 0.0.106
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@llamaindex/waku-query-engine-test",
|
||||
"version": "0.0.106",
|
||||
"version": "0.0.110",
|
||||
"type": "module",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
|
||||
@@ -1,5 +1,25 @@
|
||||
# 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
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -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);
|
||||
@@ -1,15 +1,15 @@
|
||||
{
|
||||
"name": "@llamaindex/examples",
|
||||
"private": true,
|
||||
"version": "0.0.14",
|
||||
"version": "0.0.16",
|
||||
"dependencies": {
|
||||
"@aws-crypto/sha256-js": "^5.2.0",
|
||||
"@azure/cosmos": "^4.1.1",
|
||||
"@azure/identity": "^4.4.1",
|
||||
"@datastax/astra-db-ts": "^1.4.1",
|
||||
"@llamaindex/core": "^0.4.7",
|
||||
"@llamaindex/readers": "^1.0.8",
|
||||
"@llamaindex/workflow": "^0.0.4",
|
||||
"@llamaindex/core": "^0.4.10",
|
||||
"@llamaindex/readers": "^1.0.11",
|
||||
"@llamaindex/workflow": "^0.0.6",
|
||||
"@notionhq/client": "^2.2.15",
|
||||
"@pinecone-database/pinecone": "^3.0.2",
|
||||
"@vercel/postgres": "^0.10.0",
|
||||
@@ -18,7 +18,7 @@
|
||||
"commander": "^12.1.0",
|
||||
"dotenv": "^16.4.5",
|
||||
"js-tiktoken": "^1.0.14",
|
||||
"llamaindex": "^0.8.10",
|
||||
"llamaindex": "^0.8.13",
|
||||
"mongodb": "^6.7.0",
|
||||
"pathe": "^1.1.2",
|
||||
"postgres": "^3.4.4"
|
||||
|
||||
@@ -1,5 +1,30 @@
|
||||
# @llamaindex/autotool
|
||||
|
||||
## 5.0.14
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [630b425]
|
||||
- llamaindex@0.8.14
|
||||
|
||||
## 5.0.13
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.8.13
|
||||
|
||||
## 5.0.12
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.8.12
|
||||
|
||||
## 5.0.11
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.8.11
|
||||
|
||||
## 5.0.10
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,5 +1,34 @@
|
||||
# @llamaindex/autotool-01-node-example
|
||||
|
||||
## 0.0.57
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [630b425]
|
||||
- llamaindex@0.8.14
|
||||
- @llamaindex/autotool@5.0.14
|
||||
|
||||
## 0.0.56
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.8.13
|
||||
- @llamaindex/autotool@5.0.13
|
||||
|
||||
## 0.0.55
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.8.12
|
||||
- @llamaindex/autotool@5.0.12
|
||||
|
||||
## 0.0.54
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.8.11
|
||||
- @llamaindex/autotool@5.0.11
|
||||
|
||||
## 0.0.53
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -13,5 +13,5 @@
|
||||
"scripts": {
|
||||
"start": "node --import tsx --import @llamaindex/autotool/node ./src/index.ts"
|
||||
},
|
||||
"version": "0.0.53"
|
||||
"version": "0.0.57"
|
||||
}
|
||||
|
||||
@@ -1,5 +1,34 @@
|
||||
# @llamaindex/autotool-02-next-example
|
||||
|
||||
## 0.1.101
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [630b425]
|
||||
- llamaindex@0.8.14
|
||||
- @llamaindex/autotool@5.0.14
|
||||
|
||||
## 0.1.100
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.8.13
|
||||
- @llamaindex/autotool@5.0.13
|
||||
|
||||
## 0.1.99
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.8.12
|
||||
- @llamaindex/autotool@5.0.12
|
||||
|
||||
## 0.1.98
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.8.11
|
||||
- @llamaindex/autotool@5.0.11
|
||||
|
||||
## 0.1.97
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "@llamaindex/autotool-02-next-example",
|
||||
"private": true,
|
||||
"version": "0.1.97",
|
||||
"version": "0.1.101",
|
||||
"scripts": {
|
||||
"dev": "next dev",
|
||||
"build": "next build",
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "@llamaindex/autotool",
|
||||
"type": "module",
|
||||
"version": "5.0.10",
|
||||
"version": "5.0.14",
|
||||
"description": "auto transpile your JS function to LLM Agent compatible",
|
||||
"files": [
|
||||
"dist",
|
||||
|
||||
@@ -1,5 +1,27 @@
|
||||
# @llamaindex/cloud
|
||||
|
||||
## 2.0.10
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [a7b0ac3]
|
||||
- Updated dependencies [c69605f]
|
||||
- @llamaindex/core@0.4.10
|
||||
|
||||
## 2.0.9
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [7ae6eaa]
|
||||
- @llamaindex/core@0.4.9
|
||||
|
||||
## 2.0.8
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [f865c98]
|
||||
- @llamaindex/core@0.4.8
|
||||
|
||||
## 2.0.7
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@llamaindex/cloud",
|
||||
"version": "2.0.7",
|
||||
"version": "2.0.10",
|
||||
"type": "module",
|
||||
"license": "MIT",
|
||||
"scripts": {
|
||||
|
||||
@@ -1,5 +1,27 @@
|
||||
# @llamaindex/community
|
||||
|
||||
## 0.0.68
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [a7b0ac3]
|
||||
- Updated dependencies [c69605f]
|
||||
- @llamaindex/core@0.4.10
|
||||
|
||||
## 0.0.67
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [7ae6eaa]
|
||||
- @llamaindex/core@0.4.9
|
||||
|
||||
## 0.0.66
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [f865c98]
|
||||
- @llamaindex/core@0.4.8
|
||||
|
||||
## 0.0.65
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "@llamaindex/community",
|
||||
"description": "Community package for LlamaIndexTS",
|
||||
"version": "0.0.65",
|
||||
"version": "0.0.68",
|
||||
"type": "module",
|
||||
"types": "dist/type/index.d.ts",
|
||||
"main": "dist/cjs/index.js",
|
||||
|
||||
@@ -1,5 +1,24 @@
|
||||
# @llamaindex/core
|
||||
|
||||
## 0.4.10
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- a7b0ac3: fix: update tool call llm type
|
||||
- c69605f: feat: add async support to BaseChatStore and BaseChatStoreMemory
|
||||
|
||||
## 0.4.9
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- 7ae6eaa: feat: allow pass `additionalChatOptions` to agent
|
||||
|
||||
## 0.4.8
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- f865c98: feat: async get message on chat store
|
||||
|
||||
## 0.4.7
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "@llamaindex/core",
|
||||
"type": "module",
|
||||
"version": "0.4.7",
|
||||
"version": "0.4.10",
|
||||
"description": "LlamaIndex Core Module",
|
||||
"exports": {
|
||||
"./agent": {
|
||||
|
||||
@@ -106,11 +106,17 @@ export type AgentRunnerParams<
|
||||
>
|
||||
? AdditionalMessageOptions
|
||||
: never,
|
||||
AdditionalChatOptions extends object = object,
|
||||
> = {
|
||||
llm: AI;
|
||||
chatHistory: ChatMessage<AdditionalMessageOptions>[];
|
||||
systemPrompt: MessageContent | null;
|
||||
runner: AgentWorker<AI, Store, AdditionalMessageOptions>;
|
||||
runner: AgentWorker<
|
||||
AI,
|
||||
Store,
|
||||
AdditionalMessageOptions,
|
||||
AdditionalChatOptions
|
||||
>;
|
||||
tools:
|
||||
| BaseToolWithCall[]
|
||||
| ((query: MessageContent) => Promise<BaseToolWithCall[]>);
|
||||
@@ -125,6 +131,7 @@ export type AgentParamsBase<
|
||||
>
|
||||
? AdditionalMessageOptions
|
||||
: never,
|
||||
AdditionalChatOptions extends object = object,
|
||||
> =
|
||||
| {
|
||||
llm?: AI;
|
||||
@@ -132,6 +139,7 @@ export type AgentParamsBase<
|
||||
systemPrompt?: MessageContent;
|
||||
verbose?: boolean;
|
||||
tools: BaseToolWithCall[];
|
||||
additionalChatOptions?: AdditionalChatOptions;
|
||||
}
|
||||
| {
|
||||
llm?: AI;
|
||||
@@ -139,6 +147,7 @@ export type AgentParamsBase<
|
||||
systemPrompt?: MessageContent;
|
||||
verbose?: boolean;
|
||||
toolRetriever: ObjectRetriever<BaseToolWithCall>;
|
||||
additionalChatOptions?: AdditionalChatOptions;
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -153,21 +162,36 @@ export abstract class AgentWorker<
|
||||
>
|
||||
? AdditionalMessageOptions
|
||||
: never,
|
||||
AdditionalChatOptions extends object = object,
|
||||
> {
|
||||
#taskSet = new Set<TaskStep<AI, Store, AdditionalMessageOptions>>();
|
||||
abstract taskHandler: TaskHandler<AI, Store, AdditionalMessageOptions>;
|
||||
#taskSet = new Set<
|
||||
TaskStep<AI, Store, AdditionalMessageOptions, AdditionalChatOptions>
|
||||
>();
|
||||
abstract taskHandler: TaskHandler<
|
||||
AI,
|
||||
Store,
|
||||
AdditionalMessageOptions,
|
||||
AdditionalChatOptions
|
||||
>;
|
||||
|
||||
public createTask(
|
||||
query: MessageContent,
|
||||
context: AgentTaskContext<AI, Store, AdditionalMessageOptions>,
|
||||
): ReadableStream<TaskStepOutput<AI, Store, AdditionalMessageOptions>> {
|
||||
context: AgentTaskContext<
|
||||
AI,
|
||||
Store,
|
||||
AdditionalMessageOptions,
|
||||
AdditionalChatOptions
|
||||
>,
|
||||
): ReadableStream<
|
||||
TaskStepOutput<AI, Store, AdditionalMessageOptions, AdditionalChatOptions>
|
||||
> {
|
||||
context.store.messages.push({
|
||||
role: "user",
|
||||
content: query,
|
||||
});
|
||||
const taskOutputStream = createTaskOutputStream(this.taskHandler, context);
|
||||
return new ReadableStream<
|
||||
TaskStepOutput<AI, Store, AdditionalMessageOptions>
|
||||
TaskStepOutput<AI, Store, AdditionalMessageOptions, AdditionalChatOptions>
|
||||
>({
|
||||
start: async (controller) => {
|
||||
for await (const stepOutput of taskOutputStream) {
|
||||
@@ -176,7 +200,8 @@ export abstract class AgentWorker<
|
||||
let currentStep: TaskStep<
|
||||
AI,
|
||||
Store,
|
||||
AdditionalMessageOptions
|
||||
AdditionalMessageOptions,
|
||||
AdditionalChatOptions
|
||||
> | null = stepOutput.taskStep;
|
||||
while (currentStep) {
|
||||
this.#taskSet.delete(currentStep);
|
||||
@@ -227,6 +252,7 @@ export abstract class AgentRunner<
|
||||
>
|
||||
? AdditionalMessageOptions
|
||||
: never,
|
||||
AdditionalChatOptions extends object = object,
|
||||
> extends BaseChatEngine {
|
||||
readonly #llm: AI;
|
||||
readonly #tools:
|
||||
@@ -234,7 +260,12 @@ export abstract class AgentRunner<
|
||||
| ((query: MessageContent) => Promise<BaseToolWithCall[]>);
|
||||
readonly #systemPrompt: MessageContent | null = null;
|
||||
#chatHistory: ChatMessage<AdditionalMessageOptions>[];
|
||||
readonly #runner: AgentWorker<AI, Store, AdditionalMessageOptions>;
|
||||
readonly #runner: AgentWorker<
|
||||
AI,
|
||||
Store,
|
||||
AdditionalMessageOptions,
|
||||
AdditionalChatOptions
|
||||
>;
|
||||
readonly #verbose: boolean;
|
||||
|
||||
// create extra store
|
||||
@@ -245,7 +276,7 @@ export abstract class AgentRunner<
|
||||
}
|
||||
|
||||
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 tools = await getTools(lastMessage);
|
||||
if (!stream) {
|
||||
@@ -253,8 +284,9 @@ export abstract class AgentRunner<
|
||||
stream,
|
||||
tools,
|
||||
messages: [...step.context.store.messages],
|
||||
additionalChatOptions,
|
||||
});
|
||||
await stepTools<LLM>({
|
||||
await stepTools({
|
||||
response,
|
||||
tools,
|
||||
step,
|
||||
@@ -265,6 +297,7 @@ export abstract class AgentRunner<
|
||||
stream,
|
||||
tools,
|
||||
messages: [...step.context.store.messages],
|
||||
additionalChatOptions,
|
||||
});
|
||||
await stepToolsStreaming<LLM>({
|
||||
response,
|
||||
@@ -276,7 +309,12 @@ export abstract class AgentRunner<
|
||||
};
|
||||
|
||||
protected constructor(
|
||||
params: AgentRunnerParams<AI, Store, AdditionalMessageOptions>,
|
||||
params: AgentRunnerParams<
|
||||
AI,
|
||||
Store,
|
||||
AdditionalMessageOptions,
|
||||
AdditionalChatOptions
|
||||
>,
|
||||
) {
|
||||
super();
|
||||
const { llm, chatHistory, systemPrompt, runner, tools, verbose } = params;
|
||||
@@ -330,6 +368,7 @@ export abstract class AgentRunner<
|
||||
stream: boolean = false,
|
||||
verbose: boolean | undefined = undefined,
|
||||
chatHistory?: ChatMessage<AdditionalMessageOptions>[],
|
||||
additionalChatOptions?: AdditionalChatOptions,
|
||||
) {
|
||||
const initialMessages = [...(chatHistory ?? this.#chatHistory)];
|
||||
if (this.#systemPrompt !== null) {
|
||||
@@ -348,6 +387,7 @@ export abstract class AgentRunner<
|
||||
stream,
|
||||
toolCallCount: 0,
|
||||
llm: this.#llm,
|
||||
additionalChatOptions: additionalChatOptions ?? {},
|
||||
getTools: (message) => this.getTools(message),
|
||||
store: {
|
||||
...this.createStore(),
|
||||
@@ -365,13 +405,29 @@ export abstract class AgentRunner<
|
||||
});
|
||||
}
|
||||
|
||||
async chat(params: NonStreamingChatEngineParams): Promise<EngineResponse>;
|
||||
async chat(
|
||||
params: StreamingChatEngineParams,
|
||||
params: NonStreamingChatEngineParams<
|
||||
AdditionalMessageOptions,
|
||||
AdditionalChatOptions
|
||||
>,
|
||||
): Promise<EngineResponse>;
|
||||
async chat(
|
||||
params: StreamingChatEngineParams<
|
||||
AdditionalMessageOptions,
|
||||
AdditionalChatOptions
|
||||
>,
|
||||
): Promise<ReadableStream<EngineResponse>>;
|
||||
@wrapEventCaller
|
||||
async chat(
|
||||
params: NonStreamingChatEngineParams | StreamingChatEngineParams,
|
||||
params:
|
||||
| NonStreamingChatEngineParams<
|
||||
AdditionalMessageOptions,
|
||||
AdditionalChatOptions
|
||||
>
|
||||
| StreamingChatEngineParams<
|
||||
AdditionalMessageOptions,
|
||||
AdditionalChatOptions
|
||||
>,
|
||||
): Promise<EngineResponse | ReadableStream<EngineResponse>> {
|
||||
let chatHistory: ChatMessage<AdditionalMessageOptions>[] = [];
|
||||
|
||||
@@ -388,6 +444,7 @@ export abstract class AgentRunner<
|
||||
!!params.stream,
|
||||
false,
|
||||
chatHistory,
|
||||
params.chatOptions,
|
||||
);
|
||||
for await (const stepOutput of task) {
|
||||
// update chat history for each round
|
||||
|
||||
@@ -4,24 +4,66 @@ import { ObjectRetriever } from "../objects";
|
||||
import { AgentRunner, AgentWorker, type AgentParamsBase } from "./base.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[];
|
||||
};
|
||||
|
||||
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>;
|
||||
};
|
||||
|
||||
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> {
|
||||
taskHandler = AgentRunner.defaultTaskHandler;
|
||||
}
|
||||
|
||||
export class LLMAgent extends AgentRunner<LLM> {
|
||||
constructor(params: LLMAgentParams) {
|
||||
constructor(params: LLMAgentParams<LLM>) {
|
||||
validateAgentParams(params);
|
||||
const llm = params.llm ?? (Settings.llm ? (Settings.llm as LLM) : null);
|
||||
if (!llm)
|
||||
|
||||
@@ -19,6 +19,7 @@ export type AgentTaskContext<
|
||||
>
|
||||
? AdditionalMessageOptions
|
||||
: never,
|
||||
AdditionalChatOptions extends object = object,
|
||||
> = {
|
||||
readonly stream: boolean;
|
||||
readonly toolCallCount: number;
|
||||
@@ -26,6 +27,7 @@ export type AgentTaskContext<
|
||||
readonly getTools: (
|
||||
input: MessageContent,
|
||||
) => BaseToolWithCall[] | Promise<BaseToolWithCall[]>;
|
||||
readonly additionalChatOptions: Partial<AdditionalChatOptions>;
|
||||
shouldContinue: (
|
||||
taskStep: Readonly<TaskStep<Model, Store, AdditionalMessageOptions>>,
|
||||
) => boolean;
|
||||
@@ -45,13 +47,26 @@ export type TaskStep<
|
||||
>
|
||||
? AdditionalMessageOptions
|
||||
: never,
|
||||
AdditionalChatOptions extends object = object,
|
||||
> = {
|
||||
id: UUID;
|
||||
context: AgentTaskContext<Model, Store, AdditionalMessageOptions>;
|
||||
context: AgentTaskContext<
|
||||
Model,
|
||||
Store,
|
||||
AdditionalMessageOptions,
|
||||
AdditionalChatOptions
|
||||
>;
|
||||
|
||||
// linked list
|
||||
prevStep: TaskStep<Model, Store, AdditionalMessageOptions> | null;
|
||||
nextSteps: Set<TaskStep<Model, Store, AdditionalMessageOptions>>;
|
||||
prevStep: TaskStep<
|
||||
Model,
|
||||
Store,
|
||||
AdditionalMessageOptions,
|
||||
AdditionalChatOptions
|
||||
> | null;
|
||||
nextSteps: Set<
|
||||
TaskStep<Model, Store, AdditionalMessageOptions, AdditionalChatOptions>
|
||||
>;
|
||||
};
|
||||
|
||||
export type TaskStepOutput<
|
||||
@@ -63,8 +78,14 @@ export type TaskStepOutput<
|
||||
>
|
||||
? AdditionalMessageOptions
|
||||
: never,
|
||||
AdditionalChatOptions extends object = object,
|
||||
> = {
|
||||
taskStep: TaskStep<Model, Store, AdditionalMessageOptions>;
|
||||
taskStep: TaskStep<
|
||||
Model,
|
||||
Store,
|
||||
AdditionalMessageOptions,
|
||||
AdditionalChatOptions
|
||||
>;
|
||||
// output shows the response to the user
|
||||
output:
|
||||
| ChatResponse<AdditionalMessageOptions>
|
||||
@@ -81,10 +102,16 @@ export type TaskHandler<
|
||||
>
|
||||
? AdditionalMessageOptions
|
||||
: never,
|
||||
AdditionalChatOptions extends object = object,
|
||||
> = (
|
||||
step: TaskStep<Model, Store, AdditionalMessageOptions>,
|
||||
step: TaskStep<Model, Store, AdditionalMessageOptions, AdditionalChatOptions>,
|
||||
enqueueOutput: (
|
||||
taskOutput: TaskStepOutput<Model, Store, AdditionalMessageOptions>,
|
||||
taskOutput: TaskStepOutput<
|
||||
Model,
|
||||
Store,
|
||||
AdditionalMessageOptions,
|
||||
AdditionalChatOptions
|
||||
>,
|
||||
) => void,
|
||||
) => Promise<void>;
|
||||
|
||||
|
||||
@@ -16,14 +16,18 @@ export interface BaseChatEngineParams<
|
||||
|
||||
export interface StreamingChatEngineParams<
|
||||
AdditionalMessageOptions extends object = object,
|
||||
AdditionalChatOptions extends object = object,
|
||||
> extends BaseChatEngineParams<AdditionalMessageOptions> {
|
||||
stream: true;
|
||||
chatOptions?: AdditionalChatOptions;
|
||||
}
|
||||
|
||||
export interface NonStreamingChatEngineParams<
|
||||
AdditionalMessageOptions extends object = object,
|
||||
AdditionalChatOptions extends object = object,
|
||||
> extends BaseChatEngineParams<AdditionalMessageOptions> {
|
||||
stream?: false;
|
||||
chatOptions?: AdditionalChatOptions;
|
||||
}
|
||||
|
||||
export abstract class BaseChatEngine {
|
||||
|
||||
@@ -66,6 +66,8 @@ export abstract class BaseLLM<
|
||||
|
||||
export abstract class ToolCallLLM<
|
||||
AdditionalChatOptions extends object = object,
|
||||
> extends BaseLLM<AdditionalChatOptions, ToolCallLLMMessageOptions> {
|
||||
AdditionalMessageOptions extends
|
||||
ToolCallLLMMessageOptions = ToolCallLLMMessageOptions,
|
||||
> extends BaseLLM<AdditionalChatOptions, AdditionalMessageOptions> {
|
||||
abstract supportToolCall: boolean;
|
||||
}
|
||||
|
||||
@@ -65,19 +65,21 @@ export abstract class BaseChatStoreMemory<
|
||||
super();
|
||||
}
|
||||
|
||||
getAllMessages(): ChatMessage<AdditionalMessageOptions>[] {
|
||||
getAllMessages():
|
||||
| ChatMessage<AdditionalMessageOptions>[]
|
||||
| Promise<ChatMessage<AdditionalMessageOptions>[]> {
|
||||
return this.chatStore.getMessages(this.chatStoreKey);
|
||||
}
|
||||
|
||||
put(messages: ChatMessage<AdditionalMessageOptions>) {
|
||||
put(messages: ChatMessage<AdditionalMessageOptions>): void | Promise<void> {
|
||||
this.chatStore.addMessage(this.chatStoreKey, messages);
|
||||
}
|
||||
|
||||
set(messages: ChatMessage<AdditionalMessageOptions>[]) {
|
||||
set(messages: ChatMessage<AdditionalMessageOptions>[]): void | Promise<void> {
|
||||
this.chatStore.setMessages(this.chatStoreKey, messages);
|
||||
}
|
||||
|
||||
reset() {
|
||||
reset(): void | Promise<void> {
|
||||
this.chatStore.deleteMessages(this.chatStoreKey);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -33,11 +33,11 @@ export class ChatMemoryBuffer<
|
||||
}
|
||||
}
|
||||
|
||||
getMessages(
|
||||
async getMessages(
|
||||
transientMessages?: ChatMessage<AdditionalMessageOptions>[] | undefined,
|
||||
initialTokenCount: number = 0,
|
||||
) {
|
||||
const messages = this.getAllMessages();
|
||||
const messages = await this.getAllMessages();
|
||||
|
||||
if (initialTokenCount > this.tokenLimit) {
|
||||
throw new Error("Initial token count exceeds token limit");
|
||||
|
||||
@@ -7,7 +7,11 @@ export abstract class BaseChatStore<
|
||||
key: string,
|
||||
messages: ChatMessage<AdditionalMessageOptions>[],
|
||||
): void;
|
||||
abstract getMessages(key: string): ChatMessage<AdditionalMessageOptions>[];
|
||||
abstract getMessages(
|
||||
key: string,
|
||||
):
|
||||
| ChatMessage<AdditionalMessageOptions>[]
|
||||
| Promise<ChatMessage<AdditionalMessageOptions>[]>;
|
||||
abstract addMessage(
|
||||
key: string,
|
||||
message: ChatMessage<AdditionalMessageOptions>,
|
||||
@@ -15,5 +19,7 @@ export abstract class BaseChatStore<
|
||||
): void;
|
||||
abstract deleteMessages(key: string): void;
|
||||
abstract deleteMessage(key: string, idx: number): void;
|
||||
abstract getKeys(): IterableIterator<string>;
|
||||
abstract getKeys():
|
||||
| IterableIterator<string>
|
||||
| Promise<IterableIterator<string>>;
|
||||
}
|
||||
|
||||
@@ -19,7 +19,7 @@ describe("ChatMemoryBuffer", () => {
|
||||
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[] = [
|
||||
{ role: "user", content: "Hello" },
|
||||
{ role: "assistant", content: "Hi there!" },
|
||||
@@ -30,11 +30,11 @@ describe("ChatMemoryBuffer", () => {
|
||||
chatHistory: messages,
|
||||
});
|
||||
|
||||
const result = buffer.getMessages();
|
||||
const result = await buffer.getMessages();
|
||||
expect(result).toEqual(messages);
|
||||
});
|
||||
|
||||
test("getMessages truncates messages when over token limit", () => {
|
||||
test("getMessages truncates messages when over token limit", async () => {
|
||||
const messages: ChatMessage[] = [
|
||||
{ role: "user", content: "This is a long message" },
|
||||
{ role: "assistant", content: "This is also a long reply" },
|
||||
@@ -45,11 +45,11 @@ describe("ChatMemoryBuffer", () => {
|
||||
chatHistory: messages,
|
||||
});
|
||||
|
||||
const result = buffer.getMessages();
|
||||
const result = await buffer.getMessages();
|
||||
expect(result).toEqual([{ role: "user", content: "Short" }]);
|
||||
});
|
||||
|
||||
test("getMessages handles input messages", () => {
|
||||
test("getMessages handles input messages", async () => {
|
||||
const storedMessages: ChatMessage[] = [
|
||||
{ role: "user", content: "Hello" },
|
||||
{ role: "assistant", content: "Hi there!" },
|
||||
@@ -62,13 +62,13 @@ describe("ChatMemoryBuffer", () => {
|
||||
const inputMessages: ChatMessage[] = [
|
||||
{ role: "user", content: "New message" },
|
||||
];
|
||||
const result = buffer.getMessages(inputMessages);
|
||||
const result = await buffer.getMessages(inputMessages);
|
||||
expect(result).toEqual([...inputMessages, ...storedMessages]);
|
||||
});
|
||||
|
||||
test("getMessages throws error when initial token count exceeds limit", () => {
|
||||
const buffer = new ChatMemoryBuffer({ tokenLimit: 10 });
|
||||
expect(() => buffer.getMessages(undefined, 20)).toThrow(
|
||||
expect(async () => buffer.getMessages(undefined, 20)).rejects.toThrow(
|
||||
"Initial token count exceeds token limit",
|
||||
);
|
||||
});
|
||||
|
||||
@@ -1,5 +1,30 @@
|
||||
# @llamaindex/experimental
|
||||
|
||||
## 0.0.126
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [630b425]
|
||||
- llamaindex@0.8.14
|
||||
|
||||
## 0.0.125
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.8.13
|
||||
|
||||
## 0.0.124
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.8.12
|
||||
|
||||
## 0.0.123
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.8.11
|
||||
|
||||
## 0.0.122
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "@llamaindex/experimental",
|
||||
"description": "Experimental package for LlamaIndexTS",
|
||||
"version": "0.0.122",
|
||||
"version": "0.0.126",
|
||||
"type": "module",
|
||||
"types": "dist/type/index.d.ts",
|
||||
"main": "dist/cjs/index.js",
|
||||
|
||||
@@ -1,5 +1,73 @@
|
||||
# llamaindex
|
||||
|
||||
## 0.8.14
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- 630b425: feat: add Azure CosmosDB NoSql Chat store
|
||||
|
||||
## 0.8.13
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [a7b0ac3]
|
||||
- Updated dependencies [a7b0ac3]
|
||||
- Updated dependencies [c69605f]
|
||||
- @llamaindex/anthropic@0.0.19
|
||||
- @llamaindex/core@0.4.10
|
||||
- @llamaindex/cloud@2.0.10
|
||||
- @llamaindex/node-parser@0.0.11
|
||||
- @llamaindex/clip@0.0.19
|
||||
- @llamaindex/deepinfra@0.0.19
|
||||
- @llamaindex/huggingface@0.0.19
|
||||
- @llamaindex/ollama@0.0.26
|
||||
- @llamaindex/openai@0.1.35
|
||||
- @llamaindex/portkey-ai@0.0.19
|
||||
- @llamaindex/replicate@0.0.19
|
||||
- @llamaindex/readers@1.0.11
|
||||
- @llamaindex/groq@0.0.34
|
||||
- @llamaindex/vllm@0.0.5
|
||||
|
||||
## 0.8.12
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [7ae6eaa]
|
||||
- @llamaindex/core@0.4.9
|
||||
- @llamaindex/openai@0.1.34
|
||||
- @llamaindex/cloud@2.0.9
|
||||
- @llamaindex/node-parser@0.0.10
|
||||
- @llamaindex/anthropic@0.0.18
|
||||
- @llamaindex/clip@0.0.18
|
||||
- @llamaindex/deepinfra@0.0.18
|
||||
- @llamaindex/huggingface@0.0.18
|
||||
- @llamaindex/ollama@0.0.25
|
||||
- @llamaindex/portkey-ai@0.0.18
|
||||
- @llamaindex/replicate@0.0.18
|
||||
- @llamaindex/readers@1.0.10
|
||||
- @llamaindex/groq@0.0.33
|
||||
- @llamaindex/vllm@0.0.4
|
||||
|
||||
## 0.8.11
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [f865c98]
|
||||
- @llamaindex/core@0.4.8
|
||||
- @llamaindex/cloud@2.0.8
|
||||
- @llamaindex/node-parser@0.0.9
|
||||
- @llamaindex/anthropic@0.0.17
|
||||
- @llamaindex/clip@0.0.17
|
||||
- @llamaindex/deepinfra@0.0.17
|
||||
- @llamaindex/huggingface@0.0.17
|
||||
- @llamaindex/ollama@0.0.24
|
||||
- @llamaindex/openai@0.1.33
|
||||
- @llamaindex/portkey-ai@0.0.17
|
||||
- @llamaindex/replicate@0.0.17
|
||||
- @llamaindex/readers@1.0.9
|
||||
- @llamaindex/groq@0.0.32
|
||||
- @llamaindex/vllm@0.0.3
|
||||
|
||||
## 0.8.10
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "llamaindex",
|
||||
"version": "0.8.10",
|
||||
"version": "0.8.14",
|
||||
"license": "MIT",
|
||||
"type": "module",
|
||||
"keywords": [
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
@@ -2,6 +2,7 @@ export * from "@llamaindex/core/storage/chat-store";
|
||||
export * from "@llamaindex/core/storage/doc-store";
|
||||
export * from "@llamaindex/core/storage/index-store";
|
||||
export * from "@llamaindex/core/storage/kv-store";
|
||||
export * from "./chatStore/AzureCosmosNoSqlChatStore.js";
|
||||
export * from "./docStore/AzureCosmosNoSqlDocumentStore.js";
|
||||
export { PostgresDocumentStore } from "./docStore/PostgresDocumentStore.js";
|
||||
export { SimpleDocumentStore } from "./docStore/SimpleDocumentStore.js";
|
||||
|
||||
@@ -1,5 +1,27 @@
|
||||
# @llamaindex/node-parser
|
||||
|
||||
## 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
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@llamaindex/node-parser",
|
||||
"version": "0.0.8",
|
||||
"version": "0.0.11",
|
||||
"description": "Node parser for LlamaIndex",
|
||||
"type": "module",
|
||||
"exports": {
|
||||
|
||||
@@ -1,5 +1,28 @@
|
||||
# @llamaindex/anthropic
|
||||
|
||||
## 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
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "@llamaindex/anthropic",
|
||||
"description": "Anthropic Adapter for LlamaIndex",
|
||||
"version": "0.0.16",
|
||||
"version": "0.0.19",
|
||||
"type": "module",
|
||||
"main": "./dist/index.cjs",
|
||||
"module": "./dist/index.js",
|
||||
@@ -33,7 +33,7 @@
|
||||
"bunchee": "5.6.1"
|
||||
},
|
||||
"dependencies": {
|
||||
"@anthropic-ai/sdk": "0.27.1",
|
||||
"@anthropic-ai/sdk": "0.32.1",
|
||||
"@llamaindex/core": "workspace:*",
|
||||
"@llamaindex/env": "workspace:*",
|
||||
"remeda": "^2.12.0"
|
||||
|
||||
@@ -11,7 +11,7 @@ import { Settings } from "@llamaindex/core/global";
|
||||
import type { EngineResponse } from "@llamaindex/core/schema";
|
||||
import { Anthropic } from "./llm.js";
|
||||
|
||||
export type AnthropicAgentParams = LLMAgentParams;
|
||||
export type AnthropicAgentParams = LLMAgentParams<Anthropic>;
|
||||
|
||||
export class AnthropicAgentWorker extends LLMAgentWorker {}
|
||||
|
||||
|
||||
@@ -1,5 +1,9 @@
|
||||
import type { ClientOptions } 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 {
|
||||
TextBlock,
|
||||
TextBlockParam,
|
||||
@@ -8,6 +12,7 @@ import type {
|
||||
ImageBlockParam,
|
||||
MessageCreateParamsNonStreaming,
|
||||
MessageParam,
|
||||
Model,
|
||||
Tool,
|
||||
ToolResultBlockParam,
|
||||
ToolUseBlock,
|
||||
@@ -75,6 +80,9 @@ export const ALL_AVAILABLE_ANTHROPIC_LEGACY_MODELS = {
|
||||
"claude-2.1": {
|
||||
contextWindow: 200000,
|
||||
},
|
||||
"claude-2.0": {
|
||||
contextWindow: 100000,
|
||||
},
|
||||
"claude-instant-1.2": {
|
||||
contextWindow: 100000,
|
||||
},
|
||||
@@ -82,18 +90,30 @@ export const ALL_AVAILABLE_ANTHROPIC_LEGACY_MODELS = {
|
||||
|
||||
export const ALL_AVAILABLE_V3_MODELS = {
|
||||
"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-20240229": { contextWindow: 200000 },
|
||||
"claude-3-haiku": { contextWindow: 200000 },
|
||||
"claude-3-haiku-20240307": { contextWindow: 200000 },
|
||||
};
|
||||
|
||||
export const ALL_AVAILABLE_V3_5_MODELS = {
|
||||
"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 = {
|
||||
...ALL_AVAILABLE_ANTHROPIC_LEGACY_MODELS,
|
||||
...ALL_AVAILABLE_V3_MODELS,
|
||||
...ALL_AVAILABLE_V3_5_MODELS,
|
||||
} satisfies {
|
||||
[key in Model]: { contextWindow: number };
|
||||
};
|
||||
|
||||
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 };
|
||||
|
||||
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
|
||||
model: keyof typeof ALL_AVAILABLE_ANTHROPIC_MODELS;
|
||||
model: keyof typeof ALL_AVAILABLE_ANTHROPIC_MODELS | ({} & string);
|
||||
temperature: number;
|
||||
topP: number;
|
||||
maxTokens?: number | undefined;
|
||||
@@ -147,7 +173,12 @@ export class Anthropic extends ToolCallLLM<AnthropicAdditionalChatOptions> {
|
||||
temperature: this.temperature,
|
||||
topP: this.topP,
|
||||
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,
|
||||
};
|
||||
}
|
||||
@@ -291,56 +322,74 @@ export class Anthropic extends ToolCallLLM<AnthropicAdditionalChatOptions> {
|
||||
chat(
|
||||
params: LLMChatParamsStreaming<
|
||||
AnthropicAdditionalChatOptions,
|
||||
ToolCallLLMMessageOptions
|
||||
AnthropicToolCallLLMMessageOptions
|
||||
>,
|
||||
): Promise<AsyncIterable<ChatResponseChunk<ToolCallLLMMessageOptions>>>;
|
||||
): Promise<
|
||||
AsyncIterable<ChatResponseChunk<AnthropicToolCallLLMMessageOptions>>
|
||||
>;
|
||||
chat(
|
||||
params: LLMChatParamsNonStreaming<
|
||||
AnthropicAdditionalChatOptions,
|
||||
ToolCallLLMMessageOptions
|
||||
AnthropicToolCallLLMMessageOptions
|
||||
>,
|
||||
): Promise<ChatResponse<ToolCallLLMMessageOptions>>;
|
||||
): Promise<ChatResponse<AnthropicToolCallLLMMessageOptions>>;
|
||||
@wrapLLMEvent
|
||||
async chat(
|
||||
params:
|
||||
| LLMChatParamsNonStreaming<
|
||||
AnthropicAdditionalChatOptions,
|
||||
ToolCallLLMMessageOptions
|
||||
AnthropicToolCallLLMMessageOptions
|
||||
>
|
||||
| LLMChatParamsStreaming<
|
||||
AnthropicAdditionalChatOptions,
|
||||
ToolCallLLMMessageOptions
|
||||
AnthropicToolCallLLMMessageOptions
|
||||
>,
|
||||
): Promise<
|
||||
| ChatResponse<ToolCallLLMMessageOptions>
|
||||
| AsyncIterable<ChatResponseChunk<ToolCallLLMMessageOptions>>
|
||||
| ChatResponse<AnthropicToolCallLLMMessageOptions>
|
||||
| AsyncIterable<ChatResponseChunk<AnthropicToolCallLLMMessageOptions>>
|
||||
> {
|
||||
let { messages } = params;
|
||||
|
||||
const { stream, tools } = params;
|
||||
|
||||
let systemPrompt: string | null = null;
|
||||
let systemPrompt: string | Array<BetaTextBlockParam> | null = null;
|
||||
|
||||
const systemMessages = messages.filter(
|
||||
(message) => message.role === "system",
|
||||
);
|
||||
|
||||
if (systemMessages.length > 0) {
|
||||
systemPrompt = systemMessages
|
||||
.map((message) => message.content)
|
||||
.join("\n");
|
||||
systemPrompt = systemMessages.map((message) =>
|
||||
message.options && "cache_control" in message.options
|
||||
? {
|
||||
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");
|
||||
}
|
||||
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
|
||||
if (stream) {
|
||||
if (tools) {
|
||||
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) {
|
||||
const params: MessageCreateParamsNonStreaming = {
|
||||
@@ -378,7 +427,10 @@ export class Anthropic extends ToolCallLLM<AnthropicAdditionalChatOptions> {
|
||||
toolCall: toolUseBlock.map((block) => ({
|
||||
id: block.id,
|
||||
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(
|
||||
messages: ChatMessage<ToolCallLLMMessageOptions>[],
|
||||
systemPrompt?: string | null,
|
||||
): AsyncIterable<ChatResponseChunk<ToolCallLLMMessageOptions>> {
|
||||
const stream = await this.session.anthropic.messages.create({
|
||||
messages: ChatMessage<AnthropicToolCallLLMMessageOptions>[],
|
||||
systemPrompt: string | Array<BetaTextBlockParam> | null,
|
||||
anthropic: SDKAnthropic,
|
||||
): AsyncIterable<ChatResponseChunk<AnthropicToolCallLLMMessageOptions>> {
|
||||
const stream = await anthropic.messages.create({
|
||||
model: this.getModelName(this.model),
|
||||
messages: this.formatMessages(messages),
|
||||
max_tokens: this.maxTokens ?? 4096,
|
||||
|
||||
@@ -1,5 +1,30 @@
|
||||
# @llamaindex/clip
|
||||
|
||||
## 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
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "@llamaindex/clip",
|
||||
"description": "Clip Embedding Adapter for LlamaIndex",
|
||||
"version": "0.0.16",
|
||||
"version": "0.0.19",
|
||||
"type": "module",
|
||||
"types": "dist/index.d.ts",
|
||||
"main": "dist/index.cjs",
|
||||
|
||||
@@ -1,5 +1,30 @@
|
||||
# @llamaindex/deepinfra
|
||||
|
||||
## 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
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "@llamaindex/deepinfra",
|
||||
"description": "Deepinfra Adapter for LlamaIndex",
|
||||
"version": "0.0.16",
|
||||
"version": "0.0.19",
|
||||
"type": "module",
|
||||
"main": "./dist/index.cjs",
|
||||
"module": "./dist/index.js",
|
||||
|
||||
@@ -1,5 +1,24 @@
|
||||
# @llamaindex/groq
|
||||
|
||||
## 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
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "@llamaindex/groq",
|
||||
"description": "Groq Adapter for LlamaIndex",
|
||||
"version": "0.0.31",
|
||||
"version": "0.0.34",
|
||||
"type": "module",
|
||||
"main": "./dist/index.cjs",
|
||||
"module": "./dist/index.js",
|
||||
|
||||
@@ -1,5 +1,30 @@
|
||||
# @llamaindex/huggingface
|
||||
|
||||
## 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
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "@llamaindex/huggingface",
|
||||
"description": "Huggingface Adapter for LlamaIndex",
|
||||
"version": "0.0.16",
|
||||
"version": "0.0.19",
|
||||
"type": "module",
|
||||
"types": "dist/index.d.ts",
|
||||
"main": "dist/index.cjs",
|
||||
|
||||
@@ -1,5 +1,27 @@
|
||||
# @llamaindex/ollama
|
||||
|
||||
## 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
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "@llamaindex/ollama",
|
||||
"description": "Ollama Adapter for LlamaIndex",
|
||||
"version": "0.0.23",
|
||||
"version": "0.0.26",
|
||||
"type": "module",
|
||||
"main": "./dist/index.cjs",
|
||||
"module": "./dist/index.js",
|
||||
|
||||
@@ -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
|
||||
|
||||
export type OllamaAgentParams = LLMAgentParams & {
|
||||
export type OllamaAgentParams = LLMAgentParams<Ollama> & {
|
||||
model?: string;
|
||||
};
|
||||
|
||||
|
||||
@@ -1,5 +1,28 @@
|
||||
# @llamaindex/openai
|
||||
|
||||
## 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
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "@llamaindex/openai",
|
||||
"description": "OpenAI Adapter for LlamaIndex",
|
||||
"version": "0.1.32",
|
||||
"version": "0.1.35",
|
||||
"type": "module",
|
||||
"main": "./dist/index.cjs",
|
||||
"module": "./dist/index.js",
|
||||
@@ -35,7 +35,6 @@
|
||||
"dependencies": {
|
||||
"@llamaindex/core": "workspace:*",
|
||||
"@llamaindex/env": "workspace:*",
|
||||
"openai": "^4.68.1",
|
||||
"remeda": "^2.12.0"
|
||||
"openai": "^4.68.1"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,11 +4,16 @@ import {
|
||||
type LLMAgentParams,
|
||||
} from "@llamaindex/core/agent";
|
||||
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 {}
|
||||
|
||||
|
||||
@@ -1,5 +1,27 @@
|
||||
# @llamaindex/portkey-ai
|
||||
|
||||
## 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
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "@llamaindex/portkey-ai",
|
||||
"description": "Portkey Adapter for LlamaIndex",
|
||||
"version": "0.0.16",
|
||||
"version": "0.0.19",
|
||||
"type": "module",
|
||||
"main": "./dist/index.cjs",
|
||||
"module": "./dist/index.js",
|
||||
|
||||
@@ -1,5 +1,27 @@
|
||||
# @llamaindex/replicate
|
||||
|
||||
## 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
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "@llamaindex/replicate",
|
||||
"description": "Replicate Adapter for LlamaIndex",
|
||||
"version": "0.0.16",
|
||||
"version": "0.0.19",
|
||||
"type": "module",
|
||||
"main": "./dist/index.cjs",
|
||||
"module": "./dist/index.js",
|
||||
|
||||
@@ -1,5 +1,24 @@
|
||||
# @llamaindex/vllm
|
||||
|
||||
## 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
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "@llamaindex/vllm",
|
||||
"description": "vLLM Adapter for LlamaIndex",
|
||||
"version": "0.0.2",
|
||||
"version": "0.0.5",
|
||||
"type": "module",
|
||||
"main": "./dist/index.cjs",
|
||||
"module": "./dist/index.js",
|
||||
|
||||
@@ -1,5 +1,27 @@
|
||||
# @llamaindex/readers
|
||||
|
||||
## 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
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "@llamaindex/readers",
|
||||
"description": "LlamaIndex Readers",
|
||||
"version": "1.0.8",
|
||||
"version": "1.0.11",
|
||||
"type": "module",
|
||||
"exports": {
|
||||
"./node/hook": "./node/dist/hook.js",
|
||||
|
||||
@@ -1,5 +1,18 @@
|
||||
# @llamaindex/workflow
|
||||
|
||||
## 0.0.6
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- ee20c44: feat(workflow): allow send event with no output
|
||||
|
||||
## 0.0.5
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- ea92b69: fix: output event check
|
||||
- fadc8b8: feat: recoverable context with error handling
|
||||
|
||||
## 0.0.4
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "@llamaindex/workflow",
|
||||
"description": "Workflow API",
|
||||
"version": "0.0.4",
|
||||
"version": "0.0.6",
|
||||
"type": "module",
|
||||
"types": "dist/index.d.ts",
|
||||
"module": "dist/index.js",
|
||||
|
||||
@@ -13,19 +13,18 @@ export type StepHandler<
|
||||
AnyWorkflowEventConstructor | StartEventConstructor,
|
||||
...(AnyWorkflowEventConstructor | StopEventConstructor)[],
|
||||
] = [AnyWorkflowEventConstructor | StartEventConstructor],
|
||||
Out extends [
|
||||
AnyWorkflowEventConstructor | StartEventConstructor,
|
||||
...(AnyWorkflowEventConstructor | StopEventConstructor)[],
|
||||
] = [AnyWorkflowEventConstructor | StopEventConstructor],
|
||||
Out extends (AnyWorkflowEventConstructor | StopEventConstructor)[] = [],
|
||||
> = (
|
||||
context: HandlerContext<Data>,
|
||||
...events: {
|
||||
[K in keyof Inputs]: InstanceType<Inputs[K]>;
|
||||
}
|
||||
) => Promise<
|
||||
{
|
||||
[K in keyof Out]: InstanceType<Out[K]>;
|
||||
}[number]
|
||||
Out extends []
|
||||
? void
|
||||
: {
|
||||
[K in keyof Out]: InstanceType<Out[K]>;
|
||||
}[number]
|
||||
>;
|
||||
|
||||
export type ReadonlyStepMap<Data> = ReadonlyMap<
|
||||
@@ -275,7 +274,7 @@ export class WorkflowContext<Start = string, Stop = string, Data = unknown>
|
||||
*/
|
||||
#createStreamEvents(): AsyncIterableIterator<WorkflowEvent<unknown>> {
|
||||
const isPendingEvents = new WeakSet<WorkflowEvent<unknown>>();
|
||||
const pendingTasks = new Set<Promise<WorkflowEvent<unknown>>>();
|
||||
const pendingTasks = new Set<Promise<WorkflowEvent<unknown> | void>>();
|
||||
const enqueuedEvents = new Set<WorkflowEvent<unknown>>();
|
||||
const stream = new ReadableStream<WorkflowEvent<unknown>>({
|
||||
start: async (controller) => {
|
||||
@@ -325,101 +324,104 @@ export class WorkflowContext<Start = string, Stop = string, Data = unknown>
|
||||
}
|
||||
const [steps, inputsMap, outputsMap] =
|
||||
this.#getStepFunction(event);
|
||||
const nextEventPromises: Promise<WorkflowEvent<unknown>>[] = [
|
||||
...steps,
|
||||
]
|
||||
.map((step) => {
|
||||
const inputs = [...(inputsMap.get(step) ?? [])];
|
||||
const acceptableInputs: WorkflowEvent<unknown>[] =
|
||||
this.#pendingInputQueue.filter((event) =>
|
||||
inputs.some((input) => event instanceof input),
|
||||
);
|
||||
const events: WorkflowEvent<unknown>[] = flattenEvents(
|
||||
inputs,
|
||||
[event, ...acceptableInputs],
|
||||
);
|
||||
// remove the event from the queue, in case of infinite loop
|
||||
events.forEach((event) => {
|
||||
const protocolIdx = this.#queue.findIndex(
|
||||
(protocol) =>
|
||||
protocol.type === "event" &&
|
||||
protocol.event === event,
|
||||
);
|
||||
if (protocolIdx !== -1) {
|
||||
this.#queue.splice(protocolIdx, 1);
|
||||
}
|
||||
});
|
||||
if (events.length !== inputs.length) {
|
||||
if (this.#verbose) {
|
||||
console.log(
|
||||
`Not enough inputs for step ${step.name}, waiting for more events`,
|
||||
const nextEventPromises: Promise<WorkflowEvent<unknown> | void>[] =
|
||||
[...steps]
|
||||
.map((step) => {
|
||||
const inputs = [...(inputsMap.get(step) ?? [])];
|
||||
const acceptableInputs: WorkflowEvent<unknown>[] =
|
||||
this.#pendingInputQueue.filter((event) =>
|
||||
inputs.some((input) => event instanceof input),
|
||||
);
|
||||
}
|
||||
// not enough to run the step, push back to the queue
|
||||
this.#sendEvent(event);
|
||||
isPendingEvents.add(event);
|
||||
return null;
|
||||
}
|
||||
if (isPendingEvents.has(event)) {
|
||||
isPendingEvents.delete(event);
|
||||
}
|
||||
if (this.#verbose) {
|
||||
console.log(
|
||||
`Running step ${step.name} with inputs ${events}`,
|
||||
const events: WorkflowEvent<unknown>[] = flattenEvents(
|
||||
inputs,
|
||||
[event, ...acceptableInputs],
|
||||
);
|
||||
}
|
||||
const data = this.data;
|
||||
return (step as StepHandler<Data>)
|
||||
.call(
|
||||
null,
|
||||
{
|
||||
get data() {
|
||||
return data;
|
||||
},
|
||||
sendEvent: this.#sendEvent,
|
||||
requireEvent: this.#requireEvent,
|
||||
},
|
||||
// @ts-expect-error IDK why
|
||||
...events.sort((a, b) => {
|
||||
const aIndex = inputs.indexOf(
|
||||
a.constructor as AnyWorkflowEventConstructor,
|
||||
);
|
||||
const bIndex = inputs.indexOf(
|
||||
b.constructor as AnyWorkflowEventConstructor,
|
||||
);
|
||||
return aIndex - bIndex;
|
||||
}),
|
||||
)
|
||||
.then((nextEvent) => {
|
||||
// remove the event from the queue, in case of infinite loop
|
||||
events.forEach((event) => {
|
||||
const protocolIdx = this.#queue.findIndex(
|
||||
(protocol) =>
|
||||
protocol.type === "event" &&
|
||||
protocol.event === event,
|
||||
);
|
||||
if (protocolIdx !== -1) {
|
||||
this.#queue.splice(protocolIdx, 1);
|
||||
}
|
||||
});
|
||||
if (events.length !== inputs.length) {
|
||||
if (this.#verbose) {
|
||||
console.log(
|
||||
`Step ${step.name} completed, next event is ${nextEvent}`,
|
||||
`Not enough inputs for step ${step.name}, waiting for more events`,
|
||||
);
|
||||
}
|
||||
const outputs = outputsMap.get(step) ?? [];
|
||||
const outputEvents = flattenEvents(outputs, [
|
||||
nextEvent,
|
||||
]);
|
||||
if (outputEvents.length !== outputs.length) {
|
||||
if (this.#strict) {
|
||||
const error = Error(
|
||||
`Step ${step.name} returned an unexpected output event ${nextEvent}`,
|
||||
// not enough to run the step, push back to the queue
|
||||
this.#sendEvent(event);
|
||||
isPendingEvents.add(event);
|
||||
return null;
|
||||
}
|
||||
if (isPendingEvents.has(event)) {
|
||||
isPendingEvents.delete(event);
|
||||
}
|
||||
if (this.#verbose) {
|
||||
console.log(
|
||||
`Running step ${step.name} with inputs ${events}`,
|
||||
);
|
||||
}
|
||||
const data = this.data;
|
||||
return (step as StepHandler<Data>)
|
||||
.call(
|
||||
null,
|
||||
{
|
||||
get data() {
|
||||
return data;
|
||||
},
|
||||
sendEvent: this.#sendEvent,
|
||||
requireEvent: this.#requireEvent,
|
||||
},
|
||||
// @ts-expect-error IDK why
|
||||
...events.sort((a, b) => {
|
||||
const aIndex = inputs.indexOf(
|
||||
a.constructor as AnyWorkflowEventConstructor,
|
||||
);
|
||||
controller.error(error);
|
||||
} else {
|
||||
console.warn(
|
||||
`Step ${step.name} returned an unexpected output event ${nextEvent}`,
|
||||
const bIndex = inputs.indexOf(
|
||||
b.constructor as AnyWorkflowEventConstructor,
|
||||
);
|
||||
return aIndex - bIndex;
|
||||
}),
|
||||
)
|
||||
.then((nextEvent: void | WorkflowEvent<unknown>) => {
|
||||
if (nextEvent === undefined) {
|
||||
return;
|
||||
}
|
||||
if (this.#verbose) {
|
||||
console.log(
|
||||
`Step ${step.name} completed, next event is ${nextEvent}`,
|
||||
);
|
||||
}
|
||||
}
|
||||
if (!(nextEvent instanceof StopEvent)) {
|
||||
this.#pendingInputQueue.unshift(nextEvent);
|
||||
this.#sendEvent(nextEvent);
|
||||
}
|
||||
return nextEvent;
|
||||
});
|
||||
})
|
||||
.filter((promise) => promise !== null);
|
||||
const outputs = outputsMap.get(step) ?? [];
|
||||
if (
|
||||
!outputs.some(
|
||||
(output) => nextEvent.constructor === output,
|
||||
)
|
||||
) {
|
||||
if (this.#strict) {
|
||||
const error = Error(
|
||||
`Step ${step.name} returned an unexpected output event ${nextEvent}`,
|
||||
);
|
||||
controller.error(error);
|
||||
} else {
|
||||
console.warn(
|
||||
`Step ${step.name} returned an unexpected output event ${nextEvent}`,
|
||||
);
|
||||
}
|
||||
}
|
||||
if (!(nextEvent instanceof StopEvent)) {
|
||||
this.#pendingInputQueue.unshift(nextEvent);
|
||||
this.#sendEvent(nextEvent);
|
||||
}
|
||||
return nextEvent;
|
||||
});
|
||||
})
|
||||
.filter((promise) => promise !== null);
|
||||
nextEventPromises.forEach((promise) => {
|
||||
pendingTasks.add(promise);
|
||||
promise
|
||||
@@ -432,6 +434,9 @@ export class WorkflowContext<Start = string, Stop = string, Data = unknown>
|
||||
});
|
||||
Promise.race(nextEventPromises)
|
||||
.then((fastestNextEvent) => {
|
||||
if (fastestNextEvent === undefined) {
|
||||
return;
|
||||
}
|
||||
if (!enqueuedEvents.has(fastestNextEvent)) {
|
||||
controller.enqueue(fastestNextEvent);
|
||||
enqueuedEvents.add(fastestNextEvent);
|
||||
@@ -440,7 +445,10 @@ export class WorkflowContext<Start = string, Stop = string, Data = unknown>
|
||||
})
|
||||
.then(async (fastestNextEvent) =>
|
||||
Promise.all(nextEventPromises).then((nextEvents) => {
|
||||
for (const nextEvent of nextEvents) {
|
||||
const events = nextEvents.filter(
|
||||
(event) => event !== undefined,
|
||||
);
|
||||
for (const nextEvent of events) {
|
||||
// do not enqueue the same event twice
|
||||
if (fastestNextEvent !== nextEvent) {
|
||||
if (!enqueuedEvents.has(nextEvent)) {
|
||||
@@ -452,6 +460,9 @@ export class WorkflowContext<Start = string, Stop = string, Data = unknown>
|
||||
}),
|
||||
)
|
||||
.catch((err) => {
|
||||
// when the step raise an error, should go back to the previous step
|
||||
this.#sendEvent(event);
|
||||
isPendingEvents.add(event);
|
||||
controller.error(err);
|
||||
});
|
||||
}
|
||||
|
||||
@@ -57,10 +57,7 @@ export class Workflow<ContextData, Start, Stop> {
|
||||
AnyWorkflowEventConstructor | StartEventConstructor,
|
||||
...(AnyWorkflowEventConstructor | StopEventConstructor)[],
|
||||
],
|
||||
const Out extends [
|
||||
AnyWorkflowEventConstructor | StopEventConstructor,
|
||||
...(AnyWorkflowEventConstructor | StopEventConstructor)[],
|
||||
],
|
||||
const Out extends (AnyWorkflowEventConstructor | StopEventConstructor)[],
|
||||
>(
|
||||
parameters: StepParameters<In, Out>,
|
||||
stepFn: (
|
||||
@@ -69,9 +66,11 @@ export class Workflow<ContextData, Start, Stop> {
|
||||
[K in keyof In]: InstanceType<In[K]>;
|
||||
}
|
||||
) => Promise<
|
||||
{
|
||||
[K in keyof Out]: InstanceType<Out[K]>;
|
||||
}[number]
|
||||
Out extends []
|
||||
? void
|
||||
: {
|
||||
[K in keyof Out]: InstanceType<Out[K]>;
|
||||
}[number]
|
||||
>,
|
||||
): this {
|
||||
const { inputs, outputs } = parameters;
|
||||
|
||||
Generated
+78
-28
@@ -127,8 +127,8 @@ importers:
|
||||
specifier: ^10.1.0
|
||||
version: 10.1.0(react@18.3.1)
|
||||
'@llamaindex/chat-ui':
|
||||
specifier: 0.0.5
|
||||
version: 0.0.5(@types/react-dom@18.3.1)(@types/react@18.3.12)(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
|
||||
specifier: 0.0.8
|
||||
version: 0.0.8(@types/react-dom@18.3.1)(@types/react@18.3.12)(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
|
||||
'@llamaindex/cloud':
|
||||
specifier: workspace:*
|
||||
version: link:../../packages/cloud
|
||||
@@ -173,10 +173,10 @@ importers:
|
||||
version: 1.1.3(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
|
||||
'@vercel/functions':
|
||||
specifier: ^1.5.0
|
||||
version: 1.5.0(@aws-sdk/credential-provider-web-identity@3.679.0(@aws-sdk/client-sts@3.682.0))
|
||||
version: 1.5.0(@aws-sdk/credential-provider-web-identity@3.679.0)
|
||||
ai:
|
||||
specifier: ^3.4.31
|
||||
version: 3.4.31(openai@4.69.0(encoding@0.1.13)(zod@3.23.8))(react@18.3.1)(sswr@2.1.0(svelte@5.1.9))(svelte@5.1.9)(vue@3.5.12(typescript@5.6.3))(zod@3.23.8)
|
||||
version: 3.4.31(openai@4.69.0(encoding@0.1.13)(zod@3.23.8))(react@18.3.1)(sswr@2.1.0)(vue@3.5.12(typescript@5.6.3))(zod@3.23.8)
|
||||
class-variance-authority:
|
||||
specifier: ^0.7.0
|
||||
version: 0.7.0
|
||||
@@ -257,7 +257,7 @@ importers:
|
||||
version: 1.22.2
|
||||
shiki-magic-move:
|
||||
specifier: ^0.5.0
|
||||
version: 0.5.0(react@18.3.1)(shiki@1.22.2)(svelte@5.1.9)(vue@3.5.12(typescript@5.6.3))
|
||||
version: 0.5.0(react@18.3.1)(shiki@1.22.2)(vue@3.5.12(typescript@5.6.3))
|
||||
swr:
|
||||
specifier: ^2.2.5
|
||||
version: 2.2.5(react@18.3.1)
|
||||
@@ -428,7 +428,7 @@ importers:
|
||||
dependencies:
|
||||
ai:
|
||||
specifier: ^3.3.21
|
||||
version: 3.4.31(openai@4.69.0(encoding@0.1.13)(zod@3.23.8))(react@18.3.1)(sswr@2.1.0(svelte@5.1.9))(svelte@5.1.9)(vue@3.5.12(typescript@5.6.3))(zod@3.23.8)
|
||||
version: 3.4.31(openai@4.69.0(zod@3.23.8))(react@18.3.1)(sswr@2.1.0(svelte@5.1.9))(svelte@5.1.9)(vue@3.5.12(typescript@5.6.3))(zod@3.23.8)
|
||||
llamaindex:
|
||||
specifier: workspace:*
|
||||
version: link:../../../packages/llamaindex
|
||||
@@ -584,13 +584,13 @@ importers:
|
||||
specifier: ^1.4.1
|
||||
version: 1.5.0
|
||||
'@llamaindex/core':
|
||||
specifier: ^0.4.7
|
||||
specifier: ^0.4.10
|
||||
version: link:../packages/core
|
||||
'@llamaindex/readers':
|
||||
specifier: ^1.0.8
|
||||
specifier: ^1.0.11
|
||||
version: link:../packages/readers
|
||||
'@llamaindex/workflow':
|
||||
specifier: ^0.0.4
|
||||
specifier: ^0.0.6
|
||||
version: link:../packages/workflow
|
||||
'@notionhq/client':
|
||||
specifier: ^2.2.15
|
||||
@@ -606,7 +606,7 @@ importers:
|
||||
version: 2.4.9
|
||||
chromadb:
|
||||
specifier: ^1.8.1
|
||||
version: 1.9.2(cohere-ai@7.14.0(encoding@0.1.13))(encoding@0.1.13)(openai@4.69.0(encoding@0.1.13)(zod@3.23.8))
|
||||
version: 1.9.2(cohere-ai@7.14.0(encoding@0.1.13))(encoding@0.1.13)(openai@4.69.0(encoding@0.1.13))
|
||||
commander:
|
||||
specifier: ^12.1.0
|
||||
version: 12.1.0
|
||||
@@ -617,7 +617,7 @@ importers:
|
||||
specifier: ^1.0.14
|
||||
version: 1.0.15
|
||||
llamaindex:
|
||||
specifier: ^0.8.10
|
||||
specifier: ^0.8.13
|
||||
version: link:../packages/llamaindex
|
||||
mongodb:
|
||||
specifier: ^6.7.0
|
||||
@@ -738,7 +738,7 @@ importers:
|
||||
version: 1.1.0(@types/react@18.3.12)(react@18.3.1)
|
||||
ai:
|
||||
specifier: ^3.3.21
|
||||
version: 3.4.31(openai@4.69.0(encoding@0.1.13)(zod@3.23.8))(react@18.3.1)(sswr@2.1.0(svelte@5.1.9))(svelte@5.1.9)(vue@3.5.12(typescript@5.6.3))(zod@3.23.8)
|
||||
version: 3.4.31(openai@4.69.0(zod@3.23.8))(react@18.3.1)(sswr@2.1.0(svelte@5.1.9))(svelte@5.1.9)(vue@3.5.12(typescript@5.6.3))(zod@3.23.8)
|
||||
class-variance-authority:
|
||||
specifier: ^0.7.0
|
||||
version: 0.7.0
|
||||
@@ -1191,8 +1191,8 @@ importers:
|
||||
packages/providers/anthropic:
|
||||
dependencies:
|
||||
'@anthropic-ai/sdk':
|
||||
specifier: 0.27.1
|
||||
version: 0.27.1(encoding@0.1.13)
|
||||
specifier: 0.32.1
|
||||
version: 0.32.1(encoding@0.1.13)
|
||||
'@llamaindex/core':
|
||||
specifier: workspace:*
|
||||
version: link:../../core
|
||||
@@ -1310,9 +1310,6 @@ importers:
|
||||
openai:
|
||||
specifier: ^4.68.1
|
||||
version: 4.69.0(encoding@0.1.13)(zod@3.23.8)
|
||||
remeda:
|
||||
specifier: ^2.12.0
|
||||
version: 2.16.0
|
||||
devDependencies:
|
||||
bunchee:
|
||||
specifier: 5.6.1
|
||||
@@ -1704,6 +1701,9 @@ packages:
|
||||
'@anthropic-ai/sdk@0.27.1':
|
||||
resolution: {integrity: sha512-AKFd/E8HO26+DOVPiZpEked3Pm2feA5d4gcX2FcJXr9veDkXbKO90hr2C7N2TL7mPIMwm040ldXlsIZQ416dHg==}
|
||||
|
||||
'@anthropic-ai/sdk@0.32.1':
|
||||
resolution: {integrity: sha512-U9JwTrDvdQ9iWuABVsMLj8nJVwAyQz6QXvgLsVhryhCEPkLsbcP/MXxm+jYcAwLoV8ESbaTTjnD4kuAFa+Hyjg==}
|
||||
|
||||
'@apidevtools/json-schema-ref-parser@11.7.2':
|
||||
resolution: {integrity: sha512-4gY54eEGEstClvEkGnwVkTkrx0sqwemEFG5OSRRn3tD91XH0+Q8XIkYIfo7IwEWPpJZwILb9GUXeShtplRc/eA==}
|
||||
engines: {node: '>= 16'}
|
||||
@@ -3755,8 +3755,8 @@ packages:
|
||||
'@leichtgewicht/ip-codec@2.0.5':
|
||||
resolution: {integrity: sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==}
|
||||
|
||||
'@llamaindex/chat-ui@0.0.5':
|
||||
resolution: {integrity: sha512-nGlhtAeIlVBtHAsCtBN5f+/iJpIHQ7uFf43ebye/wATf5tT12HUl3tP5O/+XC7nyXXwByjk5KAEN+hk3aC1Cug==}
|
||||
'@llamaindex/chat-ui@0.0.8':
|
||||
resolution: {integrity: sha512-yTWgxDzJD6F8w17CNIIJkSBE+hyd+WRqhF6lSElqo3k7CQyhtYr8cOD7cS6K8gBqaI3Xha5EPqvqV0+enJA0Mg==}
|
||||
peerDependencies:
|
||||
react: ^18.2.0
|
||||
|
||||
@@ -13428,6 +13428,18 @@ snapshots:
|
||||
transitivePeerDependencies:
|
||||
- encoding
|
||||
|
||||
'@anthropic-ai/sdk@0.32.1(encoding@0.1.13)':
|
||||
dependencies:
|
||||
'@types/node': 18.19.64
|
||||
'@types/node-fetch': 2.6.11
|
||||
abort-controller: 3.0.0
|
||||
agentkeepalive: 4.5.0
|
||||
form-data-encoder: 1.7.2
|
||||
formdata-node: 4.4.1
|
||||
node-fetch: 2.7.0(encoding@0.1.13)
|
||||
transitivePeerDependencies:
|
||||
- encoding
|
||||
|
||||
'@apidevtools/json-schema-ref-parser@11.7.2':
|
||||
dependencies:
|
||||
'@jsdevtools/ono': 7.1.3
|
||||
@@ -16522,7 +16534,7 @@ snapshots:
|
||||
|
||||
'@leichtgewicht/ip-codec@2.0.5': {}
|
||||
|
||||
'@llamaindex/chat-ui@0.0.5(@types/react-dom@18.3.1)(@types/react@18.3.12)(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
|
||||
'@llamaindex/chat-ui@0.0.8(@types/react-dom@18.3.1)(@types/react@18.3.12)(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
|
||||
dependencies:
|
||||
'@llamaindex/pdf-viewer': 1.2.0(@types/react@18.3.12)(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
|
||||
'@radix-ui/react-collapsible': 1.1.1(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
|
||||
@@ -18604,7 +18616,7 @@ snapshots:
|
||||
|
||||
'@upstash/vector@1.1.7': {}
|
||||
|
||||
'@vercel/functions@1.5.0(@aws-sdk/credential-provider-web-identity@3.679.0(@aws-sdk/client-sts@3.682.0))':
|
||||
'@vercel/functions@1.5.0(@aws-sdk/credential-provider-web-identity@3.679.0)':
|
||||
optionalDependencies:
|
||||
'@aws-sdk/credential-provider-web-identity': 3.679.0(@aws-sdk/client-sts@3.682.0)
|
||||
|
||||
@@ -18882,7 +18894,7 @@ snapshots:
|
||||
clean-stack: 2.2.0
|
||||
indent-string: 4.0.0
|
||||
|
||||
ai@3.4.31(openai@4.69.0(encoding@0.1.13)(zod@3.23.8))(react@18.3.1)(sswr@2.1.0(svelte@5.1.9))(svelte@5.1.9)(vue@3.5.12(typescript@5.6.3))(zod@3.23.8):
|
||||
ai@3.4.31(openai@4.69.0(encoding@0.1.13)(zod@3.23.8))(react@18.3.1)(sswr@2.1.0)(vue@3.5.12(typescript@5.6.3))(zod@3.23.8):
|
||||
dependencies:
|
||||
'@ai-sdk/provider': 0.0.26
|
||||
'@ai-sdk/provider-utils': 1.0.22(zod@3.23.8)
|
||||
@@ -18901,6 +18913,30 @@ snapshots:
|
||||
openai: 4.69.0(encoding@0.1.13)(zod@3.23.8)
|
||||
react: 18.3.1
|
||||
sswr: 2.1.0(svelte@5.1.9)
|
||||
zod: 3.23.8
|
||||
transitivePeerDependencies:
|
||||
- solid-js
|
||||
- vue
|
||||
|
||||
ai@3.4.31(openai@4.69.0(zod@3.23.8))(react@18.3.1)(sswr@2.1.0(svelte@5.1.9))(svelte@5.1.9)(vue@3.5.12(typescript@5.6.3))(zod@3.23.8):
|
||||
dependencies:
|
||||
'@ai-sdk/provider': 0.0.26
|
||||
'@ai-sdk/provider-utils': 1.0.22(zod@3.23.8)
|
||||
'@ai-sdk/react': 0.0.70(react@18.3.1)(zod@3.23.8)
|
||||
'@ai-sdk/solid': 0.0.54(zod@3.23.8)
|
||||
'@ai-sdk/svelte': 0.0.57(svelte@5.1.9)(zod@3.23.8)
|
||||
'@ai-sdk/ui-utils': 0.0.50(zod@3.23.8)
|
||||
'@ai-sdk/vue': 0.0.59(vue@3.5.12(typescript@5.6.3))(zod@3.23.8)
|
||||
'@opentelemetry/api': 1.9.0
|
||||
eventsource-parser: 1.1.2
|
||||
json-schema: 0.4.0
|
||||
jsondiffpatch: 0.6.0
|
||||
secure-json-parse: 2.7.0
|
||||
zod-to-json-schema: 3.23.5(zod@3.23.8)
|
||||
optionalDependencies:
|
||||
openai: 4.69.0(zod@3.23.8)
|
||||
react: 18.3.1
|
||||
sswr: 2.1.0(svelte@5.1.9)
|
||||
svelte: 5.1.9
|
||||
zod: 3.23.8
|
||||
transitivePeerDependencies:
|
||||
@@ -19588,7 +19624,7 @@ snapshots:
|
||||
transitivePeerDependencies:
|
||||
- encoding
|
||||
|
||||
chromadb@1.9.2(cohere-ai@7.14.0(encoding@0.1.13))(encoding@0.1.13)(openai@4.69.0(encoding@0.1.13)(zod@3.23.8)):
|
||||
chromadb@1.9.2(cohere-ai@7.14.0(encoding@0.1.13))(encoding@0.1.13)(openai@4.69.0(encoding@0.1.13)):
|
||||
dependencies:
|
||||
cliui: 8.0.1
|
||||
isomorphic-fetch: 3.0.0(encoding@0.1.13)
|
||||
@@ -20675,7 +20711,7 @@ snapshots:
|
||||
debug: 4.3.7
|
||||
enhanced-resolve: 5.17.1
|
||||
eslint: 9.14.0(jiti@2.4.0)
|
||||
eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.13.0(eslint@9.14.0(jiti@2.4.0))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3)(eslint@9.14.0(jiti@2.4.0))
|
||||
eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.13.0(eslint@9.14.0(jiti@2.4.0))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.13.0(eslint@9.14.0(jiti@2.4.0))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0)(eslint@9.14.0(jiti@2.4.0)))(eslint@9.14.0(jiti@2.4.0))
|
||||
fast-glob: 3.3.2
|
||||
get-tsconfig: 4.8.1
|
||||
is-bun-module: 1.1.0
|
||||
@@ -20688,7 +20724,7 @@ snapshots:
|
||||
- eslint-import-resolver-webpack
|
||||
- supports-color
|
||||
|
||||
eslint-module-utils@2.12.0(@typescript-eslint/parser@8.13.0(eslint@9.14.0(jiti@2.4.0))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3)(eslint@9.14.0(jiti@2.4.0)):
|
||||
eslint-module-utils@2.12.0(@typescript-eslint/parser@8.13.0(eslint@9.14.0(jiti@2.4.0))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.13.0(eslint@9.14.0(jiti@2.4.0))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0)(eslint@9.14.0(jiti@2.4.0)))(eslint@9.14.0(jiti@2.4.0)):
|
||||
dependencies:
|
||||
debug: 3.2.7
|
||||
optionalDependencies:
|
||||
@@ -20710,7 +20746,7 @@ snapshots:
|
||||
doctrine: 2.1.0
|
||||
eslint: 9.14.0(jiti@2.4.0)
|
||||
eslint-import-resolver-node: 0.3.9
|
||||
eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.13.0(eslint@9.14.0(jiti@2.4.0))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3)(eslint@9.14.0(jiti@2.4.0))
|
||||
eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.13.0(eslint@9.14.0(jiti@2.4.0))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.13.0(eslint@9.14.0(jiti@2.4.0))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0)(eslint@9.14.0(jiti@2.4.0)))(eslint@9.14.0(jiti@2.4.0))
|
||||
hasown: 2.0.2
|
||||
is-core-module: 2.15.1
|
||||
is-glob: 4.0.3
|
||||
@@ -24376,6 +24412,21 @@ snapshots:
|
||||
transitivePeerDependencies:
|
||||
- encoding
|
||||
|
||||
openai@4.69.0(zod@3.23.8):
|
||||
dependencies:
|
||||
'@types/node': 18.19.64
|
||||
'@types/node-fetch': 2.6.11
|
||||
abort-controller: 3.0.0
|
||||
agentkeepalive: 4.5.0
|
||||
form-data-encoder: 1.7.2
|
||||
formdata-node: 4.4.1
|
||||
node-fetch: 2.7.0(encoding@0.1.13)
|
||||
optionalDependencies:
|
||||
zod: 3.23.8
|
||||
transitivePeerDependencies:
|
||||
- encoding
|
||||
optional: true
|
||||
|
||||
openapi-sampler@1.5.1:
|
||||
dependencies:
|
||||
'@types/json-schema': 7.0.15
|
||||
@@ -26247,14 +26298,13 @@ snapshots:
|
||||
interpret: 1.4.0
|
||||
rechoir: 0.6.2
|
||||
|
||||
shiki-magic-move@0.5.0(react@18.3.1)(shiki@1.22.2)(svelte@5.1.9)(vue@3.5.12(typescript@5.6.3)):
|
||||
shiki-magic-move@0.5.0(react@18.3.1)(shiki@1.22.2)(vue@3.5.12(typescript@5.6.3)):
|
||||
dependencies:
|
||||
diff-match-patch-es: 0.1.1
|
||||
ohash: 1.1.4
|
||||
optionalDependencies:
|
||||
react: 18.3.1
|
||||
shiki: 1.22.2
|
||||
svelte: 5.1.9
|
||||
vue: 3.5.12(typescript@5.6.3)
|
||||
|
||||
shiki@1.22.2:
|
||||
|
||||
@@ -1,5 +1,60 @@
|
||||
# @llamaindex/unit-test
|
||||
|
||||
## 0.0.24
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [630b425]
|
||||
- llamaindex@0.8.14
|
||||
|
||||
## 0.0.23
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- ee20c44: feat(workflow): allow send event with no output
|
||||
- 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.22
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [ea92b69]
|
||||
- Updated dependencies [fadc8b8]
|
||||
- @llamaindex/workflow@0.0.5
|
||||
|
||||
## 0.0.21
|
||||
|
||||
### 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.20
|
||||
|
||||
### 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.19
|
||||
|
||||
### Patch Changes
|
||||
|
||||
+1
-1
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "@llamaindex/unit-test",
|
||||
"private": true,
|
||||
"version": "0.0.19",
|
||||
"version": "0.0.24",
|
||||
"type": "module",
|
||||
"scripts": {
|
||||
"test": "vitest run"
|
||||
|
||||
@@ -531,6 +531,21 @@ describe("workflow basic", () => {
|
||||
const result = await myWorkflow.run("start");
|
||||
expect(result.data).toBe("query result");
|
||||
});
|
||||
|
||||
test("allow output with send event", async () => {
|
||||
const myFlow = new Workflow<unknown, string, string>({ verbose: true });
|
||||
myFlow.addStep(
|
||||
{
|
||||
inputs: [StartEvent<string>],
|
||||
outputs: [],
|
||||
},
|
||||
async (context, ev) => {
|
||||
context.sendEvent(new StopEvent(`Hello ${ev.data}!`));
|
||||
},
|
||||
);
|
||||
const result = myFlow.run("world");
|
||||
expect((await result).data).toBe("Hello world!");
|
||||
});
|
||||
});
|
||||
|
||||
describe("workflow event loop", () => {
|
||||
@@ -794,6 +809,21 @@ describe("workflow event loop", () => {
|
||||
}
|
||||
`);
|
||||
});
|
||||
|
||||
test("workflow multiple output", async () => {
|
||||
const myFlow = new Workflow<unknown, string, string>({ verbose: true });
|
||||
myFlow.addStep(
|
||||
{
|
||||
inputs: [StartEvent<string>],
|
||||
outputs: [StopEvent<string>, StopEvent<string>],
|
||||
},
|
||||
async (_context, ev) => {
|
||||
return new StopEvent(`Hello ${ev.data}!`);
|
||||
},
|
||||
);
|
||||
const result = await myFlow.run("world").strict();
|
||||
expect(result.data).toBe("Hello world!");
|
||||
});
|
||||
});
|
||||
|
||||
describe("snapshot", async () => {
|
||||
@@ -869,3 +899,83 @@ describe("snapshot", async () => {
|
||||
expect(fn).toHaveBeenCalledTimes(1);
|
||||
});
|
||||
});
|
||||
|
||||
describe("error", () => {
|
||||
test("error in handler", async () => {
|
||||
const myFlow = new Workflow<boolean, string, string>({ verbose: true });
|
||||
myFlow.addStep(
|
||||
{
|
||||
inputs: [StartEvent<string>],
|
||||
outputs: [StopEvent<string>],
|
||||
},
|
||||
async ({ data }) => {
|
||||
if (!data) {
|
||||
throw new Error("Something went wrong");
|
||||
} else {
|
||||
return new StopEvent(`Hello ${data}!`);
|
||||
}
|
||||
},
|
||||
);
|
||||
await expect(myFlow.run("world")).rejects.toThrow("Something went wrong");
|
||||
{
|
||||
const context = myFlow.run("world");
|
||||
try {
|
||||
for await (const _ of context) {
|
||||
// do nothing
|
||||
}
|
||||
} catch (error) {
|
||||
expect(error).toBeInstanceOf(Error);
|
||||
expect((error as Error).message).toBe("Something went wrong");
|
||||
const snapshot = context.snapshot();
|
||||
const newContext = myFlow.recover(snapshot).with(true);
|
||||
expect((await newContext).data).toBe("Hello true!");
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
test("recover in the middle of workflow", async () => {
|
||||
const myFlow = new Workflow<string | undefined, string, string>({
|
||||
verbose: true,
|
||||
});
|
||||
|
||||
class AEvent extends WorkflowEvent<string> {}
|
||||
|
||||
myFlow.addStep(
|
||||
{
|
||||
inputs: [StartEvent<string>],
|
||||
outputs: [AEvent],
|
||||
},
|
||||
async ({ data }) => {
|
||||
if (data !== undefined) {
|
||||
throw new Error("Something went wrong");
|
||||
}
|
||||
return new AEvent("world");
|
||||
},
|
||||
);
|
||||
myFlow.addStep(
|
||||
{
|
||||
inputs: [AEvent],
|
||||
outputs: [StopEvent],
|
||||
},
|
||||
async ({ data }, ev) => {
|
||||
if (data === undefined) {
|
||||
throw new Error("Something went wrong");
|
||||
}
|
||||
return new StopEvent(`Hello, ${data}!`);
|
||||
},
|
||||
);
|
||||
// no context, so will throw error
|
||||
const context = myFlow.run("world");
|
||||
try {
|
||||
for await (const _ of context) {
|
||||
// do nothing
|
||||
}
|
||||
} catch (error) {
|
||||
expect(error).toBeInstanceOf(Error);
|
||||
expect((error as Error).message).toBe("Something went wrong");
|
||||
const snapshot = context.snapshot();
|
||||
const newContext = myFlow.recover(snapshot).with("Recovered Data");
|
||||
expect((await newContext).data).toBe("Hello, Recovered Data!");
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user