Compare commits

..

19 Commits

Author SHA1 Message Date
github-actions[bot] 97c00d67c3 Release 0.11.27 (#2169)
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-08-19 12:11:06 +08:00
Daniel 6ebd7c2f13 fix: bedrock complete using actual modelId (#2172) 2025-08-19 11:04:32 +08:00
Clelia (Astra) Bertelli 0267bb0e8e feat: add responseFormat to llm.exec (#2167) 2025-08-13 12:39:37 +08:00
Marcus Schiesser 7875ee91e6 chore: update chat-ui docs (#2168) 2025-08-13 12:26:22 +08:00
Orry e3405fca44 chore: point the local llm full example to the correct URL (#2162)
Co-authored-by: Marcus Schiesser <mail@marcusschiesser.de>
2025-08-08 14:56:35 +08:00
github-actions[bot] f3bc2b61e7 Release (#2164) 2025-08-07 15:18:42 -06:00
Logan 4c703767b7 Adding GPT-5 support (#2163) 2025-08-07 13:39:47 -06:00
github-actions[bot] a27648200d Release (#2161) 2025-08-07 13:39:20 -06:00
abdeliibrahim c93bb02002 #2159 Remove unneeded console logs from gemini stream (#2160)
Co-authored-by: Marcus Schiesser <mail@marcusschiesser.de>
2025-08-07 11:38:35 +08:00
github-actions[bot] e9ded4e65f Release (#2154)
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-08-06 12:18:06 +08:00
Marcus Schiesser 47a6f5fe5a chore: bump ollama (#2156) 2025-08-06 12:11:17 +08:00
Marcus Schiesser b80f33e264 chore: add opus 4.1 and fix prompt caching (#2155) 2025-08-06 11:54:27 +08:00
Alex Yang b6409b6823 chore: bump openai (#2152)
Co-authored-by: Marcus Schiesser <mail@marcusschiesser.de>
2025-08-06 10:58:45 +08:00
github-actions[bot] db3f556cb4 Release 0.11.26 (#2149)
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-08-05 12:00:17 +08:00
Marcus Schiesser 4b5179169b chore: add deprecation to readme (#2150) 2025-08-05 11:53:35 +08:00
abdeliibrahim 971d37ceba fix(deepseek): add 'as const' assertion to DEEPSEEK_MODELS for correct TypeScript inference (#2148)
Co-authored-by: Marcus Schiesser <marcus.schiesser@googlemail.com>
2025-08-05 10:30:13 +08:00
github-actions[bot] 3e0ffdc688 Release 0.11.25 (#2144)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2025-07-31 12:18:18 +08:00
Marcus Schiesser 049471bade chore: deprecate cloud packages (#2143) 2025-07-31 12:12:56 +08:00
github-actions[bot] 1e296ebe72 Release 0.11.24 (#2141)
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-30 12:56:45 -04:00
169 changed files with 40477 additions and 259 deletions
+35
View File
@@ -1,5 +1,40 @@
# @llamaindex/doc
## 0.2.52
### Patch Changes
- Updated dependencies [0267bb0]
- @llamaindex/core@0.6.20
- @llamaindex/cloud@4.1.2
- llamaindex@0.11.27
- @llamaindex/node-parser@2.0.20
- @llamaindex/openai@0.4.17
- @llamaindex/readers@3.1.19
- @llamaindex/workflow@1.1.21
## 0.2.51
### Patch Changes
- Updated dependencies [4c70376]
- @llamaindex/openai@0.4.16
## 0.2.50
### Patch Changes
- Updated dependencies [b6409b6]
- @llamaindex/openai@0.4.15
## 0.2.49
### Patch Changes
- Updated dependencies [4b51791]
- @llamaindex/cloud@4.1.1
- llamaindex@0.11.26
## 0.2.48
### Patch Changes
+3 -2
View File
@@ -1,6 +1,6 @@
{
"name": "@llamaindex/doc",
"version": "0.2.48",
"version": "0.2.52",
"private": true,
"scripts": {
"postinstall": "fumadocs-mdx",
@@ -15,7 +15,8 @@
"dependencies": {
"@huggingface/transformers": "^3.5.0",
"@icons-pack/react-simple-icons": "^10.1.0",
"@llamaindex/chat-ui-docs": "^0.0.5",
"@llamaindex/chat-ui-docs": "^0.1.0",
"@llamaindex/cloud": "workspace:*",
"@llamaindex/core": "workspace:*",
"@llamaindex/node-parser": "workspace:*",
"@llamaindex/openai": "workspace:*",
@@ -93,4 +93,4 @@ async function main() {
main().catch(console.error);
```
You can see the [full example file](https://github.com/run-llama/LlamaIndexTS/blob/main/examples/vectorIndexLocal.ts).
You can see the [full example file](https://github.com/run-llama/LlamaIndexTS/blob/main/examples/index/vectorIndexLocal.ts).
@@ -46,3 +46,31 @@ You should expect output something like:
]
}
```
## Using the `exec` method
Many LLMs do not natively support structured output, and often rely exclusively on prompt or context engineering.
In this sense, we proved you with an alternative for structured data extraction, using the `exec` method with `responseFormat`.
For example, you can, in a new folder, install our Anthropic integration and `zod` v3:
```package-install
npm init
npm i -D typescript @types/node
npm i @llamaindex/anthropic zod@3.25.76
```
And then try extracting data with this code:
<include cwd>../../examples/agents/tools/response-format-exec.ts</include>
The output should look like this:
```json
{
"title": "La Divina Commedia",
"author": "Dante Alighieri",
"year": 1321
}
```
@@ -1,5 +1,17 @@
# @llamaindex/cloudflare-worker-agent-test
## 0.0.188
### Patch Changes
- llamaindex@0.11.27
## 0.0.187
### Patch Changes
- llamaindex@0.11.26
## 0.0.186
### Patch Changes
@@ -1,6 +1,6 @@
{
"name": "@llamaindex/cloudflare-worker-agent-test",
"version": "0.0.186",
"version": "0.0.188",
"type": "module",
"private": true,
"scripts": {
@@ -1,5 +1,18 @@
# @llamaindex/llama-parse-browser-test
## 0.0.86
### Patch Changes
- @llamaindex/cloud@4.1.2
## 0.0.85
### Patch Changes
- Updated dependencies [4b51791]
- @llamaindex/cloud@4.1.1
## 0.0.84
### Patch Changes
@@ -1,7 +1,7 @@
{
"name": "@llamaindex/llama-parse-browser-test",
"private": true,
"version": "0.0.84",
"version": "0.0.86",
"type": "module",
"scripts": {
"dev": "vite",
@@ -14,6 +14,6 @@
"vite-plugin-wasm": "^3.4.1"
},
"dependencies": {
"llama-cloud-services": "^0.1.0"
"@llamaindex/cloud": "workspace:*"
}
}
+12
View File
@@ -1,5 +1,17 @@
# @llamaindex/next-agent-test
## 0.1.188
### Patch Changes
- llamaindex@0.11.27
## 0.1.187
### Patch Changes
- llamaindex@0.11.26
## 0.1.186
### Patch Changes
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@llamaindex/next-agent-test",
"version": "0.1.186",
"version": "0.1.188",
"private": true,
"scripts": {
"dev": "next dev",
@@ -1,5 +1,17 @@
# test-edge-runtime
## 0.1.187
### Patch Changes
- llamaindex@0.11.27
## 0.1.186
### Patch Changes
- llamaindex@0.11.26
## 0.1.185
### Patch Changes
@@ -1,6 +1,6 @@
{
"name": "@llamaindex/nextjs-edge-runtime-test",
"version": "0.1.185",
"version": "0.1.187",
"private": true,
"scripts": {
"dev": "next dev",
@@ -1,5 +1,31 @@
# @llamaindex/next-node-runtime
## 0.1.59
### Patch Changes
- llamaindex@0.11.27
- @llamaindex/huggingface@0.1.27
- @llamaindex/readers@3.1.19
## 0.1.58
### Patch Changes
- @llamaindex/huggingface@0.1.26
## 0.1.57
### Patch Changes
- @llamaindex/huggingface@0.1.25
## 0.1.56
### Patch Changes
- llamaindex@0.11.26
## 0.1.55
### Patch Changes
@@ -1,6 +1,6 @@
{
"name": "@llamaindex/next-node-runtime-test",
"version": "0.1.55",
"version": "0.1.59",
"private": true,
"scripts": {
"dev": "next dev",
@@ -1,5 +1,17 @@
# vite-import-llamaindex
## 0.0.54
### Patch Changes
- llamaindex@0.11.27
## 0.0.53
### Patch Changes
- llamaindex@0.11.26
## 0.0.52
### Patch Changes
@@ -1,7 +1,7 @@
{
"name": "vite-import-llamaindex",
"private": true,
"version": "0.0.52",
"version": "0.0.54",
"type": "module",
"scripts": {
"build": "vite build",
@@ -1,5 +1,17 @@
# @llamaindex/waku-query-engine-test
## 0.0.188
### Patch Changes
- llamaindex@0.11.27
## 0.0.187
### Patch Changes
- llamaindex@0.11.26
## 0.0.186
### Patch Changes
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@llamaindex/waku-query-engine-test",
"version": "0.0.186",
"version": "0.0.188",
"type": "module",
"private": true,
"scripts": {
+105
View File
@@ -1,5 +1,110 @@
# examples
## 0.3.39
### Patch Changes
- Updated dependencies [0267bb0]
- @llamaindex/core@0.6.20
- @llamaindex/cloud@4.1.2
- llamaindex@0.11.27
- @llamaindex/node-parser@2.0.20
- @llamaindex/anthropic@0.3.23
- @llamaindex/assemblyai@0.1.19
- @llamaindex/clip@0.0.73
- @llamaindex/cohere@0.0.34
- @llamaindex/deepinfra@0.0.73
- @llamaindex/discord@0.1.19
- @llamaindex/google@0.3.20
- @llamaindex/huggingface@0.1.27
- @llamaindex/jinaai@0.0.33
- @llamaindex/mistral@0.1.20
- @llamaindex/mixedbread@0.0.34
- @llamaindex/notion@0.1.19
- @llamaindex/ollama@0.1.21
- @llamaindex/openai@0.4.17
- @llamaindex/perplexity@0.0.30
- @llamaindex/portkey-ai@0.0.62
- @llamaindex/replicate@0.0.62
- @llamaindex/bm25-retriever@0.0.9
- @llamaindex/astra@0.0.34
- @llamaindex/azure@0.1.34
- @llamaindex/chroma@0.0.34
- @llamaindex/elastic-search@0.1.20
- @llamaindex/firestore@1.0.27
- @llamaindex/milvus@0.1.29
- @llamaindex/mongodb@0.0.35
- @llamaindex/pinecone@0.1.20
- @llamaindex/postgres@0.0.63
- @llamaindex/qdrant@0.1.30
- @llamaindex/supabase@0.1.21
- @llamaindex/upstash@0.0.34
- @llamaindex/weaviate@0.0.35
- @llamaindex/vercel@0.1.20
- @llamaindex/voyage-ai@1.0.26
- @llamaindex/readers@3.1.19
- @llamaindex/tools@0.1.10
- @llamaindex/workflow@1.1.21
- @llamaindex/deepseek@0.0.35
- @llamaindex/fireworks@0.0.33
- @llamaindex/groq@0.0.89
- @llamaindex/together@0.0.33
- @llamaindex/vllm@0.0.59
- @llamaindex/xai@0.0.20
## 0.3.38
### Patch Changes
- Updated dependencies [4c70376]
- @llamaindex/openai@0.4.16
- @llamaindex/clip@0.0.72
- @llamaindex/deepinfra@0.0.72
- @llamaindex/deepseek@0.0.34
- @llamaindex/fireworks@0.0.32
- @llamaindex/groq@0.0.88
- @llamaindex/huggingface@0.1.26
- @llamaindex/jinaai@0.0.32
- @llamaindex/perplexity@0.0.29
- @llamaindex/azure@0.1.33
- @llamaindex/together@0.0.32
- @llamaindex/vllm@0.0.58
- @llamaindex/xai@0.0.19
## 0.3.37
### Patch Changes
- Updated dependencies [47a6f5f]
- Updated dependencies [b80f33e]
- Updated dependencies [b6409b6]
- Updated dependencies [b80f33e]
- @llamaindex/ollama@0.1.20
- @llamaindex/anthropic@0.3.22
- @llamaindex/openai@0.4.15
- @llamaindex/clip@0.0.71
- @llamaindex/deepinfra@0.0.71
- @llamaindex/deepseek@0.0.33
- @llamaindex/fireworks@0.0.31
- @llamaindex/groq@0.0.87
- @llamaindex/huggingface@0.1.25
- @llamaindex/jinaai@0.0.31
- @llamaindex/perplexity@0.0.28
- @llamaindex/azure@0.1.32
- @llamaindex/together@0.0.31
- @llamaindex/vllm@0.0.57
- @llamaindex/xai@0.0.18
## 0.3.36
### Patch Changes
- Updated dependencies [4b51791]
- Updated dependencies [971d37c]
- @llamaindex/cloud@4.1.1
- @llamaindex/deepseek@0.0.32
- llamaindex@0.11.26
## 0.3.35
### Patch Changes
@@ -0,0 +1,39 @@
import { Anthropic } from "@llamaindex/anthropic";
import { ChatMessage, ToolCall } from "llamaindex";
import { z } from "zod";
const llm = new Anthropic({ model: "claude-4-0-sonnet" });
const responseSchema = z.object({
title: z.string().describe("The title of the book"),
author: z.string().describe("The author of the book"),
year: z.number().describe("The publication year"),
});
async function main() {
const messages: ChatMessage[] = [];
let toolCalls: ToolCall[] = [];
do {
const result = await llm.exec({
messages: [
{
role: "system",
content: `You are a book expert. Your task is, given a user message, extract the title, author and publication year of the book and output them in JSON format.`,
},
{
role: "user",
content: `I have been reading La Divina Commedia by Dante Alighieri, published in 1321, which tells the story of a guy who goes through Hell, Purgatory and Heaven just to meet his beloved ex-girlfriend.`,
},
],
responseFormat: responseSchema,
});
console.log(result.newMessages[0].content);
messages.push(...result.newMessages);
toolCalls = result.toolCalls;
} while (toolCalls.length == 0);
console.log(messages[1].content);
console.log(toolCalls);
}
main().catch(console.error);
+14
View File
@@ -0,0 +1,14 @@
import { anthropic } from "@llamaindex/anthropic";
import { agent } from "@llamaindex/workflow";
(async function () {
const workflow = agent({
llm: anthropic({
model: "claude-4-1-opus",
}),
});
const result = await workflow.run(
"What are three compounds we should consider investigating to advance research into new antibiotics? Why should we consider them?",
);
console.log(result.data.result);
})();
+9
View File
@@ -0,0 +1,9 @@
import { ollama } from "@llamaindex/ollama";
(async () => {
const llm = ollama({
model: "gpt-oss:20b",
});
const response = await llm.complete({ prompt: "How are you?" });
console.log("Response:", response.text);
})();
+47 -47
View File
@@ -1,6 +1,6 @@
{
"name": "@llamaindex/examples",
"version": "0.3.35",
"version": "0.3.39",
"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.21",
"@llamaindex/assemblyai": "^0.1.18",
"@llamaindex/astra": "^0.0.33",
"@llamaindex/azure": "^0.1.31",
"@llamaindex/bm25-retriever": "^0.0.8",
"@llamaindex/chroma": "^0.0.33",
"@llamaindex/clip": "^0.0.70",
"llama-cloud-services": "^0.1.0",
"@llamaindex/cohere": "^0.0.33",
"@llamaindex/core": "^0.6.19",
"@llamaindex/deepinfra": "^0.0.70",
"@llamaindex/deepseek": "^0.0.31",
"@llamaindex/discord": "^0.1.18",
"@llamaindex/elastic-search": "^0.1.19",
"@llamaindex/anthropic": "^0.3.23",
"@llamaindex/assemblyai": "^0.1.19",
"@llamaindex/astra": "^0.0.34",
"@llamaindex/azure": "^0.1.34",
"@llamaindex/bm25-retriever": "^0.0.9",
"@llamaindex/chroma": "^0.0.34",
"@llamaindex/clip": "^0.0.73",
"@llamaindex/cloud": "^4.1.2",
"@llamaindex/cohere": "^0.0.34",
"@llamaindex/core": "^0.6.20",
"@llamaindex/deepinfra": "^0.0.73",
"@llamaindex/deepseek": "^0.0.35",
"@llamaindex/discord": "^0.1.19",
"@llamaindex/elastic-search": "^0.1.20",
"@llamaindex/env": "^0.1.30",
"@llamaindex/firestore": "^1.0.26",
"@llamaindex/fireworks": "^0.0.30",
"@llamaindex/google": "^0.3.18",
"@llamaindex/groq": "^0.0.86",
"@llamaindex/huggingface": "^0.1.24",
"@llamaindex/jinaai": "^0.0.30",
"@llamaindex/milvus": "^0.1.28",
"@llamaindex/mistral": "^0.1.19",
"@llamaindex/mixedbread": "^0.0.33",
"@llamaindex/mongodb": "^0.0.34",
"@llamaindex/node-parser": "^2.0.19",
"@llamaindex/notion": "^0.1.18",
"@llamaindex/ollama": "^0.1.19",
"@llamaindex/openai": "^0.4.14",
"@llamaindex/perplexity": "^0.0.27",
"@llamaindex/pinecone": "^0.1.19",
"@llamaindex/portkey-ai": "^0.0.61",
"@llamaindex/postgres": "^0.0.62",
"@llamaindex/qdrant": "^0.1.29",
"@llamaindex/readers": "^3.1.18",
"@llamaindex/replicate": "^0.0.61",
"@llamaindex/supabase": "^0.1.20",
"@llamaindex/together": "^0.0.30",
"@llamaindex/tools": "^0.1.9",
"@llamaindex/upstash": "^0.0.33",
"@llamaindex/vercel": "^0.1.19",
"@llamaindex/vllm": "^0.0.56",
"@llamaindex/voyage-ai": "^1.0.25",
"@llamaindex/weaviate": "^0.0.34",
"@llamaindex/workflow": "^1.1.20",
"@llamaindex/xai": "^0.0.17",
"@llamaindex/firestore": "^1.0.27",
"@llamaindex/fireworks": "^0.0.33",
"@llamaindex/google": "^0.3.20",
"@llamaindex/groq": "^0.0.89",
"@llamaindex/huggingface": "^0.1.27",
"@llamaindex/jinaai": "^0.0.33",
"@llamaindex/milvus": "^0.1.29",
"@llamaindex/mistral": "^0.1.20",
"@llamaindex/mixedbread": "^0.0.34",
"@llamaindex/mongodb": "^0.0.35",
"@llamaindex/node-parser": "^2.0.20",
"@llamaindex/notion": "^0.1.19",
"@llamaindex/ollama": "^0.1.21",
"@llamaindex/openai": "^0.4.17",
"@llamaindex/perplexity": "^0.0.30",
"@llamaindex/pinecone": "^0.1.20",
"@llamaindex/portkey-ai": "^0.0.62",
"@llamaindex/postgres": "^0.0.63",
"@llamaindex/qdrant": "^0.1.30",
"@llamaindex/readers": "^3.1.19",
"@llamaindex/replicate": "^0.0.62",
"@llamaindex/supabase": "^0.1.21",
"@llamaindex/together": "^0.0.33",
"@llamaindex/tools": "^0.1.10",
"@llamaindex/upstash": "^0.0.34",
"@llamaindex/vercel": "^0.1.20",
"@llamaindex/vllm": "^0.0.59",
"@llamaindex/voyage-ai": "^1.0.26",
"@llamaindex/weaviate": "^0.0.35",
"@llamaindex/workflow": "^1.1.21",
"@llamaindex/xai": "^0.0.20",
"@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.24",
"llamaindex": "^0.11.27",
"mongodb": "6.7.0",
"postgres": "^3.4.4",
"wikipedia": "^2.1.2",
+4 -1
View File
@@ -9,7 +9,10 @@
"start:html": "node --import tsx ./src/html.ts",
"start:markdown": "node --import tsx ./src/markdown.ts",
"start:pdf": "node --import tsx ./src/pdf.ts",
"start:llamaparse": "node --import tsx ./src/llamaparse.ts",
"start:notion": "node --import tsx ./src/notion.ts",
"start:llamaparse-dir": "node --import tsx ./src/simple-directory-reader-with-llamaparse.ts",
"start:llamaparse-json": "node --import tsx ./src/llamaparse-json.ts",
"start:discord": "node --import tsx ./src/discord.ts",
"start:json": "node --import tsx ./src/json.ts",
"start:obsidian": "node --import tsx ./src/obsidian.ts",
@@ -17,7 +20,7 @@
"start:excel": "node --import tsx ./src/excel.ts"
},
"dependencies": {
"llama-cloud-services": "^0.1.0",
"@llamaindex/cloud": "workspace:* || ^2.0.24",
"@llamaindex/excel": "workspace:*",
"@llamaindex/readers": "workspace:* || ^1.0.25",
"@notionhq/client": "^4.0.0",
+12
View File
@@ -1,5 +1,17 @@
# @llamaindex/autotool
## 8.0.27
### Patch Changes
- llamaindex@0.11.27
## 8.0.26
### Patch Changes
- llamaindex@0.11.26
## 8.0.25
### Patch Changes
@@ -1,5 +1,19 @@
# @llamaindex/autotool-01-node-example
## 0.0.135
### Patch Changes
- llamaindex@0.11.27
- @llamaindex/autotool@8.0.27
## 0.0.134
### Patch Changes
- llamaindex@0.11.26
- @llamaindex/autotool@8.0.26
## 0.0.133
### Patch Changes
@@ -13,5 +13,5 @@
"scripts": {
"start": "node --import tsx --import @llamaindex/autotool/node ./src/index.ts"
},
"version": "0.0.133"
"version": "0.0.135"
}
+1 -1
View File
@@ -6,7 +6,7 @@
"url": "git+https://github.com/run-llama/LlamaIndexTS.git",
"directory": "packages/autotool"
},
"version": "8.0.25",
"version": "8.0.27",
"description": "auto transpile your JS function to LLM Agent compatible",
"files": [
"dist",
+716
View File
@@ -0,0 +1,716 @@
# @llamaindex/cloud
## 4.1.2
### Patch Changes
- Updated dependencies [0267bb0]
- @llamaindex/core@0.6.20
## 4.1.1
### Patch Changes
- 4b51791: Add deprecation to README
## 4.1.0
### Minor Changes
- 049471b: Add deprecation warning
## 4.0.28
### Patch Changes
- c3bf3c7: Adding support for citations to beta agent data schema
- Updated dependencies [f9f1de9]
- @llamaindex/core@0.6.19
## 4.0.27
### Patch Changes
- Updated dependencies [f29799e]
- Updated dependencies [7224c06]
- @llamaindex/core@0.6.18
## 4.0.26
### Patch Changes
- Updated dependencies [38da40b]
- @llamaindex/core@0.6.17
## 4.0.25
### Patch Changes
- 2967d57: Default to \_public agent url id
- Updated dependencies [a8ec08c]
- @llamaindex/core@0.6.16
## 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
- 579ca0c: chore: bump sdk version
## 4.0.20
### Patch Changes
- 48b0d88: fix: exports in `api` submodule
- f185772: fix(cloud): missing file
## 4.0.19
### Patch Changes
- 5a0ed1f: feat: init agent api on cloud sdk
- 5a0ed1f: feat: init agent api on cloud sdk
- Updated dependencies [8eeac33]
- @llamaindex/core@0.6.14
## 4.0.18
### Patch Changes
- 47a7555: chore: bump sdk version
## 4.0.17
### Patch Changes
- Updated dependencies [d578889]
- Updated dependencies [0fcc92f]
- Updated dependencies [515a8b9]
- @llamaindex/core@0.6.13
## 4.0.16
### Patch Changes
- Updated dependencies [7039e1a]
- Updated dependencies [7039e1a]
- @llamaindex/core@0.6.12
## 4.0.15
### Patch Changes
- Updated dependencies [a89e187]
- Updated dependencies [62699b7]
- Updated dependencies [c5b2691]
- Updated dependencies [d8ac8d3]
- @llamaindex/core@0.6.11
## 4.0.14
### Patch Changes
- Updated dependencies [1b5af14]
- @llamaindex/core@0.6.10
## 4.0.13
### Patch Changes
- Updated dependencies [71598f8]
- @llamaindex/core@0.6.9
## 4.0.12
### Patch Changes
- Updated dependencies [c927457]
- @llamaindex/core@0.6.8
## 4.0.11
### Patch Changes
- 76ff23d: Fix pRetry not working with CommonJS
## 4.0.10
### Patch Changes
- Updated dependencies [59601dd]
- @llamaindex/core@0.6.7
## 4.0.9
### Patch Changes
- 3703f90: feat(parse): add upload API
## 4.0.8
### Patch Changes
- Updated dependencies [680b529]
- Updated dependencies [361a685]
- @llamaindex/core@0.6.6
## 4.0.7
### Patch Changes
- 40f5f41: Improve the loadJson function in LlamaParseReader to align with loadData by allowing URL inputs. Ensures s3://, http://, and https:// paths are not treated as local file paths.
- Updated dependencies [d671ed6]
- @llamaindex/core@0.6.5
## 4.0.6
### Patch Changes
- Updated dependencies [9b2e25a]
- @llamaindex/core@0.6.4
- @llamaindex/env@0.1.30
## 4.0.5
### Patch Changes
- 2225ffd: feat: bump llama cloud sdk
## 4.0.4
### Patch Changes
- Updated dependencies [3ee8c83]
- @llamaindex/core@0.6.3
## 4.0.3
### Patch Changes
- 41191d0: fix(parse): file input
## 4.0.2
### Patch Changes
- Updated dependencies [9c63f3f]
- @llamaindex/core@0.6.2
## 4.0.1
### Patch Changes
- Updated dependencies [1b6f368]
- Updated dependencies [eaf326e]
- @llamaindex/core@0.6.1
## 4.0.0
### Patch Changes
- bf56fc0: chore: bump sdk openapi.json
- 5189b44: fix: add retry handling logic to parser reader and fix lint issues
- Updated dependencies [21bebfc]
- Updated dependencies [93bc0ff]
- Updated dependencies [91a18e7]
- Updated dependencies [5189b44]
- @llamaindex/core@0.6.0
## 3.0.9
### Patch Changes
- Updated dependencies [40ee761]
- @llamaindex/core@0.5.8
## 3.0.8
### Patch Changes
- Updated dependencies [4bac71d]
- @llamaindex/core@0.5.7
## 3.0.7
### Patch Changes
- Updated dependencies [beb922b]
- @llamaindex/env@0.1.29
- @llamaindex/core@0.5.6
## 3.0.6
### Patch Changes
- Updated dependencies [5668970]
- @llamaindex/core@0.5.5
## 3.0.5
### Patch Changes
- Updated dependencies [ad3c7f1]
- @llamaindex/core@0.5.4
## 3.0.4
### Patch Changes
- Updated dependencies [cb021e7]
- @llamaindex/core@0.5.3
## 3.0.3
### Patch Changes
- Updated dependencies [d952e68]
- @llamaindex/core@0.5.2
## 3.0.2
### Patch Changes
- c902fcb: chore: bump llamacloud openapi
## 3.0.1
### Patch Changes
- Updated dependencies [cc50c9c]
- @llamaindex/env@0.1.28
- @llamaindex/core@0.5.1
## 3.0.0
### Patch Changes
- Updated dependencies [6a4a737]
- Updated dependencies [d924c63]
- @llamaindex/core@0.5.0
## 2.0.24
### Patch Changes
- 1c908fd: Revert previous release (not working with CJS)
- Updated dependencies [1c908fd]
- @llamaindex/core@0.4.23
- @llamaindex/env@0.1.27
## 2.0.23
### Patch Changes
- cb608b5: fix: bundle output incorrect
- Updated dependencies [cb608b5]
- @llamaindex/core@0.4.22
- @llamaindex/env@0.1.26
## 2.0.22
### Patch Changes
- d6c270e: feat: support pass project and org id to llama parse reader
- Updated dependencies [9456616]
- Updated dependencies [1931bbc]
- @llamaindex/core@0.4.21
## 2.0.21
### Patch Changes
- 5dec9f9: chore: bump sdk deps version
- fd9c829: chore: bump llamacloud openapi
- Updated dependencies [d211b7a]
- @llamaindex/core@0.4.20
## 2.0.20
### Patch Changes
- 012495b: chore: bump llamacloud sdk
## 2.0.19
### Patch Changes
- Updated dependencies [a9b5b99]
- @llamaindex/core@0.4.19
## 2.0.18
### Patch Changes
- Updated dependencies [b504303]
- Updated dependencies [e0f6cc3]
- @llamaindex/env@0.1.25
- @llamaindex/core@0.4.18
## 2.0.17
### Patch Changes
- Updated dependencies [3d1808b]
- @llamaindex/core@0.4.17
## 2.0.16
### Patch Changes
- 8be4589: chore: bump version
- Updated dependencies [8be4589]
- @llamaindex/core@0.4.16
- @llamaindex/env@0.1.24
## 2.0.15
### Patch Changes
- Updated dependencies [d2b2722]
- @llamaindex/env@0.1.23
- @llamaindex/core@0.4.15
## 2.0.14
### Patch Changes
- Updated dependencies [969365c]
- @llamaindex/env@0.1.22
- @llamaindex/core@0.4.14
## 2.0.13
### Patch Changes
- 90d265c: chore: bump version
- Updated dependencies [90d265c]
- @llamaindex/core@0.4.13
- @llamaindex/env@0.1.21
## 2.0.12
### Patch Changes
- Updated dependencies [ef4f63d]
- @llamaindex/core@0.4.12
## 2.0.11
### Patch Changes
- Updated dependencies [6d22fa2]
- @llamaindex/core@0.4.11
## 2.0.10
### Patch Changes
- Updated dependencies [a7b0ac3]
- Updated dependencies [c69605f]
- @llamaindex/core@0.4.10
## 2.0.9
### Patch Changes
- Updated dependencies [7ae6eaa]
- @llamaindex/core@0.4.9
## 2.0.8
### Patch Changes
- Updated dependencies [f865c98]
- @llamaindex/core@0.4.8
## 2.0.7
### Patch Changes
- Updated dependencies [d89ebe0]
- Updated dependencies [fd8c882]
- @llamaindex/core@0.4.7
## 2.0.6
### Patch Changes
- Updated dependencies [4fc001c]
- @llamaindex/env@0.1.20
- @llamaindex/core@0.4.6
## 2.0.5
### Patch Changes
- Updated dependencies [ad85bd0]
- @llamaindex/core@0.4.5
- @llamaindex/env@0.1.19
## 2.0.4
### Patch Changes
- Updated dependencies [a8d3fa6]
- @llamaindex/env@0.1.18
- @llamaindex/core@0.4.4
## 2.0.3
### Patch Changes
- Updated dependencies [95a5cc6]
- @llamaindex/core@0.4.3
## 2.0.2
### Patch Changes
- Updated dependencies [14cc9eb]
- @llamaindex/env@0.1.17
- @llamaindex/core@0.4.2
## 2.0.1
### Patch Changes
- Updated dependencies [9c73f0a]
- @llamaindex/core@0.4.1
## 2.0.0
### Patch Changes
- Updated dependencies [359fd33]
- Updated dependencies [efb7e1b]
- Updated dependencies [98ba1e7]
- Updated dependencies [620c63c]
- @llamaindex/core@0.4.0
## 1.0.8
### Patch Changes
- Updated dependencies [60b185f]
- @llamaindex/core@0.3.7
## 1.0.7
### Patch Changes
- Updated dependencies [691c5bc]
- @llamaindex/core@0.3.6
## 1.0.6
### Patch Changes
- Updated dependencies [fa60fc6]
- @llamaindex/env@0.1.16
- @llamaindex/core@0.3.5
## 1.0.5
### Patch Changes
- Updated dependencies [e2a0876]
- @llamaindex/core@0.3.4
## 1.0.4
### Patch Changes
- 06f632b: fix(cloud): allow filename in llama parse
## 1.0.3
### Patch Changes
- Updated dependencies [0493f67]
- @llamaindex/core@0.3.3
## 1.0.2
### Patch Changes
- Updated dependencies [4ba2cfe]
- @llamaindex/env@0.1.15
- @llamaindex/core@0.3.2
## 1.0.1
### Patch Changes
- 4c38c1b: fix(cloud): do not detect file type in llama parse
- 24d065f: Log Parse Job Errors when verbose is enabled
- a75af83: refactor: move some llm and embedding to single package
- Updated dependencies [ae49ff4]
- Updated dependencies [a75af83]
- @llamaindex/env@0.1.14
- @llamaindex/core@0.3.1
## 1.0.0
### Patch Changes
- Updated dependencies [1364e8e]
- Updated dependencies [96fc69c]
- @llamaindex/core@0.3.0
## 0.2.14
### Patch Changes
- Updated dependencies [5f67820]
- @llamaindex/core@0.2.12
## 0.2.13
### Patch Changes
- Updated dependencies [ee697fb]
- @llamaindex/core@0.2.11
## 0.2.12
### Patch Changes
- Updated dependencies [3489e7d]
- Updated dependencies [468bda5]
- @llamaindex/core@0.2.10
## 0.2.11
### Patch Changes
- 0b20ff9: fix: package.json format
## 0.2.10
### Patch Changes
- 981811e: fix(cloud): llama parse reader save image incorrectly
## 0.2.9
### Patch Changes
- df441e2: fix: consoleLogger is missing from `@llamaindex/env`
- Updated dependencies [df441e2]
- @llamaindex/core@0.2.8
- @llamaindex/env@0.1.13
## 0.2.8
### Patch Changes
- ac41ed3: feat: bump cloud sdk version
## 0.2.7
### Patch Changes
- fb36eff: fix: backport for node.js 18
There could have one missing API in the node.js 18, so we need to backport it to make it work.
- d24d3d1: fix: print warning when llama parse reader has error
- Updated dependencies [2cd1383]
- @llamaindex/core@0.2.3
## 0.2.6
### Patch Changes
- b42adeb: fix: get job result in llama parse reader
- Updated dependencies [749b43a]
- @llamaindex/core@0.2.2
## 0.2.5
### Patch Changes
- 85c2e19: feat: `@llamaindex/cloud` package update
- Bump to latest openapi schema
- Move LlamaParse class from llamaindex, this will allow you use llamaparse in more non-node.js environment
- Updated dependencies [ac07e3c]
- Updated dependencies [70ccb4a]
- Updated dependencies [1a6137b]
- Updated dependencies [ac07e3c]
- @llamaindex/core@0.2.1
- @llamaindex/env@0.1.11
## 0.2.4
### Patch Changes
- 4810364: fix: bump version
## 0.2.3
### Patch Changes
- 0bf8d80: fix: bump version
## 0.2.2
### Patch Changes
- 58abc57: fix: align version
## 0.2.1
### Patch Changes
- 1f680d7: chore: bump llamacloud api
## 0.2.0
### Minor Changes
- 3ed6acc: feat: cloud api change
## 0.1.4
### Patch Changes
- 36ddec4: fix: typo in custom page separator parameter for LlamaParse
## 0.1.3
### Patch Changes
- 1c444d5: feat(cloud): update openapi.json
## 0.1.2
### Patch Changes
- f326ab8: chore: bump version
## 0.1.1
### Patch Changes
- 321c39d: fix: generate api as class
+10
View File
@@ -0,0 +1,10 @@
# @llamaindex/cloud
> [!WARNING]
> This package has been deprecated since version 4.1.0.
> Please migrate to [llama-cloud-services](https://www.npmjs.com/package/llama-cloud-services).
> See the documentation: https://docs.cloud.llamaindex.ai
## License
MIT
+8
View File
@@ -0,0 +1,8 @@
{
"type": "module",
"main": "./dist/index.cjs",
"module": "./dist/index.js",
"types": "./dist/index.d.ts",
"exports": "./dist/index.js",
"private": true
}
+8
View File
@@ -0,0 +1,8 @@
{
"type": "module",
"main": "./dist/index.cjs",
"module": "./dist/index.js",
"types": "./dist/index.d.ts",
"exports": "./dist/index.js",
"private": true
}
+24
View File
@@ -0,0 +1,24 @@
import { defaultPlugins, defineConfig } from "@hey-api/openapi-ts";
export default defineConfig({
// you can download this file to get the latest version of the OpenAPI document
// @link https://api.cloud.llamaindex.ai/api/openapi.json
input: "./openapi.json",
output: {
path: "./src/client",
format: "prettier",
lint: "eslint",
},
plugins: [
...defaultPlugins,
"@hey-api/client-fetch",
"zod",
"@hey-api/schemas",
"@hey-api/sdk",
{
enums: "javascript",
identifierCase: "PascalCase",
name: "@hey-api/typescript",
},
],
});
File diff suppressed because it is too large Load Diff
+97
View File
@@ -0,0 +1,97 @@
{
"name": "@llamaindex/cloud",
"version": "4.1.2",
"type": "module",
"license": "MIT",
"scripts": {
"generate": "./node_modules/.bin/openapi-ts",
"build": "pnpm run generate && bunchee",
"dev": "bunchee --watch"
},
"files": [
"openapi.json",
"./api",
"./reader",
"./parse",
"./beta/agent"
],
"exports": {
"./openapi.json": "./openapi.json",
"./beta/agent": {
"require": {
"types": "./beta/agent/dist/index.d.cts",
"default": "./beta/agent/dist/index.cjs"
},
"import": {
"types": "./beta/agent/dist/index.d.ts",
"default": "./beta/agent/dist/index.js"
},
"default": "./beta/agent/dist/index.js"
},
"./api": {
"require": {
"types": "./api/dist/index.d.cts",
"default": "./api/dist/index.cjs"
},
"import": {
"types": "./api/dist/index.d.ts",
"default": "./api/dist/index.js"
},
"default": "./api/dist/index.js"
},
"./reader": {
"require": {
"types": "./reader/dist/index.d.cts",
"default": "./reader/dist/index.cjs"
},
"import": {
"types": "./reader/dist/index.d.ts",
"default": "./reader/dist/index.js"
},
"default": "./reader/dist/index.js"
},
"./parse": {
"require": {
"types": "./parse/dist/index.d.cts",
"default": "./parse/dist/index.cjs"
},
"import": {
"types": "./parse/dist/index.d.ts",
"default": "./parse/dist/index.js"
},
"default": "./parse/dist/index.js"
},
".": {
"require": {
"types": "./reader/dist/index.d.cts",
"default": "./reader/dist/index.cjs"
},
"import": {
"types": "./reader/dist/index.d.ts",
"default": "./reader/dist/index.js"
},
"default": "./reader/dist/index.js"
}
},
"repository": {
"type": "git",
"url": "git+https://github.com/run-llama/LlamaIndexTS.git",
"directory": "packages/cloud"
},
"devDependencies": {
"@hey-api/client-fetch": "^0.10.1",
"@hey-api/openapi-ts": "^0.67.5",
"@llama-flow/core": "^0.4.1",
"@llamaindex/core": "workspace:*",
"@llamaindex/env": "workspace:*"
},
"peerDependencies": {
"@llama-flow/core": "^0.4.1",
"@llamaindex/core": "workspace:*",
"@llamaindex/env": "workspace:*"
},
"dependencies": {
"p-retry": "^6.2.1",
"zod": "^3.25.76"
}
}
+8
View File
@@ -0,0 +1,8 @@
{
"type": "module",
"main": "./dist/index.cjs",
"module": "./dist/index.js",
"types": "./dist/index.d.ts",
"exports": "./dist/index.js",
"private": true
}
+8
View File
@@ -0,0 +1,8 @@
{
"type": "module",
"main": "./dist/index.cjs",
"module": "./dist/index.js",
"types": "./dist/index.d.ts",
"exports": "./dist/index.js",
"private": true
}
+18
View File
@@ -0,0 +1,18 @@
// Deprecation warning
console.warn(`
The package @llamaindex/cloud has been deprecated since version 4.1.0
* Please migrate to llama-cloud-services.
* See the documentation: https://docs.cloud.llamaindex.ai
`);
import { client } from "./client/client.gen";
client.setConfig({
baseUrl: "https://api.cloud.llamaindex.ai/",
headers: {
"X-SDK-Name": "llamaindex-ts",
},
});
export * from "./client";
export { client };
+329
View File
@@ -0,0 +1,329 @@
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 = "_public",
}: {
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,
});
}
/**
* Search 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. Does it's best to infer an agent url id from environment.
* Pass in the window url and/or env to infer the agent url id from them.
* @param options - The options for the client
* @returns A new AgentClient instance
*/
export function createAgentDataClient<T = unknown>({
apiKey,
baseUrl,
windowUrl,
env,
agentUrlId,
collection = "default",
}: {
apiKey?: string;
baseUrl?: string;
windowUrl?: string;
env?: Record<string, string>;
agentUrlId?: string;
collection?: string;
} = {}): AgentClient<T> {
if (env && !agentUrlId) {
agentUrlId =
env.LLAMA_DEPLOY_DEPLOYMENT_NAME ||
env.NEXT_PUBLIC_LLAMA_DEPLOY_DEPLOYMENT_NAME ||
env.VITE_LLAMA_DEPLOY_DEPLOYMENT_NAME;
}
if (windowUrl && !agentUrlId) {
try {
const url = new URL(windowUrl);
const path = url.pathname;
const isLocalhost = // local agents should default to _public, otherwise a full deployment is required
url.hostname.includes("localhost") ||
url.hostname.includes("127.0.0.1");
if (path.startsWith("/deployments/") && !isLocalhost) {
// /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,
});
}
+23
View File
@@ -0,0 +1,23 @@
// Deprecation warning
console.warn(`
The package @llamaindex/cloud has been deprecated since version 4.1.0
* Please migrate to llama-cloud-services.
* See the documentation: https://docs.cloud.llamaindex.ai
`);
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";
+163
View File
@@ -0,0 +1,163 @@
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;
/**
* Metadata for an extracted field, including confidence and citation information
*/
export interface ExtractedFieldMetadata {
/** The confidence score for the field, combined with parsing confidence if applicable */
confidence?: number;
/** The confidence score for the field based on the extracted text only */
extracted_confidence?: number;
/** The page number that the field occurred on */
page_number?: number;
/** The original text this field's value was derived from */
matching_text?: string;
}
/**
* Dictionary mapping field names to their metadata
* Values can be ExtractedFieldMetadata objects, nested dictionaries, or arrays
*/
export type ExtractedFieldMetadataDict = Record<
string,
ExtractedFieldMetadata | Record<string, unknown> | unknown[]
>;
/**
* 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;
/** The overall confidence score for the extracted data. */
overall_confidence?: number;
/** Page links, and perhaps eventually bounding boxes, for individual fields in the extracted data. */
field_metadata?: ExtractedFieldMetadataDict;
/** 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;
}
+55
View File
@@ -0,0 +1,55 @@
import { workflowEvent } from "@llama-flow/core";
import { zodEvent } from "@llama-flow/core/util/zod";
import { z } from "zod";
import { parseFormSchema } from "./schema";
export const uploadEvent = zodEvent(
parseFormSchema.merge(
z.object({
file: z
.string()
.or(z.instanceof(File))
.or(z.instanceof(Blob))
.or(z.instanceof(Uint8Array))
.optional()
.describe("input"),
}),
),
{
debugLabel: "upload",
uniqueId: "52099967-34a8-419b-8950-c859eab60145",
},
);
export const checkStatusEvent = workflowEvent<string>({
debugLabel: "check-status",
uniqueId: "462157fc-1ded-4ba7-9bc4-3e870395bd20",
});
export const checkStatusSuccessEvent = workflowEvent<string>({
debugLabel: "check-status-success",
uniqueId: "360b7641-30f7-456e-851d-104bb5e3f8d2",
});
export const requestMarkdownEvent = workflowEvent<string>({
debugLabel: "markdown-request",
uniqueId: "aa4c2e3c-0f09-4035-aab6-c72719c877cc",
});
export const requestTextEvent = workflowEvent<string>({
debugLabel: "text-request",
uniqueId: "6976536e-5399-4285-9455-0b70f1dfc92b",
});
export const requestJsonEvent = workflowEvent<string>({
debugLabel: "json-request",
uniqueId: "9fc4a330-52ad-4aac-8092-a650998b7f6f",
});
export const markdownResultEvent = workflowEvent<string>({
debugLabel: "markdown-result",
uniqueId: "2dfb57c8-73d1-4394-bea8-f05246d934d4",
});
export const textResultEvent = workflowEvent<string>({
debugLabel: "text-result",
uniqueId: "a27deec6-b24f-4eda-a5ac-ba2fb2bf37c8",
});
export const jsonResultEvent = workflowEvent<unknown>({
debugLabel: "json-result",
uniqueId: "e086e6bd-a612-4f25-ab41-9b31dcb8af86",
});
+232
View File
@@ -0,0 +1,232 @@
// Deprecation warning
console.warn(`
The package @llamaindex/cloud has been deprecated since version 4.1.0
* Please migrate to llama-cloud-services.
* See the documentation: https://docs.cloud.llamaindex.ai
`);
import { createClient, createConfig } from "@hey-api/client-fetch";
import { createWorkflow, type InferWorkflowEventData } from "@llama-flow/core";
import { createStatefulMiddleware } from "@llama-flow/core/middleware/state";
import { withTraceEvents } from "@llama-flow/core/middleware/trace-events";
import { pRetryHandler } from "@llama-flow/core/util/p-retry";
import { fs, getEnv, path } from "@llamaindex/env";
import {
type BodyUploadFileApiV1ParsingUploadPost,
getJobApiV1ParsingJobJobIdGet,
getJobJsonResultApiV1ParsingJobJobIdResultJsonGet,
getJobResultApiV1ParsingJobJobIdResultMarkdownGet,
getJobTextResultApiV1ParsingJobJobIdResultTextGet,
type StatusEnum,
uploadFileApiV1ParsingUploadPost,
} from "./client";
import {
checkStatusEvent,
checkStatusSuccessEvent,
jsonResultEvent,
markdownResultEvent,
requestJsonEvent,
requestMarkdownEvent,
requestTextEvent,
textResultEvent,
uploadEvent,
} from "./events";
export type LlamaParseWorkflowParams = {
region?: "us" | "eu" | "us-staging";
apiKey?: string;
};
const URLS = {
us: "https://api.cloud.llamaindex.ai",
eu: "https://api.cloud.eu.llamaindex.ai",
"us-staging": "https://api.staging.llamaindex.ai",
} as const;
const { withState, getContext } = createStatefulMiddleware(
(params: LlamaParseWorkflowParams) => {
const apiKey = params.apiKey ?? getEnv("LLAMA_CLOUD_API_KEY");
const region = params.region ?? "us";
if (!apiKey) {
throw new Error("LLAMA_CLOUD_API_KEY is not set");
}
return {
cache: {} as Record<string, StatusEnum>,
client: createClient(
createConfig({
baseUrl: URLS[region],
headers: {
Authorization: `Bearer ${apiKey}`,
},
}),
),
};
},
);
const llamaParseWorkflow = withState(withTraceEvents(createWorkflow()));
llamaParseWorkflow.handle([uploadEvent], async ({ data: form }) => {
const { state } = getContext();
const finalForm = { ...form };
if ("file" in form) {
// support loads from the file system
const file = form?.file;
const isFilePath = typeof file === "string";
const data = isFilePath ? await fs.readFile(file) : file;
const filename: string | undefined = isFilePath
? path.basename(file)
: undefined;
finalForm.file = data
? globalThis.File && filename
? new File([data], filename)
: new Blob([data])
: undefined;
}
const {
data: { id, status },
} = await uploadFileApiV1ParsingUploadPost({
throwOnError: true,
body: {
...finalForm,
} as BodyUploadFileApiV1ParsingUploadPost,
client: state.client,
});
state.cache[id] = status;
return checkStatusEvent.with(id);
});
llamaParseWorkflow.handle(
[checkStatusEvent],
pRetryHandler(
async ({ data: uuid }) => {
const { state } = getContext();
if (state.cache[uuid] === "SUCCESS") {
return checkStatusSuccessEvent.with(uuid);
}
const {
data: { status },
} = await getJobApiV1ParsingJobJobIdGet({
throwOnError: true,
path: {
job_id: uuid,
},
client: state.client,
});
state.cache[uuid] = status;
if (status === "SUCCESS") {
return checkStatusSuccessEvent.with(uuid);
}
throw new Error(`LLamaParse status: ${status}`);
},
{
retries: 100,
},
),
);
//#region sub workflow
llamaParseWorkflow.handle([requestMarkdownEvent], async ({ data: job_id }) => {
const { state } = getContext();
const { data } = await getJobResultApiV1ParsingJobJobIdResultMarkdownGet({
throwOnError: true,
path: {
job_id,
},
client: state.client,
});
return markdownResultEvent.with(data.markdown);
});
llamaParseWorkflow.handle([requestTextEvent], async ({ data: job_id }) => {
const { state } = getContext();
const { data } = await getJobTextResultApiV1ParsingJobJobIdResultTextGet({
throwOnError: true,
path: {
job_id,
},
client: state.client,
});
return textResultEvent.with(data.text);
});
llamaParseWorkflow.handle([requestJsonEvent], async ({ data: job_id }) => {
const { state } = getContext();
const { data } = await getJobJsonResultApiV1ParsingJobJobIdResultJsonGet({
throwOnError: true,
path: {
job_id,
},
client: state.client,
});
return jsonResultEvent.with(data.pages);
});
//#endregion
export type ParseJob = {
get jobId(): string;
get signal(): AbortSignal;
get context(): ReturnType<typeof llamaParseWorkflow.createContext>;
get form(): InferWorkflowEventData<typeof uploadEvent>;
markdown(): Promise<string>;
text(): Promise<string>;
//eslint-disable-next-line @typescript-eslint/no-explicit-any
json(): Promise<any[]>;
};
export const upload = async (
params: InferWorkflowEventData<typeof uploadEvent> & LlamaParseWorkflowParams,
): Promise<ParseJob> => {
//#region upload event
const context = llamaParseWorkflow.createContext(params);
const { stream, sendEvent } = context;
const ev = uploadEvent.with(params);
sendEvent(ev);
const uploadThread = await llamaParseWorkflow
.substream(ev, stream)
.until((ev) => checkStatusSuccessEvent.include(ev))
.toArray();
//#region
const jobId: string = uploadThread.at(-1)!.data;
return {
get signal() {
// lazy load
return context.signal;
},
get jobId() {
return jobId;
},
get form() {
return ev.data;
},
get context() {
return context;
},
async markdown(): Promise<string> {
const requestEv = requestMarkdownEvent.with(jobId);
const { sendEvent, stream } = llamaParseWorkflow.createContext(params);
sendEvent(requestEv);
const markdownThread = await stream.until(markdownResultEvent).toArray();
return markdownThread.at(-1)!.data;
},
async text(): Promise<string> {
const requestEv = requestTextEvent.with(jobId);
const { sendEvent, stream } = llamaParseWorkflow.createContext(params);
sendEvent(requestEv);
const textThread = await stream.until(textResultEvent).toArray();
return textThread.at(-1)!.data;
},
//eslint-disable-next-line @typescript-eslint/no-explicit-any
async json(): Promise<any[]> {
const requestEv = requestJsonEvent.with(jobId);
const { sendEvent, stream } = llamaParseWorkflow.createContext(params);
sendEvent(requestEv);
const jsonThread = await stream
.until((ev) => jsonResultEvent.include(ev))
.toArray();
return jsonThread.at(-1)!.data;
},
};
};
+781
View File
@@ -0,0 +1,781 @@
/* eslint-disable @typescript-eslint/no-explicit-any */
import { type Client, createClient, createConfig } from "@hey-api/client-fetch";
import { Document, FileReader } from "@llamaindex/core/schema";
import { fs, getEnv, path } from "@llamaindex/env";
import {
type BodyUploadFileApiParsingUploadPost,
type FailPageMode,
type ParserLanguages,
type ParsingMode,
getJobApiV1ParsingJobJobIdGet,
getJobImageResultApiV1ParsingJobJobIdResultImageNameGet,
getJobJsonResultApiV1ParsingJobJobIdResultJsonGet,
getJobResultApiV1ParsingJobJobIdResultMarkdownGet,
getJobTextResultApiV1ParsingJobJobIdResultTextGet,
uploadFileApiV1ParsingUploadPost,
} from "./api";
import { sleep } from "./utils";
export type Language = ParserLanguages;
export type ResultType = "text" | "markdown" | "json";
// Export the backoff pattern type.
export type BackoffPattern = "constant" | "linear" | "exponential";
// TODO: should move into @llamaindex/env
type WriteStream = {
write: (text: string) => void;
};
// Do not modify this variable or cause type errors
// eslint-disable-next-line no-var
var process: any;
/**
* Represents a reader for parsing files using the LlamaParse API.
* See https://github.com/run-llama/llama_parse
*/
export class LlamaParseReader extends FileReader {
project_id?: string | undefined;
organization_id?: string | undefined;
// The API key for the LlamaParse API. Can be set as an environment variable: LLAMA_CLOUD_API_KEY
apiKey: string;
// The base URL of the Llama Cloud Platform.
baseUrl: string = "https://api.cloud.llamaindex.ai";
// The result type for the parser.
resultType: ResultType = "text";
// The interval in seconds to check if the parsing is done.
checkInterval: number = 1;
// The maximum timeout in seconds to wait for the parsing to finish.
maxTimeout = 2000;
// Whether to print the progress of the parsing.
verbose = true;
// The language to parse the file in.
language: ParserLanguages[] = ["en"];
// New polling options:
// Controls the backoff mode: "constant", "linear", or "exponential".
backoffPattern: BackoffPattern = "linear";
// Maximum interval in seconds between polls.
maxCheckInterval: number = 5;
// Maximum number of retryable errors before giving up.
maxErrorCount: number = 4;
// The parsing instruction for the parser. Backend default is an empty string.
parsingInstruction?: string | undefined;
// Whether to ignore diagonal text (when the text rotation in degrees is not 0, 90, 180, or 270). Backend default is false.
skipDiagonalText?: boolean | undefined;
// Whether to ignore the cache and re-process the document. Documents are cached for 48 hours after job completion. Backend default is false.
invalidateCache?: boolean | undefined;
// Whether the document should not be cached. Backend default is false.
doNotCache?: boolean | undefined;
// Whether to use a faster mode to extract text (skipping OCR and table/heading reconstruction). Not compatible with gpt4oMode. Backend default is false.
fastMode?: boolean | undefined;
// Whether to keep columns in the text according to document layout. May reduce reconstruction accuracy and LLM/embedings performance.
doNotUnrollColumns?: boolean | undefined;
// A templated page separator for splitting text. If not set, default is "\n---\n".
pageSeparator?: string | undefined;
// A templated prefix to add at the beginning of each page.
pagePrefix?: string | undefined;
// A templated suffix to add at the end of each page.
pageSuffix?: string | undefined;
// Deprecated. Use vendorMultimodal params. Whether to use gpt-4o to extract text.
gpt4oMode: boolean = false;
// Deprecated. Use vendorMultimodal params. The API key for GPT-4o. Can be set via LLAMA_CLOUD_GPT4O_API_KEY.
gpt4oApiKey?: string | undefined;
// The bounding box margins as a string.
boundingBox?: string | undefined;
// The target pages (comma separated list, starting at 0).
targetPages?: string | undefined;
// Whether to ignore errors during parsing.
ignoreErrors: boolean = true;
// Whether to split by page using the pageSeparator (or "\n---\n" as default).
splitByPage: boolean = true;
// Whether to use the vendor multimodal API.
useVendorMultimodalModel: boolean = false;
// The model name for the vendor multimodal API.
vendorMultimodalModelName?: string | undefined;
// The API key for the multimodal API. Can be set via LLAMA_CLOUD_VENDOR_MULTIMODAL_API_KEY.
vendorMultimodalApiKey?: string | undefined;
webhookUrl?: string | undefined;
premiumMode?: boolean | undefined;
takeScreenshot?: boolean | undefined;
disableOcr?: boolean | undefined;
disableReconstruction?: boolean | undefined;
inputS3Path?: string | undefined;
outputS3PathPrefix?: string | undefined;
continuousMode?: boolean | undefined;
isFormattingInstruction?: boolean | undefined;
annotateLinks?: boolean | undefined;
azureOpenaiDeploymentName?: string | undefined;
azureOpenaiEndpoint?: string | undefined;
azureOpenaiApiVersion?: string | undefined;
azureOpenaiKey?: string | undefined;
auto_mode?: boolean | undefined;
auto_mode_trigger_on_image_in_page?: boolean | undefined;
auto_mode_trigger_on_table_in_page?: boolean | undefined;
auto_mode_trigger_on_text_in_page?: string | undefined;
auto_mode_trigger_on_regexp_in_page?: string | undefined;
bbox_bottom?: number | undefined;
bbox_left?: number | undefined;
bbox_right?: number | undefined;
bbox_top?: number | undefined;
disable_image_extraction?: boolean | undefined;
extract_charts?: boolean | undefined;
guess_xlsx_sheet_name?: boolean | undefined;
html_make_all_elements_visible?: boolean | undefined;
html_remove_fixed_elements?: boolean | undefined;
html_remove_navigation_elements?: boolean | undefined;
http_proxy?: string | undefined;
input_url?: string | undefined;
max_pages?: number | undefined;
output_pdf_of_document?: boolean | undefined;
structured_output?: boolean | undefined;
structured_output_json_schema?: string | undefined;
structured_output_json_schema_name?: string | undefined;
extract_layout?: boolean | undefined;
// numWorkers is implemented in SimpleDirectoryReader
stdout?: WriteStream | undefined;
readonly #client: Client;
output_tables_as_HTML: boolean = false;
input_s3_region?: string | undefined;
output_s3_region?: string | undefined;
preserve_layout_alignment_across_pages?: boolean | undefined;
spreadsheet_extract_sub_tables?: boolean | undefined;
formatting_instruction?: string | undefined;
parse_mode?: ParsingMode | undefined;
system_prompt?: string | undefined;
system_prompt_append?: string | undefined;
user_prompt?: string | undefined;
job_timeout_in_seconds?: number | undefined;
job_timeout_extra_time_per_page_in_seconds?: number | undefined;
strict_mode_image_extraction?: boolean | undefined;
strict_mode_image_ocr?: boolean | undefined;
strict_mode_reconstruction?: boolean | undefined;
strict_mode_buggy_font?: boolean | undefined;
ignore_document_elements_for_layout_detection?: boolean | undefined;
complemental_formatting_instruction?: string | undefined;
content_guideline_instruction?: string | undefined;
adaptive_long_table?: boolean | undefined;
model?: string | undefined;
auto_mode_configuration_json?: string | undefined;
compact_markdown_table?: boolean | undefined;
markdown_table_multiline_header_separator?: string | undefined;
page_error_tolerance?: number | undefined;
replace_failed_page_mode?: FailPageMode | undefined;
replace_failed_page_with_error_message_prefix?: string | undefined;
replace_failed_page_with_error_message_suffix?: string | undefined;
save_images?: boolean | undefined;
preset?: string | undefined;
high_res_ocr?: boolean | undefined;
outlined_table_extraction?: boolean | undefined;
hide_headers?: boolean | undefined;
hide_footers?: boolean | undefined;
page_header_prefix?: string | undefined;
page_header_suffix?: string | undefined;
page_footer_prefix?: string | undefined;
page_footer_suffix?: string | undefined;
merge_tables_across_pages_in_markdown?: boolean | undefined;
constructor(
params: Partial<Omit<LlamaParseReader, "language" | "apiKey">> & {
language?: ParserLanguages | ParserLanguages[] | undefined;
apiKey?: string | undefined;
} = {},
) {
super();
Object.assign(this, params);
this.language = Array.isArray(this.language)
? this.language
: [this.language];
this.stdout =
(params.stdout ?? typeof process !== "undefined")
? process!.stdout
: undefined;
const apiKey = params.apiKey ?? getEnv("LLAMA_CLOUD_API_KEY");
if (!apiKey) {
throw new Error(
"API Key is required for LlamaParseReader. Please pass the apiKey parameter or set the LLAMA_CLOUD_API_KEY environment variable.",
);
}
this.apiKey = apiKey;
if (this.baseUrl.endsWith("/")) {
this.baseUrl = this.baseUrl.slice(0, -1);
}
if (this.baseUrl.endsWith("/api/parsing")) {
this.baseUrl = this.baseUrl.slice(0, -"/api/parsing".length);
}
if (params.gpt4oMode) {
params.gpt4oApiKey =
params.gpt4oApiKey ?? getEnv("LLAMA_CLOUD_GPT4O_API_KEY");
this.gpt4oApiKey = params.gpt4oApiKey;
}
if (params.useVendorMultimodalModel) {
params.vendorMultimodalApiKey =
params.vendorMultimodalApiKey ??
getEnv("LLAMA_CLOUD_VENDOR_MULTIMODAL_API_KEY");
this.vendorMultimodalApiKey = params.vendorMultimodalApiKey;
}
this.#client = createClient(
createConfig({
headers: {
Authorization: `Bearer ${this.apiKey}`,
},
baseUrl: this.baseUrl,
}),
);
}
/**
* Creates a job for the LlamaParse API.
*
* @param data - The file data as a Uint8Array.
* @param filename - Optional filename for the file.
* @returns A Promise resolving to the job ID as a string.
*/
async #createJob(
data: Uint8Array | string,
filename?: string,
): Promise<string> {
if (this.verbose) {
console.log("Started uploading the file");
}
let file: File | Blob | null = null;
let input_s3_path: string | undefined = this.inputS3Path;
let input_url: string | undefined = this.input_url;
if (typeof data !== "string") {
// TODO: remove Blob usage when we drop Node.js 18 support
file =
globalThis.File && filename
? new File([data], filename)
: new Blob([data]);
} else if (data.startsWith("s3://")) {
input_s3_path = data;
} else if (data.startsWith("http://") || data.startsWith("https://")) {
input_url = data;
}
const body = {
file,
input_s3_path,
input_url,
language: this.language,
parsing_instruction: this.parsingInstruction,
skip_diagonal_text: this.skipDiagonalText,
invalidate_cache: this.invalidateCache,
do_not_cache: this.doNotCache,
fast_mode: this.fastMode,
do_not_unroll_columns: this.doNotUnrollColumns,
page_separator: this.pageSeparator,
page_prefix: this.pagePrefix,
page_suffix: this.pageSuffix,
gpt4o_mode: this.gpt4oMode,
gpt4o_api_key: this.gpt4oApiKey,
bounding_box: this.boundingBox,
target_pages: this.targetPages,
use_vendor_multimodal_model: this.useVendorMultimodalModel,
vendor_multimodal_model_name: this.vendorMultimodalModelName,
vendor_multimodal_api_key: this.vendorMultimodalApiKey,
premium_mode: this.premiumMode,
webhook_url: this.webhookUrl,
take_screenshot: this.takeScreenshot,
disable_ocr: this.disableOcr,
disable_reconstruction: this.disableReconstruction,
output_s3_path_prefix: this.outputS3PathPrefix,
continuous_mode: this.continuousMode,
is_formatting_instruction: this.isFormattingInstruction,
annotate_links: this.annotateLinks,
azure_openai_deployment_name: this.azureOpenaiDeploymentName,
azure_openai_endpoint: this.azureOpenaiEndpoint,
azure_openai_api_version: this.azureOpenaiApiVersion,
azure_openai_key: this.azureOpenaiKey,
auto_mode: this.auto_mode,
auto_mode_trigger_on_image_in_page:
this.auto_mode_trigger_on_image_in_page,
auto_mode_trigger_on_table_in_page:
this.auto_mode_trigger_on_table_in_page,
auto_mode_trigger_on_text_in_page: this.auto_mode_trigger_on_text_in_page,
auto_mode_trigger_on_regexp_in_page:
this.auto_mode_trigger_on_regexp_in_page,
bbox_bottom: this.bbox_bottom,
bbox_left: this.bbox_left,
bbox_right: this.bbox_right,
bbox_top: this.bbox_top,
disable_image_extraction: this.disable_image_extraction,
extract_charts: this.extract_charts,
guess_xlsx_sheet_name: this.guess_xlsx_sheet_name,
html_make_all_elements_visible: this.html_make_all_elements_visible,
html_remove_fixed_elements: this.html_remove_fixed_elements,
html_remove_navigation_elements: this.html_remove_navigation_elements,
http_proxy: this.http_proxy,
max_pages: this.max_pages,
output_pdf_of_document: this.output_pdf_of_document,
structured_output: this.structured_output,
structured_output_json_schema: this.structured_output_json_schema,
structured_output_json_schema_name:
this.structured_output_json_schema_name,
extract_layout: this.extract_layout,
output_tables_as_HTML: this.output_tables_as_HTML,
input_s3_region: this.input_s3_region,
output_s3_region: this.output_s3_region,
preserve_layout_alignment_across_pages:
this.preserve_layout_alignment_across_pages,
spreadsheet_extract_sub_tables: this.spreadsheet_extract_sub_tables,
formatting_instruction: this.formatting_instruction,
parse_mode: this.parse_mode,
system_prompt: this.system_prompt,
system_prompt_append: this.system_prompt_append,
user_prompt: this.user_prompt,
job_timeout_in_seconds: this.job_timeout_in_seconds,
job_timeout_extra_time_per_page_in_seconds:
this.job_timeout_extra_time_per_page_in_seconds,
strict_mode_image_extraction: this.strict_mode_image_extraction,
strict_mode_image_ocr: this.strict_mode_image_ocr,
strict_mode_reconstruction: this.strict_mode_reconstruction,
strict_mode_buggy_font: this.strict_mode_buggy_font,
ignore_document_elements_for_layout_detection:
this.ignore_document_elements_for_layout_detection,
complemental_formatting_instruction:
this.complemental_formatting_instruction,
content_guideline_instruction: this.content_guideline_instruction,
adaptive_long_table: this.adaptive_long_table,
model: this.model,
auto_mode_configuration_json: this.auto_mode_configuration_json,
compact_markdown_table: this.compact_markdown_table,
markdown_table_multiline_header_separator:
this.markdown_table_multiline_header_separator,
page_error_tolerance: this.page_error_tolerance,
replace_failed_page_mode: this.replace_failed_page_mode,
replace_failed_page_with_error_message_prefix:
this.replace_failed_page_with_error_message_prefix,
replace_failed_page_with_error_message_suffix:
this.replace_failed_page_with_error_message_suffix,
save_images: this.save_images,
preset: this.preset,
high_res_ocr: this.high_res_ocr,
outlined_table_extraction: this.outlined_table_extraction,
hide_headers: this.hide_headers,
hide_footers: this.hide_footers,
page_header_prefix: this.page_header_prefix,
page_header_suffix: this.page_header_suffix,
page_footer_prefix: this.page_footer_prefix,
page_footer_suffix: this.page_footer_suffix,
merge_tables_across_pages_in_markdown:
this.merge_tables_across_pages_in_markdown,
} satisfies {
[Key in keyof BodyUploadFileApiParsingUploadPost]-?:
| BodyUploadFileApiParsingUploadPost[Key]
| undefined;
} as unknown as BodyUploadFileApiParsingUploadPost;
const response = await uploadFileApiV1ParsingUploadPost({
client: this.#client,
throwOnError: true,
query: {
project_id: this.project_id ?? null,
organization_id: this.organization_id ?? null,
},
signal: AbortSignal.timeout(this.maxTimeout * 1000),
body,
});
return response.data.id;
}
/**
* Retrieves the result of a parsing job.
*
* Uses a polling loop with retry logic. Each API call is retried
* up to maxErrorCount times if it fails with a 5XX or socket error.
* The delay between polls increases according to the specified backoffPattern ("constant", "linear", or "exponential"),
* capped by maxCheckInterval.
*
* @param jobId - The job ID.
* @param resultType - The type of result to fetch ("text", "json", or "markdown").
* @returns A Promise resolving to the job result.
*/
private async getJobResult(
jobId: string,
resultType: "text" | "json" | "markdown",
): Promise<any> {
let tries = 0;
let currentInterval = this.checkInterval;
const { default: pRetry } = await import("p-retry");
while (true) {
await sleep(currentInterval * 1000);
// Wraps the API call in a retry
let result;
try {
result = await pRetry(
() =>
getJobApiV1ParsingJobJobIdGet({
client: this.#client,
throwOnError: true,
path: { job_id: jobId },
signal: AbortSignal.timeout(this.maxTimeout * 1000),
}),
{
retries: this.maxErrorCount,
onFailedAttempt: (error) => {
// Retry only on 5XX or socket errors.
const status = (error.cause as any)?.response?.status;
if (
!(
(status && status >= 500 && status < 600) ||
((error.cause as any)?.code &&
((error.cause as any).code === "ECONNRESET" ||
(error.cause as any).code === "ETIMEDOUT" ||
(error.cause as any).code === "ECONNREFUSED"))
)
) {
throw error;
}
if (this.verbose) {
console.warn(
`Attempting to get job ${jobId} result (attempt ${error.attemptNumber}) failed. Retrying...`,
);
}
},
},
);
} catch (e: any) {
throw new Error(
`Max error count reached for job ${jobId}: ${e.message}`,
);
}
const { data } = result;
const status = (data as Record<string, unknown>)["status"];
if (status === "SUCCESS") {
let resultData;
switch (resultType) {
case "json": {
resultData =
await getJobJsonResultApiV1ParsingJobJobIdResultJsonGet({
client: this.#client,
throwOnError: true,
path: { job_id: jobId },
query: {
organization_id: this.organization_id ?? null,
},
signal: AbortSignal.timeout(this.maxTimeout * 1000),
});
break;
}
case "markdown": {
resultData =
await getJobResultApiV1ParsingJobJobIdResultMarkdownGet({
client: this.#client,
throwOnError: true,
path: { job_id: jobId },
query: {
organization_id: this.organization_id ?? null,
},
signal: AbortSignal.timeout(this.maxTimeout * 1000),
});
break;
}
case "text": {
resultData =
await getJobTextResultApiV1ParsingJobJobIdResultTextGet({
client: this.#client,
throwOnError: true,
path: { job_id: jobId },
query: {
organization_id: this.organization_id ?? null,
},
signal: AbortSignal.timeout(this.maxTimeout * 1000),
});
break;
}
}
return resultData.data;
} else if (status === "PENDING") {
if (this.verbose && tries % 10 === 0) {
this.stdout?.write(".");
}
tries++;
} else {
if (this.verbose) {
console.error(
`Received error response ${status} for job ${jobId}. Got Error Code: ${data.error_code} and Error Message: ${data.error_message}`,
);
}
throw new Error(
`Failed to parse the file: ${jobId}, status: ${status}`,
);
}
// Adjust the polling interval based on the backoff pattern.
if (this.backoffPattern === "exponential") {
currentInterval = Math.min(currentInterval * 2, this.maxCheckInterval);
} else if (this.backoffPattern === "linear") {
currentInterval = Math.min(
currentInterval + this.checkInterval,
this.maxCheckInterval,
);
} else if (this.backoffPattern === "constant") {
currentInterval = this.checkInterval;
}
}
}
override async loadData(filePath?: string): Promise<Document[]> {
if (!filePath) {
if (this.input_url) {
return this.loadDataAsContent(this.input_url, this.input_url);
} else if (this.inputS3Path) {
return this.loadDataAsContent(this.inputS3Path, this.inputS3Path);
} else {
throw new TypeError("File path is required");
}
} else {
const data =
filePath.startsWith("s3://") ||
filePath.startsWith("http://") ||
filePath.startsWith("https://")
? filePath
: await fs.readFile(filePath);
return this.loadDataAsContent(data, filePath);
}
}
/**
* Loads data from a file and returns an array of Document objects.
* To be used with resultType "text" or "markdown".
*
* @param fileContent - The content of the file as a Uint8Array.
* @param filename - Optional filename for the file.
* @returns A Promise that resolves to an array of Document objects.
*/
async loadDataAsContent(
fileContent: Uint8Array | string,
filename?: string,
): Promise<Document[]> {
return this.#createJob(fileContent, filename)
.then(async (jobId) => {
if (this.verbose) {
console.log(`Started parsing the file under job id ${jobId}`);
}
// Return results as Document objects.
const jobResults = await this.getJobResult(jobId, this.resultType);
const resultText = jobResults[this.resultType];
// Split the text by separator if splitByPage is true.
if (this.splitByPage) {
return this.splitTextBySeparator(resultText);
}
return [new Document({ text: resultText })];
})
.catch((error) => {
console.warn(
`Error while parsing the file with: ${error.message ?? error.detail}`,
);
if (this.ignoreErrors) {
return [];
} else {
throw error;
}
});
}
/**
* Loads data from a file and returns an array of JSON objects.
* To be used with resultType "json".
*
* @param filePathOrContent - The file path or the file content as a Uint8Array.
* @returns A Promise that resolves to an array of JSON objects.
*/
async loadJson(
filePathOrContent: string | Uint8Array,
): Promise<Record<string, any>[]> {
let jobId;
const isFilePath =
typeof filePathOrContent === "string" &&
!(
filePathOrContent.startsWith("s3://") ||
filePathOrContent.startsWith("http://") ||
filePathOrContent.startsWith("https://")
);
try {
const data = isFilePath
? await fs.readFile(filePathOrContent)
: filePathOrContent;
// Create a job for the file.
jobId = await this.#createJob(
data,
isFilePath ? path.basename(filePathOrContent) : undefined,
);
if (this.verbose) {
console.log(`Started parsing the file under job id ${jobId}`);
}
// Return results as an array of JSON objects.
const resultJson = await this.getJobResult(jobId, "json");
resultJson.job_id = jobId;
resultJson.file_path = isFilePath ? filePathOrContent : undefined;
return [resultJson];
} catch (e) {
console.error(`Error while parsing the file under job id ${jobId}`, e);
if (this.ignoreErrors) {
return [];
} else {
throw e;
}
}
}
/**
* Downloads and saves images from a given JSON result to a specified download path.
* Currently only supports resultType "json".
*
* @param jsonResult - The JSON result containing image information.
* @param downloadPath - The path where the downloaded images will be saved.
* @returns A Promise that resolves to an array of image objects.
*/
async getImages(
jsonResult: Record<string, any>[],
downloadPath: string,
): Promise<Record<string, any>[]> {
try {
// Create download directory if it doesn't exist (checks for write access).
try {
await fs.access(downloadPath);
} catch {
await fs.mkdir(downloadPath, { recursive: true });
}
const images: Record<string, any>[] = [];
for (const result of jsonResult) {
const jobId = result.job_id;
for (const page of result.pages) {
if (this.verbose) {
console.log(`> Image for page ${page.page}: ${page.images}`);
}
for (const image of page.images) {
const imageName = image.name;
const imagePath = await this.getImagePath(
downloadPath,
jobId,
imageName,
);
await this.fetchAndSaveImage(imageName, imagePath, jobId);
// Assign metadata to the image.
image.path = imagePath;
image.job_id = jobId;
image.original_pdf_path = result.file_path;
image.page_number = page.page;
images.push(image);
}
}
}
return images;
} catch (e) {
console.error(`Error while downloading images from the parsed result`, e);
if (this.ignoreErrors) {
return [];
} else {
throw e;
}
}
}
/**
* Constructs the file path for an image.
*
* @param downloadPath - The base download directory.
* @param jobId - The job ID.
* @param imageName - The image name.
* @returns A Promise that resolves to the full image path.
*/
private async getImagePath(
downloadPath: string,
jobId: string,
imageName: string,
): Promise<string> {
return path.join(downloadPath, `${jobId}-${imageName}`);
}
/**
* Fetches an image from the API and saves it to the specified path.
*
* @param imageName - The name of the image.
* @param imagePath - The local path to save the image.
* @param jobId - The associated job ID.
*/
private async fetchAndSaveImage(
imageName: string,
imagePath: string,
jobId: string,
): Promise<void> {
const response =
await getJobImageResultApiV1ParsingJobJobIdResultImageNameGet({
client: this.#client,
path: {
job_id: jobId,
name: imageName,
},
});
if (response.error) {
throw new Error(`Failed to download image: ${response.error.detail}`);
}
const blob = (await response.data) as Blob;
// Write the image buffer to the specified imagePath.
await fs.writeFile(imagePath, new Uint8Array(await blob.arrayBuffer()));
}
/**
* Filters out invalid values (null, undefined, empty string) for specific parameters.
*
* @param params - The parameters object.
* @param keysToCheck - The keys to check for valid values.
* @returns A new object with filtered parameters.
*/
private filterSpecificParams(
params: Record<string, any>,
keysToCheck: string[],
): Record<string, any> {
const filteredParams: Record<string, any> = {};
for (const [key, value] of Object.entries(params)) {
if (keysToCheck.includes(key)) {
if (value !== null && value !== undefined && value !== "") {
filteredParams[key] = value;
}
} else {
filteredParams[key] = value;
}
}
return filteredParams;
}
/**
* Splits text into Document objects using the page separator.
*
* @param text - The text to be split.
* @returns An array of Document objects.
*/
private splitTextBySeparator(text: string): Document[] {
const separator = this.pageSeparator ?? "\n---\n";
const textChunks = text.split(separator);
return textChunks.map(
(docChunk: string) =>
new Document({
text: docChunk,
}),
);
}
}
+131
View File
@@ -0,0 +1,131 @@
import { FailPageMode, ParserLanguages, ParsingMode } from "./client";
import { z } from "zod";
type Language = ParserLanguages;
const VALUES: [Language, ...Language[]] = [
ParserLanguages.EN,
...Object.values(ParserLanguages),
];
const languageSchema = z.enum(VALUES);
const PARSE_PRESETS = [
"fast",
"balanced",
"premium",
"structured",
"auto",
"scientific",
"invoice",
"slides",
"_carlyle",
] as const;
export const parsePresetSchema = z.enum(PARSE_PRESETS);
export const parseFormSchema = z.object({
adaptive_long_table: z.boolean().optional(),
annotate_links: z.boolean().optional(),
auto_mode: z.boolean().optional(),
auto_mode_trigger_on_image_in_page: z.boolean().optional(),
auto_mode_trigger_on_table_in_page: z.boolean().optional(),
auto_mode_trigger_on_text_in_page: z.string().optional(),
auto_mode_trigger_on_regexp_in_page: z.string().optional(),
auto_mode_configuration_json: z.string().optional(),
azure_openai_api_version: z.string().optional(),
azure_openai_deployment_name: z.string().optional(),
azure_openai_endpoint: z.string().optional(),
azure_openai_key: z.string().optional(),
bbox_bottom: z.number().min(0).max(1).optional(),
bbox_left: z.number().min(0).max(1).optional(),
bbox_right: z.number().min(0).max(1).optional(),
bbox_top: z.number().min(0).max(1).optional(),
disable_ocr: z.boolean().optional(),
disable_reconstruction: z.boolean().optional(),
disable_image_extraction: z.boolean().optional(),
do_not_cache: z.coerce.boolean().optional(),
do_not_unroll_columns: z.coerce.boolean().optional(),
extract_charts: z.boolean().optional(),
guess_xlsx_sheet_name: z.boolean().optional(),
html_make_all_elements_visible: z.boolean().optional(),
html_remove_fixed_elements: z.boolean().optional(),
html_remove_navigation_elements: z.boolean().optional(),
http_proxy: z
.string()
.url(
'Set a valid URL for the HTTP proxy, e.g., "http://proxy.example.com:8080"',
)
.refine(
(url) => {
try {
const parsedUrl = new URL(url);
return (
parsedUrl.protocol === "http:" || parsedUrl.protocol === "https:"
);
} catch {
return false;
}
},
{
message: "Invalid HTTP proxy URL",
},
)
.optional(),
input_s3_path: z.string().optional(),
input_s3_region: z.string().optional(),
input_url: z.string().optional(),
invalidate_cache: z.boolean().optional(),
language: z.array(languageSchema).optional(),
extract_layout: z.boolean().optional(),
max_pages: z.number().nullable().optional(),
output_pdf_of_document: z.boolean().optional(),
output_s3_path_prefix: z.string().optional(),
output_s3_region: z.string().optional(),
page_prefix: z.string().optional(),
page_separator: z.string().optional(),
page_suffix: z.string().optional(),
preserve_layout_alignment_across_pages: z.boolean().optional(),
skip_diagonal_text: z.boolean().optional(),
spreadsheet_extract_sub_tables: z.boolean().optional(),
structured_output: z.boolean().optional(),
structured_output_json_schema: z.string().optional(),
structured_output_json_schema_name: z.string().optional(),
take_screenshot: z.boolean().optional(),
target_pages: z.string().optional(),
vendor_multimodal_api_key: z.string().optional(),
vendor_multimodal_model_name: z.string().optional(),
model: z.string().optional(),
webhook_url: z.string().url().optional(),
parse_mode: z.nativeEnum(ParsingMode).nullable().optional(),
system_prompt: z.string().optional(),
system_prompt_append: z.string().optional(),
user_prompt: z.string().optional(),
job_timeout_in_seconds: z.number().optional(),
job_timeout_extra_time_per_page_in_seconds: z.number().optional(),
strict_mode_image_extraction: z.boolean().optional(),
strict_mode_image_ocr: z.boolean().optional(),
strict_mode_reconstruction: z.boolean().optional(),
strict_mode_buggy_font: z.boolean().optional(),
save_images: z.boolean().optional(),
ignore_document_elements_for_layout_detection: z.boolean().optional(),
output_tables_as_HTML: z.boolean().optional(),
use_vendor_multimodal_model: z.boolean().optional(),
bounding_box: z.string().optional(),
gpt4o_mode: z.boolean().optional(),
gpt4o_api_key: z.string().optional(),
complemental_formatting_instruction: z.string().optional(),
content_guideline_instruction: z.string().optional(),
premium_mode: z.boolean().optional(),
is_formatting_instruction: z.boolean().optional(),
continuous_mode: z.boolean().optional(),
parsing_instruction: z.string().optional(),
fast_mode: z.boolean().optional(),
formatting_instruction: z.string().optional(),
preset: parsePresetSchema.optional(),
compact_markdown_table: z.boolean().optional(),
markdown_table_multiline_header_separator: z.string().optional(),
page_error_tolerance: z.number().min(0).max(1).optional(),
replace_failed_page_mode: z.nativeEnum(FailPageMode).nullable().optional(),
replace_failed_page_with_error_message_prefix: z.string().optional(),
replace_failed_page_with_error_message_suffix: z.string().optional(),
});
+3
View File
@@ -0,0 +1,3 @@
export async function sleep(ms: number): Promise<void> {
return new Promise((resolve) => setTimeout(resolve, ms));
}
+23
View File
@@ -0,0 +1,23 @@
{
"extends": "../../tsconfig.json",
"compilerOptions": {
"rootDir": "./src",
"outDir": "./dist/type",
"tsBuildInfoFile": "./dist/.tsbuildinfo",
"emitDeclarationOnly": true,
"moduleResolution": "Bundler",
"skipLibCheck": true,
"strict": true,
"types": []
},
"include": ["./src"],
"exclude": ["node_modules"],
"references": [
{
"path": "../core/tsconfig.json"
},
{
"path": "../env/tsconfig.json"
}
]
}
+9
View File
@@ -0,0 +1,9 @@
{
"$schema": "https://turbo.build/schema.json",
"extends": ["//"],
"tasks": {
"build": {
"outputs": ["**/dist/**", "src/client/**"]
}
}
}
+8
View File
@@ -1,5 +1,13 @@
# @llamaindex/community
## 0.0.102
### Patch Changes
- 6ebd7c2: fix: invoke complete command using the actual modelId
- Updated dependencies [0267bb0]
- @llamaindex/core@0.6.20
## 0.0.101
### Patch Changes
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "@llamaindex/community",
"description": "Community package for LlamaIndexTS",
"version": "0.0.101",
"version": "0.0.102",
"type": "module",
"types": "dist/type/index.d.ts",
"main": "dist/cjs/index.js",
@@ -493,6 +493,8 @@ export class Bedrock extends ToolCallLLM<BedrockAdditionalChatOptions> {
if (params.stream) {
const command = new InvokeModelWithResponseStreamCommand(input);
command.input.modelId = this.actualModel;
const response = await this.client.send(command);
if (response.body)
return streamConverter(response.body, (response) => {
@@ -504,6 +506,8 @@ export class Bedrock extends ToolCallLLM<BedrockAdditionalChatOptions> {
}
const command = new InvokeModelCommand(input);
command.input.modelId = this.actualModel;
const response = await this.client.send(command);
return {
text: this.provider.getTextFromResponse(response),
+6
View File
@@ -1,5 +1,11 @@
# @llamaindex/core
## 0.6.20
### Patch Changes
- 0267bb0: Added responseFormat to llm.exec
## 0.6.19
### Patch Changes
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "@llamaindex/core",
"type": "module",
"version": "0.6.19",
"version": "0.6.20",
"description": "LlamaIndex Core Module",
"exports": {
"./agent": {
+28
View File
@@ -1,4 +1,6 @@
import { emptyLogger } from "@llamaindex/env";
import type { JSONObject } from "../global";
import { tool } from "../tools/";
import { extractText } from "../utils/llms";
import { streamConverter } from "../utils/stream";
import { callToolToMessage, getToolCallsFromResponse } from "./tool-call";
@@ -18,6 +20,7 @@ import type {
PartialToolCall,
ToolCallLLMMessageOptions,
} from "./type";
import { isZodSchema } from "./utils";
export abstract class BaseLLM<
AdditionalChatOptions extends object = object,
@@ -97,6 +100,31 @@ export abstract class BaseLLM<
| ExecResponse<AdditionalMessageOptions>
| ExecStreamResponse<AdditionalMessageOptions>
> {
const responseFormat = params.responseFormat;
if (typeof responseFormat != "undefined" && isZodSchema(responseFormat)) {
const structuredTool = tool({
name: "format_output",
description: "Respond with a JSON object",
parameters: responseFormat,
execute: (args) => {
const result = responseFormat.safeParse(args);
if (!result.success) {
console.error("Invalid input from LLM:", result.error);
return JSON.stringify({
error: "Invalid schema",
details: result.error,
});
}
return result.data as JSONObject;
},
});
if (Array.isArray(params.tools)) {
params.tools.push(structuredTool);
} else {
params.tools = [structuredTool];
}
params.responseFormat = undefined;
}
if (params.stream) {
return this.streamExec(params);
}
+13
View File
@@ -1,3 +1,4 @@
import { z } from "zod";
import type {
ChatMessage,
MessageContentImageDataDetail,
@@ -26,3 +27,15 @@ export function addContentPart<AdditionalMessageOptions extends object>(
}
}
}
export function isZodSchema(obj: unknown): obj is z.ZodType {
return (
obj !== null &&
typeof obj === "object" &&
"parse" in obj &&
typeof (obj as { parse: unknown }).parse === "function" &&
"safeParse" in obj &&
typeof (obj as { safeParse: unknown }).safeParse === "function" &&
"_def" in obj
);
}
+2 -2
View File
@@ -4,6 +4,7 @@ import { z } from "zod";
import { zodToJsonSchema } from "zod-to-json-schema";
import type { JSONValue } from "../global";
import type { BaseTool, ToolMetadata } from "../llms";
import { isZodSchema } from "../llms/utils";
export class FunctionTool<
T,
@@ -94,7 +95,7 @@ export class FunctionTool<
) {
const { execute, parameters, ...restConfig } = fnOrConfig;
if (parameters instanceof z.ZodSchema) {
if (isZodSchema(parameters)) {
const jsonSchema = zodToJsonSchema(parameters);
return new FunctionTool(
execute,
@@ -105,7 +106,6 @@ export class FunctionTool<
parameters,
);
}
return new FunctionTool(execute, fnOrConfig);
}
+12
View File
@@ -1,5 +1,17 @@
# @llamaindex/experimental
## 0.0.204
### Patch Changes
- llamaindex@0.11.27
## 0.0.203
### Patch Changes
- llamaindex@0.11.26
## 0.0.202
### Patch Changes
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "@llamaindex/experimental",
"description": "Experimental package for LlamaIndexTS",
"version": "0.0.202",
"version": "0.0.204",
"type": "module",
"types": "dist/type/index.d.ts",
"main": "dist/cjs/index.js",
+17
View File
@@ -1,5 +1,22 @@
# llamaindex
## 0.11.27
### Patch Changes
- Updated dependencies [0267bb0]
- @llamaindex/core@0.6.20
- @llamaindex/cloud@4.1.2
- @llamaindex/node-parser@2.0.20
- @llamaindex/workflow@1.1.21
## 0.11.26
### Patch Changes
- Updated dependencies [4b51791]
- @llamaindex/cloud@4.1.1
## 0.11.25
### Patch Changes
+2 -2
View File
@@ -1,6 +1,6 @@
{
"name": "llamaindex",
"version": "0.11.25",
"version": "0.11.27",
"license": "MIT",
"type": "module",
"keywords": [
@@ -20,13 +20,13 @@
"llamaindex"
],
"dependencies": {
"@llamaindex/cloud": "workspace:*",
"@llamaindex/core": "workspace:*",
"@llamaindex/env": "workspace:*",
"@llamaindex/node-parser": "workspace:*",
"@llamaindex/workflow": "workspace:*",
"@types/lodash": "^4.17.7",
"@types/node": "^24.0.13",
"llama-cloud-services": "^0.1.0",
"lodash": "^4.17.21",
"magic-bytes.js": "^1.10.0"
},
@@ -0,0 +1,120 @@
import {
addFilesToPipelineApiApiV1PipelinesPipelineIdFilesPut,
getPipelineFileStatusApiV1PipelinesPipelineIdFilesFileIdStatusGet,
listPipelineFilesApiV1PipelinesPipelineIdFilesGet,
listProjectsApiV1ProjectsGet,
readFileContentApiV1FilesIdContentGet,
searchPipelinesApiV1PipelinesGet,
uploadFileApiV1FilesPost,
} from "@llamaindex/cloud/api";
import { initService } from "./utils.js";
export class LLamaCloudFileService {
/**
* Get list of projects, each project contains a list of pipelines
*/
public static async getAllProjectsWithPipelines() {
initService();
try {
const { data: projects } = await listProjectsApiV1ProjectsGet({
throwOnError: true,
});
const { data: pipelines } = await searchPipelinesApiV1PipelinesGet({
throwOnError: true,
});
return projects.map((project) => ({
...project,
pipelines: pipelines.filter((p) => p.project_id === project.id),
}));
} catch (error) {
console.error("Error listing projects and pipelines:", error);
return [];
}
}
/**
* Upload a file to a pipeline in LlamaCloud
*/
public static async addFileToPipeline(
projectId: string,
pipelineId: string,
uploadFile: File | Blob,
// eslint-disable-next-line @typescript-eslint/no-explicit-any
customMetadata: Record<string, any> = {},
) {
initService();
const { data: file } = await uploadFileApiV1FilesPost({
query: { project_id: projectId },
body: {
upload_file: uploadFile,
},
throwOnError: true,
});
const files = [
{
file_id: file.id,
custom_metadata: { file_id: file.id, ...customMetadata },
},
];
await addFilesToPipelineApiApiV1PipelinesPipelineIdFilesPut({
path: {
pipeline_id: pipelineId,
},
body: files,
});
// Wait 2s for the file to be processed
const maxAttempts = 20;
let attempt = 0;
while (attempt < maxAttempts) {
const { data: result } =
await getPipelineFileStatusApiV1PipelinesPipelineIdFilesFileIdStatusGet(
{
path: {
pipeline_id: pipelineId,
file_id: file.id,
},
throwOnError: true,
},
);
if (result.status === "ERROR") {
throw new Error(`File processing failed: ${JSON.stringify(result)}`);
}
if (result.status === "SUCCESS") {
// File is ingested - return the file id
return file.id;
}
attempt += 1;
await new Promise((resolve) => setTimeout(resolve, 100)); // Sleep for 100ms
}
throw new Error(
`File processing did not complete after ${maxAttempts} attempts. Check your LlamaCloud index at https://cloud.llamaindex.ai/project/${projectId}/deploy/${pipelineId} for more details.`,
);
}
/**
* Get download URL for a file in LlamaCloud
*/
public static async getFileUrl(pipelineId: string, filename: string) {
initService();
const { data: allPipelineFiles } =
await listPipelineFilesApiV1PipelinesPipelineIdFilesGet({
path: {
pipeline_id: pipelineId,
},
throwOnError: true,
});
const file = allPipelineFiles.find((file) => file.name === filename);
if (!file?.file_id) return null;
const { data: fileContent } = await readFileContentApiV1FilesIdContentGet({
path: {
id: file.file_id,
},
query: {
project_id: file.project_id,
},
throwOnError: true,
});
return fileContent.url;
}
}
@@ -0,0 +1,414 @@
import type { BaseNodePostprocessor } from "@llamaindex/core/postprocessor";
import type { BaseQueryEngine } from "@llamaindex/core/query-engine";
import type { BaseSynthesizer } from "@llamaindex/core/response-synthesizers";
import type { Document } from "@llamaindex/core/schema";
import { RetrieverQueryEngine } from "../engines/query/RetrieverQueryEngine.js";
import type { CloudRetrieveParams } from "./LlamaCloudRetriever.js";
import { LlamaCloudRetriever } from "./LlamaCloudRetriever.js";
import type { CloudConstructorParams } from "./type.js";
import {
getAppBaseUrl,
getPipelineId,
getProjectId,
initService,
} from "./utils.js";
import {
createBatchPipelineDocumentsApiV1PipelinesPipelineIdDocumentsPost,
deletePipelineDocumentApiV1PipelinesPipelineIdDocumentsDocumentIdDelete,
getPipelineDocumentStatusApiV1PipelinesPipelineIdDocumentsDocumentIdStatusGet,
getPipelineStatusApiV1PipelinesPipelineIdStatusGet,
type PipelineCreateReadable,
searchPipelinesApiV1PipelinesGet,
upsertBatchPipelineDocumentsApiV1PipelinesPipelineIdDocumentsPut,
upsertPipelineApiV1PipelinesPut,
} from "@llamaindex/cloud/api";
import type { BaseRetriever } from "@llamaindex/core/retriever";
import { getEnv } from "@llamaindex/env";
import type { QueryToolParams } from "../indices/BaseIndex.js";
import { Settings } from "../Settings.js";
import { QueryEngineTool } from "../tools/QueryEngineTool.js";
export class LlamaCloudIndex {
params: CloudConstructorParams;
constructor(params: CloudConstructorParams) {
this.params = params;
initService(this.params);
}
private async waitForPipelineIngestion(
verbose = Settings.debug,
raiseOnError = false,
): Promise<void> {
const pipelineId = await this.getPipelineId();
if (verbose) {
console.log("Waiting for pipeline ingestion: ");
}
while (true) {
const { data: pipelineStatus } =
await getPipelineStatusApiV1PipelinesPipelineIdStatusGet({
path: {
pipeline_id: pipelineId,
},
throwOnError: true,
});
if (pipelineStatus.status === "SUCCESS") {
if (verbose) {
console.log("Pipeline ingestion completed successfully");
}
break;
}
if (pipelineStatus.status === "ERROR") {
if (verbose) {
console.error("Pipeline ingestion failed");
}
if (raiseOnError) {
throw new Error("Pipeline ingestion failed");
}
}
if (verbose) {
process.stdout.write(".");
}
await new Promise((resolve) => setTimeout(resolve, 1000));
}
}
private async waitForDocumentIngestion(
docIds: string[],
verbose = Settings.debug,
raiseOnError = false,
): Promise<void> {
const pipelineId = await this.getPipelineId();
if (verbose) {
console.log("Loading data: ");
}
const pendingDocs = new Set(docIds);
while (pendingDocs.size) {
const docsToRemove = new Set<string>();
for (const doc of pendingDocs) {
const {
data: { status },
} =
await getPipelineDocumentStatusApiV1PipelinesPipelineIdDocumentsDocumentIdStatusGet(
{
path: { pipeline_id: pipelineId, document_id: doc },
throwOnError: true,
},
);
if (status === "NOT_STARTED" || status === "IN_PROGRESS") {
continue;
}
if (status === "ERROR") {
if (verbose) {
console.error(`Document ingestion failed for ${doc}`);
}
if (raiseOnError) {
throw new Error(`Document ingestion failed for ${doc}`);
}
}
docsToRemove.add(doc);
}
for (const doc of docsToRemove) {
pendingDocs.delete(doc);
}
if (pendingDocs.size) {
if (verbose) {
process.stdout.write(".");
}
await new Promise((resolve) => setTimeout(resolve, 500));
}
}
if (verbose) {
console.log("Done!");
}
await this.waitForPipelineIngestion(verbose, raiseOnError);
}
public async getPipelineId(
name?: string,
projectName?: string,
organizationId?: string,
): Promise<string> {
return await getPipelineId(
name ?? this.params.name,
projectName ?? this.params.projectName,
organizationId ?? this.params.organizationId,
);
}
public async getProjectId(
projectName?: string,
organizationId?: string,
): Promise<string> {
return await getProjectId(
projectName ?? this.params.projectName,
organizationId ?? this.params.organizationId,
);
}
/**
* Adds documents to the given index parameters. If the index does not exist, it will be created.
*
* @param params - An object containing the following properties:
* - documents: An array of Document objects to be added to the index.
* - verbose: Optional boolean to enable verbose logging.
* - Additional properties from CloudConstructorParams.
* @returns A Promise that resolves to a new LlamaCloudIndex instance.
*/
static async fromDocuments(
params: {
documents: Document[];
verbose?: boolean;
} & CloudConstructorParams,
config?: {
embedding: PipelineCreateReadable["embedding_config"];
transform: PipelineCreateReadable["transform_config"];
},
): Promise<LlamaCloudIndex> {
const index = new LlamaCloudIndex({ ...params });
await index.ensureIndex({ ...config, verbose: params.verbose ?? false });
await index.addDocuments(params.documents, params.verbose);
return index;
}
async addDocuments(documents: Document[], verbose?: boolean): Promise<void> {
const apiUrl = getAppBaseUrl();
const projectId = await this.getProjectId();
const pipelineId = await this.getPipelineId();
await upsertBatchPipelineDocumentsApiV1PipelinesPipelineIdDocumentsPut({
path: {
pipeline_id: pipelineId,
},
body: documents.map((doc) => ({
metadata: doc.metadata,
text: doc.text,
excluded_embed_metadata_keys: doc.excludedEmbedMetadataKeys,
excluded_llm_metadata_keys: doc.excludedEmbedMetadataKeys,
id: doc.id_,
})),
});
while (true) {
const { data: pipelineStatus } =
await getPipelineStatusApiV1PipelinesPipelineIdStatusGet({
path: { pipeline_id: pipelineId },
throwOnError: true,
});
if (pipelineStatus.status === "SUCCESS") {
console.info(
"Documents ingested successfully, pipeline is ready to use",
);
break;
}
if (pipelineStatus.status === "ERROR") {
console.error(
`Some documents failed to ingest, check your pipeline logs at ${apiUrl}/project/${projectId}/deploy/${pipelineId}`,
);
throw new Error("Some documents failed to ingest");
}
if (pipelineStatus.status === "PARTIAL_SUCCESS") {
console.info(
`Documents ingestion partially succeeded, to check a more complete status check your pipeline at ${apiUrl}/project/${projectId}/deploy/${pipelineId}`,
);
break;
}
if (verbose) {
process.stdout.write(".");
}
await new Promise((resolve) => setTimeout(resolve, 1000));
}
if (verbose) {
console.info(
`Ingestion completed, find your index at ${apiUrl}/project/${projectId}/deploy/${pipelineId}`,
);
}
}
asRetriever(params: CloudRetrieveParams = {}): BaseRetriever {
return new LlamaCloudRetriever({ ...this.params, ...params });
}
asQueryEngine(
params?: {
responseSynthesizer?: BaseSynthesizer;
preFilters?: unknown;
nodePostprocessors?: BaseNodePostprocessor[];
} & CloudRetrieveParams,
): BaseQueryEngine {
const retriever = new LlamaCloudRetriever({
...this.params,
...params,
});
return new RetrieverQueryEngine(
retriever,
params?.responseSynthesizer,
params?.nodePostprocessors,
);
}
asQueryTool(params: QueryToolParams): QueryEngineTool {
if (params.options) {
params.retriever = this.asRetriever(params.options);
}
return new QueryEngineTool({
queryEngine: this.asQueryEngine(params),
metadata: params?.metadata,
includeSourceNodes: params?.includeSourceNodes ?? false,
});
}
queryTool(params: QueryToolParams): QueryEngineTool {
return this.asQueryTool(params);
}
async insert(document: Document) {
const pipelineId = await this.getPipelineId();
await createBatchPipelineDocumentsApiV1PipelinesPipelineIdDocumentsPost({
path: {
pipeline_id: pipelineId,
},
body: [
{
metadata: document.metadata,
text: document.text,
excluded_embed_metadata_keys: document.excludedLlmMetadataKeys,
excluded_llm_metadata_keys: document.excludedEmbedMetadataKeys,
id: document.id_,
},
],
});
await this.waitForDocumentIngestion([document.id_]);
}
async delete(document: Document) {
const pipelineId = await this.getPipelineId();
await deletePipelineDocumentApiV1PipelinesPipelineIdDocumentsDocumentIdDelete(
{
path: {
pipeline_id: pipelineId,
document_id: document.id_,
},
},
);
await this.waitForPipelineIngestion();
}
async refreshDoc(document: Document) {
const pipelineId = await this.getPipelineId();
await upsertBatchPipelineDocumentsApiV1PipelinesPipelineIdDocumentsPut({
path: {
pipeline_id: pipelineId,
},
body: [
{
metadata: document.metadata,
text: document.text,
excluded_embed_metadata_keys: document.excludedLlmMetadataKeys,
excluded_llm_metadata_keys: document.excludedEmbedMetadataKeys,
id: document.id_,
},
],
});
await this.waitForDocumentIngestion([document.id_]);
}
public async ensureIndex(config?: {
embedding?: PipelineCreateReadable["embedding_config"];
transform?: PipelineCreateReadable["transform_config"];
verbose?: boolean;
}): Promise<void> {
const projectId = await this.getProjectId();
const { data: pipelines } = await searchPipelinesApiV1PipelinesGet({
query: {
project_id: projectId,
pipeline_name: this.params.name,
},
throwOnError: true,
});
if (pipelines.length === 0) {
// no pipeline found, create a new one
let embeddingConfig = config?.embedding;
if (!embeddingConfig) {
// no embedding config provided, use OpenAI as default
const openAIApiKey = getEnv("OPENAI_API_KEY");
const embeddingModel = getEnv("EMBEDDING_MODEL");
if (!openAIApiKey || !embeddingModel) {
throw new Error(
"No embedding configuration provided. Fallback to OpenAI embedding model. OPENAI_API_KEY and EMBEDDING_MODEL environment variables must be set.",
);
}
embeddingConfig = {
type: "OPENAI_EMBEDDING",
component: {
api_key: openAIApiKey,
model_name: embeddingModel,
},
};
}
let transformConfig = config?.transform;
if (!transformConfig) {
transformConfig = {
mode: "auto",
chunk_size: 1024,
chunk_overlap: 200,
};
}
const { data: pipeline } = await upsertPipelineApiV1PipelinesPut({
query: {
project_id: projectId,
},
body: {
name: this.params.name,
embedding_config: embeddingConfig,
transform_config: transformConfig,
},
throwOnError: true,
});
if (config?.verbose) {
console.log(
`Created pipeline ${pipeline.id} with name ${pipeline.name}`,
);
}
}
}
}
@@ -0,0 +1,103 @@
import {
type MetadataFilter,
type MetadataFilters,
type RetrievalParams,
runSearchApiV1PipelinesPipelineIdRetrievePost,
type TextNodeWithScore,
} from "@llamaindex/cloud/api";
import { DEFAULT_PROJECT_NAME } from "@llamaindex/core/global";
import type { QueryBundle } from "@llamaindex/core/query-engine";
import { BaseRetriever } from "@llamaindex/core/retriever";
import type { NodeWithScore } from "@llamaindex/core/schema";
import { jsonToNode, ObjectType } from "@llamaindex/core/schema";
import { extractText } from "@llamaindex/core/utils";
import type { ClientParams, CloudConstructorParams } from "./type.js";
import { getPipelineId, initService } from "./utils.js";
export type CloudRetrieveParams = Omit<
RetrievalParams,
"query" | "search_filters" | "dense_similarity_top_k"
> & { similarityTopK?: number; filters?: MetadataFilters };
export class LlamaCloudRetriever extends BaseRetriever {
clientParams: ClientParams;
retrieveParams: CloudRetrieveParams;
organizationId?: string;
projectName: string = DEFAULT_PROJECT_NAME;
pipelineName: string;
private resultNodesToNodeWithScore(
nodes: TextNodeWithScore[],
): NodeWithScore[] {
return nodes.map((node: TextNodeWithScore) => {
const textNode = jsonToNode(node.node, ObjectType.TEXT);
textNode.metadata = {
...textNode.metadata,
...node.node.extra_info, // append LlamaCloud extra_info to node metadata (file_name, pipeline_id, etc.)
};
return {
// Currently LlamaCloud only supports text nodes
node: textNode,
score: node.score ?? undefined,
};
});
}
// LlamaCloud expects null values for filters, but LlamaIndexTS uses undefined for empty values
// This function converts the undefined values to null
private convertFilter(filters?: MetadataFilters): MetadataFilters | null {
if (!filters) return null;
const processFilter = (
filter: MetadataFilter | MetadataFilters,
): MetadataFilter | MetadataFilters => {
if ("filters" in filter) {
// type MetadataFilters
return { ...filter, filters: filter.filters.map(processFilter) };
}
return { ...filter, value: filter.value ?? null };
};
return { ...filters, filters: filters.filters.map(processFilter) };
}
constructor(params: CloudConstructorParams & CloudRetrieveParams) {
super();
this.clientParams = { apiKey: params.apiKey, baseUrl: params.baseUrl };
initService(this.clientParams);
this.retrieveParams = params;
this.pipelineName = params.name;
if (params.projectName) {
this.projectName = params.projectName;
}
if (params.organizationId) {
this.organizationId = params.organizationId;
}
}
async _retrieve(query: QueryBundle): Promise<NodeWithScore[]> {
const pipelineId = await getPipelineId(
this.pipelineName,
this.projectName,
this.organizationId,
);
const filters = this.convertFilter(this.retrieveParams.filters);
const { data: results } =
await runSearchApiV1PipelinesPipelineIdRetrievePost({
throwOnError: true,
path: {
pipeline_id: pipelineId,
},
body: {
...this.retrieveParams,
query: extractText(query),
search_filters: filters,
dense_similarity_top_k: this.retrieveParams.similarityTopK!,
},
});
return this.resultNodesToNodeWithScore(results.retrieval_nodes);
}
}
+7 -1
View File
@@ -4,4 +4,10 @@ The classes LlamaCloudFileService, LlamaCloudIndex and LlamaCloudRetriever have
* See the documentation: https://docs.cloud.llamaindex.ai
`);
export * from "llama-cloud-services";
export { LLamaCloudFileService } from "./LLamaCloudFileService.js";
export { LlamaCloudIndex } from "./LlamaCloudIndex.js";
export {
LlamaCloudRetriever,
type CloudRetrieveParams,
} from "./LlamaCloudRetriever.js";
export type { CloudConstructorParams } from "./type.js";
+10
View File
@@ -0,0 +1,10 @@
export type ClientParams = {
apiKey?: string | undefined;
baseUrl?: string | undefined;
};
export type CloudConstructorParams = {
name: string;
projectName: string;
organizationId?: string | undefined;
} & ClientParams;
+97
View File
@@ -0,0 +1,97 @@
import {
client,
listProjectsApiV1ProjectsGet,
searchPipelinesApiV1PipelinesGet,
} from "@llamaindex/cloud/api";
import { DEFAULT_BASE_URL } from "@llamaindex/core/global";
import { getEnv } from "@llamaindex/env";
import type { ClientParams } from "./type.js";
function getBaseUrl(baseUrl?: string): string {
return baseUrl ?? getEnv("LLAMA_CLOUD_BASE_URL") ?? DEFAULT_BASE_URL;
}
export function getAppBaseUrl(): string {
return client.getConfig().baseUrl?.replace(/api\./, "") ?? "";
}
// fixme: refactor this to init at the top level or module level
let initOnce = false;
export function initService({ apiKey, baseUrl }: ClientParams = {}) {
if (initOnce) {
return;
}
initOnce = true;
client.setConfig({
baseUrl: getBaseUrl(baseUrl),
throwOnError: true,
});
const token = apiKey ?? getEnv("LLAMA_CLOUD_API_KEY");
client.interceptors.request.use((request) => {
request.headers.set("Authorization", `Bearer ${token}`);
return request;
});
client.interceptors.error.use((error) => {
throw new Error(
`LlamaCloud API request failed. Error details: ${JSON.stringify(error)}`,
);
});
if (!token) {
throw new Error(
"API Key is required for LlamaCloudIndex. Please pass the apiKey parameter",
);
}
}
export async function getProjectId(
projectName: string,
organizationId?: string,
): Promise<string> {
const { data: projects } = await listProjectsApiV1ProjectsGet({
query: {
project_name: projectName,
organization_id: organizationId ?? null,
},
throwOnError: true,
});
if (projects.length === 0) {
throw new Error(
`Unknown project name ${projectName}. Please confirm a managed project with this name exists.`,
);
} else if (projects.length > 1) {
throw new Error(
`Multiple projects found with name ${projectName}. Please specify organization_id.`,
);
}
const project = projects[0]!;
if (!project.id) {
throw new Error(`No project found with name ${projectName}`);
}
return project.id;
}
export async function getPipelineId(
name: string,
projectName: string,
organizationId?: string,
): Promise<string> {
const { data: pipelines } = await searchPipelinesApiV1PipelinesGet({
query: {
project_id: await getProjectId(projectName, organizationId),
pipeline_name: name,
},
throwOnError: true,
});
if (pipelines.length === 0 || !pipelines[0]!.id) {
throw new Error(
`No pipeline found with name ${name} in project ${projectName}`,
);
}
return pipelines[0]!.id;
}
+20
View File
@@ -1,5 +1,25 @@
# @llamaindex/core-test
## 0.1.18
### Patch Changes
- @llamaindex/openai@0.4.17
## 0.1.17
### Patch Changes
- Updated dependencies [4c70376]
- @llamaindex/openai@0.4.16
## 0.1.16
### Patch Changes
- Updated dependencies [b6409b6]
- @llamaindex/openai@0.4.15
## 0.1.15
### Patch Changes
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "@llamaindex/llamaindex-test",
"private": true,
"version": "0.1.15",
"version": "0.1.18",
"type": "module",
"scripts": {
"test": "vitest run"
+7
View File
@@ -1,5 +1,12 @@
# @llamaindex/node-parser
## 2.0.20
### Patch Changes
- Updated dependencies [0267bb0]
- @llamaindex/core@0.6.20
## 2.0.19
### Patch Changes
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@llamaindex/node-parser",
"version": "2.0.19",
"version": "2.0.20",
"description": "Node parser for LlamaIndex",
"type": "module",
"exports": {
+14
View File
@@ -1,5 +1,19 @@
# @llamaindex/anthropic
## 0.3.23
### Patch Changes
- Updated dependencies [0267bb0]
- @llamaindex/core@0.6.20
## 0.3.22
### Patch Changes
- b80f33e: Fix: prompt caching (moved from beta)
- b80f33e: Feat: add claude opus 4.1
## 0.3.21
### Patch Changes
+6 -5
View File
@@ -1,7 +1,7 @@
{
"name": "@llamaindex/anthropic",
"description": "Anthropic Adapter for LlamaIndex",
"version": "0.3.21",
"version": "0.3.23",
"type": "module",
"main": "./dist/index.cjs",
"module": "./dist/index.js",
@@ -28,19 +28,20 @@
"scripts": {
"build": "bunchee",
"dev": "bunchee --watch",
"test": "vitest run"
"test": "vitest run",
"type-check": "tsc -b --diagnostics"
},
"devDependencies": {
"vitest": "^2.1.5",
"@llamaindex/core": "workspace:*",
"@llamaindex/env": "workspace:*"
"@llamaindex/env": "workspace:*",
"vitest": "^2.1.5"
},
"peerDependencies": {
"@llamaindex/core": "workspace:*",
"@llamaindex/env": "workspace:*"
},
"dependencies": {
"@anthropic-ai/sdk": "0.37.0",
"@anthropic-ai/sdk": "0.58.0",
"remeda": "^2.17.3"
}
}
+21 -19
View File
@@ -1,15 +1,16 @@
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 } from "@anthropic-ai/sdk/resources/index";
CacheControlEphemeral,
Message,
TextBlock,
} from "@anthropic-ai/sdk/resources/index";
import type {
MessageCreateParams,
MessageCreateParamsBase,
MessageParam,
Model,
TextBlockParam,
ThinkingBlock,
Tool,
ToolUseBlock,
@@ -116,7 +117,15 @@ export const ALL_AVAILABLE_V4_MODELS = {
"claude-4-0-sonnet": { contextWindow: 200000 },
"claude-4-sonnet-20240514": { contextWindow: 200000 },
"claude-4-0-opus": { contextWindow: 200000 },
"claude-4-1-opus": { contextWindow: 200000 },
"claude-4-opus-20240514": { contextWindow: 200000 },
"claude-sonnet-4-0": { contextWindow: 200000 },
"claude-sonnet-4-20250514": { contextWindow: 200000 },
"claude-opus-4-0": { contextWindow: 200000 },
"claude-opus-4-20250514": { contextWindow: 200000 },
"claude-4-sonnet-20250514": { contextWindow: 200000 },
"claude-4-opus-20250514": { contextWindow: 200000 },
"claude-opus-4-1-20250805": { contextWindow: 200000 },
};
export const ALL_AVAILABLE_ANTHROPIC_MODELS = {
@@ -137,6 +146,7 @@ const AVAILABLE_ANTHROPIC_MODELS_WITHOUT_DATE: { [key: string]: string } = {
"claude-3-7-sonnet": "claude-3-7-sonnet-20250219",
"claude-4-0-sonnet": "claude-sonnet-4-20250514",
"claude-4-0-opus": "claude-opus-4-20250514",
"claude-4-1-opus": "claude-opus-4-1-20250805",
} as { [key in keyof typeof ALL_AVAILABLE_ANTHROPIC_MODELS]: string };
export type AnthropicAdditionalChatOptions = Pick<
@@ -144,7 +154,7 @@ export type AnthropicAdditionalChatOptions = Pick<
"thinking"
>;
export type AnthropicToolCallLLMMessageOptions = ToolCallLLMMessageOptions & {
cache_control?: BetaCacheControlEphemeral | null;
cache_control?: CacheControlEphemeral | null;
thinking?: string | undefined;
thinking_signature?: string | undefined;
};
@@ -462,20 +472,20 @@ export class Anthropic extends ToolCallLLM<
const { messages, stream, tools } = params;
// Handle system messages
let systemPrompt: string | BetaTextBlockParam[] | null = null;
let systemPrompt: string | TextBlockParam[] | null = null;
const systemMessages = messages.filter(
(message) => message.role === "system",
);
if (systemMessages.length > 0) {
systemPrompt = systemMessages.map((message): BetaTextBlockParam => {
systemPrompt = systemMessages.map((message): TextBlockParam => {
const textContent = extractText(message.content);
if (message.options && "cache_control" in message.options) {
return {
type: "text" as const,
text: textContent,
cache_control: message.options
.cache_control as BetaCacheControlEphemeral,
.cache_control as CacheControlEphemeral,
};
}
return {
@@ -485,17 +495,9 @@ export class Anthropic extends ToolCallLLM<
});
}
const beta =
Array.isArray(systemPrompt) &&
systemPrompt.some((message) => "cache_control" in message);
const anthropic = this.session.anthropic;
let anthropic = this.session.anthropic;
if (beta) {
// @ts-expect-error type casting
anthropic = anthropic.beta.promptCaching;
}
const apiParams: MessageCreateParams = {
const apiParams: MessageCreateParamsBase = {
model: this.getModelName(this.model),
messages: this.mergeConsecutiveMessages(
this.formatMessages(messages.filter((m) => m.role !== "system")),
@@ -521,7 +523,7 @@ export class Anthropic extends ToolCallLLM<
return this.streamChat(anthropic, apiParams);
}
const response = await anthropic.messages.create(apiParams);
const response = (await anthropic.messages.create(apiParams)) as Message;
const thinkingBlock = response.content.find(
(content): content is ThinkingBlock => content.type === "thinking",
@@ -1,5 +1,12 @@
# @llamaindex/assemblyai
## 0.1.19
### Patch Changes
- Updated dependencies [0267bb0]
- @llamaindex/core@0.6.20
## 0.1.18
### Patch Changes
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "@llamaindex/assemblyai",
"description": "AssemblyAI Reader for LlamaIndex",
"version": "0.1.18",
"version": "0.1.19",
"type": "module",
"types": "dist/index.d.ts",
"main": "dist/index.cjs",
+7
View File
@@ -1,5 +1,12 @@
# @llamaindex/community
## 0.0.116
### Patch Changes
- Updated dependencies [0267bb0]
- @llamaindex/core@0.6.20
## 0.0.115
### Patch Changes
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "@llamaindex/aws",
"description": "AWS package for LlamaIndexTS",
"version": "0.0.115",
"version": "0.0.116",
"type": "module",
"types": "dist/type/index.d.ts",
"main": "dist/cjs/index.js",
@@ -546,6 +546,8 @@ export class Bedrock extends ToolCallLLM<BedrockAdditionalChatOptions> {
if (params.stream) {
const command = new InvokeModelWithResponseStreamCommand(input);
command.input.modelId = this.actualModel;
const response = await this.client.send(command);
if (response.body)
return streamConverter(response.body, (response) => {
@@ -557,6 +559,8 @@ export class Bedrock extends ToolCallLLM<BedrockAdditionalChatOptions> {
}
const command = new InvokeModelCommand(input);
command.input.modelId = this.actualModel;
const response = await this.client.send(command);
return {
text: this.provider.getTextFromResponse(response),
+22
View File
@@ -1,5 +1,27 @@
# @llamaindex/clip
## 0.0.73
### Patch Changes
- Updated dependencies [0267bb0]
- @llamaindex/core@0.6.20
- @llamaindex/openai@0.4.17
## 0.0.72
### Patch Changes
- Updated dependencies [4c70376]
- @llamaindex/openai@0.4.16
## 0.0.71
### Patch Changes
- Updated dependencies [b6409b6]
- @llamaindex/openai@0.4.15
## 0.0.70
### Patch Changes
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "@llamaindex/clip",
"description": "Clip Embedding Adapter for LlamaIndex",
"version": "0.0.70",
"version": "0.0.73",
"type": "module",
"types": "dist/index.d.ts",
"main": "dist/index.cjs",
+7
View File
@@ -1,5 +1,12 @@
# @llamaindex/cohere
## 0.0.34
### Patch Changes
- Updated dependencies [0267bb0]
- @llamaindex/core@0.6.20
## 0.0.33
### Patch Changes
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "@llamaindex/cohere",
"description": "Cohere Adapter for LlamaIndex",
"version": "0.0.33",
"version": "0.0.34",
"type": "module",
"main": "./dist/index.cjs",
"module": "./dist/index.js",
+22
View File
@@ -1,5 +1,27 @@
# @llamaindex/deepinfra
## 0.0.73
### Patch Changes
- Updated dependencies [0267bb0]
- @llamaindex/core@0.6.20
- @llamaindex/openai@0.4.17
## 0.0.72
### Patch Changes
- Updated dependencies [4c70376]
- @llamaindex/openai@0.4.16
## 0.0.71
### Patch Changes
- Updated dependencies [b6409b6]
- @llamaindex/openai@0.4.15
## 0.0.70
### Patch Changes
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "@llamaindex/deepinfra",
"description": "Deepinfra Adapter for LlamaIndex",
"version": "0.0.70",
"version": "0.0.73",
"type": "module",
"main": "./dist/index.cjs",
"module": "./dist/index.js",
+26
View File
@@ -1,5 +1,31 @@
# @llamaindex/deepseek
## 0.0.35
### Patch Changes
- @llamaindex/openai@0.4.17
## 0.0.34
### Patch Changes
- Updated dependencies [4c70376]
- @llamaindex/openai@0.4.16
## 0.0.33
### Patch Changes
- Updated dependencies [b6409b6]
- @llamaindex/openai@0.4.15
## 0.0.32
### Patch Changes
- 971d37c: fix: contextwindow metadata
## 0.0.31
### Patch Changes
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "@llamaindex/deepseek",
"description": "DeepSeek Adapter for LlamaIndex",
"version": "0.0.31",
"version": "0.0.35",
"type": "module",
"main": "./dist/index.cjs",
"module": "./dist/index.js",
+1 -1
View File
@@ -4,7 +4,7 @@ import { OpenAI } from "@llamaindex/openai";
export const DEEPSEEK_MODELS = {
"deepseek-coder": { contextWindow: 128000 },
"deepseek-chat": { contextWindow: 128000 },
};
} as const;
type DeepSeekModelName = keyof typeof DEEPSEEK_MODELS;
const DEFAULT_MODEL: DeepSeekModelName = "deepseek-coder";
+7
View File
@@ -1,5 +1,12 @@
# @llamaindex/discord
## 0.1.19
### Patch Changes
- Updated dependencies [0267bb0]
- @llamaindex/core@0.6.20
## 0.1.18
### Patch Changes
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "@llamaindex/discord",
"description": "Discord Reader for LlamaIndex",
"version": "0.1.18",
"version": "0.1.19",
"type": "module",
"types": "dist/index.d.ts",
"main": "dist/index.cjs",
+7
View File
@@ -1,5 +1,12 @@
# @llamaindex/excel
## 0.1.20
### Patch Changes
- Updated dependencies [0267bb0]
- @llamaindex/core@0.6.20
## 0.1.19
### Patch Changes
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "@llamaindex/excel",
"description": "Excel Reader for LlamaIndex",
"version": "0.1.19",
"version": "0.1.20",
"type": "module",
"types": "dist/index.d.ts",
"main": "dist/index.cjs",
+20
View File
@@ -1,5 +1,25 @@
# @llamaindex/fireworks
## 0.0.33
### Patch Changes
- @llamaindex/openai@0.4.17
## 0.0.32
### Patch Changes
- Updated dependencies [4c70376]
- @llamaindex/openai@0.4.16
## 0.0.31
### Patch Changes
- Updated dependencies [b6409b6]
- @llamaindex/openai@0.4.15
## 0.0.30
### Patch Changes
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "@llamaindex/fireworks",
"description": "Fireworks Adapter for LlamaIndex",
"version": "0.0.30",
"version": "0.0.33",
"type": "module",
"main": "./dist/index.cjs",
"module": "./dist/index.js",
+13
View File
@@ -1,5 +1,18 @@
# @llamaindex/google
## 0.3.20
### Patch Changes
- Updated dependencies [0267bb0]
- @llamaindex/core@0.6.20
## 0.3.19
### Patch Changes
- c93bb02: chore: remove streaming logs
## 0.3.18
### Patch Changes
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "@llamaindex/google",
"description": "Google Adapter for LlamaIndex",
"version": "0.3.18",
"version": "0.3.20",
"type": "module",
"main": "./dist/index.cjs",
"module": "./dist/index.js",
-3
View File
@@ -226,9 +226,6 @@ export class Gemini extends ToolCallLLM<GeminiAdditionalChatOptions> {
const config = this.prepareChatConfig(params);
const { message, history } = await this.prepareChatContext(params.messages);
console.log("history", JSON.stringify(history, null, 2));
console.log("message", JSON.stringify(message, null, 2));
const chat = this.client.chats.create({
model: this.model,
config,
+20
View File
@@ -1,5 +1,25 @@
# @llamaindex/groq
## 0.0.89
### Patch Changes
- @llamaindex/openai@0.4.17
## 0.0.88
### Patch Changes
- Updated dependencies [4c70376]
- @llamaindex/openai@0.4.16
## 0.0.87
### Patch Changes
- Updated dependencies [b6409b6]
- @llamaindex/openai@0.4.15
## 0.0.86
### Patch Changes
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "@llamaindex/groq",
"description": "Groq Adapter for LlamaIndex",
"version": "0.0.86",
"version": "0.0.89",
"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