Compare commits

...

12 Commits

Author SHA1 Message Date
github-actions[bot] c1c58feed2 Release 0.11.19 (#2105)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: marcusschiesser <17126+marcusschiesser@users.noreply.github.com>
2025-07-17 15:44:22 +08:00
Marcus Schiesser 7ad3411766 feat: add llm.exec (#2078) 2025-07-17 15:36:56 +08:00
Neha Prasad a1fdb07b96 feat: multi-turn image generation support (#2106)
Co-authored-by: Marcus Schiesser <marcus.schiesser@googlemail.com>
2025-07-17 10:30:39 +08:00
Jeremy B. Merrill 5da5b3c89c feat: add progress callback to embeddings (#2098)
Co-authored-by: Marcus Schiesser <mail@marcusschiesser.de>
2025-07-16 13:49:49 +08:00
r3rer3 ddc0eafbaa feat(anthropic): stream partial tool calls (#2100) 2025-07-15 10:06:17 -07:00
github-actions[bot] 1782554488 Release 0.11.18 (#2103)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2025-07-14 15:53:20 -07:00
Adrian Lyjak a1b1598bc6 fix(cloud): add generic types into agent data responses (#2102)
Co-authored-by: Alex Yang <himself65@outlook.com>
2025-07-14 12:01:56 -07:00
Terry Zhao b02847ae91 fix(notion): resolve @notionhq/client dependency conflict (#2097) 2025-07-12 11:04:06 -07:00
Alex Yang 50acb4821e feat(cloud): use camelCase (#2096) 2025-07-12 10:59:46 -07:00
github-actions[bot] 47a5b94b0c Release 0.11.17 (#2095)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2025-07-11 21:57:02 -07:00
Alex Yang d2be868b93 feat(cloud): missing agent api (#2094) 2025-07-11 20:45:22 -07:00
github-actions[bot] 50d42c4129 Release 0.11.16 (#2093)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2025-07-11 20:13:37 -07:00
162 changed files with 2058 additions and 365 deletions
+31
View File
@@ -1,5 +1,36 @@
# @llamaindex/doc
## 0.2.40
### Patch Changes
- Updated dependencies [7ad3411]
- Updated dependencies [5da5b3c]
- Updated dependencies [a1fdb07]
- @llamaindex/core@0.6.15
- @llamaindex/workflow@1.1.15
- @llamaindex/openai@0.4.9
- @llamaindex/cloud@4.0.24
- llamaindex@0.11.19
- @llamaindex/node-parser@2.0.15
- @llamaindex/readers@3.1.14
## 0.2.39
### Patch Changes
- Updated dependencies [a1b1598]
- @llamaindex/cloud@4.0.23
- llamaindex@0.11.18
## 0.2.38
### Patch Changes
- Updated dependencies [d2be868]
- @llamaindex/cloud@4.0.22
- llamaindex@0.11.17
## 0.2.37
### Patch Changes
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@llamaindex/doc",
"version": "0.2.37",
"version": "0.2.40",
"private": true,
"scripts": {
"postinstall": "fumadocs-mdx",
+1 -1
View File
@@ -1,4 +1,4 @@
import { MockLLM } from "@llamaindex/core/utils";
import { MockLLM } from "@llamaindex/core/llms/mock";
import { LlamaIndexAdapter, type Message } from "ai";
import { Settings, SimpleChatEngine, type ChatMessage } from "llamaindex";
import { NextResponse, type NextRequest } from "next/server";
@@ -1,5 +1,23 @@
# @llamaindex/cloudflare-worker-agent-test
## 0.0.180
### Patch Changes
- llamaindex@0.11.19
## 0.0.179
### Patch Changes
- llamaindex@0.11.18
## 0.0.178
### Patch Changes
- llamaindex@0.11.17
## 0.0.177
### Patch Changes
@@ -1,6 +1,6 @@
{
"name": "@llamaindex/cloudflare-worker-agent-test",
"version": "0.0.177",
"version": "0.0.180",
"type": "module",
"private": true,
"scripts": {
@@ -1,5 +1,25 @@
# @llamaindex/llama-parse-browser-test
## 0.0.79
### Patch Changes
- @llamaindex/cloud@4.0.24
## 0.0.78
### Patch Changes
- Updated dependencies [a1b1598]
- @llamaindex/cloud@4.0.23
## 0.0.77
### Patch Changes
- Updated dependencies [d2be868]
- @llamaindex/cloud@4.0.22
## 0.0.76
### Patch Changes
@@ -1,7 +1,7 @@
{
"name": "@llamaindex/llama-parse-browser-test",
"private": true,
"version": "0.0.76",
"version": "0.0.79",
"type": "module",
"scripts": {
"dev": "vite",
+18
View File
@@ -1,5 +1,23 @@
# @llamaindex/next-agent-test
## 0.1.180
### Patch Changes
- llamaindex@0.11.19
## 0.1.179
### Patch Changes
- llamaindex@0.11.18
## 0.1.178
### Patch Changes
- llamaindex@0.11.17
## 0.1.177
### Patch Changes
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@llamaindex/next-agent-test",
"version": "0.1.177",
"version": "0.1.180",
"private": true,
"scripts": {
"dev": "next dev",
@@ -1,5 +1,23 @@
# test-edge-runtime
## 0.1.179
### Patch Changes
- llamaindex@0.11.19
## 0.1.178
### Patch Changes
- llamaindex@0.11.18
## 0.1.177
### Patch Changes
- llamaindex@0.11.17
## 0.1.176
### Patch Changes
@@ -1,6 +1,6 @@
{
"name": "@llamaindex/nextjs-edge-runtime-test",
"version": "0.1.176",
"version": "0.1.179",
"private": true,
"scripts": {
"dev": "next dev",
@@ -1,5 +1,25 @@
# @llamaindex/next-node-runtime
## 0.1.48
### Patch Changes
- llamaindex@0.11.19
- @llamaindex/huggingface@0.1.19
- @llamaindex/readers@3.1.14
## 0.1.47
### Patch Changes
- llamaindex@0.11.18
## 0.1.46
### Patch Changes
- llamaindex@0.11.17
## 0.1.45
### Patch Changes
@@ -1,6 +1,6 @@
{
"name": "@llamaindex/next-node-runtime-test",
"version": "0.1.45",
"version": "0.1.48",
"private": true,
"scripts": {
"dev": "next dev",
@@ -1,5 +1,23 @@
# vite-import-llamaindex
## 0.0.46
### Patch Changes
- llamaindex@0.11.19
## 0.0.45
### Patch Changes
- llamaindex@0.11.18
## 0.0.44
### Patch Changes
- llamaindex@0.11.17
## 0.0.43
### Patch Changes
@@ -1,7 +1,7 @@
{
"name": "vite-import-llamaindex",
"private": true,
"version": "0.0.43",
"version": "0.0.46",
"type": "module",
"scripts": {
"build": "vite build",
@@ -1,5 +1,23 @@
# @llamaindex/waku-query-engine-test
## 0.0.180
### Patch Changes
- llamaindex@0.11.19
## 0.0.179
### Patch Changes
- llamaindex@0.11.18
## 0.0.178
### Patch Changes
- llamaindex@0.11.17
## 0.0.177
### Patch Changes
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@llamaindex/waku-query-engine-test",
"version": "0.0.177",
"version": "0.0.180",
"type": "module",
"private": true,
"scripts": {
+55
View File
@@ -1,5 +1,60 @@
# examples
## 0.3.30
### Patch Changes
- Updated dependencies [7ad3411]
- Updated dependencies [5da5b3c]
- Updated dependencies [a1fdb07]
- Updated dependencies [ddc0eaf]
- @llamaindex/core@0.6.15
- @llamaindex/tools@0.1.5
- @llamaindex/workflow@1.1.15
- @llamaindex/openai@0.4.9
- @llamaindex/anthropic@0.3.17
- @llamaindex/cloud@4.0.24
- llamaindex@0.11.19
- @llamaindex/node-parser@2.0.15
- @llamaindex/assemblyai@0.1.14
- @llamaindex/clip@0.0.65
- @llamaindex/cohere@0.0.29
- @llamaindex/deepinfra@0.0.65
- @llamaindex/discord@0.1.14
- @llamaindex/google@0.3.14
- @llamaindex/huggingface@0.1.19
- @llamaindex/jinaai@0.0.25
- @llamaindex/mistral@0.1.15
- @llamaindex/mixedbread@0.0.29
- @llamaindex/notion@0.1.14
- @llamaindex/ollama@0.1.15
- @llamaindex/perplexity@0.0.22
- @llamaindex/portkey-ai@0.0.57
- @llamaindex/replicate@0.0.57
- @llamaindex/bm25-retriever@0.0.4
- @llamaindex/astra@0.0.29
- @llamaindex/azure@0.1.26
- @llamaindex/chroma@0.0.29
- @llamaindex/elastic-search@0.1.15
- @llamaindex/firestore@1.0.22
- @llamaindex/milvus@0.1.24
- @llamaindex/mongodb@0.0.30
- @llamaindex/pinecone@0.1.15
- @llamaindex/postgres@0.0.58
- @llamaindex/qdrant@0.1.25
- @llamaindex/supabase@0.1.15
- @llamaindex/upstash@0.0.29
- @llamaindex/weaviate@0.0.30
- @llamaindex/vercel@0.1.15
- @llamaindex/voyage-ai@1.0.21
- @llamaindex/readers@3.1.14
- @llamaindex/deepseek@0.0.26
- @llamaindex/fireworks@0.0.25
- @llamaindex/groq@0.0.81
- @llamaindex/together@0.0.25
- @llamaindex/vllm@0.0.51
- @llamaindex/xai@0.0.12
## 0.3.29
### Patch Changes
+1 -1
View File
@@ -3,7 +3,7 @@
*/
import { openai } from "@llamaindex/openai";
import { agent } from "@llamaindex/workflow";
import { getWeatherTool } from "../../deprecated/agents/utils/tools";
import { getWeatherTool } from "../tools/tools";
async function main() {
const weatherAgent = agent({
+1 -1
View File
@@ -1,6 +1,6 @@
import { ollama } from "@llamaindex/ollama";
import { agent } from "@llamaindex/workflow";
import { getWeatherTool } from "../../deprecated/agents/utils/tools";
import { getWeatherTool } from "../tools/tools";
async function main() {
const myAgent = agent({
@@ -1,7 +1,7 @@
import { OpenAI } from "@llamaindex/openai";
import { openai } from "@llamaindex/openai";
async function main() {
const llm = new OpenAI({ model: "gpt-4-turbo" });
const llm = openai({ model: "gpt-4.1-mini" });
const args: Parameters<typeof llm.chat>[0] = {
additionalChatOptions: {
tool_choice: "auto",
+46
View File
@@ -0,0 +1,46 @@
import { openai } from "@llamaindex/openai";
import { tool } from "llamaindex";
import z from "zod";
import { ChatMessage } from "llamaindex";
async function main() {
const llm = openai({ model: "gpt-4.1-mini" });
const messages = [
{
content: `What's the weather like in San Francisco?`,
role: "user",
} as ChatMessage,
];
let exit = false;
do {
const { stream, newMessages, toolCalls } = await llm.exec({
messages,
tools: [
tool({
name: "get_weather",
description: "Get the current weather for a location",
parameters: z.object({
address: z.string().describe("The address"),
}),
execute: ({ address }) => {
return `It's sunny in ${address}!`;
},
}),
],
stream: true,
});
for await (const chunk of stream) {
process.stdout.write(chunk.delta);
}
messages.push(...newMessages());
// exit condition to stop the agent loop
// here we can also check for specific tool calls or limit the number of llm.exec calls
exit = toolCalls.length === 0;
} while (!exit);
}
(async function () {
await main();
})();
+43
View File
@@ -0,0 +1,43 @@
import { openai } from "@llamaindex/openai";
import { ChatMessage, tool } from "llamaindex";
import z from "zod";
async function main() {
const llm = openai({ model: "gpt-4.1-mini" });
const messages = [
{
content: `What's the weather like in San Francisco?`,
role: "user",
} as ChatMessage,
];
let exit = false;
do {
const { newMessages, toolCalls } = await llm.exec({
messages,
tools: [
tool({
name: "get_weather",
description: "Get the current weather for a location",
parameters: z.object({
address: z.string().describe("The address"),
}),
execute: ({ address }) => {
return `It's sunny in ${address}!`;
},
}),
],
});
console.log(newMessages);
messages.push(...newMessages);
// exit condition to stop the agent loop
// here we can also check for specific tool calls or limit the number of llm.exec calls
exit = toolCalls.length === 0;
} while (!exit);
}
(async function () {
console.log("Starting...");
await main();
console.log("Done");
})();
+1 -1
View File
@@ -4,7 +4,7 @@ import {
getCurrentIDTool,
getUserInfoTool,
getWeatherTool,
} from "./utils/tools";
} from "../../agents/tools/tools";
async function main() {
// Create an OpenAIAgent with the function tools
+1 -1
View File
@@ -3,7 +3,7 @@ import {
getCurrentIDTool,
getUserInfoTool,
getWeatherTool,
} from "./utils/tools";
} from "../../agents/tools/tools";
async function main() {
// Create an OpenAIAgent with the function tools
@@ -30,6 +30,12 @@ async function main() {
);
// and print out the text part
console.log(textPart?.text);
const imageId = response.message.options?.image_id;
if (imageId) {
console.log("Image ID for multi-turn generation:", imageId);
console.log("Use this image_id in subsequent requests to modify the image");
}
}
main().catch(console.error);
@@ -0,0 +1,89 @@
import { openaiResponses } from "@llamaindex/openai";
import fs from "fs";
import { MessageContentDetail } from "llamaindex";
async function main() {
const llm = openaiResponses({
model: "gpt-4.1-mini",
builtInTools: [{ type: "image_generation" }],
});
// First turn: Generate initial image
console.log("=== First Turn: Generate initial image ===");
const firstResponse = await llm.chat({
messages: [
{
role: "user",
content:
"Generate an image of a cute tiny llama wearing a hat playing with a cat on a meadow",
},
],
});
const firstContent = firstResponse.message.content as MessageContentDetail[];
const firstImagePart = firstContent.find((part) => part.type === "image");
const firstTextPart = firstContent.find((part) => part.type === "text");
// Save the first image
if (firstImagePart?.data) {
fs.writeFileSync(
"llama-initial.png",
Buffer.from(firstImagePart.data as string, "base64"),
);
console.log("First image saved as 'llama-initial.png'");
}
if (firstTextPart?.text) {
console.log("First response:", firstTextPart.text);
}
// Get the image_id from the response options for multi-turn
const imageId = firstResponse.message.options?.image_id;
console.log("Image ID for multi-turn:", imageId);
if (imageId) {
// Second turn: Modify the image using the image_id
console.log("\n=== Second Turn: Modify the image ===");
const secondResponse = await llm.chat({
messages: [
{
role: "user",
content:
"Generate an image of a cute tiny llama wearing a hat playing with a cat on a meadow",
},
{
role: "assistant",
content: firstContent,
options: { image_id: imageId },
},
{
role: "user",
content:
"Now add a rainbow in the background and make the llama's hat blue",
},
],
});
const secondContent = secondResponse.message
.content as MessageContentDetail[];
const secondImagePart = secondContent.find((part) => part.type === "image");
const secondTextPart = secondContent.find((part) => part.type === "text");
// Save the modified image
if (secondImagePart?.data) {
fs.writeFileSync(
"llama-modified.png",
Buffer.from(secondImagePart.data as string, "base64"),
);
console.log("Modified image saved as 'llama-modified.png'");
}
if (secondTextPart?.text) {
console.log("Second response:", secondTextPart.text);
}
} else {
console.log("No image_id received, cannot perform multi-turn generation");
}
}
main().catch(console.error);
+47 -47
View File
@@ -1,6 +1,6 @@
{
"name": "@llamaindex/examples",
"version": "0.3.29",
"version": "0.3.30",
"private": true,
"scripts": {
"lint": "eslint .",
@@ -11,52 +11,52 @@
"@azure/cosmos": "^4.1.1",
"@azure/identity": "^4.4.1",
"@azure/search-documents": "^12.1.0",
"@llamaindex/anthropic": "^0.3.16",
"@llamaindex/assemblyai": "^0.1.13",
"@llamaindex/astra": "^0.0.28",
"@llamaindex/azure": "^0.1.25",
"@llamaindex/bm25-retriever": "^0.0.3",
"@llamaindex/chroma": "^0.0.28",
"@llamaindex/clip": "^0.0.64",
"@llamaindex/cloud": "^4.0.19",
"@llamaindex/cohere": "^0.0.28",
"@llamaindex/core": "^0.6.14",
"@llamaindex/deepinfra": "^0.0.64",
"@llamaindex/deepseek": "^0.0.25",
"@llamaindex/discord": "^0.1.13",
"@llamaindex/elastic-search": "^0.1.14",
"@llamaindex/anthropic": "^0.3.17",
"@llamaindex/assemblyai": "^0.1.14",
"@llamaindex/astra": "^0.0.29",
"@llamaindex/azure": "^0.1.26",
"@llamaindex/bm25-retriever": "^0.0.4",
"@llamaindex/chroma": "^0.0.29",
"@llamaindex/clip": "^0.0.65",
"@llamaindex/cloud": "^4.0.24",
"@llamaindex/cohere": "^0.0.29",
"@llamaindex/core": "^0.6.15",
"@llamaindex/deepinfra": "^0.0.65",
"@llamaindex/deepseek": "^0.0.26",
"@llamaindex/discord": "^0.1.14",
"@llamaindex/elastic-search": "^0.1.15",
"@llamaindex/env": "^0.1.30",
"@llamaindex/firestore": "^1.0.21",
"@llamaindex/fireworks": "^0.0.24",
"@llamaindex/google": "^0.3.13",
"@llamaindex/groq": "^0.0.80",
"@llamaindex/huggingface": "^0.1.18",
"@llamaindex/jinaai": "^0.0.24",
"@llamaindex/milvus": "^0.1.23",
"@llamaindex/mistral": "^0.1.14",
"@llamaindex/mixedbread": "^0.0.28",
"@llamaindex/mongodb": "^0.0.29",
"@llamaindex/node-parser": "^2.0.14",
"@llamaindex/notion": "^0.1.13",
"@llamaindex/ollama": "^0.1.14",
"@llamaindex/openai": "^0.4.8",
"@llamaindex/perplexity": "^0.0.21",
"@llamaindex/pinecone": "^0.1.14",
"@llamaindex/portkey-ai": "^0.0.56",
"@llamaindex/postgres": "^0.0.57",
"@llamaindex/qdrant": "^0.1.24",
"@llamaindex/readers": "^3.1.13",
"@llamaindex/replicate": "^0.0.56",
"@llamaindex/supabase": "^0.1.14",
"@llamaindex/together": "^0.0.24",
"@llamaindex/tools": "^0.1.4",
"@llamaindex/upstash": "^0.0.28",
"@llamaindex/vercel": "^0.1.14",
"@llamaindex/vllm": "^0.0.50",
"@llamaindex/voyage-ai": "^1.0.20",
"@llamaindex/weaviate": "^0.0.29",
"@llamaindex/workflow": "^1.1.14",
"@llamaindex/xai": "^0.0.11",
"@llamaindex/firestore": "^1.0.22",
"@llamaindex/fireworks": "^0.0.25",
"@llamaindex/google": "^0.3.14",
"@llamaindex/groq": "^0.0.81",
"@llamaindex/huggingface": "^0.1.19",
"@llamaindex/jinaai": "^0.0.25",
"@llamaindex/milvus": "^0.1.24",
"@llamaindex/mistral": "^0.1.15",
"@llamaindex/mixedbread": "^0.0.29",
"@llamaindex/mongodb": "^0.0.30",
"@llamaindex/node-parser": "^2.0.15",
"@llamaindex/notion": "^0.1.14",
"@llamaindex/ollama": "^0.1.15",
"@llamaindex/openai": "^0.4.9",
"@llamaindex/perplexity": "^0.0.22",
"@llamaindex/pinecone": "^0.1.15",
"@llamaindex/portkey-ai": "^0.0.57",
"@llamaindex/postgres": "^0.0.58",
"@llamaindex/qdrant": "^0.1.25",
"@llamaindex/readers": "^3.1.14",
"@llamaindex/replicate": "^0.0.57",
"@llamaindex/supabase": "^0.1.15",
"@llamaindex/together": "^0.0.25",
"@llamaindex/tools": "^0.1.5",
"@llamaindex/upstash": "^0.0.29",
"@llamaindex/vercel": "^0.1.15",
"@llamaindex/vllm": "^0.0.51",
"@llamaindex/voyage-ai": "^1.0.21",
"@llamaindex/weaviate": "^0.0.30",
"@llamaindex/workflow": "^1.1.15",
"@llamaindex/xai": "^0.0.12",
"@notionhq/client": "^4.0.0",
"@pinecone-database/pinecone": "^4.0.0",
"@vercel/postgres": "^0.10.0",
@@ -65,7 +65,7 @@
"commander": "^12.1.0",
"dotenv": "^17.2.0",
"js-tiktoken": "^1.0.14",
"llamaindex": "^0.11.14",
"llamaindex": "^0.11.19",
"mongodb": "6.7.0",
"postgres": "^3.4.4",
"wikipedia": "^2.1.2",
+5
View File
@@ -43,6 +43,11 @@
"vitest": "^3.1.1"
},
"packageManager": "pnpm@10.8.1",
"pnpm": {
"overrides": {
"@notionhq/client": "4.0.0"
}
},
"lint-staged": {
"*.{js,jsx,ts,tsx}": [
"eslint --fix",
+18
View File
@@ -1,5 +1,23 @@
# @llamaindex/autotool
## 8.0.19
### Patch Changes
- llamaindex@0.11.19
## 8.0.18
### Patch Changes
- llamaindex@0.11.18
## 8.0.17
### Patch Changes
- llamaindex@0.11.17
## 8.0.16
### Patch Changes
@@ -1,5 +1,26 @@
# @llamaindex/autotool-01-node-example
## 0.0.127
### Patch Changes
- llamaindex@0.11.19
- @llamaindex/autotool@8.0.19
## 0.0.126
### Patch Changes
- llamaindex@0.11.18
- @llamaindex/autotool@8.0.18
## 0.0.125
### Patch Changes
- llamaindex@0.11.17
- @llamaindex/autotool@8.0.17
## 0.0.124
### Patch Changes
@@ -13,5 +13,5 @@
"scripts": {
"start": "node --import tsx --import @llamaindex/autotool/node ./src/index.ts"
},
"version": "0.0.124"
"version": "0.0.127"
}
+1 -1
View File
@@ -6,7 +6,7 @@
"url": "git+https://github.com/run-llama/LlamaIndexTS.git",
"directory": "packages/autotool"
},
"version": "8.0.16",
"version": "8.0.19",
"description": "auto transpile your JS function to LLM Agent compatible",
"files": [
"dist",
+20
View File
@@ -1,5 +1,25 @@
# @llamaindex/cloud
## 4.0.24
### Patch Changes
- Updated dependencies [7ad3411]
- Updated dependencies [5da5b3c]
- @llamaindex/core@0.6.15
## 4.0.23
### Patch Changes
- a1b1598: fix: add generic types into agent data responses
## 4.0.22
### Patch Changes
- d2be868: Bug fixes for new beta agent-data cloud API
## 4.0.21
### Patch Changes
+8 -8
View File
@@ -1,6 +1,6 @@
{
"name": "@llamaindex/cloud",
"version": "4.0.21",
"version": "4.0.24",
"type": "module",
"license": "MIT",
"scripts": {
@@ -13,20 +13,20 @@
"./api",
"./reader",
"./parse",
"./agent"
"./beta/agent"
],
"exports": {
"./openapi.json": "./openapi.json",
"./agent": {
"./beta/agent": {
"require": {
"types": "./agent/dist/index.d.cts",
"default": "./agent/dist/index.cjs"
"types": "./beta/agent/dist/index.d.cts",
"default": "./beta/agent/dist/index.cjs"
},
"import": {
"types": "./agent/dist/index.d.ts",
"default": "./agent/dist/index.js"
"types": "./beta/agent/dist/index.d.ts",
"default": "./beta/agent/dist/index.js"
},
"default": "./agent/dist/index.js"
"default": "./beta/agent/dist/index.js"
},
"./api": {
"require": {
-136
View File
@@ -1,136 +0,0 @@
import { createClient, createConfig } from "@hey-api/client-fetch";
import { getEnv } from "@llamaindex/env";
import {
createAgentDataApiV1BetaAgentDataPost,
deleteAgentDataApiV1BetaAgentDataItemIdDelete,
getAgentDataApiV1BetaAgentDataItemIdGet,
searchAgentDataApiV1BetaAgentDataSearchPost,
updateAgentDataApiV1BetaAgentDataItemIdPut,
type AgentData,
type PaginatedResponseAgentData,
type SearchRequest,
} from "../client";
type AgentClientOptions = {
apiKey?: string;
baseUrl?: string;
collection: string;
agentUrlId: string;
};
/**
* Async client for agent data operations
*/
export class AgentClient {
private client: ReturnType<typeof createClient>;
private baseUrl: string;
private headers: Record<string, string>;
private collection: string;
private agentUrlId: string;
constructor(options: AgentClientOptions) {
this.collection = options.collection;
this.agentUrlId = options.agentUrlId;
const apiKey = options?.apiKey || getEnv("LLAMA_CLOUD_API_KEY");
this.baseUrl = options?.baseUrl || "https://api.cloud.llamaindex.ai/";
this.headers = {
"X-SDK-Name": "llamaindex-ts",
...(apiKey && { Authorization: `Bearer ${apiKey}` }),
};
this.client = createClient(
createConfig({
baseUrl: this.baseUrl,
headers: this.headers,
}),
);
}
/**
* Create new agent data
*/
async createItem<T>(data: T): Promise<AgentData> {
const response = await createAgentDataApiV1BetaAgentDataPost({
throwOnError: true,
body: {
collection: this.collection,
agent_slug: this.agentUrlId,
data: data as Record<string, unknown>,
},
client: this.client,
});
return response.data;
}
/**
* Get agent data by ID
*/
async getItem(id: string): Promise<AgentData | null> {
try {
const response = await getAgentDataApiV1BetaAgentDataItemIdGet({
throwOnError: true,
path: { item_id: id },
client: this.client,
});
return response.data;
} catch (error) {
if (
error instanceof Error &&
"response" in error &&
(error as { response?: { status?: number } }).response?.status === 404
) {
return null;
}
throw error;
}
}
/**
* Update agent data
*/
async updateItem<T>(id: string, data: T): Promise<AgentData> {
const response = await updateAgentDataApiV1BetaAgentDataItemIdPut({
throwOnError: true,
path: { item_id: id },
body: {
data: data as Record<string, unknown>,
},
client: this.client,
});
return response.data;
}
/**
* Delete agent data
*/
async delete(id: string): Promise<void> {
await deleteAgentDataApiV1BetaAgentDataItemIdDelete({
throwOnError: true,
path: { item_id: id },
client: this.client,
});
}
/**
* List agent data
*/
async list(options: SearchRequest): Promise<PaginatedResponseAgentData> {
const response = await searchAgentDataApiV1BetaAgentDataSearchPost({
throwOnError: true,
body: {
...options,
},
client: this.client,
});
return response.data;
}
}
export function createAgentClient(options: AgentClientOptions): AgentClient {
return new AgentClient(options);
}
-1
View File
@@ -1 +0,0 @@
export { AgentClient, createAgentClient } from "./client";
+314
View File
@@ -0,0 +1,314 @@
import { createClient, createConfig } from "@hey-api/client-fetch";
import { getEnv } from "@llamaindex/env";
import {
aggregateAgentDataApiV1BetaAgentDataAggregatePost,
createAgentDataApiV1BetaAgentDataPost,
deleteAgentDataApiV1BetaAgentDataItemIdDelete,
getAgentDataApiV1BetaAgentDataItemIdGet,
searchAgentDataApiV1BetaAgentDataSearchPost,
updateAgentDataApiV1BetaAgentDataItemIdPut,
type AgentData,
type AggregateGroup,
} from "../../client";
import type {
AggregateAgentDataOptions,
SearchAgentDataOptions,
TypedAgentData,
TypedAgentDataItems,
TypedAggregateGroup,
TypedAggregateGroupItems,
} from "./types";
/**
* Async client for agent data operations
*/
export class AgentClient<T = unknown> {
private client: ReturnType<typeof createClient>;
private baseUrl: string;
private headers: Record<string, string>;
private collection: string;
private agentUrlId: string;
constructor({
apiKey = getEnv("LLAMA_CLOUD_API_KEY"),
baseUrl = "https://api.cloud.llamaindex.ai/",
collection = "default",
agentUrlId = "default",
}: {
apiKey?: string;
baseUrl?: string;
collection?: string;
agentUrlId?: string;
}) {
this.baseUrl = baseUrl;
this.headers = {
"X-SDK-Name": "llamaindex-ts",
...(apiKey && { Authorization: `Bearer ${apiKey}` }),
};
this.client = createClient(
createConfig({
baseUrl: this.baseUrl,
headers: this.headers,
}),
);
this.collection = collection;
this.agentUrlId = agentUrlId;
}
/**
* Create new agent data
*/
async createItem(data: T): Promise<TypedAgentData<T>> {
const response = await createAgentDataApiV1BetaAgentDataPost({
throwOnError: true,
body: {
agent_slug: this.agentUrlId,
collection: this.collection,
data: data as Record<string, unknown>,
},
client: this.client,
});
return this.transformResponse(response.data);
}
/**
* Get agent data by ID
*/
async getItem(id: string): Promise<TypedAgentData<T> | null> {
try {
const response = await getAgentDataApiV1BetaAgentDataItemIdGet({
throwOnError: true,
path: { item_id: id },
client: this.client,
});
return this.transformResponse(response.data);
} catch (error) {
if (
error instanceof Error &&
"response" in error &&
(error as { response?: { status?: number } }).response?.status === 404
) {
return null;
}
throw error;
}
}
/**
* Update agent data
*/
async updateItem(id: string, data: T): Promise<TypedAgentData<T>> {
const response = await updateAgentDataApiV1BetaAgentDataItemIdPut({
throwOnError: true,
path: { item_id: id },
body: {
data: data as Record<string, unknown>,
},
client: this.client,
});
return this.transformResponse(response.data);
}
/**
* Delete agent data
*/
async deleteItem(id: string): Promise<void> {
await deleteAgentDataApiV1BetaAgentDataItemIdDelete({
throwOnError: true,
path: { item_id: id },
client: this.client,
});
}
/**
* List agent data
*/
async search(
options: SearchAgentDataOptions,
): Promise<TypedAgentDataItems<T>> {
const response = await searchAgentDataApiV1BetaAgentDataSearchPost({
throwOnError: true,
body: {
agent_slug: this.agentUrlId,
...(this.collection !== undefined && {
collection: this.collection,
}),
...(options.filter !== undefined && { filter: options.filter }),
...(options.orderBy !== undefined && { order_by: options.orderBy }),
...(options.pageSize !== undefined && { page_size: options.pageSize }),
...(options.offset !== undefined && { offset: options.offset }),
...(options.includeTotal !== undefined && {
include_total: options.includeTotal,
}),
},
client: this.client,
});
const result: TypedAgentDataItems<T> = {
items: response.data.items.map((item: AgentData) =>
this.transformResponse(item),
),
};
if (
response.data.total_size !== null &&
response.data.total_size !== undefined
) {
result.totalSize = response.data.total_size;
}
if (
response.data.next_page_token !== null &&
response.data.next_page_token !== undefined
) {
result.nextPageToken = response.data.next_page_token;
}
return result;
}
/**
* Aggregate agent data into groups
*/
async aggregate(
options: AggregateAgentDataOptions,
): Promise<TypedAggregateGroupItems<T>> {
const response = await aggregateAgentDataApiV1BetaAgentDataAggregatePost({
throwOnError: true,
body: {
agent_slug: this.agentUrlId,
...(this.collection !== undefined && {
collection: this.collection,
}),
...(options.filter !== undefined && { filter: options.filter }),
...(options.groupBy !== undefined && { group_by: options.groupBy }),
...(options.count !== undefined && { count: options.count }),
...(options.first !== undefined && { first: options.first }),
...(options.orderBy !== undefined && { order_by: options.orderBy }),
...(options.offset !== undefined && { offset: options.offset }),
...(options.pageSize !== undefined && { page_size: options.pageSize }),
},
client: this.client,
});
const result: TypedAggregateGroupItems<T> = {
items: response.data.items.map((item) =>
this.transformAggregateResponse(item),
),
};
if (
response.data.total_size !== null &&
response.data.total_size !== undefined
) {
result.totalSize = response.data.total_size;
}
if (
response.data.next_page_token !== null &&
response.data.next_page_token !== undefined
) {
result.nextPageToken = response.data.next_page_token;
}
return result;
}
/**
* Transform API response to typed data
*/
private transformResponse(data: AgentData): TypedAgentData<T> {
const result: TypedAgentData<T> = {
id: data.id!,
agentUrlId: data.agent_slug,
data: data.data as T,
createdAt: new Date(data.created_at!),
updatedAt: new Date(data.updated_at!),
};
if (data.collection !== undefined) {
result.collection = data.collection;
}
return result;
}
/**
* Transform API aggregate response to typed data
*/
private transformAggregateResponse(
data: AggregateGroup,
): TypedAggregateGroup<T> {
const result: TypedAggregateGroup<T> = {
groupKey: data.group_key,
};
if (data.count !== null && data.count !== undefined) {
result.count = data.count;
}
if (data.first_item !== null && data.first_item !== undefined) {
result.firstItem = data.first_item as T;
}
return result;
}
}
export interface AgentDataClientOptions<T = unknown> {
/** API key for the client */
apiKey?: string;
/** Base URL for the client */
/** Base URL of the llama cloud api */
baseUrl?: string;
/** If running in an agent runtime, optionally provide the window url to infer the agent url id */
windowUrl?: string;
/** Agent URL ID for the client, if not provided, it will be inferred from the window url, or fall back to "default" */
agentUrlId?: string;
/** Collection name for the client, defaults to "default" */
collection?: string;
}
/**
* Create a new AsyncAgentDataClient instance
* @param options - The options for the client
* @returns A new AgentClient instance
*/
export function createAgentDataClient<T = unknown>({
apiKey,
baseUrl,
windowUrl,
agentUrlId,
collection = "default",
}: {
apiKey?: string;
baseUrl?: string;
windowUrl?: string;
agentUrlId?: string;
collection?: string;
} = {}): AgentClient<T> {
if (windowUrl && !agentUrlId) {
try {
const path = new URL(windowUrl).pathname;
// /deployments/<agent-url-id>/ui/ -> ["", "deployments", "<agent-url-id>", "ui"]
agentUrlId = path.split("/")[2];
} catch (error) {
console.warn(
"Failed to infer agent url id from window url, falling back to default",
error,
);
}
}
return new AgentClient({
...(apiKey && { apiKey }),
...(baseUrl && { baseUrl }),
...(agentUrlId && { agentUrlId }),
collection,
});
}
+16
View File
@@ -0,0 +1,16 @@
export { AgentClient, createAgentDataClient } from "./client";
export type {
AggregateAgentDataOptions,
ComparisonOperator,
ExtractedData,
FilterOperation,
SearchAgentDataOptions,
StatusType,
TypedAgentData,
TypedAgentDataItems,
TypedAggregateGroup,
TypedAggregateGroupItems,
} from "./types";
export { StatusType as StatusTypeEnum } from "./types";
+138
View File
@@ -0,0 +1,138 @@
import type { FilterOperation as RawFilterOperation } from "../../client/types.gen";
/**
* Status types for agent data processing
*/
export const StatusType = {
ERROR: "error",
ACCEPTED: "accepted",
REJECTED: "rejected",
PENDING_REVIEW: "pending_review",
} as const;
export type StatusType = (typeof StatusType)[keyof typeof StatusType];
export const ComparisonOperator = {
GT: "gt",
GTE: "gte",
LT: "lt",
LTE: "lte",
EQ: "eq",
INCLUDES: "includes",
} as const;
export type ComparisonOperator =
(typeof ComparisonOperator)[keyof typeof ComparisonOperator];
/**
* Filter operation for searching/filtering agent data
*/
export type FilterOperation = RawFilterOperation;
/**
* Base extracted data interface
*/
export interface ExtractedData<T = unknown> {
/** The original data that was extracted from the document. For tracking changes. Should not be updated. */
original_data: T;
/** The latest state of the data. Will differ if data has been updated. */
data?: T;
/** The status of the extracted data. Prefer to use the StatusType values, but any string is allowed. */
status: StatusType | string;
/** Confidence scores, if any, for each primitive field in the original_data data. */
confidence?: Record<string, unknown>;
/** The ID of the file that was used to extract the data. */
file_id?: string;
/** The name of the file that was used to extract the data. */
file_name?: string;
/** The hash of the file that was used to extract the data. */
file_hash?: string;
/** Additional metadata about the extracted data, such as errors, tokens, etc. */
metadata?: Record<string, unknown>;
}
/**
* TypedAgentData interface for typed agent data
*/
export interface TypedAgentData<T = unknown> {
/** The unique ID of the agent data record. */
id: string;
/** The ID of the agent that created the data. */
agentUrlId: string;
/** The collection of the agent data. */
collection?: string;
/** The data of the agent data. Usually an ExtractedData&lt;SomeOtherType&gt; */
data: T;
/** The date and time the data was created. */
createdAt: Date;
/** The date and time the data was last updated. */
updatedAt: Date;
}
/**
* Paginated response of typed agent data items
*/
export interface TypedAgentDataItems<T = unknown> {
items: TypedAgentData<T>[];
totalSize?: number;
nextPageToken?: string;
}
/**
* Options for listing agent data
*/
export interface SearchAgentDataOptions {
/** Filter options for the list. */
filter?: Record<string, FilterOperation>;
/** Order by options for the list. */
orderBy?: string;
/** Page size for the list. */
pageSize?: number;
/** Offset for the list. */
offset?: number;
/**
* Whether to include the total number of items in the response.
* Should use only for first request to build total pagination, and not subsequent requests.
*/
includeTotal?: boolean;
}
/**
* Options for aggregating agent data
*/
export interface AggregateAgentDataOptions {
/** Filter options for the aggregation. */
filter?: Record<string, FilterOperation>;
/** Fields to group by. */
groupBy?: string[];
/** Whether to count the number of items in each group. */
count?: boolean;
/** Whether to return the first item in each group. */
first?: boolean;
/** Order by options for the aggregation. */
orderBy?: string;
/** Offset for the aggregation. */
offset?: number;
/** Page size for the aggregation. */
pageSize?: number;
}
/**
* Single aggregation group result
*/
export interface TypedAggregateGroup<T = unknown> {
/** The group key values */
groupKey: Record<string, unknown>;
/** Count of items in the group */
count?: number;
/** First item in the group */
firstItem?: T;
}
/**
* Paginated response of aggregated agent data
*/
export interface TypedAggregateGroupItems<T = unknown> {
items: TypedAggregateGroup<T>[];
totalSize?: number;
nextPageToken?: string;
}
+7
View File
@@ -1,5 +1,12 @@
# @llamaindex/core
## 0.6.15
### Patch Changes
- 7ad3411: feat: add llm.exec
- 5da5b3c: add progress callback to embeddings
## 0.6.14
### Patch Changes
+12 -1
View File
@@ -1,7 +1,7 @@
{
"name": "@llamaindex/core",
"type": "module",
"version": "0.6.14",
"version": "0.6.15",
"description": "LlamaIndex Core Module",
"exports": {
"./agent": {
@@ -59,6 +59,17 @@
},
"default": "./llms/dist/index.js"
},
"./llms/mock": {
"require": {
"types": "./llms/mock/dist/index.d.cts",
"default": "./llms/mock/dist/index.cjs"
},
"import": {
"types": "./llms/mock/dist/index.d.ts",
"default": "./llms/mock/dist/index.js"
},
"default": "./llms/mock/dist/index.js"
},
"./decorator": {
"require": {
"types": "./decorator/dist/index.d.cts",
+5 -2
View File
@@ -17,6 +17,7 @@ export type EmbeddingInfo = {
export type BaseEmbeddingOptions = {
logProgress?: boolean;
progressCallback?: (current: number, total: number) => void;
};
export abstract class BaseEmbedding extends TransformComponent<
@@ -138,9 +139,11 @@ export async function batchEmbeddings<T>(
const embeddings = await embedFunc(curBatch);
resultEmbeddings.push(...embeddings);
if (options?.progressCallback) {
options?.progressCallback?.(i + 1, queue.length);
}
if (options?.logProgress) {
console.log(`getting embedding progress: ${i} / ${queue.length}`);
console.log(`getting embedding progress: ${i + 1} / ${queue.length}`);
}
curBatch.length = 0;
+173 -1
View File
@@ -1,15 +1,20 @@
import { extractText } from "../utils/llms";
import { streamConverter } from "../utils/stream";
import { callTool, getToolCallsFromResponse } from "./tool-call";
import type {
ChatMessage,
ChatResponse,
ChatResponseChunk,
CompletionResponse,
ExecResponse,
ExecStreamResponse,
LLM,
LLMChatParamsNonStreaming,
LLMChatParamsStreaming,
LLMCompletionParamsNonStreaming,
LLMCompletionParamsStreaming,
LLMMetadata,
PartialToolCall,
ToolCallLLMMessageOptions,
} from "./type";
@@ -60,13 +65,180 @@ export abstract class BaseLLM<
AdditionalChatOptions,
AdditionalMessageOptions
>,
): Promise<AsyncIterable<ChatResponseChunk>>;
): Promise<AsyncIterable<ChatResponseChunk<AdditionalMessageOptions>>>;
abstract chat(
params: LLMChatParamsNonStreaming<
AdditionalChatOptions,
AdditionalMessageOptions
>,
): Promise<ChatResponse<AdditionalMessageOptions>>;
exec(
params: LLMChatParamsStreaming<
AdditionalChatOptions,
AdditionalMessageOptions
>,
): Promise<ExecStreamResponse<AdditionalMessageOptions>>;
exec(
params: LLMChatParamsNonStreaming<
AdditionalChatOptions,
AdditionalMessageOptions
>,
): Promise<ExecResponse<AdditionalMessageOptions>>;
async exec(
params:
| LLMChatParamsStreaming<AdditionalChatOptions, AdditionalMessageOptions>
| LLMChatParamsNonStreaming<
AdditionalChatOptions,
AdditionalMessageOptions
>,
): Promise<
| ExecResponse<AdditionalMessageOptions>
| ExecStreamResponse<AdditionalMessageOptions>
> {
if (params.stream) {
return this.streamExec(params);
}
const newMessages: ChatMessage<AdditionalMessageOptions>[] = [];
const response = await this.chat(params);
newMessages.push(response.message);
const toolCalls = getToolCallsFromResponse(response);
if (params.tools && toolCalls.length > 0) {
for (const toolCall of toolCalls) {
const toolResultMessage = await callTool<AdditionalMessageOptions>(
params.tools,
toolCall,
);
if (toolResultMessage) {
newMessages.push(toolResultMessage);
}
}
}
return {
newMessages,
toolCalls,
};
}
async streamExec(
params: LLMChatParamsStreaming<
AdditionalChatOptions,
AdditionalMessageOptions
>,
): Promise<ExecStreamResponse<AdditionalMessageOptions>> {
const responseStream = await this.chat(params);
const iterator = responseStream[Symbol.asyncIterator]();
const first = await iterator.next();
// Set firstChunk to null if empty
const firstChunk = !first.done ? first.value : null;
const hasToolCallsInFirst =
firstChunk?.options && "toolCall" in firstChunk.options;
if (!hasToolCallsInFirst) {
let content = firstChunk?.delta ?? "";
let finished = false;
return {
stream: (async function* () {
if (firstChunk) {
yield firstChunk;
}
for await (const chunk of {
[Symbol.asyncIterator]: () => iterator,
}) {
content += chunk.delta;
yield chunk;
}
finished = true;
})(),
toolCalls: [],
newMessages() {
if (!finished) {
throw new Error(
"New messages are not ready yet. Call newMessages() after the stream is done.",
);
}
return content
? [
{
role: "assistant",
content,
} as ChatMessage<AdditionalMessageOptions>,
]
: [];
},
};
}
// Helper function to process a chunk
function processChunk(
chunk: ChatResponseChunk,
toolCallMap: Map<string, PartialToolCall>,
): ChatResponseChunk | null {
if (chunk.options && "toolCall" in chunk.options) {
// update tool call map
for (const toolCall of chunk.options.toolCall as PartialToolCall[]) {
if (toolCall.id) {
toolCallMap.set(toolCall.id, toolCall);
}
}
// return the current full response with the tool calls
const toolCalls = Array.from(toolCallMap.values());
return {
...chunk,
options: {
...chunk.options,
toolCall: toolCalls,
},
};
}
return null;
}
// Collect for tool call
let fullResponse: ChatResponseChunk | null = null;
const toolCallMap = new Map<string, PartialToolCall>();
// Process first chunk
fullResponse = processChunk(firstChunk, toolCallMap);
// Process remaining chunks
while (true) {
const next = await iterator.next();
if (next.done) break;
const chunk = next.value;
const potentialFull = processChunk(chunk, toolCallMap);
if (potentialFull) {
fullResponse = potentialFull;
}
}
if (params.tools && fullResponse) {
const toolCalls = getToolCallsFromResponse(fullResponse);
const messages: ChatMessage<AdditionalMessageOptions>[] = [];
messages.push({
role: "assistant",
content: "",
options: {
toolCall: toolCalls,
} as AdditionalMessageOptions,
});
for (const toolCall of toolCalls) {
const toolResultMessage = await callTool<AdditionalMessageOptions>(
params.tools,
toolCall,
);
if (toolResultMessage) {
messages.push(toolResultMessage);
}
}
return {
stream: (async function* () {})(),
newMessages() {
return messages;
},
toolCalls,
};
} else {
throw new Error("Cannot get tool calls from response");
}
}
}
export abstract class ToolCallLLM<
@@ -1,5 +1,4 @@
// TODO: move to a test package
import { ToolCallLLM } from "../llms/base";
import { ToolCallLLM } from "./base";
import type {
ChatResponse,
ChatResponseChunk,
@@ -9,7 +8,7 @@ import type {
LLMCompletionParamsNonStreaming,
LLMCompletionParamsStreaming,
LLMMetadata,
} from "../llms/type";
} from "./type";
export class MockLLM extends ToolCallLLM {
metadata: LLMMetadata;
+61
View File
@@ -0,0 +1,61 @@
import { stringifyJSONToMessageContent } from "../utils";
import type {
BaseTool,
ChatMessage,
ChatResponse,
ChatResponseChunk,
ToolCall,
ToolCallLLMMessageOptions,
} from "./type";
export const getToolCallsFromResponse = (
response:
| ChatResponse<ToolCallLLMMessageOptions>
| ChatResponseChunk<ToolCallLLMMessageOptions>,
): ToolCall[] => {
let options;
if ("message" in response) {
options = response.message.options;
} else {
options = response.options;
}
if (options && "toolCall" in options) {
return (options.toolCall as ToolCall[]).map((toolCall) => ({
...toolCall,
input:
// XXX: this is a hack openai returns parsed object for streaming, but not for
// non-streaming
typeof toolCall.input === "string"
? JSON.parse(toolCall.input)
: toolCall.input,
}));
}
return [];
};
export const callTool = async <
AdditionalMessageOptions extends object = object,
>(
tools: BaseTool[],
toolCall: ToolCall,
): Promise<ChatMessage<AdditionalMessageOptions> | null> => {
const tool = tools?.find((t) => t.metadata.name === toolCall.name);
// TODO: consider using BaseToolWithCall instead of BaseTool to avoid checking for tool.call
if (tool && tool.call) {
const result = await tool.call(toolCall.input);
const toolResultMessage: ChatMessage<AdditionalMessageOptions> = {
role: "user",
content: stringifyJSONToMessageContent(result),
options: {
toolResult: {
id: toolCall.id,
result,
},
} as AdditionalMessageOptions,
};
return toolResultMessage;
}
return null;
};
+19 -3
View File
@@ -95,6 +95,22 @@ export type ChatResponseChunk<
options?: undefined | AdditionalMessageOptions;
};
export interface ExecResponse<
AdditionalMessageOptions extends object = object,
> {
newMessages: ChatMessage<AdditionalMessageOptions>[];
toolCalls: ToolCall[];
}
export interface ExecStreamResponse<
AdditionalMessageOptions extends object = object,
> {
stream: AsyncIterable<ChatResponseChunk<AdditionalMessageOptions>>;
// this is a function as while streaming, the assistant message is not ready yet - can be called after the stream is done
newMessages(): ChatMessage<AdditionalMessageOptions>[];
toolCalls: ToolCall[];
}
export interface CompletionResponse {
text: string;
/**
@@ -120,9 +136,9 @@ export interface LLMChatParamsBase<
AdditionalMessageOptions extends object = object,
> {
messages: ChatMessage<AdditionalMessageOptions>[];
additionalChatOptions?: AdditionalChatOptions;
tools?: BaseTool[];
responseFormat?: z.ZodType | object;
additionalChatOptions?: AdditionalChatOptions | undefined;
tools?: BaseTool[] | undefined;
responseFormat?: z.ZodType | object | undefined;
}
export interface LLMChatParamsStreaming<
-2
View File
@@ -70,8 +70,6 @@ export {
toToolDescriptions,
} from "./llms";
export { MockLLM } from "./mock";
export * from "./encoding";
export { objectEntries } from "./object-entries";
export * from "./stream";
+1 -1
View File
@@ -1,5 +1,5 @@
import { LLMAgent, validateAgentParams } from "@llamaindex/core/agent";
import { MockLLM } from "@llamaindex/core/utils";
import { MockLLM } from "@llamaindex/core/llms/mock";
import { expect, test } from "vitest";
import { ZodError } from "zod";
+80 -1
View File
@@ -1,4 +1,9 @@
import { truncateMaxTokens } from "@llamaindex/core/embeddings";
import {
BaseEmbedding,
batchEmbeddings,
truncateMaxTokens,
type BaseEmbeddingOptions,
} from "@llamaindex/core/embeddings";
import { Tokenizers, tokenizers } from "@llamaindex/env/tokenizers";
import { describe, expect, test } from "vitest";
@@ -27,3 +32,77 @@ describe("truncateMaxTokens", () => {
expect(t.includes("")).toBe(false);
});
});
describe("BaseEmbedding progressCallback", () => {
const mockEmbedFunc = async (text: string): Promise<number[]> => {
return Array.from({ length: 10 }, () => Math.random());
};
const mockBatchEmbedFunc = async (
texts: string[],
): Promise<Array<number[]>> => {
return await Promise.all(texts.map(mockEmbedFunc));
};
const mockProgressCallback = (current: number, total: number) => {
console.log(`Progress: ${current}/${total}`);
};
const mockLogProgress = true;
const mockOptions = {
logProgress: mockLogProgress,
progressCallback: mockProgressCallback,
};
class MockEmbedding extends BaseEmbedding {
constructor(options: BaseEmbeddingOptions) {
super();
this.options = options;
}
private options: BaseEmbeddingOptions;
async getTextEmbedding(text: string): Promise<number[]> {
return await mockEmbedFunc(text);
}
getTextEmbeddings = async (texts: string[]): Promise<Array<number[]>> => {
return await mockBatchEmbedFunc(texts);
};
async getTextEmbeddingsBatch(
texts: string[],
options?: BaseEmbeddingOptions,
): Promise<Array<number[]>> {
const mergedOptions = { ...this.options, ...options };
expect(mergedOptions.progressCallback).toBeDefined();
return await batchEmbeddings(
texts,
this.getTextEmbeddings,
this.embedBatchSize,
mergedOptions,
);
}
}
test("should call progressCallback with correct values", async () => {
// Import and use a real embedding class instead
const progressCalls: Array<{ current: number; total: number }> = [];
const progressCallback = (current: number, total: number) => {
progressCalls.push({ current, total });
};
const texts = ["text1", "text2", "text3"];
const embedding = new MockEmbedding({ progressCallback: progressCallback });
embedding.embedBatchSize = 1; // Set batch size to 1 for testing
// so that progressCallback is called for each item
// (otherwise, we'd only get a callback for 3/3, which is fine but less clear)
await embedding.getTextEmbeddingsBatch(texts);
expect(progressCalls).toEqual([
{ current: 1, total: 3 },
{ current: 2, total: 3 },
{ current: 3, total: 3 },
]);
});
});
+43
View File
@@ -0,0 +1,43 @@
import { MockLLM } from "@llamaindex/core/llms/mock";
import { describe, expect, it } from "vitest";
// TODO: add tests for tool calls
describe("BaseLLM exec", () => {
it("should stream text response when no tool call is made", async () => {
const responseMessage = "This is a response message while streaming";
const llm = new MockLLM({ responseMessage });
const { stream, newMessages, toolCalls } = await llm.exec({
messages: [{ content: "Hi", role: "user" }],
stream: true,
});
expect(() => newMessages()).toThrowError();
const chunks = [];
for await (const chunk of stream) {
chunks.push(chunk);
}
expect(chunks.map((c) => c.delta).join("")).toBe(responseMessage);
expect(toolCalls).toEqual([]);
expect(newMessages()).toEqual([
{ content: responseMessage, role: "assistant" },
]);
});
it("should return text response when no tool call is made", async () => {
const responseMessage = "This is a response message";
const llm = new MockLLM({ responseMessage });
const { newMessages, toolCalls } = await llm.exec({
messages: [{ content: "Hi", role: "user" }],
});
expect(newMessages).toEqual([
{ content: responseMessage, role: "assistant" },
]);
expect(toolCalls).toEqual([]);
});
});
+1 -1
View File
@@ -1,7 +1,7 @@
import { Settings } from "@llamaindex/core/global";
import type { ChatMessage, LLM } from "@llamaindex/core/llms";
import { MockLLM } from "@llamaindex/core/llms/mock";
import { createMemory, Memory, staticBlock } from "@llamaindex/core/memory";
import { MockLLM } from "@llamaindex/core/utils";
import type { Tokenizer } from "@llamaindex/env/tokenizers";
import {
afterAll,
@@ -1,6 +1,6 @@
import { SimpleChatEngine } from "@llamaindex/core/chat-engine";
import { MockLLM } from "@llamaindex/core/llms/mock";
import { Memory } from "@llamaindex/core/memory";
import { MockLLM } from "@llamaindex/core/utils";
import { describe, expect, test } from "vitest";
describe("SimpleChatEngine", () => {
+18
View File
@@ -1,5 +1,23 @@
# @llamaindex/experimental
## 0.0.196
### Patch Changes
- llamaindex@0.11.19
## 0.0.195
### Patch Changes
- llamaindex@0.11.18
## 0.0.194
### Patch Changes
- llamaindex@0.11.17
## 0.0.193
### Patch Changes
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "@llamaindex/experimental",
"description": "Experimental package for LlamaIndexTS",
"version": "0.0.193",
"version": "0.0.196",
"type": "module",
"types": "dist/type/index.d.ts",
"main": "dist/cjs/index.js",
+25
View File
@@ -1,5 +1,30 @@
# llamaindex
## 0.11.19
### Patch Changes
- Updated dependencies [7ad3411]
- Updated dependencies [5da5b3c]
- @llamaindex/core@0.6.15
- @llamaindex/workflow@1.1.15
- @llamaindex/cloud@4.0.24
- @llamaindex/node-parser@2.0.15
## 0.11.18
### Patch Changes
- Updated dependencies [a1b1598]
- @llamaindex/cloud@4.0.23
## 0.11.17
### Patch Changes
- Updated dependencies [d2be868]
- @llamaindex/cloud@4.0.22
## 0.11.16
### Patch Changes
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "llamaindex",
"version": "0.11.16",
"version": "0.11.19",
"license": "MIT",
"type": "module",
"keywords": [
+7
View File
@@ -1,5 +1,12 @@
# @llamaindex/core-test
## 0.1.10
### Patch Changes
- Updated dependencies [a1fdb07]
- @llamaindex/openai@0.4.9
## 0.1.9
### Patch Changes
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "@llamaindex/llamaindex-test",
"private": true,
"version": "0.1.9",
"version": "0.1.10",
"type": "module",
"scripts": {
"test": "vitest run"
+8
View File
@@ -1,5 +1,13 @@
# @llamaindex/node-parser
## 2.0.15
### Patch Changes
- Updated dependencies [7ad3411]
- Updated dependencies [5da5b3c]
- @llamaindex/core@0.6.15
## 2.0.14
### Patch Changes
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@llamaindex/node-parser",
"version": "2.0.14",
"version": "2.0.15",
"description": "Node parser for LlamaIndex",
"type": "module",
"exports": {
@@ -1,5 +1,14 @@
# @llamaindex/anthropic
## 0.3.17
### Patch Changes
- ddc0eaf: anthropic: stream partial tool calls
- Updated dependencies [7ad3411]
- Updated dependencies [5da5b3c]
- @llamaindex/core@0.6.15
## 0.3.16
### Patch Changes
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "@llamaindex/anthropic",
"description": "Anthropic Adapter for LlamaIndex",
"version": "0.3.16",
"version": "0.3.17",
"type": "module",
"main": "./dist/index.cjs",
"module": "./dist/index.js",
+16 -10
View File
@@ -578,7 +578,6 @@ export class Anthropic extends ToolCallLLM<
});
let currentToolCall: PartialToolCall | null = null;
let accumulatedToolInput = "";
for await (const part of stream) {
const textContent =
@@ -607,7 +606,13 @@ export class Anthropic extends ToolCallLLM<
name: part.content_block.name,
input: "",
};
accumulatedToolInput = "";
yield {
raw: part,
delta: "",
options: {
toolCall: [currentToolCall],
},
};
continue;
}
@@ -616,7 +621,14 @@ export class Anthropic extends ToolCallLLM<
part.delta.type === "input_json_delta" &&
currentToolCall
) {
accumulatedToolInput += part.delta.partial_json;
currentToolCall.input += part.delta.partial_json;
yield {
raw: part,
delta: "",
options: {
toolCall: [currentToolCall],
},
};
continue;
}
@@ -625,13 +637,7 @@ export class Anthropic extends ToolCallLLM<
raw: part,
delta: "",
options: {
toolCall: [
{
id: currentToolCall.id,
name: currentToolCall.name,
input: accumulatedToolInput,
},
],
toolCall: [currentToolCall],
},
};
currentToolCall = null;
@@ -1,5 +1,13 @@
# @llamaindex/assemblyai
## 0.1.14
### Patch Changes
- Updated dependencies [7ad3411]
- Updated dependencies [5da5b3c]
- @llamaindex/core@0.6.15
## 0.1.13
### Patch Changes
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "@llamaindex/assemblyai",
"description": "AssemblyAI Reader for LlamaIndex",
"version": "0.1.13",
"version": "0.1.14",
"type": "module",
"types": "dist/index.d.ts",
"main": "dist/index.cjs",
+8
View File
@@ -1,5 +1,13 @@
# @llamaindex/community
## 0.0.110
### Patch Changes
- Updated dependencies [7ad3411]
- Updated dependencies [5da5b3c]
- @llamaindex/core@0.6.15
## 0.0.109
### Patch Changes
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "@llamaindex/aws",
"description": "AWS package for LlamaIndexTS",
"version": "0.0.109",
"version": "0.0.110",
"type": "module",
"types": "dist/type/index.d.ts",
"main": "dist/cjs/index.js",
+10
View File
@@ -1,5 +1,15 @@
# @llamaindex/clip
## 0.0.65
### Patch Changes
- Updated dependencies [7ad3411]
- Updated dependencies [5da5b3c]
- Updated dependencies [a1fdb07]
- @llamaindex/core@0.6.15
- @llamaindex/openai@0.4.9
## 0.0.64
### Patch Changes
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "@llamaindex/clip",
"description": "Clip Embedding Adapter for LlamaIndex",
"version": "0.0.64",
"version": "0.0.65",
"type": "module",
"types": "dist/index.d.ts",
"main": "dist/index.cjs",
+8
View File
@@ -1,5 +1,13 @@
# @llamaindex/cohere
## 0.0.29
### Patch Changes
- Updated dependencies [7ad3411]
- Updated dependencies [5da5b3c]
- @llamaindex/core@0.6.15
## 0.0.28
### Patch Changes
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "@llamaindex/cohere",
"description": "Cohere Adapter for LlamaIndex",
"version": "0.0.28",
"version": "0.0.29",
"type": "module",
"main": "./dist/index.cjs",
"module": "./dist/index.js",
+10
View File
@@ -1,5 +1,15 @@
# @llamaindex/deepinfra
## 0.0.65
### Patch Changes
- Updated dependencies [7ad3411]
- Updated dependencies [5da5b3c]
- Updated dependencies [a1fdb07]
- @llamaindex/core@0.6.15
- @llamaindex/openai@0.4.9
## 0.0.64
### Patch Changes
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "@llamaindex/deepinfra",
"description": "Deepinfra Adapter for LlamaIndex",
"version": "0.0.64",
"version": "0.0.65",
"type": "module",
"main": "./dist/index.cjs",
"module": "./dist/index.js",
+7
View File
@@ -1,5 +1,12 @@
# @llamaindex/deepseek
## 0.0.26
### Patch Changes
- Updated dependencies [a1fdb07]
- @llamaindex/openai@0.4.9
## 0.0.25
### Patch Changes
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "@llamaindex/deepseek",
"description": "DeepSeek Adapter for LlamaIndex",
"version": "0.0.25",
"version": "0.0.26",
"type": "module",
"main": "./dist/index.cjs",
"module": "./dist/index.js",
+8
View File
@@ -1,5 +1,13 @@
# @llamaindex/discord
## 0.1.14
### Patch Changes
- Updated dependencies [7ad3411]
- Updated dependencies [5da5b3c]
- @llamaindex/core@0.6.15
## 0.1.13
### Patch Changes
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "@llamaindex/discord",
"description": "Discord Reader for LlamaIndex",
"version": "0.1.13",
"version": "0.1.14",
"type": "module",
"types": "dist/index.d.ts",
"main": "dist/index.cjs",
+8
View File
@@ -1,5 +1,13 @@
# @llamaindex/excel
## 0.1.15
### Patch Changes
- Updated dependencies [7ad3411]
- Updated dependencies [5da5b3c]
- @llamaindex/core@0.6.15
## 0.1.14
### Patch Changes
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "@llamaindex/excel",
"description": "Excel Reader for LlamaIndex",
"version": "0.1.14",
"version": "0.1.15",
"type": "module",
"types": "dist/index.d.ts",
"main": "dist/index.cjs",
@@ -1,5 +1,12 @@
# @llamaindex/fireworks
## 0.0.25
### Patch Changes
- Updated dependencies [a1fdb07]
- @llamaindex/openai@0.4.9
## 0.0.24
### Patch Changes
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "@llamaindex/fireworks",
"description": "Fireworks Adapter for LlamaIndex",
"version": "0.0.24",
"version": "0.0.25",
"type": "module",
"main": "./dist/index.cjs",
"module": "./dist/index.js",
+8
View File
@@ -1,5 +1,13 @@
# @llamaindex/google
## 0.3.14
### Patch Changes
- Updated dependencies [7ad3411]
- Updated dependencies [5da5b3c]
- @llamaindex/core@0.6.15
## 0.3.13
### Patch Changes
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "@llamaindex/google",
"description": "Google Adapter for LlamaIndex",
"version": "0.3.13",
"version": "0.3.14",
"type": "module",
"main": "./dist/index.cjs",
"module": "./dist/index.js",
+7
View File
@@ -1,5 +1,12 @@
# @llamaindex/groq
## 0.0.81
### Patch Changes
- Updated dependencies [a1fdb07]
- @llamaindex/openai@0.4.9
## 0.0.80
### Patch Changes
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "@llamaindex/groq",
"description": "Groq Adapter for LlamaIndex",
"version": "0.0.80",
"version": "0.0.81",
"type": "module",
"main": "./dist/index.cjs",
"module": "./dist/index.js",
@@ -1,5 +1,15 @@
# @llamaindex/huggingface
## 0.1.19
### Patch Changes
- Updated dependencies [7ad3411]
- Updated dependencies [5da5b3c]
- Updated dependencies [a1fdb07]
- @llamaindex/core@0.6.15
- @llamaindex/openai@0.4.9
## 0.1.18
### Patch Changes
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "@llamaindex/huggingface",
"description": "Huggingface Adapter for LlamaIndex",
"version": "0.1.18",
"version": "0.1.19",
"type": "module",
"types": "dist/index.d.ts",
"main": "dist/index.cjs",
+10
View File
@@ -1,5 +1,15 @@
# @llamaindex/jinaai
## 0.0.25
### Patch Changes
- Updated dependencies [7ad3411]
- Updated dependencies [5da5b3c]
- Updated dependencies [a1fdb07]
- @llamaindex/core@0.6.15
- @llamaindex/openai@0.4.9
## 0.0.24
### Patch Changes
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "@llamaindex/jinaai",
"description": "JinaAI Adapter for LlamaIndex",
"version": "0.0.24",
"version": "0.0.25",
"type": "module",
"main": "./dist/index.cjs",
"module": "./dist/index.js",
+8
View File
@@ -1,5 +1,13 @@
# @llamaindex/mistral
## 0.1.15
### Patch Changes
- Updated dependencies [7ad3411]
- Updated dependencies [5da5b3c]
- @llamaindex/core@0.6.15
## 0.1.14
### Patch Changes
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "@llamaindex/mistral",
"description": "Mistral Adapter for LlamaIndex",
"version": "0.1.14",
"version": "0.1.15",
"type": "module",
"main": "./dist/index.cjs",
"module": "./dist/index.js",
@@ -1,5 +1,13 @@
# @llamaindex/mixedbread
## 0.0.29
### Patch Changes
- Updated dependencies [7ad3411]
- Updated dependencies [5da5b3c]
- @llamaindex/core@0.6.15
## 0.0.28
### Patch Changes
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "@llamaindex/mixedbread",
"description": "Mixedbread Adapter for LlamaIndex",
"version": "0.0.28",
"version": "0.0.29",
"type": "module",
"main": "./dist/index.cjs",
"module": "./dist/index.js",
+8
View File
@@ -1,5 +1,13 @@
# @llamaindex/notion
## 0.1.14
### Patch Changes
- Updated dependencies [7ad3411]
- Updated dependencies [5da5b3c]
- @llamaindex/core@0.6.15
## 0.1.13
### Patch Changes
+4 -4
View File
@@ -1,7 +1,7 @@
{
"name": "@llamaindex/notion",
"description": "Notion Reader for LlamaIndex",
"version": "0.1.13",
"version": "0.1.14",
"type": "module",
"types": "dist/index.d.ts",
"main": "dist/index.cjs",
@@ -26,12 +26,12 @@
},
"devDependencies": {
"@llamaindex/core": "workspace:*",
"@llamaindex/env": "workspace:*",
"@notionhq/client": "^4.0.0"
"@llamaindex/env": "workspace:*"
},
"peerDependencies": {
"@llamaindex/core": "workspace:*",
"@llamaindex/env": "workspace:*"
"@llamaindex/env": "workspace:*",
"@notionhq/client": "^4.0.0"
},
"dependencies": {
"notion-md-crawler": "^1.0.2"
+8
View File
@@ -1,5 +1,13 @@
# @llamaindex/ollama
## 0.1.15
### Patch Changes
- Updated dependencies [7ad3411]
- Updated dependencies [5da5b3c]
- @llamaindex/core@0.6.15
## 0.1.14
### Patch Changes
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "@llamaindex/ollama",
"description": "Ollama Adapter for LlamaIndex",
"version": "0.1.14",
"version": "0.1.15",
"type": "module",
"main": "./dist/index.cjs",
"module": "./dist/index.js",

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