Compare commits

...

56 Commits

Author SHA1 Message Date
Laurie Voss 2662a8d4fb Add GitHub Actions workflow for Vercel deployment 2025-09-16 13:35:31 -07:00
dependabot[bot] 7283909755 chore(deps): bump next from 15.3.3 to 15.4.7 (#2183)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-09-15 12:29:08 +08:00
github-actions[bot] 19e5c318a0 Release 0.12.0 (#2204)
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-09-15 12:28:24 +08:00
Marcus Schiesser d49301555f chore: replace cloud package with llama-cloud-services (#2145)
Co-authored-by: Thuc Pham <thuc@lingble.com>
2025-09-15 12:09:17 +08:00
dependabot[bot] f648bb7b90 chore(deps): bump hono from 4.7.7 to 4.9.7 (#2203)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-09-15 10:52:50 +08:00
Thuc Pham 06f884a437 feat: return structured object from llm.exec (#2198) 2025-09-15 10:51:06 +08:00
dependabot[bot] 9e66861d07 chore(deps): bump vite from 5.4.19 to 6.3.6 (#2199)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-09-12 10:32:22 +08:00
Marcus Schiesser ae74f70d7d chore: update @llamaindex/workflow-docs (#2197) 2025-09-11 15:47:46 +08:00
github-actions[bot] 5b4a53177e Release 0.11.29 (#2188)
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-09-11 10:44:29 +08:00
Thuc Pham 5da1cda939 feat: support zod v4 & v3 (#2186)
Co-authored-by: Marcus Schiesser <mail@marcusschiesser.de>
2025-09-11 10:34:45 +08:00
Thuc Pham 1285e381bd feat: add ci-build script for size limit testing (#2194) 2025-09-10 18:09:47 +08:00
Neha Prasad 5d5cd44276 fix: anthropic temperature parameter not respecting value 0 (#2190)
Co-authored-by: Marcus Schiesser <marcus.schiesser@googlemail.com>
2025-09-10 11:45:12 +08:00
hunter ed37c645af chore: addition of apac claude 4 sonnet to aws records (#2189) 2025-09-10 11:44:57 +08:00
hunter c40adafecc chore: add latest google models (#2191) 2025-09-10 11:44:30 +08:00
dependabot[bot] 995b465205 chore(deps-dev): bump vite from 6.3.3 to 6.3.6 (#2193)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-09-10 10:46:55 +08:00
Jeremy B. Merrill 8929dcf1dd vectorStoreIndex has new option progressCallback (#2187)
Co-authored-by: Marcus Schiesser <marcus.schiesser@googlemail.com>
2025-09-05 10:37:22 +08:00
github-actions[bot] af0b79f1cd Release 0.11.28 (#2174)
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-28 17:28:15 +08:00
Thuc Pham 1995b38660 chore: bump @llamaindex/workflow-core in @llamaindex/workflow package (#2181) 2025-08-27 17:30:09 +08:00
Raj Shrestha 001a5159cf chore: add minimal reasoning effort for gpt5 (#2177)
Co-authored-by: Raj Shrestha <raj.shrestha@carelon.com>
2025-08-27 11:52:58 +08:00
Zhanghao 9d7d2052e7 fix: fix the problem that the usage field in the streaming response was not handled correctly (#2173) 2025-08-24 12:33:14 +08:00
Orry fd90e25f0e Docs settings per request (#2166)
Co-authored-by: Marcus Schiesser <mail@marcusschiesser.de>
Co-authored-by: Marcus Schiesser <marcus.schiesser@googlemail.com>
2025-08-20 16:31:26 +08:00
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
Marcus Schiesser f9f1de9516 chore: use Logger for core (#2139) 2025-07-30 11:43:45 +08:00
Twisha Bansal f576812e7a docs: Using MCP Toolbox for Databases with LlamaIndex (#2138) 2025-07-30 11:19:34 +08:00
Adrian Lyjak c3bf3c7178 Adding support for page citations, and refactor the confidence into the field metadata (#2140) 2025-07-30 10:25:19 +08:00
github-actions[bot] 38487da65d Release 0.11.23 (#2136)
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-28 14:07:23 +08:00
Marcus Schiesser f29799e385 feat: Add toolcall callbacks to agent workflows (#2137) 2025-07-24 15:37:14 +08:00
Marcus Schiesser 9bca30620b fix: docs build 2025-07-23 12:55:35 +08:00
Marcus Schiesser 7224c06409 feat: Add logger and callbacks to llm.exec (#2135) 2025-07-23 12:37:02 +08:00
github-actions[bot] 29c7cf0989 Release 0.11.22 (#2131)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2025-07-23 11:30:04 +08:00
Marcus Schiesser c65a2dc4a7 chore: Deprecate community package and link to AWS package (#2134) 2025-07-23 11:05:50 +08:00
Terence Sim f1c5079290 docs: updated bedrock import and supported models (#2129)
Co-authored-by: Terence Sim <40583743+InTheAxis@users.noreply.github.com>
2025-07-23 10:40:49 +08:00
Terence Sim 9ed31958a7 chore: add logger as param to AgentWorkflow constructor (#2130)
Co-authored-by: Terence Sim <40583743+InTheAxis@users.noreply.github.com>
Co-authored-by: Marcus Schiesser <marcus.schiesser@googlemail.com>
2025-07-22 16:35:28 +08:00
github-actions[bot] e4c7113614 Release 0.11.21 (#2128)
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-22 12:23:58 +08:00
Thuc Pham 38da40bc98 feat: VectoryMemoryBlock (#2110)
Co-authored-by: Marcus Schiesser <mail@marcusschiesser.de>
2025-07-22 12:18:09 +08:00
Marcus Schiesser 4d50ca4d84 chore: add streamchat test (#2122) 2025-07-22 11:30:01 +08:00
github-actions[bot] 8b5253a297 Release (#2127) 2025-07-21 15:40:31 -06:00
Logan ea15e75c89 deployment docs nits (#2126) 2025-07-21 15:30:37 -06:00
310 changed files with 11348 additions and 42241 deletions
@@ -0,0 +1,13 @@
name: Trigger Vercel Deploy
on:
push:
branches: [main]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Trigger Vercel deployment
run: |
curl -X POST "${{ secrets.DEVELOPER_HUB_DEPLOY_HOOK }}"
+3 -3
View File
@@ -105,6 +105,7 @@ jobs:
run: |
pnpm pack --pack-destination ${{ runner.temp }} -C packages/llamaindex
pnpm pack --pack-destination ${{ runner.temp }} -C packages/workflow
pnpm pack --pack-destination ${{ runner.temp }} -C packages/core
- name: Install packed packages
run: npm add ${{ runner.temp }}/*.tgz
working-directory: e2e/npm
@@ -121,7 +122,6 @@ jobs:
- nextjs-edge-runtime
- nextjs-node-runtime
- waku-query-engine
- llama-parse-browser
- vite-import-llamaindex
runs-on: ubuntu-latest
name: Build LlamaIndex Example (${{ matrix.packages }})
@@ -162,7 +162,7 @@ jobs:
github_token: ${{ secrets.GITHUB_TOKEN }}
directory: e2e/examples/vite-import-llamaindex
skip_step: "install"
build_script: build
build_script: ci-build
package_manager: pnpm
typecheck-examples:
@@ -203,7 +203,7 @@ jobs:
fi
done
- name: Install
run: npm add ${{ runner.temp }}/*.tgz
run: npm add ${{ runner.temp }}/*.tgz --legacy-peer-deps
working-directory: ${{ runner.temp }}/examples
- name: Run Type Check
run: npx tsc --project ./tsconfig.json
+140
View File
@@ -1,5 +1,145 @@
# @llamaindex/doc
## 0.2.55
### Patch Changes
- Updated dependencies [06f884a]
- Updated dependencies [06f884a]
- Updated dependencies [d493015]
- @llamaindex/core@0.6.22
- @llamaindex/workflow@1.1.24
- llamaindex@0.12.0
- @llamaindex/node-parser@2.0.22
- @llamaindex/openai@0.4.20
- @llamaindex/readers@3.1.21
## 0.2.54
### Patch Changes
- ed37c64: Addition of APAC_ANTHROPIC_CLAUDE_4_SONNET type/record in @llamaindex/aws for APAC support for claude 4 sonnet per issue 2184.
- Updated dependencies [8929dcf]
- Updated dependencies [5da1cda]
- llamaindex@0.11.29
- @llamaindex/core@0.6.21
- @llamaindex/workflow@1.1.23
- @llamaindex/openai@0.4.19
- @llamaindex/cloud@4.1.3
- @llamaindex/node-parser@2.0.21
- @llamaindex/readers@3.1.20
## 0.2.53
### Patch Changes
- Updated dependencies [1995b38]
- Updated dependencies [001a515]
- Updated dependencies [9d7d205]
- @llamaindex/workflow@1.1.22
- @llamaindex/openai@0.4.18
- llamaindex@0.11.28
## 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
- Updated dependencies [049471b]
- Updated dependencies [049471b]
- @llamaindex/cloud@4.1.0
- llamaindex@0.11.25
## 0.2.47
### Patch Changes
- Updated dependencies [c3bf3c7]
- Updated dependencies [f9f1de9]
- @llamaindex/cloud@4.0.28
- @llamaindex/core@0.6.19
- llamaindex@0.11.24
- @llamaindex/node-parser@2.0.19
- @llamaindex/openai@0.4.14
- @llamaindex/readers@3.1.18
- @llamaindex/workflow@1.1.20
## 0.2.46
### Patch Changes
- Updated dependencies [f29799e]
- Updated dependencies [7224c06]
- @llamaindex/workflow@1.1.19
- @llamaindex/core@0.6.18
- llamaindex@0.11.23
- @llamaindex/cloud@4.0.27
- @llamaindex/node-parser@2.0.18
- @llamaindex/openai@0.4.13
- @llamaindex/readers@3.1.17
## 0.2.45
### Patch Changes
- Updated dependencies [9ed3195]
- @llamaindex/workflow@1.1.18
- llamaindex@0.11.22
## 0.2.44
### Patch Changes
- 38da40b: feat: VectoryMemoryBlock
- Updated dependencies [38da40b]
- @llamaindex/core@0.6.17
- @llamaindex/cloud@4.0.26
- llamaindex@0.11.21
- @llamaindex/node-parser@2.0.17
- @llamaindex/openai@0.4.12
- @llamaindex/readers@3.1.16
- @llamaindex/workflow@1.1.17
## 0.2.43
### Patch Changes
- ea15e75: Minor updates in deployment docs
## 0.2.42
### Patch Changes
+5 -5
View File
@@ -1,6 +1,6 @@
{
"name": "@llamaindex/doc",
"version": "0.2.42",
"version": "0.2.55",
"private": true,
"scripts": {
"postinstall": "fumadocs-mdx",
@@ -15,14 +15,14 @@
"dependencies": {
"@huggingface/transformers": "^3.5.0",
"@icons-pack/react-simple-icons": "^10.1.0",
"@llamaindex/chat-ui-docs": "^0.0.5",
"@llamaindex/cloud": "workspace:*",
"@llamaindex/chat-ui-docs": "^0.1.0",
"llama-cloud-services": "^0.3.5",
"@llamaindex/core": "workspace:*",
"@llamaindex/node-parser": "workspace:*",
"@llamaindex/openai": "workspace:*",
"@llamaindex/readers": "workspace:*",
"@llamaindex/workflow": "workspace:*",
"@llamaindex/workflow-docs": "0.1.1",
"@llamaindex/workflow-docs": "0.1.4",
"@mdx-js/mdx": "^3.1.0",
"@monaco-editor/react": "^4.7.0",
"@next/third-parties": "^15.3.4",
@@ -50,7 +50,7 @@
"hast-util-to-jsx-runtime": "^2.3.2",
"llamaindex": "workspace:*",
"lucide-react": "^0.460.0",
"next": "^15.3.3",
"next": "^15.4.7",
"next-themes": "^0.4.3",
"react": "^19.1.0",
"react-dom": "^19.1.0",
Binary file not shown.

After

Width:  |  Height:  |  Size: 154 KiB

+1 -1
View File
@@ -1,8 +1,8 @@
import { upsertBatchPipelineDocumentsApiV1PipelinesPipelineIdDocumentsPut } from "@llamaindex/cloud/api";
import fg from "fast-glob";
import { fileGenerator, remarkDocGen, remarkInstall } from "fumadocs-docgen";
import { remarkAutoTypeTable } from "fumadocs-typescript";
import matter from "gray-matter";
import { upsertBatchPipelineDocumentsApiV1PipelinesPipelineIdDocumentsPut } from "llama-cloud-services/api";
import * as fs from "node:fs/promises";
import path, { relative } from "node:path";
import { fileURLToPath } from "node:url";
-109
View File
@@ -1,109 +0,0 @@
import { ClientMDXContent } from "@/components/mdx";
import { BotMessage } from "@/components/message";
import { Skeleton } from "@/components/ui/skeleton";
import { LlamaCloudRetriever } from "@/deps/cloud";
import { ContextChatEngine } from "@llamaindex/core/chat-engine";
import { Settings } from "@llamaindex/core/global";
import { ChatMessage } from "@llamaindex/core/llms";
import { OpenAI } from "@llamaindex/openai";
import { createAI, createStreamableUI, getMutableAIState } from "ai/rsc";
import { ReactNode } from "react";
Settings.llm = new OpenAI({
model: "gpt-4o",
});
const retriever = new LlamaCloudRetriever({
apiKey: process.env.LLAMA_CLOUD_API_KEY!,
baseUrl: "https://api.cloud.llamaindex.ai/",
pipelineId: process.env.LLAMA_CLOUD_PIPELINE_ID!,
});
const initialAIState = {
messages: [],
} as {
messages: ChatMessage[];
};
export type UIMessage = {
id: number;
display: ReactNode;
};
const initialUIState = {
messages: [],
} as {
messages: UIMessage[];
};
// eslint-disable-next-line @typescript-eslint/no-explicit-any
const runAsyncFnWithoutBlocking = (fn: (...args: any) => Promise<any>) => {
fn().catch((error) => {
console.error(error);
});
};
export const AIProvider = createAI({
initialAIState,
initialUIState,
actions: {
query: async (message: string): Promise<UIMessage> => {
"use server";
const chatEngine = new ContextChatEngine({ retriever });
const id = Date.now();
const aiState = getMutableAIState<typeof AIProvider>();
aiState.update({
...aiState.get(),
messages: [
...aiState.get().messages,
{
role: "user",
content: message,
},
],
});
const ui = createStreamableUI(
<div className="space-y-2">
<Skeleton className="h-4 w-full" />
<Skeleton className="h-4 w-full" />
</div>,
);
runAsyncFnWithoutBlocking(async () => {
const response = await chatEngine.chat({
message,
chatHistory: aiState.get().messages,
stream: true,
});
let content = "";
for await (const { delta } of response) {
content += delta;
ui.update(<ClientMDXContent id={id} content={content} />);
}
ui.done();
aiState.done({
...aiState.get(),
messages: [
...aiState.get().messages,
{
role: "assistant",
content,
},
],
});
});
return {
id,
display: <BotMessage>{ui.value}</BotMessage>,
};
},
},
});
+1 -4
View File
@@ -1,4 +1,3 @@
import { AIProvider } from "@/actions";
import { TooltipProvider } from "@/components/ui/tooltip";
import { GoogleAnalytics, GoogleTagManager } from "@next/third-parties/google";
import { RootProvider } from "fumadocs-ui/provider";
@@ -39,9 +38,7 @@ export default function Layout({ children }: { children: ReactNode }) {
<GoogleTagManager gtmId="GTM-WWRFB36R" />
<body className="flex min-h-screen flex-col">
<TooltipProvider>
<AIProvider>
<RootProvider>{children}</RootProvider>
</AIProvider>
<RootProvider>{children}</RootProvider>
</TooltipProvider>
</body>
<GoogleAnalytics gaId="G-NB9B8LW9W5" />
-143
View File
@@ -1,143 +0,0 @@
"use client";
import type { AIProvider, UIMessage } from "@/actions";
import { UserMessage } from "@/components/message";
import { useActions, useUIState } from "ai/rsc";
import { Info } from "lucide-react";
import { ButtonHTMLAttributes, useState } from "react";
import { Alert, AlertDescription, AlertTitle } from "./ui/alert";
import { Button } from "./ui/button";
import {
Dialog,
DialogContent,
DialogDescription,
DialogHeader,
DialogOverlay,
DialogPortal,
DialogTitle,
DialogTrigger,
} from "./ui/dialog";
import { Textarea } from "./ui/textarea";
import { Tooltip, TooltipContent, TooltipTrigger } from "./ui/tooltip";
type AITriggerProps = ButtonHTMLAttributes<HTMLButtonElement>;
function ChatList({ messages }: { messages: UIMessage[] }) {
if (messages.length === 0) {
return null;
}
return (
<div className="relative mx-auto w-full px-4">
{messages.map((message, index) => (
<div key={index} className="pb-4">
{message.display}
</div>
))}
</div>
);
}
export const AITrigger = (props: AITriggerProps) => {
const [{ messages }, setUIState] = useUIState<typeof AIProvider>();
const { query } = useActions<typeof AIProvider>();
const [inputValue, setInputValue] = useState("");
return (
<Dialog>
<DialogTrigger {...props} />
<DialogPortal>
<DialogOverlay className="bg-fd-background/50 data-[state=closed]:animate-fd-fade-out data-[state=open]:animate-fd-fade-in fixed inset-0 z-50 backdrop-blur-sm" />
<DialogContent
onOpenAutoFocus={(e) => {
document.getElementById("nd-ai-input")?.focus();
e.preventDefault();
}}
className="bg-fd-popover text-fd-popover-foreground data-[state=closed]:animate-fd-dialog-out data-[state=open]:animate-fd-dialog-in fixed left-1/2 z-50 my-[5vh] flex max-h-[90dvh] w-[98vw] max-w-[860px] origin-left -translate-x-1/2 flex-col rounded-lg border shadow-lg focus-visible:outline-none"
>
<DialogHeader>
<DialogTitle className="sr-only">Search AI</DialogTitle>
<DialogDescription className="sr-only">
Ask AI some questions.
</DialogDescription>
<Alert>
<Info className="size-4" />
<AlertTitle>Heads up!</AlertTitle>
<AlertDescription>
Answers from LlamaCloud may be inaccurate, please use with
discretion.
</AlertDescription>
</Alert>
</DialogHeader>
<div className="mt-4 flex-grow overflow-scroll">
<ChatList messages={messages} />
</div>
<form
className="space-y-4 px-4 py-2"
action={async () => {
const value = inputValue.trim();
setInputValue("");
if (!value) return;
// Add user message UI
setUIState((state) => ({
...state,
messages: [
...state.messages,
{
id: Date.now(),
display: <UserMessage>{value}</UserMessage>,
},
],
}));
try {
// Submit and get response message
const responseMessage = await query(value);
setUIState((state) => ({
...state,
messages: [...state.messages, responseMessage],
}));
} catch (error) {
// You may want to show a toast or trigger an error state.
console.error(error);
}
}}
>
<div className="flex w-full flex-row items-center gap-2">
<Textarea
tabIndex={0}
placeholder="Ask AI about documentation."
className="w-full resize-none bg-transparent px-4 focus-within:outline-none sm:text-sm"
onKeyDown={(event) => {
if (event.key === "Enter" && !event.shiftKey) {
event.preventDefault();
event.currentTarget.form?.requestSubmit(null);
}
}}
autoFocus
spellCheck={false}
autoComplete="off"
autoCorrect="off"
name="message"
rows={1}
value={inputValue}
onChange={(e) => setInputValue(e.target.value)}
/>
<Tooltip>
<TooltipTrigger asChild>
<Button
type="submit"
size="icon"
disabled={inputValue === ""}
>
<span className="sr-only">Send message</span>
</Button>
</TooltipTrigger>
<TooltipContent>Send message</TooltipContent>
</Tooltip>
</div>
</form>
</DialogContent>
</DialogPortal>
</Dialog>
);
};
@@ -77,7 +77,7 @@ export async function POST(request: NextRequest) {
const agent = await initializeAgent();
const result = await agent.run(message);
return NextResponse.json({ response: result.result });
return NextResponse.json({ response: result.data });
} catch (error) {
console.error("Chat error:", error);
return NextResponse.json(
@@ -132,7 +132,7 @@ export default async function handler(
const agent = await initializeAgent();
const result = await agent.run(message);
res.json({ response: result.result });
res.json({ response: result.data });
} catch (error) {
console.error("Chat error:", error);
res.status(500).json({ error: "Internal server error" });
@@ -220,7 +220,7 @@ export async function POST(request: NextRequest) {
});
const result = await myAgent.run(message);
return NextResponse.json({ response: result.result });
return NextResponse.json({ response: result.data });
} catch (error) {
return NextResponse.json({ error: error.message }, { status: 500 });
}
@@ -233,11 +233,40 @@ Implement streaming for better user experience:
```typescript
// app/api/chat-stream/route.ts
import { agent } from "@llamaindex/workflow";
import { tool } from "llamaindex";
import { openai } from "@llamaindex/openai";
import { agentStreamEvent } from "@llamaindex/workflow";
import { NextRequest } from "next/server";
import { z } from "zod";
// Assume myAgent is initialized elsewhere
declare const myAgent: any;
// Initialize agent once (consider using a singleton pattern)
let myAgent: any = null;
async function initializeAgent() {
if (myAgent) return myAgent;
try {
const greetTool = tool({
name: "greet",
description: "Greets a user with their name",
parameters: z.object({
name: z.string(),
}),
execute: ({ name }) => `Hello, ${name}! How can I help you today?`,
});
myAgent = agent({
tools: [greetTool],
llm: openai({ model: "gpt-4o-mini" }),
});
return myAgent;
} catch (error) {
console.error("Failed to initialize agent:", error);
throw error;
}
}
export async function POST(request: NextRequest) {
const { message } = await request.json();
@@ -245,9 +274,10 @@ export async function POST(request: NextRequest) {
const stream = new ReadableStream({
async start(controller) {
try {
const context = myAgent.runStream(message);
const agent = await initializeAgent();
const events = agent.runStream(message);
for await (const event of context) {
for await (const event of events) {
if (agentStreamEvent.include(event)) {
controller.enqueue(new TextEncoder().encode(event.data.delta));
}
@@ -63,7 +63,7 @@ app.post('/api/chat', async (req, res) => {
try {
const { message } = req.body;
const result = await myAgent.run(message);
res.json({ response: result.result });
res.json({ response: result.data });
} catch (error) {
res.status(500).json({ error: 'Chat failed' });
}
@@ -110,7 +110,7 @@ fastify.post('/api/chat', async (request, reply) => {
try {
const { message } = request.body as { message: string };
const result = await myAgent.run(message);
return { response: result.result };
return { response: result.data };
} catch (error) {
reply.status(500).send({ error: 'Chat failed' });
}
@@ -162,7 +162,7 @@ app.post("/api/chat", async (c) => {
try {
const result = await myAgent.run(message);
return c.json({ response: result.result });
return c.json({ response: result.data });
} catch (error) {
return c.json({ error: error.message }, 500);
}
@@ -187,9 +187,9 @@ app.post('/api/chat-stream', async (req, res) => {
});
try {
const context = myAgent.runStream(message);
const events = myAgent.runStream(message);
for await (const event of context) {
for await (const event of events) {
if (agentStreamEvent.include(event)) {
res.write(event.data.delta);
}
@@ -34,7 +34,7 @@ export default {
const { message } = await request.json();
const result = await myAgent.run(message);
return new Response(JSON.stringify({ response: result.result }), {
return new Response(JSON.stringify({ response: result.data }), {
headers: { "Content-Type": "application/json" },
});
} catch (error) {
@@ -83,7 +83,7 @@ export default async function handler(req, res) {
try {
const result = await myAgent.run(message);
res.json({ response: result.result });
res.json({ response: result.data });
} catch (error) {
res.status(500).json({ error: error.message });
}
@@ -124,7 +124,7 @@ export async function POST(request: NextRequest) {
});
const result = await myAgent.run(message);
return NextResponse.json({ response: result.result });
return NextResponse.json({ response: result.data });
} catch (error) {
return NextResponse.json({ error: error.message }, { status: 500 });
}
@@ -173,7 +173,7 @@ export const handler: APIGatewayProxyHandler = async (event, context) => {
"Content-Type": "application/json",
"Access-Control-Allow-Origin": "*",
},
body: JSON.stringify({ response: result.result }),
body: JSON.stringify({ response: result.data }),
};
} catch (error) {
return {
@@ -222,7 +222,7 @@ export const handler: Handler = async (event, context) => {
return {
statusCode: 200,
body: JSON.stringify({ response: result.result }),
body: JSON.stringify({ response: result.data }),
};
} catch (error) {
return {
@@ -0,0 +1,85 @@
---
title: MCP Toolbox For Databases
description: MCP Toolbox for Databases is an open source MCP server for databases.
---
# MCP Toolbox for Databases
[MCP Toolbox for Databases](https://github.com/googleapis/genai-toolbox) is an open source MCP server for databases. It was designed with enterprise-grade and production-quality in mind. It enables you to develop tools easier, faster, and more securely by handling the complexities such as connection pooling, authentication, and more.
Toolbox Tools can be seemlessly integrated with LlamaIndex applications. For more
information on [getting
started](https://googleapis.github.io/genai-toolbox/getting-started/local_quickstart_js/) or
[configuring](https://googleapis.github.io/genai-toolbox/getting-started/configure/)
Toolbox, see the
[documentation](https://googleapis.github.io/genai-toolbox/getting-started/introduction/).
![architecture](/images/mcp_db_toolbox.png)
### Configure and deploy
Toolbox is an open source server that you deploy and manage yourself. For more
instructions on deploying and configuring, see the official Toolbox
documentation:
* [Installing the Server](https://googleapis.github.io/genai-toolbox/getting-started/introduction/#installing-the-server)
* [Configuring Toolbox](https://googleapis.github.io/genai-toolbox/getting-started/configure/)
### Install client SDK
LlamaIndex relies on the `@toolbox-sdk/core` node package to use Toolbox. Install the
package before getting started:
```shell
npm install @toolbox-sdk/core
```
### Loading Toolbox Tools
Once your Toolbox server is configured and up and running, you can load tools
from your server using the SDK:
```javascript
import { gemini, GEMINI_MODEL } from "@llamaindex/google";
import { agent } from "@llamaindex/workflow";
import { tool } from "llamaindex";
import { ToolboxClient } from "@toolbox-sdk/core";
// Initialize LLM
const llm = gemini({
model: GEMINI_MODEL.GEMINI_2_0_FLASH,
apiKey: process.env.GOOGLE_API_KEY,
});
// Replace with your Toolbox Server URL
const URL = 'https://127.0.0.1:5000';
const client = new ToolboxClient("http://127.0.0.1:5000");
const toolboxTools = await client.loadToolset("my-toolset");
const getTool = (toolboxTool) => tool({
name: toolboxTool.getName(),
description: toolboxTool.getDescription(),
parameters: toolboxTool.getParamSchema(),
execute: toolboxTool
});
const tools = toolboxTools.map(getTool);
const myAgent = agent({
tools: tools,
llm,
memory,
systemPrompt: prompt,
});
const result = await myAgent.run(query);
console.log(result);
```
### Advanced Toolbox Features
Toolbox has a variety of features to make developing Gen AI tools for databases seamless.
For more information, read more about the following:
- [Authenticated Parameters](https://googleapis.github.io/genai-toolbox/resources/tools/#authenticated-parameters): bind tool inputs to values from OIDC tokens automatically, making it easy to run sensitive queries without potentially leaking data
- [Authorized Invocations](https://googleapis.github.io/genai-toolbox/resources/tools/#authorized-invocations): restrict access to use a tool based on the users Auth token
- [OpenTelemetry](https://googleapis.github.io/genai-toolbox/how-to/export_telemetry/): get metrics and tracing from Toolbox with [OpenTelemetry](https://opentelemetry.io/docs/)
@@ -1,5 +1,5 @@
{
"title": "Integration",
"description": "See our integrations",
"pages": ["open-llm-metry", "lang-trace", "vercel"]
"pages": ["open-llm-metry", "lang-trace", "mcp-toolbox", "vercel"]
}
@@ -38,7 +38,8 @@ Here's how to create a simple vector store index and query it using Vercel's AI
import { openai } from "@ai-sdk/openai";
import { llamaindex } from "@llamaindex/vercel";
import { streamText } from "ai";
import { Document, VectorStoreIndex } from "llamaindex";
import { Document } from "llamaindex";
import { LlamaCloudIndex } from "llama-cloud-services";
// Create an index from your documents
const document = new Document({ text: yourText, id_: "unique-id" });
@@ -69,7 +70,7 @@ streamText({
For production deployments, you can use LlamaCloud to store and manage your documents:
```typescript
import { LlamaCloudIndex } from "@llamaindex/cloud";
import { LlamaCloudIndex } from "llama-cloud-services";
// Create a LlamaCloud index
const index = await LlamaCloudIndex.fromDocuments({
@@ -37,6 +37,58 @@ console.log(result.data.result); // Baby Llama is called cria
console.log(result.data.message); // { role: 'assistant', content: 'Baby Llama is called cria' }
```
### Structured Output
You can extract structured data from agent responses by providing a `responseFormat` with a Zod schema. This is useful when you need the agent's response in a specific format for further processing:
```typescript
import { z } from "zod";
import { tool } from "llamaindex";
import { agent } from "@llamaindex/workflow";
import { openai } from "@llamaindex/openai";
// Define a weather tool
const weatherTool = tool({
name: "weatherTool",
description: "Get weather information",
parameters: z.object({
location: z.string(),
}),
execute: ({ location }) => {
return `The weather in ${location} is sunny. The temperature is 72 degrees. The humidity is 50%. The wind speed is 10 mph.`;
},
});
// Define the structure you want for the response
const responseSchema = z.object({
temperature: z.number(),
humidity: z.number(),
windSpeed: z.number(),
});
// Create the agent
const weatherAgent = agent({
name: "weatherAgent",
tools: [weatherTool],
llm: openai({ model: "gpt-4.1-mini" }),
});
// Run with structured output
const result = await weatherAgent.run("What's the weather in Tokyo?", {
responseFormat: responseSchema,
});
console.log("Natural language result:", result.data.result);
console.log("Structured data:", result.data.object);
// Output: { temperature: 72, humidity: 50, windSpeed: 10 }
```
The agent will:
1. Use the weather tool to get the raw weather information
2. Process that information through the LLM
3. Extract structured data according to your schema
4. Return both the natural language response and the structured object
### Event Streaming
Agent Workflows provide a unified interface for event streaming, making it easy to track and respond to different events during execution:
@@ -0,0 +1,198 @@
---
title: Low-Level LLM Execution
---
Sometimes your need more control over LLM interactions than what high-level agents provide. The `llm.exec` method makes it simple for you to make a single LLM call with tools but hides the complexity of executing the tools and generating the tool messages.
## When to Use `llm.exec`
Use `llm.exec` when you need to:
- Build custom agent logic in [workflow](/docs/llamaindex/modules/agents/workflows) steps
- Have precise control over message handling and tool execution
- Extract structured data from LLM responses
## Basic Usage
The `llm.exec` method takes messages and tools as parameter and executes one LLM call.
The LLM might either request to call one or more of the tools or generate an assistant message as result.
For each tool call that is requested, `llm.exec` executes it and generates the two tool call messages (call and result). If no tool call is requested, just the assistant message is returned.
```ts
import { openai } from "@llamaindex/openai";
import { ChatMessage, tool } from "llamaindex";
import z from "zod";
const llm = openai({ model: "gpt-4.1-mini" });
const messages = [
{
content: "What's the weather like in San Francisco?",
role: "user",
} as ChatMessage,
];
const { newMessages, toolCalls } = await llm.exec({
messages,
tools: [
tool({
name: "get_weather",
description: "Get the current weather for a location",
parameters: z.object({
address: z.string().describe("The address"),
}),
execute: ({ address }) => {
return `It's sunny in ${address}!`;
},
}),
],
});
// Add the new messages (including tool calls and responses) to your conversation
messages.push(...newMessages);
```
> `newMessages` is an array as each tool call generates two messages: a tool call message and the tool call result message.
## Structured Output
You can use `responseFormat` with a Zod schema to get structured data from the LLM response:
```ts
import { openai } from "@llamaindex/openai";
import { ChatMessage } from "llamaindex";
import z from "zod";
const llm = openai({ model: "gpt-4.1-mini" });
const schema = z.object({
title: z.string(),
author: z.string(),
year: z.number(),
});
const messages = [
{
role: "user",
content: "I have been reading La Divina Commedia by Dante Alighieri, published in 1321",
} as ChatMessage,
];
const { newMessages, toolCalls, object } = await llm.exec({
messages,
responseFormat: schema,
});
console.log(object); // { title: "La Divina Commedia", author: "Dante Alighieri", year: 1321 }
```
## Agent Loop Pattern
A common pattern is to use `llm.exec` in a loop until the LLM stops making tool calls:
```ts
import { openai } from "@llamaindex/openai";
import { ChatMessage, tool } from "llamaindex";
import z from "zod";
async function runAgentLoop() {
const llm = openai({ model: "gpt-4.1-mini" });
const messages = [
{
content: "What's the weather like in San Francisco?",
role: "user",
} as ChatMessage,
];
let exit = false;
do {
const { newMessages, toolCalls } = await llm.exec({
messages,
tools: [
tool({
name: "get_weather",
description: "Get the current weather for a location",
parameters: z.object({
address: z.string().describe("The address"),
}),
execute: ({ address }) => {
return `It's sunny in ${address}!`;
},
}),
],
});
console.log(newMessages);
messages.push(...newMessages);
// Exit when no more tool calls are made
exit = toolCalls.length === 0;
} while (!exit);
}
```
## Streaming Support
For real-time responses, use the `stream` option to get the assistant's response as streamed tokens:
```ts
import { openai } from "@llamaindex/openai";
import { ChatMessage, tool } from "llamaindex";
import z from "zod";
async function streamingAgentLoop() {
const llm = openai({ model: "gpt-4o-mini" });
const messages = [
{
content: "What's the weather like in San Francisco?",
role: "user",
} as ChatMessage,
];
let exit = false;
do {
const { stream, newMessages, toolCalls } = await llm.exec({
messages,
tools: [
tool({
name: "get_weather",
description: "Get the current weather for a location",
parameters: z.object({
address: z.string().describe("The address"),
}),
execute: ({ address }) => {
return `It's sunny in ${address}!`;
},
}),
],
stream: true,
});
// Stream the response token by token
for await (const chunk of stream) {
process.stdout.write(chunk.delta);
}
messages.push(...newMessages());
exit = toolCalls.length === 0;
} while (!exit);
}
```
> `newMessages` is a function when streaming. The reason is that the result only is available after streaming. Calling it before, will throw an error.
## Return Values
`llm.exec` returns an object with:
- **`newMessages`**: Array of new chat messages including the LLM response and any tool call messages (call or result). This is a function return the array when streaming.
- **`toolCalls`**: Array of tool calls made by the LLM
- **`object`**: The structured object when using `responseFormat` with a Zod schema (undefined if no schema is provided)
- **`stream`**: Async iterable for streaming responses (only when `stream: true`)
## Best Practices
For using `llm.exec` in an agent loop, take care to:
1. **Maintain message history**: Always add `newMessages` to your conversation history
2. **Set exit conditions**: Implement proper logic to avoid infinite loops
3. **Handle structured output**: When using `responseFormat`, the `object` property contains your parsed data
@@ -1,4 +1,10 @@
{
"title": "Agents",
"pages": ["tool", "agent_workflow", "workflows", "natural_language_workflow"]
"pages": [
"tool",
"agent_workflow",
"workflows",
"low-level",
"natural_language_workflow"
]
}
@@ -101,6 +101,9 @@ const agent = agent({
});
```
You can also use [MCP Toolbox for
Databases](/docs/llamaindex/integration/mcp-toolbox) to interact with MCP tools.
## Function tool
@@ -28,5 +28,4 @@ Here's an example of how to use a managed index together with a chat engine:
## API Reference
- [LlamaCloudIndex](/docs/api/classes/LlamaCloudIndex)
- [LlamaCloudRetriever](/docs/api/classes/LlamaCloudRetriever)
- [LlamaCloud Documentation](https://docs.cloud.llamaindex.ai/)
@@ -106,34 +106,40 @@ const memory = createMemory({
Long-term memory is represented as `Memory Block` objects. These objects contain information that are from previous user sessions or from the beginning of the current conversation. When memory is retrieved (by calling `getLLM`), the short-term and long-term memories are merged together within the given `tokenLimit`.
Currently, there are two predefined memory blocks:
Currently, there are three predefined memory blocks:
- `staticBlock`: A memory block that stores a static piece of information.
- `factExtractionBlock`: A memory block that extracts facts from the chat history.
- `vectorBlock`: A memory block that stores and retrieves chat messages from a vector database using semantic similarity search. Messages are stored individually and retrieved based on their relevance to recent conversation context. Here we've passed in the `vectorStore` to use to store and retrieve the chat messages.
This sounds a bit complicated, but it's actually quite simple. Let's look at an example:
```ts
import { createMemory, factExtractionBlock, staticBlock } from "llamaindex";
import { createMemory, factExtractionBlock, staticBlock, vectorBlock } from "llamaindex";
import { QdrantVectorStore } from "@llamaindex/qdrant";
import { OpenAIEmbedding } from "@llamaindex/openai";
const memoryBlocks= [
staticBlock({
id: "core_info",
content: "My name is Logan, and I live in Saskatoon. I work at LlamaIndex.",
}),
factExtractionBlock({
id: "user-extracted_info",
priority: 1,
llm: llm,
maxFacts: 50,
}),
vectorBlock({
vectorStore: new QdrantVectorStore({ url: "http://localhost:6333" }),
priority: 2,
}),
];
```
Here, we've setup two memory blocks:
Here, we've setup three memory blocks:
- `core_info`: A static memory block that stores some core information about the user. This information will always be inserted into the memory. The type used is `MessageContent` to support multi-modal content.
- `extracted_info`: An extracted memory block that will extract information from the chat history. Here we've passed in the `llm` to use to extract facts from the chat history, and set the `maxFacts` to 50. If the number of extracted facts exceeds this limit, the `maxFacts` will be automatically summarized and reduced to leave room for new information.
- `staticBlock`: A static memory block that stores some core information about the user. This information will always be inserted into the memory. The type used is `MessageContent` to support multi-modal content.
- `factExtractionBlock`: An extracted memory block that will extract information from the chat history. Here we've passed in the `llm` to use to extract facts from the chat history, and set the `maxFacts` to 50. If the number of extracted facts exceeds this limit, the `maxFacts` will be automatically summarized and reduced to leave room for new information.
- `vectorBlock`: A vector memory block that will store in a vector database and retrieve them from there. Messages are stored individually and retrieved based on their relevance to recent conversation context. Here we've passed in the `vectorStore` to use to store and retrieve the chat messages.
You'll also notice that we've set the `priority` for the `factExtractionBlock` block. This is used to determine the handling when the memory blocks content (i.e. long-term memory) + short-term memory exceeds the token limit on the `Memory` object.
@@ -158,6 +164,46 @@ When memory is retrieved (using `getLLM`), the short-term and long-term memories
The amount of short-term memory included is specified by the `shortTermTokenLimitRatio`. If it's set to `0.7`, 70% of the `tokenLimit` is used for short-term memory (not including the static memory block).
#### VectorBlock Configuration Options
The `vectorBlock` offers several configuration options to customize its behavior:
```ts
vectorBlock({
vectorStore: new QdrantVectorStore({ url: "http://localhost:6333" }),
priority: 2,
retrievalContextWindow: 5, // Number of recent messages to use for context when retrieving
formatTemplate: new PromptTemplate({ template: "Context: {{ context }}" }), // Custom formatting template
nodePostprocessors: [/* custom postprocessors */], // Apply processing to retrieved nodes
queryOptions: {
similarityTopK: 3, // Number of top similar results to return (default: 2)
mode: VectorStoreQueryMode.DEFAULT, // Query mode for the vector store
sessionFilterKey: "session_id", // Metadata key for session filtering (default: "session_id")
// Custom filters can be added here - session filter is automatically included
filters: {
filters: [
{ key: "custom_field", value: "custom_value", operator: "==" }
],
condition: "and"
}
}
})
```
**Key Configuration Options:**
- **`retrievalContextWindow`**: Number of recent messages to consider when creating the retrieval query (default: 5). A larger window provides more context but may be less precise.
- **`formatTemplate`**: Template for formatting retrieved information before adding to memory. Defaults to a simple context template.
- **`nodePostprocessors`**: Array of postprocessors to apply to retrieved nodes, useful for filtering or transforming results.
- **`queryOptions.similarityTopK`**: Number of most similar messages to retrieve from the vector store (default: 2).
- **`queryOptions.sessionFilterKey`**: Metadata key used to isolate memory between different sessions (default: "session_id").
- **`queryOptions.filters`**: Additional metadata filters for retrieval. The session filter is automatically added to ensure memory isolation.
**Session Isolation:**
The vectorBlock automatically adds a session filter using the block's ID to ensure that memories from different sessions don't interfere with each other. This filter uses the `sessionFilterKey` (default: "session_id") and can be customized if needed.
## Persistence with Snapshots
Save and restore memory state:
@@ -78,7 +78,7 @@ As the `PDFReader` is not working with the Edge runtime, here's how to use the `
```typescript
import { SimpleDirectoryReader } from "@llamaindex/readers/directory";
import { LlamaParseReader } from "@llamaindex/cloud";
import { LlamaParseReader } from "llama-cloud-services";
export const DATA_DIR = "./data";
@@ -7,7 +7,7 @@ LlamaParse `json` mode supports extracting any images found in a page object by
## Installation
```package-install
npm i llamaindex @llamaindex/cloud @llamaindex/openai
npm i llamaindex llama-cloud-services @llamaindex/openai
```
## Usage
@@ -26,7 +26,7 @@ You can create an index across both text and image nodes by requesting alternati
```ts
import { Document, ImageNode, VectorStoreIndex } from "llamaindex";
import { LlamaParseReader } from "@llamaindex/cloud";
import { LlamaParseReader } from "llama-cloud-services";
import { OpenAI } from "@llamaindex/openai";
import { createMessageContent } from "llamaindex";
@@ -7,7 +7,7 @@ In JSON mode, LlamaParse will return a data structure representing the parsed ob
## Installation
```package-install
npm i llamaindex @llamaindex/cloud
npm i llamaindex llama-cloud-services
```
## Usage
@@ -16,7 +16,7 @@ For Json mode, you need to use `loadJson`. The `resultType` is automatically set
More information about indexing the results on the next page.
```ts
import { LlamaParseReader } from "@llamaindex/cloud";
import { LlamaParseReader } from "llama-cloud-services";
const reader = new LlamaParseReader();
async function main() {
@@ -68,7 +68,7 @@ However, a simple work around is to create a new reader class that extends `Llam
```ts
import { Document } from "llamaindex";
import { LlamaParseReader } from "@llamaindex/cloud";
import { LlamaParseReader } from "llama-cloud-services";
class LlamaParseReaderWithJson extends LlamaParseReader {
// Override the loadData method
@@ -5,13 +5,13 @@ title: Bedrock
## Installation
```package-install
npm i llamaindex @llamaindex/community
npm i llamaindex @llamaindex/aws
```
## Usage
```ts
import { BEDROCK_MODELS, Bedrock } from "@llamaindex/community";
import { BEDROCK_MODELS, Bedrock } from "@llamaindex/aws";
Settings.llm = new Bedrock({
model: BEDROCK_MODELS.ANTHROPIC_CLAUDE_3_HAIKU,
@@ -23,9 +23,19 @@ Settings.llm = new Bedrock({
});
```
Currently only supports Anthropic and Meta models:
Supported models are listed below (accessible by BEDROCK_MODELS).
```ts
AMAZON_TITAN_TG1_LARGE = "amazon.titan-tg1-large";
AMAZON_TITAN_TEXT_EXPRESS_V1 = "amazon.titan-text-express-v1";
AI21_J2_GRANDE_INSTRUCT = "ai21.j2-grande-instruct";
AI21_J2_JUMBO_INSTRUCT = "ai21.j2-jumbo-instruct";
AI21_J2_MID = "ai21.j2-mid";
AI21_J2_MID_V1 = "ai21.j2-mid-v1";
AI21_J2_ULTRA = "ai21.j2-ultra";
AI21_J2_ULTRA_V1 = "ai21.j2-ultra-v1";
COHERE_COMMAND_TEXT_V14 = "cohere.command-text-v14";
ANTHROPIC_CLAUDE_INSTANT_1 = "anthropic.claude-instant-v1";
ANTHROPIC_CLAUDE_2 = "anthropic.claude-v2";
ANTHROPIC_CLAUDE_2_1 = "anthropic.claude-v2:1";
@@ -33,7 +43,12 @@ ANTHROPIC_CLAUDE_3_SONNET = "anthropic.claude-3-sonnet-20240229-v1:0";
ANTHROPIC_CLAUDE_3_HAIKU = "anthropic.claude-3-haiku-20240307-v1:0";
ANTHROPIC_CLAUDE_3_OPUS = "anthropic.claude-3-opus-20240229-v1:0"; // available on us-west-2
ANTHROPIC_CLAUDE_3_5_SONNET = "anthropic.claude-3-5-sonnet-20240620-v1:0";
ANTHROPIC_CLAUDE_3_5_SONNET_V2 = "anthropic.claude-3-5-sonnet-20241022-v2:0";
ANTHROPIC_CLAUDE_3_5_HAIKU = "anthropic.claude-3-5-haiku-20241022-v1:0";
ANTHROPIC_CLAUDE_3_7_SONNET = "anthropic.claude-3-7-sonnet-20250219-v1:0";
ANTHROPIC_CLAUDE_4_SONNET = "anthropic.claude-sonnet-4-20250514-v1:0";
ANTHROPIC_CLAUDE_4_OPUS = "anthropic.claude-opus-4-20250514-v1:0";
META_LLAMA2_13B_CHAT = "meta.llama2-13b-chat-v1";
META_LLAMA2_70B_CHAT = "meta.llama2-70b-chat-v1";
META_LLAMA3_8B_INSTRUCT = "meta.llama3-8b-instruct-v1:0";
@@ -45,41 +60,67 @@ META_LLAMA3_2_1B_INSTRUCT = "meta.llama3-2-1b-instruct-v1:0"; // only available
META_LLAMA3_2_3B_INSTRUCT = "meta.llama3-2-3b-instruct-v1:0"; // only available via inference endpoints (see below)
META_LLAMA3_2_11B_INSTRUCT = "meta.llama3-2-11b-instruct-v1:0"; // only available via inference endpoints (see below), multimodal and function call supported
META_LLAMA3_2_90B_INSTRUCT = "meta.llama3-2-90b-instruct-v1:0"; // only available via inference endpoints (see below), multimodal and function call supported
META_LLAMA3_3_70B_INSTRUCT = "meta.llama3-3-70b-instruct-v1:0";
MISTRAL_7B_INSTRUCT = "mistral.mistral-7b-instruct-v0:2";
MISTRAL_MIXTRAL_7B_INSTRUCT = "mistral.mixtral-8x7b-instruct-v0:1";
MISTRAL_MIXTRAL_LARGE_2402 = "mistral.mistral-large-2402-v1:0";
AMAZON_NOVA_PREMIER_1 = "amazon.nova-premier-v1:0";
AMAZON_NOVA_PRO_1 = "amazon.nova-pro-v1:0";
AMAZON_NOVA_LITE_1 = "amazon.nova-lite-v1:0";
AMAZON_NOVA_MICRO_1 = "amazon.nova-micro-v1:0";
```
You can also use Bedrock's Inference endpoints by using the model names:
You can also use Bedrock's Inference endpoints by using the model names (accessible by INFERENCE_BEDROCK_MODELS).
Note that the region must be set correctly.
```ts
// US
//US
US_ANTHROPIC_CLAUDE_3_HAIKU = "us.anthropic.claude-3-haiku-20240307-v1:0";
US_ANTHROPIC_CLAUDE_3_5_HAIKU = "us.anthropic.claude-3-5-haiku-20241022-v1:0";
US_ANTHROPIC_CLAUDE_3_OPUS = "us.anthropic.claude-3-opus-20240229-v1:0";
US_ANTHROPIC_CLAUDE_3_SONNET = "us.anthropic.claude-3-sonnet-20240229-v1:0";
US_ANTHROPIC_CLAUDE_3_5_SONNET = "us.anthropic.claude-3-5-sonnet-20240620-v1:0";
US_ANTHROPIC_CLAUDE_3_5_SONNET_V2 =
"us.anthropic.claude-3-5-sonnet-20241022-v2:0";
US_ANTHROPIC_CLAUDE_3_5_SONNET_V2 = "us.anthropic.claude-3-5-sonnet-20241022-v2:0";
US_ANTHROPIC_CLAUDE_3_7_SONNET = "us.anthropic.claude-3-7-sonnet-20250219-v1:0";
US_ANTHROPIC_CLAUDE_4_SONNET = "us.anthropic.claude-sonnet-4-20250514-v1:0";
US_ANTHROPIC_CLAUDE_4_OPUS = "us.anthropic.claude-opus-4-20250514-v1:0";
US_META_LLAMA_3_2_1B_INSTRUCT = "us.meta.llama3-2-1b-instruct-v1:0";
US_META_LLAMA_3_2_3B_INSTRUCT = "us.meta.llama3-2-3b-instruct-v1:0";
US_META_LLAMA_3_2_11B_INSTRUCT = "us.meta.llama3-2-11b-instruct-v1:0";
US_META_LLAMA_3_2_90B_INSTRUCT = "us.meta.llama3-2-90b-instruct-v1:0";
US_AMAZON_NOVA_PRO_1 = "us.amazon.nova-premier-v1:0";
US_META_LLAMA_3_3_70B_INSTRUCT = "us.meta.llama3-3-70b-instruct-v1:0";
US_AMAZON_NOVA_PREMIER_1 = "us.amazon.nova-premier-v1:0";
US_AMAZON_NOVA_PRO_1 = "us.amazon.nova-pro-v1:0";
US_AMAZON_NOVA_LITE_1 = "us.amazon.nova-lite-v1:0";
US_AMAZON_NOVA_MICRO_1 = "us.amazon.nova-micro-v1:0";
// EU
//EU
EU_ANTHROPIC_CLAUDE_3_HAIKU = "eu.anthropic.claude-3-haiku-20240307-v1:0";
EU_ANTHROPIC_CLAUDE_3_5_HAIKU = "eu.anthropic.claude-3-5-haiku-20240307-v1:0";
EU_ANTHROPIC_CLAUDE_3_SONNET = "eu.anthropic.claude-3-sonnet-20240229-v1:0";
EU_ANTHROPIC_CLAUDE_3_5_SONNET = "eu.anthropic.claude-3-5-sonnet-20240620-v1:0";
EU_ANTHROPIC_CLAUDE_3_7_SONNET = "eu.anthropic.claude-3-7-sonnet-20250219-v1:0";
EU_ANTHROPIC_CLAUDE_4_SONNET = "eu.anthropic.claude-sonnet-4-20250514-v1:0";
EU_ANTHROPIC_CLAUDE_4_OPUS = "eu.anthropic.claude-opus-4-20250514-v1:0";
EU_META_LLAMA_3_2_1B_INSTRUCT = "eu.meta.llama3-2-1b-instruct-v1:0";
EU_META_LLAMA_3_2_3B_INSTRUCT = "eu.meta.llama3-2-3b-instruct-v1:0";
EU_AMAZON_NOVA_PRO_1 = "eu.amazon.nova-premier-v1:0";
EU_AMAZON_NOVA_PREMIER_1 = "eu.amazon.nova-premier-v1:0";
EU_AMAZON_NOVA_PRO_1 = "eu.amazon.nova-pro-v1:0";
EU_AMAZON_NOVA_LITE_1 = "eu.amazon.nova-lite-v1:0";
EU_AMAZON_NOVA_MICRO_1 = "eu.amazon.nova-micro-v1:0";
//APAC
APAC_ANTHROPIC_CLAUDE_3_5_SONNET = "apac.anthropic.claude-3-5-sonnet-20240620-v1:0";
APAC_ANTHROPIC_CLAUDE_3_5_SONNET_V2 = "apac.anthropic.claude-3-5-sonnet-20241022-v2:0";
APAC_ANTHROPIC_CLAUDE_3_7_SONNET = "apac.anthropic.claude-3-7-sonnet-20250219-v1:0";
APAC_ANTHROPIC_CLAUDE_4_SONNET = "apac.anthropic.claude-sonnet-4-20250514-v1:0";
APAC_ANTHROPIC_CLAUDE_3_HAIKU = "apac.anthropic.claude-3-haiku-20240307-v1:0";
APAC_ANTHROPIC_CLAUDE_3_SONNET = "apac.anthropic.claude-3-sonnet-20240229-v1:0";
APAC_AMAZON_NOVA_PRO_1 = "apac.amazon.nova-pro-v1:0";
APAC_AMAZON_NOVA_LITE_1 = "apac.amazon.nova-lite-v1:0";
APAC_AMAZON_NOVA_MICRO_1 = "apac.amazon.nova-micro-v1:0";
```
Sonnet, Haiku and Opus are multimodal, image_url only supports base64 data url format, e.g. `data:image/jpeg;base64,SGVsbG8sIFdvcmxkIQ==`
@@ -87,10 +128,11 @@ Sonnet, Haiku and Opus are multimodal, image_url only supports base64 data url f
## Full Example
```ts
import { BEDROCK_MODELS, Bedrock } from "llamaindex";
import { INFERENCE_BEDROCK_MODELS, Bedrock } from "@llamaindex/aws";
Settings.llm = new Bedrock({
model: BEDROCK_MODELS.ANTHROPIC_CLAUDE_3_HAIKU,
model: INFERENCE_BEDROCK_MODELS.US_ANTHROPIC_CLAUDE_3_SONNET,
region: "us-east-1",
});
async function main() {
@@ -119,7 +161,7 @@ async function main() {
## Agent Example
```ts
import { BEDROCK_MODELS, Bedrock } from "@llamaindex/community";
import { BEDROCK_MODELS, Bedrock } from "@llamaindex/aws";
import { tool } from "llamaindex";
import { agent } from "@llamaindex/workflow";
import { z } from "zod";
@@ -4,7 +4,6 @@ title: Retriever
A retriever in LlamaIndex is what is used to fetch `Node`s from an index using a query string.
- [LlamaCloudRetriever](/docs/api/classes/LlamaCloudRetriever) to retrieve nodes from a [managed index](/docs/llamaindex/modules/data/data_index/managed)
- [VectorIndexRetriever](/docs/api/classes/VectorIndexRetriever) will fetch the top-k most similar nodes. Ideal for dense retrieval to find most relevant nodes.
- [SummaryIndexRetriever](/docs/api/classes/SummaryIndexRetriever) will fetch all nodes no matter the query. Ideal when complete context is necessary, e.g. analyzing large datasets.
- [SummaryIndexLLMRetriever](/docs/api/classes/SummaryIndexLLMRetriever) utilizes an LLM to score and filter nodes based on relevancy to the query.
@@ -0,0 +1,47 @@
---
title: Custom Model Per Request
---
There are scenarios, such as the case of a multi-tenant backend API, where it may be required to handle each request with a custom model.
In such a scenario, modifying the `Settings` object directly as follows is not recommended:
```typescript
import { Settings } from 'llamaindex';
import { OpenAIEmbedding } from '@llamaindex/embeddings-openai';
Settings.embedModel = new OpenAIEmbedding({ apiKey: 'CLIENT_API_KEY' });
Settings.llm = openai({ apiKey: key, model: 'gpt-4o' })
```
Setting `llm` and `embedModel` directly will lead to unpredictable responses, since `Settings` is global and mutable.
This can lead to race conditions, as each request modifies `Settings.embedModel` or `Settings.llm`.
The recommended approach is to use `Settings.withEmbedModel` or `Settings.withLLM` as follows:
```typescript
const embedModel = new OpenAIEmbedding({
apiKey: process.env.OPENAI_API_KEY,
});
const llm = new OpenAI({ apiKey: process.env.OPENAI_API_KEY });
const llmResponse = await Settings.withEmbedModel(embedModel, async () => {
return Settings.withLLM(llm, async () => {
const path = "node_modules/llamaindex/examples/abramov.txt";
const essay = await fs.readFile(path, "utf-8");
// Create Document object with essay
const document = new Document({ text: essay, id_: path });
// Split text and create embeddings. Store them in a VectorStoreIndex
const index = await VectorStoreIndex.fromDocuments([document]);
// Query the index
const queryEngine = index.asQueryEngine();
const { message, sourceNodes } = await queryEngine.query({
query: "What did the author do in college?",
});
// Return response with sources
return message.content;
});
});
```
The full example can be found [here](https://github.com/run-llama/LlamaIndexTS/tree/main/examples/local-settings).
@@ -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).
@@ -7,6 +7,7 @@
"workflows",
"local_llm",
"chatbot",
"structured_data_extraction"
"structured_data_extraction",
"custom_model_per_request"
]
}
@@ -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
}
```
-96
View File
@@ -1,96 +0,0 @@
import {
type MetadataFilter,
type MetadataFilters,
type RetrievalParams,
runSearchApiV1PipelinesPipelineIdRetrievePost,
type TextNodeWithScore,
} from "@llamaindex/cloud/api";
import { QueryBundle } from "@llamaindex/core/query-engine";
import { BaseRetriever } from "@llamaindex/core/retriever";
import { jsonToNode, NodeWithScore, ObjectType } from "@llamaindex/core/schema";
import { extractText } from "@llamaindex/core/utils";
export type CloudRetrieveParams = Omit<
RetrievalParams,
"query" | "search_filters" | "dense_similarity_top_k"
> & { similarityTopK?: number; filters?: MetadataFilters };
export type LlamaCloudRetrieverParams = {
apiKey: string;
baseUrl: string;
pipelineId: string;
} & CloudRetrieveParams;
export class LlamaCloudRetriever extends BaseRetriever {
baseUrl: string;
apiKey: string;
retrieveParams: CloudRetrieveParams;
organizationId?: string;
pipelineId: 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,
};
return {
node: textNode,
score: node.score ?? undefined,
};
});
}
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: LlamaCloudRetrieverParams) {
super();
this.baseUrl = params.baseUrl;
this.apiKey = params.apiKey;
this.retrieveParams = params;
this.pipelineId = params.pipelineId;
}
override async _retrieve(query: QueryBundle): Promise<NodeWithScore[]> {
const filters = this.convertFilter(this.retrieveParams.filters);
const pipelineId = this.pipelineId;
const { data: results } =
await runSearchApiV1PipelinesPipelineIdRetrievePost({
throwOnError: true,
path: {
pipeline_id: pipelineId,
},
baseUrl: this.baseUrl,
body: {
...this.retrieveParams,
query: extractText(query),
search_filters: filters,
dense_similarity_top_k: this.retrieveParams.similarityTopK!,
},
headers: {
authorization: `Bearer ${this.apiKey}`,
},
});
return this.resultNodesToNodeWithScore(results.retrieval_nodes);
}
}
+1 -1
View File
@@ -15,6 +15,6 @@
"wrangler": "^3.89.0"
},
"dependencies": {
"hono": "^4.6.11"
"hono": "^4.9.7"
}
}
@@ -1,5 +1,68 @@
# @llamaindex/cloudflare-worker-agent-test
## 0.0.191
### Patch Changes
- Updated dependencies [d493015]
- llamaindex@0.12.0
## 0.0.190
### Patch Changes
- Updated dependencies [8929dcf]
- llamaindex@0.11.29
## 0.0.189
### Patch Changes
- llamaindex@0.11.28
## 0.0.188
### Patch Changes
- llamaindex@0.11.27
## 0.0.187
### Patch Changes
- llamaindex@0.11.26
## 0.0.186
### Patch Changes
- Updated dependencies [049471b]
- llamaindex@0.11.25
## 0.0.185
### Patch Changes
- llamaindex@0.11.24
## 0.0.184
### Patch Changes
- llamaindex@0.11.23
## 0.0.183
### Patch Changes
- llamaindex@0.11.22
## 0.0.182
### Patch Changes
- llamaindex@0.11.21
## 0.0.181
### Patch Changes
@@ -1,6 +1,6 @@
{
"name": "@llamaindex/cloudflare-worker-agent-test",
"version": "0.0.181",
"version": "0.0.191",
"type": "module",
"private": true,
"scripts": {
@@ -1,24 +0,0 @@
# Logs
logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
pnpm-debug.log*
lerna-debug.log*
node_modules
dist
dist-ssr
*.local
# Editor directories and files
.vscode/*
!.vscode/extensions.json
.idea
.DS_Store
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw?
@@ -1,518 +0,0 @@
# @llamaindex/llama-parse-browser-test
## 0.0.80
### Patch Changes
- Updated dependencies [2967d57]
- @llamaindex/cloud@4.0.25
## 0.0.79
### Patch Changes
- @llamaindex/cloud@4.0.24
## 0.0.78
### Patch Changes
- Updated dependencies [a1b1598]
- @llamaindex/cloud@4.0.23
## 0.0.77
### Patch Changes
- Updated dependencies [d2be868]
- @llamaindex/cloud@4.0.22
## 0.0.76
### Patch Changes
- Updated dependencies [579ca0c]
- @llamaindex/cloud@4.0.21
## 0.0.75
### Patch Changes
- Updated dependencies [48b0d88]
- Updated dependencies [f185772]
- @llamaindex/cloud@4.0.20
## 0.0.74
### Patch Changes
- Updated dependencies [5a0ed1f]
- Updated dependencies [5a0ed1f]
- @llamaindex/cloud@4.0.19
## 0.0.73
### Patch Changes
- Updated dependencies [47a7555]
- @llamaindex/cloud@4.0.18
## 0.0.72
### Patch Changes
- @llamaindex/cloud@4.0.17
## 0.0.71
### Patch Changes
- @llamaindex/cloud@4.0.16
## 0.0.70
### Patch Changes
- @llamaindex/cloud@4.0.15
## 0.0.69
### Patch Changes
- @llamaindex/cloud@4.0.14
## 0.0.68
### Patch Changes
- @llamaindex/cloud@4.0.13
## 0.0.67
### Patch Changes
- @llamaindex/cloud@4.0.12
## 0.0.66
### Patch Changes
- Updated dependencies [76ff23d]
- @llamaindex/cloud@4.0.11
## 0.0.65
### Patch Changes
- @llamaindex/cloud@4.0.10
## 0.0.64
### Patch Changes
- Updated dependencies [3703f90]
- @llamaindex/cloud@4.0.9
## 0.0.63
### Patch Changes
- @llamaindex/cloud@4.0.8
## 0.0.62
### Patch Changes
- Updated dependencies [40f5f41]
- @llamaindex/cloud@4.0.7
## 0.0.61
### Patch Changes
- @llamaindex/cloud@4.0.6
## 0.0.60
### Patch Changes
- Updated dependencies [2225ffd]
- @llamaindex/cloud@4.0.5
## 0.0.59
### Patch Changes
- @llamaindex/cloud@4.0.4
## 0.0.58
### Patch Changes
- Updated dependencies [41191d0]
- @llamaindex/cloud@4.0.3
## 0.0.57
### Patch Changes
- @llamaindex/cloud@4.0.2
## 0.0.56
### Patch Changes
- @llamaindex/cloud@4.0.1
## 0.0.55
### Patch Changes
- Updated dependencies [bf56fc0]
- Updated dependencies [5189b44]
- @llamaindex/cloud@4.0.0
## 0.0.54
### Patch Changes
- @llamaindex/cloud@3.0.9
## 0.0.53
### Patch Changes
- @llamaindex/cloud@3.0.8
## 0.0.52
### Patch Changes
- @llamaindex/cloud@3.0.7
## 0.0.51
### Patch Changes
- @llamaindex/cloud@3.0.6
## 0.0.50
### Patch Changes
- @llamaindex/cloud@3.0.5
## 0.0.49
### Patch Changes
- @llamaindex/cloud@3.0.4
## 0.0.48
### Patch Changes
- @llamaindex/cloud@3.0.3
## 0.0.47
### Patch Changes
- Updated dependencies [c902fcb]
- @llamaindex/cloud@3.0.2
## 0.0.46
### Patch Changes
- @llamaindex/cloud@3.0.1
## 0.0.45
### Patch Changes
- @llamaindex/cloud@3.0.0
## 0.0.44
### Patch Changes
- Updated dependencies [1c908fd]
- @llamaindex/cloud@2.0.24
## 0.0.43
### Patch Changes
- Updated dependencies [cb608b5]
- @llamaindex/cloud@2.0.23
## 0.0.42
### Patch Changes
- Updated dependencies [d6c270e]
- @llamaindex/cloud@2.0.22
## 0.0.41
### Patch Changes
- Updated dependencies [5dec9f9]
- Updated dependencies [fd9c829]
- @llamaindex/cloud@2.0.21
## 0.0.40
### Patch Changes
- Updated dependencies [012495b]
- @llamaindex/cloud@2.0.20
## 0.0.39
### Patch Changes
- @llamaindex/cloud@2.0.19
## 0.0.38
### Patch Changes
- @llamaindex/cloud@2.0.18
## 0.0.37
### Patch Changes
- @llamaindex/cloud@2.0.17
## 0.0.36
### Patch Changes
- Updated dependencies [8be4589]
- @llamaindex/cloud@2.0.16
## 0.0.35
### Patch Changes
- @llamaindex/cloud@2.0.15
## 0.0.34
### Patch Changes
- @llamaindex/cloud@2.0.14
## 0.0.33
### Patch Changes
- Updated dependencies [90d265c]
- @llamaindex/cloud@2.0.13
## 0.0.32
### Patch Changes
- @llamaindex/cloud@2.0.12
## 0.0.31
### Patch Changes
- @llamaindex/cloud@2.0.11
## 0.0.30
### Patch Changes
- @llamaindex/cloud@2.0.10
## 0.0.29
### Patch Changes
- @llamaindex/cloud@2.0.9
## 0.0.28
### Patch Changes
- @llamaindex/cloud@2.0.8
## 0.0.27
### Patch Changes
- @llamaindex/cloud@2.0.7
## 0.0.26
### Patch Changes
- @llamaindex/cloud@2.0.6
## 0.0.25
### Patch Changes
- @llamaindex/cloud@2.0.5
## 0.0.24
### Patch Changes
- @llamaindex/cloud@2.0.4
## 0.0.23
### Patch Changes
- @llamaindex/cloud@2.0.3
## 0.0.22
### Patch Changes
- @llamaindex/cloud@2.0.2
## 0.0.21
### Patch Changes
- @llamaindex/cloud@2.0.1
## 0.0.20
### Patch Changes
- @llamaindex/cloud@2.0.0
## 0.0.19
### Patch Changes
- @llamaindex/cloud@1.0.8
## 0.0.18
### Patch Changes
- @llamaindex/cloud@1.0.7
## 0.0.17
### Patch Changes
- @llamaindex/cloud@1.0.6
## 0.0.16
### Patch Changes
- @llamaindex/cloud@1.0.5
## 0.0.15
### Patch Changes
- Updated dependencies [06f632b]
- @llamaindex/cloud@1.0.4
## 0.0.14
### Patch Changes
- @llamaindex/cloud@1.0.3
## 0.0.13
### Patch Changes
- @llamaindex/cloud@1.0.2
## 0.0.12
### Patch Changes
- Updated dependencies [4c38c1b]
- Updated dependencies [24d065f]
- Updated dependencies [a75af83]
- @llamaindex/cloud@1.0.1
## 0.0.11
### Patch Changes
- @llamaindex/cloud@1.0.0
## 0.0.10
### Patch Changes
- @llamaindex/cloud@0.2.14
## 0.0.9
### Patch Changes
- @llamaindex/cloud@0.2.13
## 0.0.8
### Patch Changes
- @llamaindex/cloud@0.2.12
## 0.0.7
### Patch Changes
- Updated dependencies [0b20ff9]
- @llamaindex/cloud@0.2.11
## 0.0.6
### Patch Changes
- Updated dependencies [981811e]
- @llamaindex/cloud@0.2.10
## 0.0.5
### Patch Changes
- Updated dependencies [df441e2]
- @llamaindex/cloud@0.2.9
## 0.0.4
### Patch Changes
- Updated dependencies [ac41ed3]
- @llamaindex/cloud@0.2.8
## 0.0.3
### Patch Changes
- Updated dependencies [fb36eff]
- Updated dependencies [d24d3d1]
- @llamaindex/cloud@0.2.7
## 0.0.2
### Patch Changes
- Updated dependencies [b42adeb]
- @llamaindex/cloud@0.2.6
## 0.0.1
### Patch Changes
- Updated dependencies [85c2e19]
- @llamaindex/cloud@0.2.5
-111
View File
@@ -1,111 +0,0 @@
# CLAUDE.md
This file provides guidance to Claude Code (claude.ai/code) when working with the LlamaParse Browser Test example.
## Package Overview
The `@llamaindex/llama-parse-browser-test` package is a minimal browser-based example that demonstrates how to use LlamaParse (from `@llamaindex/cloud`) in a web browser environment. This serves as both an integration test and a reference implementation for browser compatibility with LlamaIndexTS cloud services.
## Purpose
This example validates that:
- `@llamaindex/cloud` package works correctly in browser environments
- LlamaParse functionality can be bundled and run in web applications
- The build process properly handles WASM dependencies and browser-specific requirements
- TypeScript compilation works with DOM APIs and modern bundler tooling
## Development Commands
- `npm run dev` - Start Vite development server with hot reload
- `npm run build` - Build for production (TypeScript compilation + Vite build)
- `npm run preview` - Preview the production build locally
## Architecture
### Build Setup
**Bundler**: Vite 6.x with TypeScript support
**WASM Support**: Uses `vite-plugin-wasm` for WebAssembly module handling
**Module System**: ESM-only (`"type": "module"`)
**Target Environment**: Modern browsers (ES2020+)
### Key Configuration
**Vite Config (`vite.config.ts`):**
- `vite-plugin-wasm` - Enables WASM module imports
- `ssr.external: ["tiktoken"]` - Excludes tiktoken from SSR bundling (browser-only)
**TypeScript Config (`tsconfig.json`):**
- Extends root monorepo TypeScript configuration
- DOM and DOM.Iterable libraries enabled for browser APIs
- Bundler module resolution for optimal Vite integration
- References `@llamaindex/cloud` package for type checking
### Application Structure
**Entry Point (`src/main.ts`):**
- Imports `LlamaParseReader` from `@llamaindex/cloud`
- Instantiates the reader to test browser compatibility
- Minimal DOM manipulation for visual feedback
**Styling (`src/style.css`):**
- Modern CSS with light/dark theme support
- Responsive design with flexbox layout
- Clean, minimal UI suitable for testing environment
**HTML (`index.html`):**
- Standard Vite HTML template
- Single-page application structure
- Module script loading for ES6 imports
## Dependencies
**Core Dependency:**
- `@llamaindex/cloud` (workspace) - LlamaCloud integration including LlamaParse
**Development Dependencies:**
- `vite` - Modern build tool and development server
- `vite-plugin-wasm` - WebAssembly support for Vite
- `typescript` - TypeScript compiler and language support
## Testing Integration
This example functions as an end-to-end test by:
1. **Import Validation**: Verifies `@llamaindex/cloud` can be imported in browser context
2. **Instantiation Testing**: Tests that `LlamaParseReader` can be created without errors
3. **Bundle Compatibility**: Ensures the build process handles all dependencies correctly
4. **Runtime Verification**: Validates the application loads and runs in actual browsers
## Browser Compatibility
The application targets modern browsers with:
- ES2020 language features
- ES Modules support
- WebAssembly support (for potential WASM dependencies)
- Modern DOM APIs
## Development Notes
- **Minimal Implementation**: Keeps the example simple to focus on integration testing
- **Cloud Service Focus**: Specifically tests browser compatibility with LlamaCloud services
- **Build Validation**: Ensures the build process works end-to-end without browser-specific issues
- **WASM Preparation**: Configured for WASM dependencies even if not currently used
- **Type Safety**: Full TypeScript integration with proper DOM type definitions
## Common Issues
- **WASM Loading**: The `vite-plugin-wasm` handles WebAssembly module loading complexities
- **SSR Exclusions**: Tiktoken is excluded from SSR to prevent Node.js-specific dependencies in browser builds
- **Module Resolution**: Uses bundler module resolution for optimal compatibility with modern web tooling
This example serves as a foundation for integrating LlamaIndexTS cloud services into web applications and validates that the core cloud functionality works correctly in browser environments.
@@ -1,13 +0,0 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<link rel="icon" type="image/svg+xml" href="/vite.svg" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Vite + TS</title>
</head>
<body>
<div id="app"></div>
<script type="module" src="/src/main.ts"></script>
</body>
</html>
@@ -1,19 +0,0 @@
{
"name": "@llamaindex/llama-parse-browser-test",
"private": true,
"version": "0.0.80",
"type": "module",
"scripts": {
"dev": "vite",
"build": "tsc && vite build",
"preview": "vite preview"
},
"devDependencies": {
"typescript": "^5.8.3",
"vite": "^6.3.3",
"vite-plugin-wasm": "^3.4.1"
},
"dependencies": {
"@llamaindex/cloud": "workspace:*"
}
}
@@ -1,10 +0,0 @@
import { LlamaParseReader } from "@llamaindex/cloud";
import "./style.css";
new LlamaParseReader();
document.querySelector<HTMLDivElement>("#app")!.innerHTML = `
<div>
Hello, world!
</div>
`;
@@ -1,96 +0,0 @@
:root {
font-family: Inter, system-ui, Avenir, Helvetica, Arial, sans-serif;
line-height: 1.5;
font-weight: 400;
color-scheme: light dark;
color: rgba(255, 255, 255, 0.87);
background-color: #242424;
font-synthesis: none;
text-rendering: optimizeLegibility;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
a {
font-weight: 500;
color: #646cff;
text-decoration: inherit;
}
a:hover {
color: #535bf2;
}
body {
margin: 0;
display: flex;
place-items: center;
min-width: 320px;
min-height: 100vh;
}
h1 {
font-size: 3.2em;
line-height: 1.1;
}
#app {
max-width: 1280px;
margin: 0 auto;
padding: 2rem;
text-align: center;
}
.logo {
height: 6em;
padding: 1.5em;
will-change: filter;
transition: filter 300ms;
}
.logo:hover {
filter: drop-shadow(0 0 2em #646cffaa);
}
.logo.vanilla:hover {
filter: drop-shadow(0 0 2em #3178c6aa);
}
.card {
padding: 2em;
}
.read-the-docs {
color: #888;
}
button {
border-radius: 8px;
border: 1px solid transparent;
padding: 0.6em 1.2em;
font-size: 1em;
font-weight: 500;
font-family: inherit;
background-color: #1a1a1a;
cursor: pointer;
transition: border-color 0.25s;
}
button:hover {
border-color: #646cff;
}
button:focus,
button:focus-visible {
outline: 4px auto -webkit-focus-ring-color;
}
@media (prefers-color-scheme: light) {
:root {
color: #213547;
background-color: #ffffff;
}
a:hover {
color: #747bff;
}
button {
background-color: #f9f9f9;
}
}
-1
View File
@@ -1 +0,0 @@
/// <reference types="vite/client" />
@@ -1,26 +0,0 @@
{
"extends": "../../../tsconfig.json",
"compilerOptions": {
"target": "ES2020",
"useDefineForClassFields": true,
"module": "ESNext",
"lib": ["ES2020", "DOM", "DOM.Iterable"],
"skipLibCheck": true,
/* Bundler mode */
"moduleResolution": "bundler",
"allowImportingTsExtensions": true,
"isolatedModules": true,
"moduleDetection": "force",
"noEmit": true,
/* Linting */
"strict": true,
"noUnusedLocals": true,
"noUnusedParameters": true,
"noFallthroughCasesInSwitch": true
},
"references": [
{
"path": "../../../packages/cloud/tsconfig.json"
}
]
}
@@ -1,8 +0,0 @@
import wasm from "vite-plugin-wasm";
export default {
plugins: [wasm()],
ssr: {
external: ["tiktoken"],
},
};
+63
View File
@@ -1,5 +1,68 @@
# @llamaindex/next-agent-test
## 0.1.191
### Patch Changes
- Updated dependencies [d493015]
- llamaindex@0.12.0
## 0.1.190
### Patch Changes
- Updated dependencies [8929dcf]
- llamaindex@0.11.29
## 0.1.189
### Patch Changes
- llamaindex@0.11.28
## 0.1.188
### Patch Changes
- llamaindex@0.11.27
## 0.1.187
### Patch Changes
- llamaindex@0.11.26
## 0.1.186
### Patch Changes
- Updated dependencies [049471b]
- llamaindex@0.11.25
## 0.1.185
### Patch Changes
- llamaindex@0.11.24
## 0.1.184
### Patch Changes
- llamaindex@0.11.23
## 0.1.183
### Patch Changes
- llamaindex@0.11.22
## 0.1.182
### Patch Changes
- llamaindex@0.11.21
## 0.1.181
### Patch Changes
+2 -2
View File
@@ -1,6 +1,6 @@
{
"name": "@llamaindex/next-agent-test",
"version": "0.1.181",
"version": "0.1.191",
"private": true,
"scripts": {
"dev": "next dev",
@@ -10,7 +10,7 @@
"dependencies": {
"ai": "^4.3.17",
"llamaindex": "workspace:*",
"next": "^15.3.3",
"next": "^15.4.7",
"react": "19.0.0",
"react-dom": "19.0.0"
},
@@ -1,5 +1,68 @@
# test-edge-runtime
## 0.1.190
### Patch Changes
- Updated dependencies [d493015]
- llamaindex@0.12.0
## 0.1.189
### Patch Changes
- Updated dependencies [8929dcf]
- llamaindex@0.11.29
## 0.1.188
### Patch Changes
- llamaindex@0.11.28
## 0.1.187
### Patch Changes
- llamaindex@0.11.27
## 0.1.186
### Patch Changes
- llamaindex@0.11.26
## 0.1.185
### Patch Changes
- Updated dependencies [049471b]
- llamaindex@0.11.25
## 0.1.184
### Patch Changes
- llamaindex@0.11.24
## 0.1.183
### Patch Changes
- llamaindex@0.11.23
## 0.1.182
### Patch Changes
- llamaindex@0.11.22
## 0.1.181
### Patch Changes
- llamaindex@0.11.21
## 0.1.180
### Patch Changes
@@ -1,6 +1,6 @@
{
"name": "@llamaindex/nextjs-edge-runtime-test",
"version": "0.1.180",
"version": "0.1.190",
"private": true,
"scripts": {
"dev": "next dev",
@@ -9,7 +9,7 @@
},
"dependencies": {
"llamaindex": "workspace:*",
"next": "^15.3.3",
"next": "^15.4.7",
"react": "^19.1.0",
"react-dom": "^19.1.0"
},
@@ -1,5 +1,93 @@
# @llamaindex/next-node-runtime
## 0.1.62
### Patch Changes
- Updated dependencies [d493015]
- llamaindex@0.12.0
- @llamaindex/huggingface@0.1.30
- @llamaindex/readers@3.1.21
## 0.1.61
### Patch Changes
- Updated dependencies [8929dcf]
- llamaindex@0.11.29
- @llamaindex/huggingface@0.1.29
- @llamaindex/readers@3.1.20
## 0.1.60
### Patch Changes
- llamaindex@0.11.28
- @llamaindex/huggingface@0.1.28
## 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
- Updated dependencies [049471b]
- llamaindex@0.11.25
## 0.1.54
### Patch Changes
- llamaindex@0.11.24
- @llamaindex/huggingface@0.1.24
- @llamaindex/readers@3.1.18
## 0.1.53
### Patch Changes
- llamaindex@0.11.23
- @llamaindex/huggingface@0.1.23
- @llamaindex/readers@3.1.17
## 0.1.52
### Patch Changes
- llamaindex@0.11.22
## 0.1.51
### Patch Changes
- llamaindex@0.11.21
- @llamaindex/huggingface@0.1.22
- @llamaindex/readers@3.1.16
## 0.1.50
### Patch Changes
@@ -1,6 +1,6 @@
{
"name": "@llamaindex/next-node-runtime-test",
"version": "0.1.50",
"version": "0.1.62",
"private": true,
"scripts": {
"dev": "next dev",
@@ -11,7 +11,7 @@
"@llamaindex/huggingface": "workspace:*",
"@llamaindex/readers": "workspace:*",
"llamaindex": "workspace:*",
"next": "^15.3.3",
"next": "^15.4.7",
"react": "19.0.0",
"react-dom": "19.0.0"
},
@@ -1,5 +1,68 @@
# vite-import-llamaindex
## 0.0.57
### Patch Changes
- Updated dependencies [d493015]
- llamaindex@0.12.0
## 0.0.56
### Patch Changes
- Updated dependencies [8929dcf]
- llamaindex@0.11.29
## 0.0.55
### Patch Changes
- llamaindex@0.11.28
## 0.0.54
### Patch Changes
- llamaindex@0.11.27
## 0.0.53
### Patch Changes
- llamaindex@0.11.26
## 0.0.52
### Patch Changes
- Updated dependencies [049471b]
- llamaindex@0.11.25
## 0.0.51
### Patch Changes
- llamaindex@0.11.24
## 0.0.50
### Patch Changes
- llamaindex@0.11.23
## 0.0.49
### Patch Changes
- llamaindex@0.11.22
## 0.0.48
### Patch Changes
- llamaindex@0.11.21
## 0.0.47
### Patch Changes
@@ -1,11 +1,12 @@
{
"name": "vite-import-llamaindex",
"private": true,
"version": "0.0.47",
"version": "0.0.57",
"type": "module",
"scripts": {
"build": "vite build",
"size-limit": "size-limit"
"size-limit": "size-limit",
"ci-build": "pnpm -C ../../../ build && vite build"
},
"size-limit": [
{
@@ -16,7 +17,7 @@
"@size-limit/preset-big-lib": "^11.1.6",
"size-limit": "^11.1.6",
"typescript": "^5.8.3",
"vite": "^6.3.3"
"vite": "^6.3.6"
},
"dependencies": {
"llamaindex": "workspace:*"
@@ -1,5 +1,68 @@
# @llamaindex/waku-query-engine-test
## 0.0.191
### Patch Changes
- Updated dependencies [d493015]
- llamaindex@0.12.0
## 0.0.190
### Patch Changes
- Updated dependencies [8929dcf]
- llamaindex@0.11.29
## 0.0.189
### Patch Changes
- llamaindex@0.11.28
## 0.0.188
### Patch Changes
- llamaindex@0.11.27
## 0.0.187
### Patch Changes
- llamaindex@0.11.26
## 0.0.186
### Patch Changes
- Updated dependencies [049471b]
- llamaindex@0.11.25
## 0.0.185
### Patch Changes
- llamaindex@0.11.24
## 0.0.184
### Patch Changes
- llamaindex@0.11.23
## 0.0.183
### Patch Changes
- llamaindex@0.11.22
## 0.0.182
### Patch Changes
- llamaindex@0.11.21
## 0.0.181
### Patch Changes
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@llamaindex/waku-query-engine-test",
"version": "0.0.181",
"version": "0.0.191",
"type": "module",
"private": true,
"scripts": {
+1 -3
View File
@@ -44,9 +44,7 @@ export const getWeatherTool = FunctionTool.from(
name: "getWeather",
description: "Get the weather for a city",
parameters: z.object({
city: z.string({
description: "The city to get the weather for",
}),
city: z.string().describe("The city to get the weather for"),
}),
},
);
+1 -1
View File
@@ -23,7 +23,7 @@ await test("pinecone", async (t) => {
});
const vectorStore = new PineconeVectorStore({
embeddingModel: openaiEmbedding,
embedModel: openaiEmbedding,
});
t.after(async () => {
+394
View File
@@ -1,5 +1,399 @@
# examples
## 0.3.42
### Patch Changes
- Updated dependencies [06f884a]
- Updated dependencies [06f884a]
- Updated dependencies [d493015]
- @llamaindex/core@0.6.22
- @llamaindex/workflow@1.1.24
- llamaindex@0.12.0
- @llamaindex/node-parser@2.0.22
- @llamaindex/anthropic@0.3.25
- @llamaindex/assemblyai@0.1.21
- @llamaindex/clip@0.0.76
- @llamaindex/cohere@0.0.36
- @llamaindex/deepinfra@0.0.76
- @llamaindex/discord@0.1.21
- @llamaindex/google@0.3.22
- @llamaindex/huggingface@0.1.30
- @llamaindex/jinaai@0.0.36
- @llamaindex/mistral@0.1.22
- @llamaindex/mixedbread@0.0.36
- @llamaindex/notion@0.1.21
- @llamaindex/ollama@0.1.23
- @llamaindex/openai@0.4.20
- @llamaindex/perplexity@0.0.33
- @llamaindex/portkey-ai@0.0.64
- @llamaindex/replicate@0.0.64
- @llamaindex/bm25-retriever@0.0.11
- @llamaindex/astra@0.0.36
- @llamaindex/azure@0.1.37
- @llamaindex/chroma@0.0.36
- @llamaindex/elastic-search@0.1.22
- @llamaindex/firestore@1.0.29
- @llamaindex/milvus@0.1.31
- @llamaindex/mongodb@0.0.37
- @llamaindex/pinecone@0.1.22
- @llamaindex/postgres@0.0.65
- @llamaindex/qdrant@0.1.32
- @llamaindex/supabase@0.1.23
- @llamaindex/upstash@0.0.36
- @llamaindex/weaviate@0.0.37
- @llamaindex/vercel@0.1.22
- @llamaindex/voyage-ai@1.0.28
- @llamaindex/readers@3.1.21
- @llamaindex/tools@0.1.12
- @llamaindex/deepseek@0.0.38
- @llamaindex/fireworks@0.0.36
- @llamaindex/groq@0.0.92
- @llamaindex/together@0.0.36
- @llamaindex/vllm@0.0.62
- @llamaindex/xai@0.0.23
## 0.3.41
### Patch Changes
- Updated dependencies [8929dcf]
- Updated dependencies [5da1cda]
- Updated dependencies [5d5cd44]
- Updated dependencies [c40adaf]
- llamaindex@0.11.29
- @llamaindex/core@0.6.21
- @llamaindex/tools@0.1.11
- @llamaindex/workflow@1.1.23
- @llamaindex/ollama@0.1.22
- @llamaindex/openai@0.4.19
- @llamaindex/vercel@0.1.21
- @llamaindex/anthropic@0.3.24
- @llamaindex/google@0.3.21
- @llamaindex/cloud@4.1.3
- @llamaindex/node-parser@2.0.21
- @llamaindex/assemblyai@0.1.20
- @llamaindex/clip@0.0.75
- @llamaindex/cohere@0.0.35
- @llamaindex/deepinfra@0.0.75
- @llamaindex/discord@0.1.20
- @llamaindex/huggingface@0.1.29
- @llamaindex/jinaai@0.0.35
- @llamaindex/mistral@0.1.21
- @llamaindex/mixedbread@0.0.35
- @llamaindex/notion@0.1.20
- @llamaindex/perplexity@0.0.32
- @llamaindex/portkey-ai@0.0.63
- @llamaindex/replicate@0.0.63
- @llamaindex/bm25-retriever@0.0.10
- @llamaindex/astra@0.0.35
- @llamaindex/azure@0.1.36
- @llamaindex/chroma@0.0.35
- @llamaindex/elastic-search@0.1.21
- @llamaindex/firestore@1.0.28
- @llamaindex/milvus@0.1.30
- @llamaindex/mongodb@0.0.36
- @llamaindex/pinecone@0.1.21
- @llamaindex/postgres@0.0.64
- @llamaindex/qdrant@0.1.31
- @llamaindex/supabase@0.1.22
- @llamaindex/upstash@0.0.35
- @llamaindex/weaviate@0.0.36
- @llamaindex/voyage-ai@1.0.27
- @llamaindex/readers@3.1.20
- @llamaindex/deepseek@0.0.37
- @llamaindex/fireworks@0.0.35
- @llamaindex/groq@0.0.91
- @llamaindex/together@0.0.35
- @llamaindex/vllm@0.0.61
- @llamaindex/xai@0.0.22
## 0.3.40
### Patch Changes
- Updated dependencies [1995b38]
- Updated dependencies [001a515]
- Updated dependencies [9d7d205]
- @llamaindex/workflow@1.1.22
- @llamaindex/openai@0.4.18
- llamaindex@0.11.28
- @llamaindex/clip@0.0.74
- @llamaindex/deepinfra@0.0.74
- @llamaindex/deepseek@0.0.36
- @llamaindex/fireworks@0.0.34
- @llamaindex/groq@0.0.90
- @llamaindex/huggingface@0.1.28
- @llamaindex/jinaai@0.0.34
- @llamaindex/perplexity@0.0.31
- @llamaindex/azure@0.1.35
- @llamaindex/together@0.0.34
- @llamaindex/vllm@0.0.60
- @llamaindex/xai@0.0.21
## 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
- Updated dependencies [c3bf3c7]
- Updated dependencies [f9f1de9]
- @llamaindex/cloud@4.0.28
- @llamaindex/core@0.6.19
- llamaindex@0.11.24
- @llamaindex/node-parser@2.0.19
- @llamaindex/anthropic@0.3.21
- @llamaindex/assemblyai@0.1.18
- @llamaindex/clip@0.0.70
- @llamaindex/cohere@0.0.33
- @llamaindex/deepinfra@0.0.70
- @llamaindex/discord@0.1.18
- @llamaindex/google@0.3.18
- @llamaindex/huggingface@0.1.24
- @llamaindex/jinaai@0.0.30
- @llamaindex/mistral@0.1.19
- @llamaindex/mixedbread@0.0.33
- @llamaindex/notion@0.1.18
- @llamaindex/ollama@0.1.19
- @llamaindex/openai@0.4.14
- @llamaindex/perplexity@0.0.27
- @llamaindex/portkey-ai@0.0.61
- @llamaindex/replicate@0.0.61
- @llamaindex/bm25-retriever@0.0.8
- @llamaindex/astra@0.0.33
- @llamaindex/azure@0.1.31
- @llamaindex/chroma@0.0.33
- @llamaindex/elastic-search@0.1.19
- @llamaindex/firestore@1.0.26
- @llamaindex/milvus@0.1.28
- @llamaindex/mongodb@0.0.34
- @llamaindex/pinecone@0.1.19
- @llamaindex/postgres@0.0.62
- @llamaindex/qdrant@0.1.29
- @llamaindex/supabase@0.1.20
- @llamaindex/upstash@0.0.33
- @llamaindex/weaviate@0.0.34
- @llamaindex/vercel@0.1.19
- @llamaindex/voyage-ai@1.0.25
- @llamaindex/readers@3.1.18
- @llamaindex/tools@0.1.9
- @llamaindex/workflow@1.1.20
- @llamaindex/deepseek@0.0.31
- @llamaindex/fireworks@0.0.30
- @llamaindex/groq@0.0.86
- @llamaindex/together@0.0.30
- @llamaindex/vllm@0.0.56
- @llamaindex/xai@0.0.17
## 0.3.34
### Patch Changes
- Updated dependencies [f29799e]
- Updated dependencies [7224c06]
- @llamaindex/workflow@1.1.19
- @llamaindex/core@0.6.18
- llamaindex@0.11.23
- @llamaindex/cloud@4.0.27
- @llamaindex/node-parser@2.0.18
- @llamaindex/anthropic@0.3.20
- @llamaindex/assemblyai@0.1.17
- @llamaindex/clip@0.0.69
- @llamaindex/cohere@0.0.32
- @llamaindex/deepinfra@0.0.69
- @llamaindex/discord@0.1.17
- @llamaindex/google@0.3.17
- @llamaindex/huggingface@0.1.23
- @llamaindex/jinaai@0.0.29
- @llamaindex/mistral@0.1.18
- @llamaindex/mixedbread@0.0.32
- @llamaindex/notion@0.1.17
- @llamaindex/ollama@0.1.18
- @llamaindex/openai@0.4.13
- @llamaindex/perplexity@0.0.26
- @llamaindex/portkey-ai@0.0.60
- @llamaindex/replicate@0.0.60
- @llamaindex/bm25-retriever@0.0.7
- @llamaindex/astra@0.0.32
- @llamaindex/azure@0.1.30
- @llamaindex/chroma@0.0.32
- @llamaindex/elastic-search@0.1.18
- @llamaindex/firestore@1.0.25
- @llamaindex/milvus@0.1.27
- @llamaindex/mongodb@0.0.33
- @llamaindex/pinecone@0.1.18
- @llamaindex/postgres@0.0.61
- @llamaindex/qdrant@0.1.28
- @llamaindex/supabase@0.1.19
- @llamaindex/upstash@0.0.32
- @llamaindex/weaviate@0.0.33
- @llamaindex/vercel@0.1.18
- @llamaindex/voyage-ai@1.0.24
- @llamaindex/readers@3.1.17
- @llamaindex/tools@0.1.8
- @llamaindex/deepseek@0.0.30
- @llamaindex/fireworks@0.0.29
- @llamaindex/groq@0.0.85
- @llamaindex/together@0.0.29
- @llamaindex/vllm@0.0.55
- @llamaindex/xai@0.0.16
## 0.3.33
### Patch Changes
- Updated dependencies [38da40b]
- @llamaindex/core@0.6.17
- @llamaindex/cloud@4.0.26
- llamaindex@0.11.21
- @llamaindex/node-parser@2.0.17
- @llamaindex/anthropic@0.3.19
- @llamaindex/assemblyai@0.1.16
- @llamaindex/clip@0.0.68
- @llamaindex/cohere@0.0.31
- @llamaindex/deepinfra@0.0.68
- @llamaindex/discord@0.1.16
- @llamaindex/google@0.3.16
- @llamaindex/huggingface@0.1.22
- @llamaindex/jinaai@0.0.28
- @llamaindex/mistral@0.1.17
- @llamaindex/mixedbread@0.0.31
- @llamaindex/notion@0.1.16
- @llamaindex/ollama@0.1.17
- @llamaindex/openai@0.4.12
- @llamaindex/perplexity@0.0.25
- @llamaindex/portkey-ai@0.0.59
- @llamaindex/replicate@0.0.59
- @llamaindex/bm25-retriever@0.0.6
- @llamaindex/astra@0.0.31
- @llamaindex/azure@0.1.29
- @llamaindex/chroma@0.0.31
- @llamaindex/elastic-search@0.1.17
- @llamaindex/firestore@1.0.24
- @llamaindex/milvus@0.1.26
- @llamaindex/mongodb@0.0.32
- @llamaindex/pinecone@0.1.17
- @llamaindex/postgres@0.0.60
- @llamaindex/qdrant@0.1.27
- @llamaindex/supabase@0.1.18
- @llamaindex/upstash@0.0.31
- @llamaindex/weaviate@0.0.32
- @llamaindex/vercel@0.1.17
- @llamaindex/voyage-ai@1.0.23
- @llamaindex/readers@3.1.16
- @llamaindex/tools@0.1.7
- @llamaindex/workflow@1.1.17
- @llamaindex/deepseek@0.0.29
- @llamaindex/fireworks@0.0.28
- @llamaindex/groq@0.0.84
- @llamaindex/together@0.0.28
- @llamaindex/vllm@0.0.54
- @llamaindex/xai@0.0.15
## 0.3.32
### Patch Changes
+1 -3
View File
@@ -20,9 +20,7 @@ const saveFileTool = tool({
description:
"Save the written content into a file that can be downloaded by the user",
parameters: z.object({
content: z.string({
description: "The content to save into a file",
}),
content: z.string().describe("The content to save into a file"),
}),
execute: ({ content }: { content: string }) => {
const filePath = os.tmpdir() + "/report.md";
+1 -3
View File
@@ -17,9 +17,7 @@ const userQuestion = "which are the best comedies after 2010?";
description:
"Execute python code in a Jupyter notebook cell and return any result, stdout, stderr, display_data, and error.",
parameters: z.object({
code: z.string({
description: "The python code to execute in a single cell.",
}),
code: z.string().describe("The python code to execute in a single cell."),
}),
execute: ({ code }) => {
console.log(
+2 -6
View File
@@ -26,9 +26,7 @@ const temperatureConverterTool = tool({
description: "Convert a temperature from Fahrenheit to Celsius",
name: "fahrenheitToCelsius",
parameters: z.object({
temperature: z.number({
description: "The temperature in Fahrenheit",
}),
temperature: z.number().describe("The temperature in Fahrenheit"),
}),
execute: ({ temperature }) => {
return ((temperature - 32) * 5) / 9;
@@ -39,9 +37,7 @@ const temperatureFetcherTool = tool({
description: "Fetch the temperature (in Fahrenheit) for a city",
name: "fetchTemperature",
parameters: z.object({
city: z.string({
description: "The city to fetch the temperature for",
}),
city: z.string().describe("The city to fetch the temperature for"),
}),
execute: ({ city }) => {
const temperature = Math.floor(Math.random() * 58) + 32;
@@ -0,0 +1,39 @@
import { z } from "zod";
import { openai } from "@llamaindex/openai";
import { agent } from "@llamaindex/workflow";
import { tool } from "llamaindex";
const weatherTool = tool({
name: "weatherTool",
description: "Get weather information",
parameters: z.object({
location: z.string(),
}),
execute: ({ location }) => {
return `The weather in ${location} is sunny. The temperature is 72 degrees. The humidity is 50%. The wind speed is 10 mph.`;
},
});
const responseSchema = z.object({
temperature: z.number(),
humidity: z.number(),
windSpeed: z.number(),
});
const myAgent = agent({
name: "myAgent",
tools: [weatherTool],
llm: openai({ model: "gpt-4.1-mini" }),
});
async function main() {
const result = await myAgent.run("What's the weather in Tokyo?", {
responseFormat: responseSchema,
});
console.log("result.data.result: ", result.data.result);
console.log("result.data.object: ", result.data.object);
}
main().catch(console.error);
+3 -9
View File
@@ -14,9 +14,7 @@ const weatherTool = tool({
name: "weather",
description: "Get the weather",
parameters: z.object({
location: z.string({
description: "The location to get the weather for",
}),
location: z.string().describe("The location to get the weather for"),
}),
execute: ({ location }) => {
return `The weather in ${location} is sunny`;
@@ -27,9 +25,7 @@ const inflationTool = tool({
name: "inflation",
description: "Get the inflation",
parameters: z.object({
location: z.string({
description: "The location to get the inflation for",
}),
location: z.string().describe("The location to get the inflation for"),
}),
execute: ({ location }) => {
return `The inflation in ${location} is 2%`;
@@ -41,9 +37,7 @@ const saveFileTool = tool({
description:
"Save the written content into a file that can be downloaded by the user",
parameters: z.object({
content: z.string({
description: "The content to save into a file",
}),
content: z.string().describe("The content to save into a file"),
}),
execute: ({ content }) => {
const filePath = "./report.md";
+150
View File
@@ -0,0 +1,150 @@
/**
* Example: Vector Memory Block
*
* This example demonstrates how to use the VectorMemoryBlock to store and retrieve
* conversation history using vector similarity search. The vector memory block
* stores messages in a vector store and can retrieve relevant context based on
* semantic similarity to recent messages.
*/
import { OpenAI, OpenAIEmbedding } from "@llamaindex/openai";
import { QdrantVectorStore } from "@llamaindex/qdrant";
import { createMemory, vectorBlock } from "llamaindex";
// Set up the LLM and embedding model
const llm = new OpenAI({ model: "gpt-4.1-mini" });
const embedModel = new OpenAIEmbedding({ model: "text-embedding-3-small" });
// Simulate a conversation with some context
// This conversation has 8 messages, which is more than the token limit of 100 tokens (set below)
// The last 4 messages are kept in to short term memory block (as their tokens are in the limit)
// Whereas the first 5 messages are added to long term memory block (in here we will use the vector memory block with Qdrant)
const CONVERSATION_TURNS = [
//// This is the first 5 messages that are added to long term memory block (vector memory block)
{
role: "user",
content: "Hi, I'm Sarah and I work as a data scientist at Google.",
},
{
role: "assistant",
content:
"Hello Sarah! It's great to meet you. Data science at Google must be exciting!",
},
{
role: "user",
content:
"Yes, I specialize in machine learning and natural language processing.",
},
{
role: "assistant",
content: "That's impressive! ML and NLP are fascinating fields.",
},
{
role: "user",
content:
"I have a PhD in Computer Science from Stanford, and I love hiking on weekends.",
},
//// This is the last 4 messages that are added to short term memory block
{
role: "assistant",
content:
"Wow, Stanford PhD! And hiking is a great way to unwind from tech work.",
},
{
role: "user",
content: "I also have two cats named Whiskers and Mittens.",
},
{
role: "assistant",
content:
"Cats make wonderful companions! Whiskers and Mittens are cute names.",
},
{
role: "user",
content: "Summary information about Sarah and her cats",
},
];
async function main() {
console.log("=== Vector Memory Block Example ===\n");
/**
* Create a vector store. You can quickly get a local instance of Qdrant running with Docker:
* ```bash
* docker pull qdrant/qdrant
* docker run -p 6333:6333 qdrant/qdrant
* ```
*
* Go to http://localhost:6333/dashboard#/collections to see your data
*/
const vectorStore = new QdrantVectorStore({
url: "http://localhost:6333",
embedModel,
});
// Create a vector memory block using the factory function
const vectorMemoryBlock = vectorBlock({
vectorStore,
priority: 5,
});
// Create a memory store with the vector memory block
const memory = createMemory([], {
llm,
memoryBlocks: [vectorMemoryBlock],
tokenLimit: 100,
shortTermTokenLimitRatio: 0.7,
});
// Store the conversation history in the vector memory
console.log(`Adding ${CONVERSATION_TURNS.length} messages to the memory...`);
for (const message of CONVERSATION_TURNS) {
await memory.add(message);
}
// Retrieve relevant context for the current user request
console.log("Retrieving relevant context...");
const chatHistory = await memory.getLLM();
// You will see there's 1 generated context message from vector memory block, and 4 messages from short term memory block
console.log("Chat memory:", chatHistory);
// Now simulate the assistant responding with context
console.log("\nAssistant response with context:");
const response = await llm.chat({
messages: chatHistory,
});
console.log(response.message.content);
// Try adding more messages to the memory
const newMessages = [
{
role: "user",
content: "Write a long paragraph about weather in Tokyo",
},
{
role: "assistant",
content:
"The weather in Tokyo is sunny and warm. The temperature is around 20 degrees Celsius. The weather is very nice and the people are friendly.",
},
{
role: "user",
content: "What is the weather in Tokyo?",
},
];
// Add the new messages to the memory
for (const message of newMessages) {
await memory.add(message);
}
// Try retrieving the new messages
const newChatHistory = await memory.getLLM();
// You can see now that new chat history will contain the nodes (separated by `\n`) in the
// context message that is generated by the vector memory block
// The number of retrieved nodes is set by `similarityTopK` in `queryOptions` of `vectorBlock`
// (default `similarityTopK` is 2)
console.log("New chat history:", newChatHistory);
}
main().catch(console.error);
+2 -5
View File
@@ -14,11 +14,8 @@ const writeJokeSchema = z.object({
.describe("The topic to write a joke or describe the joke to improve."),
writtenJoke: z.optional(z.string()).describe("The written joke."),
retriedTimes: z
.number()
.default(0)
.describe(
"The retried times for writing the joke. Always increase this from the input retriedTimes.",
),
.optional(z.number().default(0))
.describe("The retried times for writing the joke."),
});
const critiqueSchema = z.object({
+48
View File
@@ -0,0 +1,48 @@
import { openai } from "@llamaindex/openai";
import { ChatMessage } from "llamaindex";
import z from "zod";
const llm = openai({ model: "gpt-4.1-mini" });
const schema = z.object({
title: z.string(),
author: z.string(),
year: z.number(),
});
const messages: ChatMessage[] = [
{
role: "user",
content: `I have been reading La Divina Commedia by Dante Alighieri, published in 1321`,
},
];
async function main() {
{
// Non-streaming
const { object } = await llm.exec({ messages, responseFormat: schema });
console.log("Non-streaming object:", object);
}
{
// Streaming
let exit = false;
do {
const { stream, newMessages, toolCalls, object } = await llm.exec({
messages,
stream: true,
responseFormat: schema,
});
for await (const chunk of stream) {
console.log(chunk.delta);
}
console.log("Streaming object:", object);
messages.push(...newMessages());
exit = toolCalls.length === 0;
} while (!exit);
}
}
main().catch(console.error);
@@ -0,0 +1,41 @@
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[] = [];
let object: z.infer<typeof responseSchema> | undefined;
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,
});
object = result.object;
messages.push(...result.newMessages);
toolCalls = result.toolCalls;
} while (toolCalls.length == 0);
console.log(messages);
console.log(toolCalls);
console.log(object);
}
main().catch(console.error);
+4 -4
View File
@@ -22,7 +22,7 @@ const { withState, getContext } = createStatefulMiddleware(() => ({
const jokeFlow = withState(createWorkflow());
// Define handlers for each step
jokeFlow.handle([startEvent], async (event) => {
jokeFlow.handle([startEvent], async (context, event) => {
// Prompt the LLM to write a joke
const prompt = `Write your best joke about ${event.data}. Write the joke between <joke> and </joke> tags.`;
const response = await llm.complete({ prompt });
@@ -34,7 +34,7 @@ jokeFlow.handle([startEvent], async (event) => {
return jokeEvent.with({ joke: joke });
});
jokeFlow.handle([jokeEvent], async (event) => {
jokeFlow.handle([jokeEvent], async (context, event) => {
// Prompt the LLM to critique the joke
const prompt = `Give a thorough critique of the following joke. If the joke needs improvement, put "IMPROVE" somewhere in the critique: ${event.data.joke}`;
const response = await llm.complete({ prompt });
@@ -50,9 +50,9 @@ jokeFlow.handle([jokeEvent], async (event) => {
return resultEvent.with({ joke: event.data.joke, critique: response.text });
});
jokeFlow.handle([critiqueEvent], async (event) => {
jokeFlow.handle([critiqueEvent], async (context, event) => {
// Keep track of the number of iterations
const state = getContext().state;
const state = context.state;
state.numIterations++;
// Write a new joke based on the previous joke and critique
+2 -1
View File
@@ -1,7 +1,8 @@
import { stdin as input, stdout as output } from "node:process";
import readline from "node:readline/promises";
import { ContextChatEngine, LlamaCloudIndex } from "llamaindex";
import { LlamaCloudIndex } from "llama-cloud-services";
import { ContextChatEngine } from "llamaindex";
async function main() {
const index = new LlamaCloudIndex({
+2 -1
View File
@@ -4,7 +4,8 @@ import { stdin as input, stdout as output } from "node:process";
import readline from "node:readline/promises";
import { Document, LlamaCloudIndex } from "llamaindex";
import { LlamaCloudIndex } from "llama-cloud-services";
import { Document } from "llamaindex";
async function main() {
const path = "node_modules/llamaindex/examples/abramov.txt";
+1 -1
View File
@@ -1,7 +1,7 @@
import { stdin as input, stdout as output } from "node:process";
import readline from "node:readline/promises";
import { LlamaCloudIndex } from "llamaindex";
import { LlamaCloudIndex } from "llama-cloud-services";
async function main() {
const index = new LlamaCloudIndex({
@@ -29,9 +29,9 @@ async function callLLM(init: { model: string }) {
description:
"Execute python code in a Jupyter notebook cell and return any result, stdout, stderr, display_data, and error.",
parameters: z.object({
code: z.string({
description: "The python code to execute in a single cell.",
}),
code: z
.string()
.describe("The python code to execute in a single cell."),
}),
},
);
+9
View File
@@ -0,0 +1,9 @@
# local-settings
## 1.0.1
### Patch Changes
- Updated dependencies [d493015]
- llamaindex@0.12.0
- @llamaindex/openai@0.4.20
+69
View File
@@ -0,0 +1,69 @@
import { OpenAI, OpenAIEmbedding } from "@llamaindex/openai";
import express, { Request, Response } from "express";
import fs from "fs/promises";
import { Document, Settings, VectorStoreIndex } from "llamaindex";
const app = express();
const port = 3000;
app.get("/default", async (req: Request, res: Response) => {
const embedModel = new OpenAIEmbedding({
apiKey: process.env.OPENAI_API_KEY,
});
const llm = new OpenAI({ apiKey: process.env.OPENAI_API_KEY });
const llmResponse = await Settings.withEmbedModel(embedModel, async () => {
return Settings.withLLM(llm, async () => {
const path = "node_modules/llamaindex/examples/abramov.txt";
const essay = await fs.readFile(path, "utf-8");
// Create Document object with essay
const document = new Document({ text: essay, id_: path });
// Split text and create embeddings. Store them in a VectorStoreIndex
const index = await VectorStoreIndex.fromDocuments([document]);
// Query the index
const queryEngine = index.asQueryEngine();
const { message, sourceNodes } = await queryEngine.query({
query: "What did the author do in college?",
});
// Return response with sources
return message.content;
});
});
// res.send(message.content)
res.send(llmResponse);
});
app.get("/custom", async (req: Request, res: Response) => {
const embedModel = new OpenAIEmbedding({
apiKey: process.env.OPENAI_API_KEY,
model: "text-embedding-3-small",
});
const llm = new OpenAI({
apiKey: process.env.OPENAI_API_KEY,
model: "gpt-3.5-turbo",
});
const llmResponse = await Settings.withEmbedModel(embedModel, async () => {
return Settings.withLLM(llm, async () => {
const path = "node_modules/llamaindex/examples/abramov.txt";
const essay = await fs.readFile(path, "utf-8");
// Create Document object with essay
const document = new Document({ text: essay, id_: path });
// Split text and create embeddings. Store them in a VectorStoreIndex
const index = await VectorStoreIndex.fromDocuments([document]);
// Query the index
const queryEngine = index.asQueryEngine();
const { message, sourceNodes } = await queryEngine.query({
query: "What did the author do in college?",
});
// Return response with sources
return message.content;
});
});
// res.send(message.content)
res.send(llmResponse);
});
app.listen(port, () => {
console.log(`Example app listening on port ${port}`);
});
+22
View File
@@ -0,0 +1,22 @@
{
"name": "local-settings",
"version": "1.0.1",
"main": "index.js",
"private": "true",
"scripts": {
"test": "echo \"No tests for example package\""
},
"keywords": [],
"author": "",
"license": "ISC",
"description": "",
"devDependencies": {
"@types/express": "^5.0.3",
"typescript": "^5.9.2"
},
"dependencies": {
"@llamaindex/openai": "^0.4.20",
"express": "^5.1.0",
"llamaindex": "^0.12.0"
}
}
+8
View File
@@ -0,0 +1,8 @@
{
"extends": "../tsconfig.json",
"compilerOptions": {
"moduleResolution": "node",
"types": ["node", "express"]
},
"include": ["*.ts"]
}
+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);
})();
+1 -3
View File
@@ -8,9 +8,7 @@ const weatherTool = tool({
name: "weather",
description: "Get the weather",
parameters: z.object({
location: z.string({
description: "The location to get the weather for",
}),
location: z.string().describe("The location to get the weather for"),
}),
execute: ({ location }) => {
return `The weather in ${location} is rainy`;
+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);
})();
@@ -7,9 +7,7 @@ async function main() {
name: "weather",
description: "Get the weather",
parameters: z.object({
location: z.string({
description: "The location to get the weather for",
}),
location: z.string().describe("The location to get the weather for"),
}),
execute: ({ location }) => {
return `The weather in ${location} is sunny`;
+4 -3
View File
@@ -1,7 +1,8 @@
import { openai } from "@ai-sdk/openai";
import { llamaindex } from "@llamaindex/vercel";
import { streamText } from "ai";
import { Document, LlamaCloudIndex } from "llamaindex";
import { stepCountIs, streamText } from "ai";
import { LlamaCloudIndex } from "llama-cloud-services";
import { Document } from "llamaindex";
import fs from "node:fs/promises";
async function main() {
@@ -28,7 +29,7 @@ async function main() {
"get information from your knowledge base to answer questions.", // optional description
}),
},
maxSteps: 5,
stopWhen: stepCountIs(5),
});
for await (const textPart of result.textStream) {
+2 -2
View File
@@ -1,6 +1,6 @@
import { openai } from "@ai-sdk/openai";
import { llamaindex } from "@llamaindex/vercel";
import { streamText } from "ai";
import { stepCountIs, streamText } from "ai";
import { Document, VectorStoreIndex } from "llamaindex";
import fs from "node:fs/promises";
@@ -24,7 +24,7 @@ async function main() {
"get information from your knowledge base to answer questions.", // optional description
}),
},
maxSteps: 5,
stopWhen: stepCountIs(5),
});
for await (const textPart of result.textStream) {
+51 -50
View File
@@ -1,77 +1,78 @@
{
"name": "@llamaindex/examples",
"version": "0.3.32",
"version": "0.3.42",
"private": true,
"scripts": {
"lint": "eslint .",
"start": "echo 'To get started, run `npx tsx <path to example>`'"
},
"dependencies": {
"@ai-sdk/openai": "^1.0.5",
"@ai-sdk/openai": "^2.0.27",
"@azure/cosmos": "^4.1.1",
"@azure/identity": "^4.4.1",
"@azure/search-documents": "^12.1.0",
"@llamaindex/anthropic": "^0.3.18",
"@llamaindex/assemblyai": "^0.1.15",
"@llamaindex/astra": "^0.0.30",
"@llamaindex/azure": "^0.1.28",
"@llamaindex/bm25-retriever": "^0.0.5",
"@llamaindex/chroma": "^0.0.30",
"@llamaindex/clip": "^0.0.67",
"@llamaindex/cloud": "^4.0.25",
"@llamaindex/cohere": "^0.0.30",
"@llamaindex/core": "^0.6.16",
"@llamaindex/deepinfra": "^0.0.67",
"@llamaindex/deepseek": "^0.0.28",
"@llamaindex/discord": "^0.1.15",
"@llamaindex/elastic-search": "^0.1.16",
"@llamaindex/anthropic": "^0.3.25",
"@llamaindex/assemblyai": "^0.1.21",
"@llamaindex/astra": "^0.0.36",
"@llamaindex/azure": "^0.1.37",
"@llamaindex/bm25-retriever": "^0.0.11",
"@llamaindex/chroma": "^0.0.36",
"@llamaindex/clip": "^0.0.76",
"llama-cloud-services": "^0.3.5",
"@llamaindex/cohere": "^0.0.36",
"@llamaindex/core": "^0.6.22",
"@llamaindex/deepinfra": "^0.0.76",
"@llamaindex/deepseek": "^0.0.38",
"@llamaindex/discord": "^0.1.21",
"@llamaindex/elastic-search": "^0.1.22",
"@llamaindex/env": "^0.1.30",
"@llamaindex/firestore": "^1.0.23",
"@llamaindex/fireworks": "^0.0.27",
"@llamaindex/google": "^0.3.15",
"@llamaindex/groq": "^0.0.83",
"@llamaindex/huggingface": "^0.1.21",
"@llamaindex/jinaai": "^0.0.27",
"@llamaindex/milvus": "^0.1.25",
"@llamaindex/mistral": "^0.1.16",
"@llamaindex/mixedbread": "^0.0.30",
"@llamaindex/mongodb": "^0.0.31",
"@llamaindex/node-parser": "^2.0.16",
"@llamaindex/notion": "^0.1.15",
"@llamaindex/ollama": "^0.1.16",
"@llamaindex/openai": "^0.4.11",
"@llamaindex/perplexity": "^0.0.24",
"@llamaindex/pinecone": "^0.1.16",
"@llamaindex/portkey-ai": "^0.0.58",
"@llamaindex/postgres": "^0.0.59",
"@llamaindex/qdrant": "^0.1.26",
"@llamaindex/readers": "^3.1.15",
"@llamaindex/replicate": "^0.0.58",
"@llamaindex/supabase": "^0.1.17",
"@llamaindex/together": "^0.0.27",
"@llamaindex/tools": "^0.1.6",
"@llamaindex/upstash": "^0.0.30",
"@llamaindex/vercel": "^0.1.16",
"@llamaindex/vllm": "^0.0.53",
"@llamaindex/voyage-ai": "^1.0.22",
"@llamaindex/weaviate": "^0.0.31",
"@llamaindex/workflow": "^1.1.16",
"@llamaindex/xai": "^0.0.14",
"@llamaindex/firestore": "^1.0.29",
"@llamaindex/fireworks": "^0.0.36",
"@llamaindex/google": "^0.3.22",
"@llamaindex/groq": "^0.0.92",
"@llamaindex/huggingface": "^0.1.30",
"@llamaindex/jinaai": "^0.0.36",
"@llamaindex/milvus": "^0.1.31",
"@llamaindex/mistral": "^0.1.22",
"@llamaindex/mixedbread": "^0.0.36",
"@llamaindex/mongodb": "^0.0.37",
"@llamaindex/node-parser": "^2.0.22",
"@llamaindex/notion": "^0.1.21",
"@llamaindex/ollama": "^0.1.23",
"@llamaindex/openai": "^0.4.20",
"@llamaindex/perplexity": "^0.0.33",
"@llamaindex/pinecone": "^0.1.22",
"@llamaindex/portkey-ai": "^0.0.64",
"@llamaindex/postgres": "^0.0.65",
"@llamaindex/qdrant": "^0.1.32",
"@llamaindex/readers": "^3.1.21",
"@llamaindex/replicate": "^0.0.64",
"@llamaindex/supabase": "^0.1.23",
"@llamaindex/together": "^0.0.36",
"@llamaindex/tools": "^0.1.12",
"@llamaindex/upstash": "^0.0.36",
"@llamaindex/vercel": "^0.1.22",
"@llamaindex/vllm": "^0.0.62",
"@llamaindex/voyage-ai": "^1.0.28",
"@llamaindex/weaviate": "^0.0.37",
"@llamaindex/workflow": "^1.1.24",
"@llamaindex/xai": "^0.0.23",
"@notionhq/client": "^4.0.0",
"@pinecone-database/pinecone": "^4.0.0",
"@vercel/postgres": "^0.10.0",
"ai": "^4.3.17",
"ai": "^5.0.39",
"ajv": "^8.17.1",
"commander": "^12.1.0",
"dotenv": "^17.2.0",
"js-tiktoken": "^1.0.14",
"llamaindex": "^0.11.20",
"llamaindex": "^0.12.0",
"mongodb": "6.7.0",
"postgres": "^3.4.4",
"wikipedia": "^2.1.2",
"zod": "^3.25.76"
"zod": "^4.1.5"
},
"devDependencies": {
"@types/express": "^5.0.3",
"@types/node": "^24.0.13",
"tsx": "^4.20.3",
"typescript": "^5.8.3"
-4
View File
@@ -9,10 +9,7 @@
"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",
@@ -20,7 +17,6 @@
"start:excel": "node --import tsx ./src/excel.ts"
},
"dependencies": {
"@llamaindex/cloud": "workspace:* || ^2.0.24",
"@llamaindex/excel": "workspace:*",
"@llamaindex/readers": "workspace:* || ^1.0.25",
"@notionhq/client": "^4.0.0",
-52
View File
@@ -1,52 +0,0 @@
import { Language, LlamaParseReader } from "@llamaindex/cloud";
import fs from "node:fs";
import path from "node:path";
type LlamaParseReaderParams = Partial<
Omit<LlamaParseReader, "language" | "apiKey">
> & {
language?: Language | Language[] | undefined;
apiKey?: string | undefined;
};
async function main() {
const filePath = "../data/pto_policy_employee.docx";
if (!fs.existsSync(filePath)) {
console.error(`File ${filePath} does not exist`);
process.exit(1);
} else {
console.log(`File ${filePath} exists`);
}
const params: LlamaParseReaderParams = {
verbose: true,
parsingInstruction:
"Extract the text from the document a long with any images and tables. This is a document for a course and the contents of the images are important.",
fastMode: false,
gpt4oMode: true,
useVendorMultimodalModel: true,
vendorMultimodalModelName: "anthropic-sonnet-3.5",
premiumMode: true,
resultType: "markdown",
apiKey: process.env.LLAMA_CLOUD_API_KEY,
doNotCache: true,
};
// set up the llamaparse reader
const reader = new LlamaParseReader(params);
const buffer = fs.readFileSync(filePath);
const documents = await reader.loadDataAsContent(
new Uint8Array(buffer),
path.basename(filePath),
);
let allText = "";
documents.forEach((doc) => {
allText += doc.text;
});
console.log(allText);
}
main().catch(console.error);
-72
View File
@@ -1,72 +0,0 @@
import { LlamaParseReader } from "@llamaindex/cloud";
import { OpenAI } from "@llamaindex/openai";
import {
Document,
ImageNode,
PromptTemplate,
VectorStoreIndex,
createMessageContent,
} from "llamaindex";
const reader = new LlamaParseReader();
async function main() {
// Load PDF using LlamaParse JSON mode and return an array of json objects
const jsonObjs = await reader.loadJson("../data/uber_10q_march_2022.pdf");
// Access the first "pages" (=a single parsed file) object in the array
const jsonList = jsonObjs[0]["pages"];
const textDocs = getTextDocs(jsonList);
const imageTextDocs = await getImageTextDocs(jsonObjs);
const documents = [...textDocs, ...imageTextDocs];
// Split text, create embeddings and query the index
const index = await VectorStoreIndex.fromDocuments(documents);
const queryEngine = index.asQueryEngine();
const response = await queryEngine.query({
query:
"What does the bar graph titled 'Monthly Active Platform Consumers' show?",
});
console.log(response.toString());
}
main().catch(console.error);
// Extract and assign text and page number from jsonList, return an array of Document objects
function getTextDocs(jsonList: { text: string; page: number }[]): Document[] {
return jsonList.map(
(page) => new Document({ text: page.text, metadata: { page: page.page } }),
);
}
// Download all images from jsonObjs, send them to OpenAI API to get alt text, return an array of Document objects
async function getImageTextDocs(
// eslint-disable-next-line @typescript-eslint/no-explicit-any
jsonObjs: Record<string, any>[],
): Promise<Document[]> {
const llm = new OpenAI({
model: "gpt-4o",
temperature: 0.2,
maxTokens: 1000,
});
const imageDicts = await reader.getImages(jsonObjs, "images");
const imageDocs = [];
for (const imageDict of imageDicts) {
const imageDoc = new ImageNode({ image: imageDict.path });
const prompt = new PromptTemplate({
template: `Describe the image as alt text`,
});
const message = await createMessageContent(prompt, [imageDoc]);
const response = await llm.complete({
prompt: message,
});
const doc = new Document({
text: response.text,
metadata: { path: imageDict.path },
});
imageDocs.push(doc);
}
return imageDocs;
}
-33
View File
@@ -1,33 +0,0 @@
import { LlamaParseReader } from "@llamaindex/cloud/reader";
import { openai, OpenAIEmbedding } from "@llamaindex/openai";
import { Settings, VectorStoreIndex } from "llamaindex";
Settings.llm = openai({
model: "gpt-4.1",
});
Settings.embedModel = new OpenAIEmbedding({
model: "text-embedding-3-small",
});
async function main() {
// Load PDF using LlamaParse
const reader = new LlamaParseReader({
resultType: "markdown",
baseUrl: "https://api.cloud.llamaindex.ai", // for EU use: https://api.cloud.eu.llamaindex.ai
});
const documents = await reader.loadData("../data/TOS.pdf");
// Split text and create embeddings. Store them in a VectorStoreIndex
const index = await VectorStoreIndex.fromDocuments(documents);
// Query the index
const queryEngine = index.asQueryEngine();
const response = await queryEngine.query({
query: "What is the license grant in the TOS?",
});
// Output response
console.log(response.toString());
}
main().catch(console.error);
@@ -1,33 +0,0 @@
import { LlamaParseReader } from "@llamaindex/cloud/reader";
import { SimpleDirectoryReader } from "@llamaindex/readers/directory";
import { VectorStoreIndex } from "llamaindex";
async function main() {
const reader = new SimpleDirectoryReader();
const docs = await reader.loadData({
directoryPath: "../data/parallel", // brk-2022.pdf split into 6 parts
numWorkers: 2,
// set LlamaParse as the default reader for all file types. Set apiKey here or in environment variable LLAMA_CLOUD_API_KEY
overrideReader: new LlamaParseReader({
language: "en",
resultType: "markdown",
parsingInstruction:
"The provided files is Berkshire Hathaway's 2022 Annual Report. They contain figures, tables and raw data. Capture the data in a structured format. Mathematical equation should be put out as LATEX markdown (between $$).",
}),
});
const index = await VectorStoreIndex.fromDocuments(docs);
// Query the index
const queryEngine = index.asQueryEngine();
const response = await queryEngine.query({
query:
"What is the general strategy for shareholder safety outlined in the report? Use a concrete example with numbers",
});
// Output response
console.log(response.toString());
}
main().catch(console.error);
+1 -1
View File
@@ -15,7 +15,7 @@ async function main() {
const vectorStore = new QdrantVectorStore({
url: process.env.QDRANT_URL,
apiKey: process.env.QDRANT_API_KEY,
embeddingModel: embedding,
embedModel: embedding,
collectionName: "gemini_test",
});
const storageContext = await storageContextFromDefaults({ vectorStore });
+1 -1
View File
@@ -16,7 +16,7 @@ async function main() {
const vectorStore = new QdrantVectorStore({
url: process.env.QDRANT_URL,
apiKey: process.env.QDRANT_API_KEY,
embeddingModel: embedding,
embedModel: embedding,
collectionName: "jina_test",
});
const storageContext = await storageContextFromDefaults({ vectorStore });
+63
View File
@@ -1,5 +1,68 @@
# @llamaindex/autotool
## 9.0.0
### Patch Changes
- Updated dependencies [d493015]
- llamaindex@0.12.0
## 8.0.29
### Patch Changes
- Updated dependencies [8929dcf]
- llamaindex@0.11.29
## 8.0.28
### Patch Changes
- llamaindex@0.11.28
## 8.0.27
### Patch Changes
- llamaindex@0.11.27
## 8.0.26
### Patch Changes
- llamaindex@0.11.26
## 8.0.25
### Patch Changes
- Updated dependencies [049471b]
- llamaindex@0.11.25
## 8.0.24
### Patch Changes
- llamaindex@0.11.24
## 8.0.23
### Patch Changes
- llamaindex@0.11.23
## 8.0.22
### Patch Changes
- llamaindex@0.11.22
## 8.0.21
### Patch Changes
- llamaindex@0.11.21
## 8.0.20
### Patch Changes
@@ -1,5 +1,78 @@
# @llamaindex/autotool-01-node-example
## 0.0.138
### Patch Changes
- Updated dependencies [d493015]
- llamaindex@0.12.0
- @llamaindex/autotool@9.0.0
## 0.0.137
### Patch Changes
- Updated dependencies [8929dcf]
- llamaindex@0.11.29
- @llamaindex/autotool@8.0.29
## 0.0.136
### Patch Changes
- llamaindex@0.11.28
- @llamaindex/autotool@8.0.28
## 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
- Updated dependencies [049471b]
- llamaindex@0.11.25
- @llamaindex/autotool@8.0.25
## 0.0.132
### Patch Changes
- llamaindex@0.11.24
- @llamaindex/autotool@8.0.24
## 0.0.131
### Patch Changes
- llamaindex@0.11.23
- @llamaindex/autotool@8.0.23
## 0.0.130
### Patch Changes
- llamaindex@0.11.22
- @llamaindex/autotool@8.0.22
## 0.0.129
### Patch Changes
- llamaindex@0.11.21
- @llamaindex/autotool@8.0.21
## 0.0.128
### Patch Changes
@@ -13,5 +13,5 @@
"scripts": {
"start": "node --import tsx --import @llamaindex/autotool/node ./src/index.ts"
},
"version": "0.0.128"
"version": "0.0.138"
}
+2 -2
View File
@@ -6,7 +6,7 @@
"url": "git+https://github.com/run-llama/LlamaIndexTS.git",
"directory": "packages/autotool"
},
"version": "8.0.20",
"version": "9.0.0",
"description": "auto transpile your JS function to LLM Agent compatible",
"files": [
"dist",
@@ -76,7 +76,7 @@
"@types/json-schema": "^7.0.15",
"@types/node": "^24.0.13",
"llamaindex": "workspace:*",
"next": "^15.3.3",
"next": "^15.4.7",
"rollup": "^4.28.1",
"tsx": "^4.20.3",
"typescript": "^5.8.3",
-9
View File
@@ -1,9 +0,0 @@
# @llamaindex/cloud
> LlamaCloud is a new generation of managed parsing, ingestion, and retrieval services, designed to bring production-grade context-augmentation to your LLM and RAG applications.
For more information, see the [API documentation](https://docs.cloud.llamaindex.ai/).
## License
MIT
-8
View File
@@ -1,8 +0,0 @@
{
"type": "module",
"main": "./dist/index.cjs",
"module": "./dist/index.js",
"types": "./dist/index.d.ts",
"exports": "./dist/index.js",
"private": true
}
-24
View File
@@ -1,24 +0,0 @@
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
@@ -1,97 +0,0 @@
{
"name": "@llamaindex/cloud",
"version": "4.0.25",
"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"
}
}

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