mirror of
https://github.com/run-llama/LlamaIndexTS.git
synced 2026-07-01 22:14:03 -04:00
Compare commits
42 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 677abe46d2 | |||
| 1cc271ccae | |||
| c927457e2e | |||
| 17ae23560e | |||
| 0d9169e42d | |||
| 3864c77ac3 | |||
| a86f66cd2d | |||
| e5b25acc3d | |||
| ba35240b4c | |||
| 7384e4d273 | |||
| ae75966721 | |||
| 5cdab12791 | |||
| eaf2cb11a5 | |||
| 3ae01a227e | |||
| 76ff23dc48 | |||
| ed497727b1 | |||
| 59601dd3ab | |||
| 8474ca970e | |||
| 3703f907d9 | |||
| f63b702bec | |||
| ccde88fe0b | |||
| b0cd5301bb | |||
| 3e66ddc10d | |||
| c719b968f3 | |||
| c73c659c6d | |||
| 361a685012 | |||
| 680b529e94 | |||
| 389acbd307 | |||
| 2e181be160 | |||
| 7a7ca604c5 | |||
| c2fd4f9fc1 | |||
| 40f5f410c0 | |||
| d671ed6d25 | |||
| 76c9a80057 | |||
| 46a416517c | |||
| 168d11fe51 | |||
| 3dfa5eb9ff | |||
| 9b20859dc5 | |||
| 93691793c5 | |||
| 3b231cf11c | |||
| 7073fca171 | |||
| 9145577bf5 |
@@ -87,6 +87,30 @@ jobs:
|
||||
run: pnpm run type-check
|
||||
- name: Run Circular Dependency Check
|
||||
run: pnpm run circular-check
|
||||
e2e-npm:
|
||||
runs-on: ubuntu-latest
|
||||
name: Test using packages with npm
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: pnpm/action-setup@v4
|
||||
- name: Setup Node.js
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version-file: ".nvmrc"
|
||||
- name: Install dependencies
|
||||
run: pnpm install
|
||||
- name: Build packages
|
||||
run: pnpm run build
|
||||
- name: Pack packages
|
||||
run: |
|
||||
pnpm pack --pack-destination ${{ runner.temp }} -C packages/llamaindex
|
||||
pnpm pack --pack-destination ${{ runner.temp }} -C packages/workflow
|
||||
- name: Install packed packages
|
||||
run: npm add ${{ runner.temp }}/*.tgz
|
||||
working-directory: e2e/npm
|
||||
- name: Run tests
|
||||
run: npm test
|
||||
working-directory: e2e/npm
|
||||
e2e-llamaindex-examples:
|
||||
strategy:
|
||||
fail-fast: false
|
||||
|
||||
@@ -0,0 +1,92 @@
|
||||
# CLAUDE.md
|
||||
|
||||
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
|
||||
|
||||
## Development Commands
|
||||
|
||||
This project uses pnpm as the package manager and Turbo for build orchestration:
|
||||
|
||||
- `pnpm install` - Install all dependencies
|
||||
- `pnpm build` - Build all packages using Turbo
|
||||
- `pnpm dev` - Start development mode for all packages
|
||||
- `pnpm test` - Run all unit tests
|
||||
- `pnpm e2e` - Run end-to-end tests
|
||||
- `pnpm lint` - Run ESLint across all packages
|
||||
- `pnpm type-check` - Run TypeScript type checking across workspace
|
||||
- `pnpm format` - Check code formatting with Prettier
|
||||
- `pnpm format:write` - Auto-fix formatting issues
|
||||
- `pnpm circular-check` - Check for circular dependencies using madge
|
||||
|
||||
For individual package development:
|
||||
|
||||
- `turbo run build --filter="@llamaindex/core"` - Build specific package
|
||||
- `turbo run test --filter="@llamaindex/core"` - Test specific package
|
||||
- Navigate to specific package directory and run `pnpm test` for focused testing
|
||||
- `pnpm clean` - Remove all build artifacts and node_modules across workspace
|
||||
|
||||
## Architecture Overview
|
||||
|
||||
LlamaIndex.TS is a TypeScript data framework for LLM applications organized as a pnpm monorepo with multiple runtime environment support (Node.js, Deno, Bun, Vercel Edge, Cloudflare Workers).
|
||||
|
||||
### Package Structure
|
||||
|
||||
**Core Packages:**
|
||||
|
||||
- `packages/core/` - Abstract base classes and interfaces for all runtime environments
|
||||
- `packages/llamaindex/` - Main package that aggregates core functionality
|
||||
- `packages/env/` - Environment-specific compatibility layers for different JS runtimes
|
||||
|
||||
**Provider Packages (`packages/providers/`):**
|
||||
|
||||
- LLM providers: `openai/`, `anthropic/`, `ollama/`, `google/`, `groq/`, etc.
|
||||
- Vector stores: `storage/pinecone/`, `storage/chroma/`, `storage/qdrant/`, etc.
|
||||
- Embeddings: Various embedding providers integrated within LLM packages
|
||||
- Readers: `assemblyai/`, `discord/`, `notion/` for data ingestion
|
||||
|
||||
**Specialized Packages:**
|
||||
|
||||
- `packages/cloud/` - LlamaCloud integration for managed services
|
||||
- `packages/tools/` - Function calling tools and utilities
|
||||
- `packages/workflow/` - Agent workflow orchestration
|
||||
- `packages/readers/` - File format readers (PDF, DOCX, etc.)
|
||||
|
||||
### Key Architectural Patterns
|
||||
|
||||
**Runtime Abstraction:** Core functionality is runtime-agnostic, with environment-specific implementations in separate entry points (`index.ts`, `index.edge.ts`, `index.workerd.ts`).
|
||||
|
||||
**Provider Pattern:** LLMs, embeddings, and vector stores implement common interfaces from `@llamaindex/core`, allowing easy swapping between providers.
|
||||
|
||||
**Modular Design:** Each provider is a separate package to minimize bundle size - users install only what they need.
|
||||
|
||||
**Data Flow:** Document → NodeParser → Embedding → VectorStore → Retriever → QueryEngine → Response
|
||||
|
||||
### Core Components
|
||||
|
||||
- **Agents and Workflows:** Abstractions for building agentic workflows and agents in `packages/workflow`
|
||||
- **Chat Engines:** Conversational interfaces in `core/chat-engine/`
|
||||
- **Query Engines:** Document querying with retrieval in `core/query-engine/`
|
||||
- **Indices:** VectorStoreIndex, SummaryIndex, KeywordTable in `llamaindex/indices/`
|
||||
- **Node Parsers:** Text splitting and chunking in `core/node-parser/`
|
||||
- **Ingestion Pipeline:** Document processing workflows in `llamaindex/ingestion/`
|
||||
- **Storage:** Chat stores, document stores, index stores, and KV stores in `core/storage/`
|
||||
|
||||
### Deprecated Components
|
||||
|
||||
- **Agents:** ReAct and function calling agents in `core/agent/` and `llamaindex/agent/`
|
||||
|
||||
### Testing Structure
|
||||
|
||||
- Unit tests in each package's `tests/` directory
|
||||
- E2E tests in `e2e/` directory with runtime-specific examples
|
||||
- Tests depend on build artifacts, so always run `pnpm build` before testing
|
||||
|
||||
### Multi-Runtime Support
|
||||
|
||||
The codebase supports multiple JavaScript runtimes through conditional exports and separate entry points. When making changes, consider compatibility across Node.js, Deno, Bun, and edge runtimes.
|
||||
|
||||
### Development Notes
|
||||
|
||||
- The project uses Husky for git hooks with lint-staged for pre-commit formatting and linting
|
||||
- All packages use bunchee for building with dual CJS/ESM support
|
||||
- Core package exports are organized as sub-modules (e.g., `@llamaindex/core/llms`, `@llamaindex/core/embeddings`)
|
||||
- Always run `pnpm build` before running tests, as tests depend on build artifacts
|
||||
@@ -7,9 +7,10 @@
|
||||
</h3>
|
||||
|
||||
[](https://www.npmjs.com/package/llamaindex)
|
||||
[](https://www.npmjs.com/package/llamaindex)
|
||||
[](https://github.com/run-llama/LlamaIndexTS/blob/main/LICENSE)
|
||||
[](https://www.npmjs.com/package/llamaindex)
|
||||
[](https://discord.com/invite/eN6D2HQ4aX)
|
||||
[](https://x.com/llama_index)
|
||||
|
||||
Use your own data with large language models (LLMs, OpenAI ChatGPT and others) in JS runtime environments with TypeScript support.
|
||||
|
||||
@@ -63,7 +64,7 @@ yarn add llamaindex
|
||||
|
||||
### Setup in Node.js, Deno, Bun, TypeScript...?
|
||||
|
||||
See our official document: <https://ts.llamaindex.ai/docs/llamaindex/getting_started/>
|
||||
See our official document: https://ts.llamaindex.ai/docs/llamaindex/getting_started
|
||||
|
||||
### Adding provider packages
|
||||
|
||||
@@ -83,19 +84,7 @@ Check out our NextJS playground at https://llama-playground.vercel.app/. The sou
|
||||
|
||||
## Core concepts for getting started:
|
||||
|
||||
- [Document](/packages/llamaindex/src/Node.ts): A document represents a text file, PDF file or other contiguous piece of data.
|
||||
|
||||
- [Node](/packages/llamaindex/src/Node.ts): The basic data building block. Most commonly, these are parts of the document split into manageable pieces that are small enough to be fed into an embedding model and LLM.
|
||||
|
||||
- [Embedding](/packages/llamaindex/src/embeddings/OpenAIEmbedding.ts): Embeddings are sets of floating point numbers which represent the data in a Node. By comparing the similarity of embeddings, we can derive an understanding of the similarity of two pieces of data. One use case is to compare the embedding of a question with the embeddings of our Nodes to see which Nodes may contain the data needed to answer that question. Because the default service context is OpenAI, the default embedding is `OpenAIEmbedding`. If using different models, say through Ollama, use this [Embedding](/packages/llamaindex/src/embeddings/OllamaEmbedding.ts) (see all [here](/packages/llamaindex/src/embeddings)).
|
||||
|
||||
- [Indices](/packages/llamaindex/src/indices/): Indices store the Nodes and the embeddings of those nodes. QueryEngines retrieve Nodes from these Indices using embedding similarity.
|
||||
|
||||
- [QueryEngine](/packages/llamaindex/src/engines/query/RetrieverQueryEngine.ts): Query engines are what generate the query you put in and give you back the result. Query engines generally combine a pre-built prompt with selected Nodes from your Index to give the LLM the context it needs to answer your query. To build a query engine from your Index (recommended), use the [`asQueryEngine`](/packages/llamaindex/src/indices/BaseIndex.ts) method on your Index. See all query engines [here](/packages/llamaindex/src/engines/query).
|
||||
|
||||
- [ChatEngine](/packages/llamaindex/src/engines/chat/SimpleChatEngine.ts): A ChatEngine helps you build a chatbot that will interact with your Indices. See all chat engines [here](/packages/llamaindex/src/engines/chat).
|
||||
|
||||
- [SimplePrompt](/packages/llamaindex/src/Prompt.ts): A simple standardized function call definition that takes in inputs and formats them in a template literal. SimplePrompts can be specialized using currying and combined using other SimplePrompt functions.
|
||||
See our documentation: https://ts.llamaindex.ai/docs/llamaindex/getting_started/concepts
|
||||
|
||||
## Contributing:
|
||||
|
||||
|
||||
@@ -1,5 +1,80 @@
|
||||
# @llamaindex/doc
|
||||
|
||||
## 0.2.23
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [c927457]
|
||||
- @llamaindex/openai@0.4.2
|
||||
- @llamaindex/core@0.6.8
|
||||
- @llamaindex/cloud@4.0.12
|
||||
- llamaindex@0.11.4
|
||||
- @llamaindex/node-parser@2.0.8
|
||||
- @llamaindex/readers@3.1.6
|
||||
- @llamaindex/workflow@1.1.5
|
||||
|
||||
## 0.2.22
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [76ff23d]
|
||||
- @llamaindex/cloud@4.0.11
|
||||
- llamaindex@0.11.3
|
||||
|
||||
## 0.2.21
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [59601dd]
|
||||
- @llamaindex/openai@0.4.1
|
||||
- @llamaindex/core@0.6.7
|
||||
- @llamaindex/cloud@4.0.10
|
||||
- llamaindex@0.11.2
|
||||
- @llamaindex/node-parser@2.0.7
|
||||
- @llamaindex/readers@3.1.5
|
||||
- @llamaindex/workflow@1.1.4
|
||||
|
||||
## 0.2.20
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [3703f90]
|
||||
- @llamaindex/cloud@4.0.9
|
||||
- llamaindex@0.11.1
|
||||
|
||||
## 0.2.19
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [680b529]
|
||||
- Updated dependencies [b0cd530]
|
||||
- Updated dependencies [361a685]
|
||||
- Updated dependencies [3e66ddc]
|
||||
- @llamaindex/workflow@1.1.3
|
||||
- @llamaindex/core@0.6.6
|
||||
- llamaindex@0.11.0
|
||||
- @llamaindex/openai@0.4.0
|
||||
- @llamaindex/cloud@4.0.8
|
||||
- @llamaindex/node-parser@2.0.6
|
||||
- @llamaindex/readers@3.1.4
|
||||
|
||||
## 0.2.18
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- d671ed6: Add functionality for search params when querying Qdrant vector store.
|
||||
- Updated dependencies [76c9a80]
|
||||
- Updated dependencies [168d11f]
|
||||
- Updated dependencies [d671ed6]
|
||||
- Updated dependencies [40f5f41]
|
||||
- @llamaindex/openai@0.3.7
|
||||
- @llamaindex/workflow@1.1.2
|
||||
- @llamaindex/core@0.6.5
|
||||
- @llamaindex/cloud@4.0.7
|
||||
- llamaindex@0.10.6
|
||||
- @llamaindex/node-parser@2.0.5
|
||||
- @llamaindex/readers@3.1.3
|
||||
|
||||
## 0.2.17
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -0,0 +1,143 @@
|
||||
# CLAUDE.md
|
||||
|
||||
This file provides guidance to Claude Code (claude.ai/code) when working with the LlamaIndex.TS documentation site.
|
||||
|
||||
## Application Overview
|
||||
|
||||
This is a Next.js documentation site (`@llamaindex/doc`) that serves as the official documentation for LlamaIndex.TS. It's built using Fumadocs, a modern documentation framework, and includes interactive features, API documentation generation, and AI-powered chat functionality.
|
||||
|
||||
## Development Commands
|
||||
|
||||
From this directory (`apps/next/`):
|
||||
|
||||
- `pnpm dev` - Start development server with Turbo
|
||||
- `pnpm build` - Build the documentation site (includes `prebuild` step)
|
||||
- `pnpm start` - Start production server
|
||||
- `pnpm build:docs` - Generate API documentation from TypeScript source
|
||||
- `pnpm validate-links` - Validate all internal and external links
|
||||
|
||||
Key build process:
|
||||
|
||||
1. `prebuild` runs `build:docs` to generate API documentation using TypeDoc
|
||||
2. `build` runs Next.js build process
|
||||
3. `postbuild` runs post-processing scripts and link validation
|
||||
|
||||
## Architecture
|
||||
|
||||
### Framework Stack
|
||||
|
||||
- **Next.js 15.3** - React framework with App Router
|
||||
- **Fumadocs** - Documentation framework with MDX support
|
||||
- **React Server Components** - AI chat functionality with server actions
|
||||
- **Tailwind CSS** - Styling with custom design system
|
||||
- **TypeScript** - Full type safety
|
||||
|
||||
### Key Dependencies
|
||||
|
||||
- **Fumadocs ecosystem**: `fumadocs-ui`, `fumadocs-mdx`, `fumadocs-core`, `fumadocs-openapi`
|
||||
- **AI features**: `ai` package for React Server Components chat
|
||||
- **Code features**: Monaco Editor, Shiki syntax highlighting, Twoslash TypeScript integration
|
||||
- **UI components**: Radix UI primitives, Framer Motion animations
|
||||
- **Content processing**: MDX, remark/rehype plugins, TypeDoc for API generation
|
||||
|
||||
### Directory Structure
|
||||
|
||||
**Content Management:**
|
||||
|
||||
- `src/content/docs/` - MDX documentation files organized by topic
|
||||
- `src/content/docs/api/` - Auto-generated API documentation from TypeScript
|
||||
- `scripts/` - Build-time documentation generation and validation
|
||||
|
||||
**Application Code:**
|
||||
|
||||
- `src/app/` - Next.js App Router pages and API routes
|
||||
- `src/components/` - Reusable React components including UI library
|
||||
- `src/lib/` - Utilities, constants, and configuration
|
||||
|
||||
**Configuration:**
|
||||
|
||||
- `source.config.ts` - Fumadocs MDX configuration with plugins
|
||||
- `next.config.mjs` - Next.js configuration with MDX integration
|
||||
- `tailwind.config.mjs` - Tailwind CSS customization
|
||||
|
||||
### Key Features
|
||||
|
||||
**Documentation Features:**
|
||||
|
||||
- MDX-based content with TypeScript code highlighting
|
||||
- Auto-generated API documentation from TypeScript source
|
||||
- Interactive code examples with Monaco Editor
|
||||
- Math equation support with KaTeX
|
||||
- Link validation and build-time checks
|
||||
|
||||
**Interactive Features:**
|
||||
|
||||
- AI-powered chat interface using React Server Components
|
||||
- Code demos with live TypeScript execution
|
||||
- Interactive UI components and animations
|
||||
- Search functionality across all documentation
|
||||
|
||||
**Build Process:**
|
||||
|
||||
- TypeDoc generates API documentation from workspace packages
|
||||
- Custom scripts transform and validate generated content
|
||||
- Link checking ensures all internal/external links work
|
||||
- Static site generation with 10-minute timeout for large documentation set
|
||||
|
||||
### Configuration Files
|
||||
|
||||
**source.config.ts**: Defines MDX processing pipeline with:
|
||||
|
||||
- Code highlighting themes (Catppuccin)
|
||||
- Twoslash TypeScript integration
|
||||
- Remark/rehype plugins for enhanced Markdown
|
||||
- Content directories including external docs
|
||||
|
||||
**next.config.mjs**: Next.js configuration with:
|
||||
|
||||
- Extended static generation timeout (10 minutes)
|
||||
- Monaco Editor transpilation
|
||||
- Server external packages for build optimization
|
||||
- Webpack/Turbopack aliases for browser compatibility
|
||||
|
||||
### Content Organization
|
||||
|
||||
**Documentation Structure:**
|
||||
|
||||
- `/docs/llamaindex/` - Core LlamaIndex.TS documentation
|
||||
- `/docs/cloud/` - LlamaCloud integration guides
|
||||
- `/docs/api/` - Auto-generated TypeScript API reference
|
||||
|
||||
**Content Sources:**
|
||||
|
||||
- Local MDX files in `src/content/docs/`
|
||||
- External docs from `@llama-flow/docs` package
|
||||
- Generated API docs from TypeScript source
|
||||
|
||||
### Development Notes
|
||||
|
||||
- Documentation content is sourced from multiple locations including external packages
|
||||
- API documentation is regenerated on each build from TypeScript source
|
||||
- The site uses advanced MDX features including custom transformers and plugins
|
||||
- Build process includes comprehensive link validation
|
||||
- Large memory allocation needed for TypeDoc generation (`--max-old-space-size=8192`)
|
||||
- Chat functionality uses React Server Components with streaming responses
|
||||
|
||||
### AI Chat Integration
|
||||
|
||||
The documentation includes an AI chat feature that:
|
||||
|
||||
- Uses React Server Components for server-side AI processing
|
||||
- Integrates with LlamaIndex.TS packages for demonstrations
|
||||
- Provides interactive examples and code generation
|
||||
- Streams responses for better user experience
|
||||
|
||||
### Content Authoring
|
||||
|
||||
When adding new documentation:
|
||||
|
||||
- Create MDX files in appropriate `src/content/docs/` subdirectories
|
||||
- Follow existing content structure and frontmatter conventions
|
||||
- Use Fumadocs MDX features like code blocks, callouts, and tabs
|
||||
- API documentation is auto-generated - edit TypeScript source comments instead
|
||||
- Run `pnpm validate-links` to check all links before publishing
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@llamaindex/doc",
|
||||
"version": "0.2.17",
|
||||
"version": "0.2.23",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"postinstall": "fumadocs-mdx",
|
||||
|
||||
@@ -4,7 +4,6 @@ import matter from "gray-matter";
|
||||
import path from "path";
|
||||
|
||||
const CONTENT_DIR = path.join(process.cwd(), "src/content/docs");
|
||||
const BUILD_DIR = path.join(process.cwd(), ".next");
|
||||
|
||||
// Regular expression to find internal links
|
||||
// This captures Markdown links [text](/docs/path) and href attributes href="/docs/path"
|
||||
@@ -14,6 +13,8 @@ const INTERNAL_LINK_REGEX = /(?:(?:\]\(|\bhref=["'])\/docs\/([^")]+))/g;
|
||||
// This captures relative links like [text](./path) or 
|
||||
const RELATIVE_LINK_REGEX = /(?:\]\()(?:\s*)(?:\.\.?)\//g;
|
||||
|
||||
const ALLOWED_LINKS = ["/docs/llamaflow"];
|
||||
|
||||
interface LinkValidationResult {
|
||||
file: string;
|
||||
invalidLinks: Array<{ link: string; line: number }>;
|
||||
@@ -28,7 +29,7 @@ interface RelativeLinkResult {
|
||||
* Get all valid documentation routes from the content directory
|
||||
*/
|
||||
async function getValidRoutes(): Promise<Set<string>> {
|
||||
const mdxFiles = await glob("**/*.mdx?", { cwd: CONTENT_DIR });
|
||||
const mdxFiles = await glob("**/*.{md,mdx}", { cwd: CONTENT_DIR });
|
||||
|
||||
const routes = new Set<string>();
|
||||
|
||||
@@ -124,14 +125,11 @@ function findRelativeLinksInFile(
|
||||
return relativeLinks;
|
||||
}
|
||||
|
||||
/**
|
||||
* Validate internal links in all MDX files
|
||||
*/
|
||||
/**
|
||||
* Find relative links in all MDX files
|
||||
*/
|
||||
async function findRelativeLinks(): Promise<RelativeLinkResult[]> {
|
||||
const mdxFiles = await glob("**/*.mdx?", { cwd: CONTENT_DIR });
|
||||
const mdxFiles = await glob("**/*.mdx", { cwd: CONTENT_DIR });
|
||||
const results: RelativeLinkResult[] = [];
|
||||
|
||||
for (const file of mdxFiles) {
|
||||
@@ -150,7 +148,7 @@ async function findRelativeLinks(): Promise<RelativeLinkResult[]> {
|
||||
}
|
||||
|
||||
async function validateLinks(): Promise<LinkValidationResult[]> {
|
||||
const mdxFiles = await glob("**/*.mdx?", { cwd: CONTENT_DIR });
|
||||
const mdxFiles = await glob("**/*.mdx", { cwd: CONTENT_DIR });
|
||||
const validRoutes = await getValidRoutes();
|
||||
|
||||
const results: LinkValidationResult[] = [];
|
||||
@@ -160,6 +158,11 @@ async function validateLinks(): Promise<LinkValidationResult[]> {
|
||||
const links = extractLinksFromFile(filePath);
|
||||
|
||||
const invalidLinks = links.filter(({ link }) => {
|
||||
// Check if the link is in the allowed list
|
||||
if (ALLOWED_LINKS.includes(`/docs/${link}`)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Check if the link exists in valid routes
|
||||
// First normalize the link (remove any query string or hash)
|
||||
const baseLink = link.split("?")[0].split("#")[0];
|
||||
|
||||
@@ -0,0 +1,60 @@
|
||||
---
|
||||
title: High-Level Concepts
|
||||
---
|
||||
|
||||
This is a quick guide to the high-level concepts you'll encounter frequently when building LLM applications.
|
||||
|
||||
## Large Language Models (LLMs)
|
||||
|
||||
LLMs are the fundamental innovation that launched LlamaIndex. They are an artificial intelligence (AI) computer system that can understand, generate, and manipulate natural language, including answering questions based on their training data or data provided to them at query time.
|
||||
|
||||
## Agentic Applications
|
||||
|
||||
When an LLM is used within an application, it is often used to make decisions, take actions, and/or interact with the world. This is the core definition of an **agentic application**.
|
||||
|
||||
While the definition of an agentic application is broad, there are several key characteristics that define an agentic application:
|
||||
|
||||
- **LLM Augmentation**: The LLM is augmented with tools (i.e. arbitrary callable functions in code), memory, and/or dynamic prompts.
|
||||
- **Prompt Chaining**: Several LLM calls are used that build on each other, with the output of one LLM call being used as the input to the next.
|
||||
- **Routing**: The LLM is used to route the application to the next appropriate step or state in the application.
|
||||
- **Parallelism**: The application can perform multiple steps or actions in parallel.
|
||||
- **Orchestration**: A hierarchical structure of LLMs is used to orchestrate lower-level actions and LLMs.
|
||||
- **Reflection**: The LLM is used to reflect and validate outputs of previous steps or LLM calls, which can be used to guide the application to the next appropriate step or state.
|
||||
|
||||
In LlamaIndex, you can build agentic applications by using the workflows to orchestrate a sequence of steps and LLMs. You can [learn more about workflows](/docs/llamaindex/tutorials/workflows).
|
||||
|
||||
## Agents
|
||||
|
||||
We define an agent as a specific instance of an "agentic application". An agent is a piece of software that semi-autonomously performs tasks by combining LLMs with other tools and memory, orchestrated in a reasoning loop that decides which tool to use next (if any).
|
||||
|
||||
What this means in practice, is something like:
|
||||
- An agent receives a user message
|
||||
- The agent uses an LLM to determine the next appropriate action to take using the previous chat history, tools, and the latest user message
|
||||
- The agent may invoke one or more tools to assist in the users request
|
||||
- If tools are used, the agent will then interpret the tool outputs and use them to inform the next action
|
||||
- Once the agent stops taking actions, it returns the final output to the user
|
||||
|
||||
You can [learn more about agents](/docs/llamaindex/tutorials/basic_agent).
|
||||
|
||||
## Retrieval Augmented Generation (RAG)
|
||||
|
||||
Retrieval-Augmented Generation (RAG) is a core technique for building data-backed LLM applications with LlamaIndex. It allows LLMs to answer questions about your private data by providing it to the LLM at query time, rather than training the LLM on your data. To avoid sending **all** of your data to the LLM every time, RAG indexes your data and selectively sends only the relevant parts along with your query. You can [learn more about RAG](/docs/llamaindex/tutorials/rag).
|
||||
|
||||
## Use cases
|
||||
|
||||
There are endless use cases for data-backed LLM applications but they can be roughly grouped into four categories:
|
||||
|
||||
[**Agents**](/docs/llamaindex/tutorials/basic_agent):
|
||||
An agent is an automated decision-maker powered by an LLM that interacts with the world via a set of [tools](/docs/llamaindex/modules/agents/tool). Agents can take an arbitrary number of steps to complete a given task, dynamically deciding on the best course of action rather than following pre-determined steps. This gives it additional flexibility to tackle more complex tasks.
|
||||
|
||||
[**Workflows**](/docs/llamaindex/tutorials/workflows):
|
||||
A Workflow in LlamaIndex is a specific event-driven abstraction that allows you to orchestrate a sequence of steps and LLMs calls. Workflows can be used to implement any agentic application, and are a core component of LlamaIndex.
|
||||
|
||||
[**Structured Data Extraction**](/docs/llamaindex/tutorials/structured_data_extraction):
|
||||
Pydantic extractors allow you to specify a precise data structure to extract from your data and use LLMs to fill in the missing pieces in a type-safe way. This is useful for extracting structured data from unstructured sources like PDFs, websites, and more, and is key to automating workflows.
|
||||
|
||||
[**Query Engines**](/docs/llamaindex/modules/rag/query_engines):
|
||||
A query engine is an end-to-end flow that allows you to ask questions over your data. It takes in a natural language query, and returns a response, along with reference context retrieved and passed to the LLM.
|
||||
|
||||
[**Chat Engines**](/docs/llamaindex/modules/rag/chat_engine):
|
||||
A chat engine is an end-to-end flow for having a conversation with your data (multiple back-and-forth instead of a single question-and-answer).
|
||||
@@ -1,4 +1,4 @@
|
||||
{
|
||||
"title": "Getting Started",
|
||||
"pages": ["installation", "create_llama", "examples"]
|
||||
"pages": ["concepts", "installation", "create_llama", "examples"]
|
||||
}
|
||||
|
||||
@@ -12,7 +12,7 @@ To use workflows install this package:
|
||||
npm i @llamaindex/workflow
|
||||
```
|
||||
|
||||
This package is a stable, production-ready version of our [llama-flow](../../../llamaflow) project.
|
||||
This package is a stable, production-ready version of our [llama-flow](/docs/llamaflow) project.
|
||||
|
||||
While you can still reference the llama-flow documentation for detailed information about the underlying concepts, we recommend using the `@llamaindex/workflow` package for all new projects to ensure stability and long-term availability.
|
||||
|
||||
|
||||
@@ -18,7 +18,7 @@ In your Discord Application, go to the `OAuth2` tab and generate an invite URL b
|
||||
This will invite the bot with the necessary permissions to read messages.
|
||||
Copy the URL in your browser and select the server you want your bot to join.
|
||||
|
||||
<include cwd>../../examples/discord/reader.ts</include>
|
||||
<include cwd>../../examples/readers/discord/reader.ts</include>
|
||||
|
||||
### Params
|
||||
|
||||
|
||||
@@ -88,7 +88,7 @@ async function main() {
|
||||
|
||||
const response = await queryEngine.query({
|
||||
query: "What did the author do in college?",
|
||||
});
|
||||
}); // Additional filters and params can be passed as options
|
||||
|
||||
// Output response
|
||||
console.log(response.toString());
|
||||
|
||||
@@ -42,6 +42,7 @@ similarity float
|
||||
)
|
||||
language plpgsql
|
||||
as $$
|
||||
#variable_conflict use_column
|
||||
begin
|
||||
return query
|
||||
select
|
||||
|
||||
@@ -2,89 +2,43 @@
|
||||
title: Azure OpenAI
|
||||
---
|
||||
|
||||
To use Azure OpenAI, you only need to set a few environment variables together with the `OpenAI` class.
|
||||
|
||||
For example:
|
||||
|
||||
## Environment Variables
|
||||
|
||||
```
|
||||
export AZURE_OPENAI_KEY="<YOUR KEY HERE>"
|
||||
export AZURE_OPENAI_ENDPOINT="<YOUR ENDPOINT, see https://learn.microsoft.com/en-us/azure/ai-services/openai/quickstart?tabs=command-line%2Cpython&pivots=rest-api>"
|
||||
export AZURE_OPENAI_DEPLOYMENT="gpt-4" # or some other deployment name
|
||||
```
|
||||
To use Azure OpenAI, you only need to install the `@llamaindex/azure` package:
|
||||
|
||||
## Installation
|
||||
|
||||
```package-install
|
||||
npm i llamaindex @llamaindex/openai
|
||||
npm i llamaindex @llamaindex/azure
|
||||
```
|
||||
|
||||
## Usage
|
||||
|
||||
The class `AzureOpenAI` is used for setting the LLM and `AzureOpenAIEmbedding` is used for setting the embedding model, e.g.:
|
||||
|
||||
```ts
|
||||
import { Settings } from "llamaindex";
|
||||
import { OpenAI } from "@llamaindex/openai";
|
||||
import { AzureOpenAI, AzureOpenAIEmbedding } from "@llamaindex/azure";
|
||||
|
||||
Settings.llm = new OpenAI({ model: "gpt-4", temperature: 0 });
|
||||
```
|
||||
|
||||
## Load and index documents
|
||||
|
||||
For this example, we will use a single document. In a real-world scenario, you would have multiple documents to index.
|
||||
|
||||
```ts
|
||||
const document = new Document({ text: essay, id_: "essay" });
|
||||
|
||||
const index = await VectorStoreIndex.fromDocuments([document]);
|
||||
```
|
||||
|
||||
## Query
|
||||
|
||||
```ts
|
||||
const queryEngine = index.asQueryEngine();
|
||||
|
||||
const query = "What is the meaning of life?";
|
||||
|
||||
const results = await queryEngine.query({
|
||||
query,
|
||||
Settings.llm = new AzureOpenAI({
|
||||
apiKey: '[key]',
|
||||
deployment: '[model]',
|
||||
apiVersion: '[version]',
|
||||
endpoint: `https://[deployment].openai.azure.com/`,
|
||||
});
|
||||
Settings.embedModel = new AzureOpenAIEmbedding({
|
||||
apiKey: '[key]',
|
||||
deployment: '[embedding-model]',
|
||||
apiVersion: '[version]',
|
||||
endpoint: `https://[deployment].openai.azure.com/`,
|
||||
});
|
||||
```
|
||||
|
||||
## Full Example
|
||||
Instead of explicitly setting the API key, deployment, version, and endpoint in the constructor, you can use the following environment variables: `AZURE_OPENAI_DEPLOYMENT` for the model deployment name, `AZURE_OPENAI_KEY` for your API key, `AZURE_OPENAI_ENDPOINT` for your Azure endpoint URL, and `AZURE_OPENAI_API_VERSION` for the API version.
|
||||
|
||||
```ts
|
||||
import { Document, VectorStoreIndex, Settings } from "llamaindex";
|
||||
import { OpenAI } from "@llamaindex/openai";
|
||||
## Examples
|
||||
|
||||
Settings.llm = new OpenAI({ model: "gpt-4", temperature: 0 });
|
||||
|
||||
async function main() {
|
||||
const document = new Document({ text: essay, id_: "essay" });
|
||||
|
||||
// Load and index documents
|
||||
const index = await VectorStoreIndex.fromDocuments([document]);
|
||||
|
||||
// get retriever
|
||||
const retriever = index.asRetriever();
|
||||
|
||||
// Create a query engine
|
||||
const queryEngine = index.asQueryEngine({
|
||||
retriever,
|
||||
});
|
||||
|
||||
const query = "What is the meaning of life?";
|
||||
|
||||
// Query
|
||||
const response = await queryEngine.query({
|
||||
query,
|
||||
});
|
||||
|
||||
// Log the response
|
||||
console.log(response.response);
|
||||
}
|
||||
```
|
||||
See the [Azure examples](https://github.com/run-llama/LlamaIndexTS/tree/main/examples/storage/azure) for more examples of how to use Azure OpenAI.
|
||||
|
||||
## API Reference
|
||||
|
||||
- [OpenAI](/docs/api/classes/OpenAI)
|
||||
- [AzureOpenAI](/docs/api/classes/AzureOpenAI)
|
||||
- [AzureOpenAIEmbedding](/docs/api/classes/AzureOpenAIEmbedding)
|
||||
@@ -55,7 +55,7 @@ const results = await queryEngine.query({
|
||||
|
||||
## Full Example
|
||||
|
||||
<include cwd>../../examples/groq.ts</include>
|
||||
<include cwd>../../examples/models/groq.ts</include>
|
||||
|
||||
## API Reference
|
||||
|
||||
|
||||
@@ -166,4 +166,4 @@ Want to start a new project with LlamaIndexServer? Check out our [create-llama](
|
||||
|
||||
## API Reference
|
||||
|
||||
- [LlamaIndexServer](/docs/api/classes/LlamaIndexServer)
|
||||
- [LlamaIndexServer](https://github.com/run-llama/create-llama/blob/main/packages/server)
|
||||
@@ -27,7 +27,7 @@ Create the file `example.ts`. This code will
|
||||
- index it (which creates embeddings using OpenAI)
|
||||
- create a query engine to answer questions about the data
|
||||
|
||||
<include cwd>../../examples/vectorIndex.ts</include>
|
||||
<include cwd>../../examples/index/vectorIndex.ts</include>
|
||||
|
||||
Create a `tsconfig.json` file in the same folder:
|
||||
|
||||
|
||||
@@ -24,7 +24,7 @@ Create the file `example.ts`. This code will:
|
||||
- Give an example of the data structure we wish to generate
|
||||
- Prompt the LLM with instructions and the example, plus a sample transcript
|
||||
|
||||
<include cwd>../../examples/jsonExtract.ts</include>
|
||||
<include cwd>../../examples/misc/jsonExtract.ts</include>
|
||||
|
||||
To run the code:
|
||||
|
||||
|
||||
@@ -1,5 +1,19 @@
|
||||
# @llamaindex/core-e2e
|
||||
|
||||
## 0.1.1
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- b0cd530: # Breaking Change
|
||||
|
||||
## What Changed
|
||||
|
||||
Remove default setting of llm and embedModel in Settings
|
||||
|
||||
## Migration Guide
|
||||
|
||||
Set the llm provider and embed Model in the top of your code using Settings.llm = and Settings.embedModel
|
||||
|
||||
## 0.1.0
|
||||
|
||||
### Minor Changes
|
||||
|
||||
+135
@@ -0,0 +1,135 @@
|
||||
# CLAUDE.md
|
||||
|
||||
This file provides guidance to Claude Code (claude.ai/code) when working with the LlamaIndexTS e2e testing package.
|
||||
|
||||
## Package Overview
|
||||
|
||||
The `@llamaindex/e2e` package contains end-to-end tests and examples for LlamaIndexTS, ensuring the library works correctly across different runtime environments and use cases. It validates integration between core packages, providers, and real-world usage scenarios.
|
||||
|
||||
## Development Commands
|
||||
|
||||
Run e2e tests from the root directory using:
|
||||
|
||||
- `pnpm e2e` - Run all e2e tests with mocked LLM responses
|
||||
- `pnpm e2e:nomock` - Run e2e tests with real API calls (requires API keys)
|
||||
|
||||
Local e2e package commands:
|
||||
|
||||
- `npm run e2e` - Run all e2e tests with mock register
|
||||
- `npm run e2e:nomock` - Run tests without mocking (real API calls)
|
||||
- `npm run e2e:updatesnap` - Update test snapshots
|
||||
|
||||
## Testing Structure
|
||||
|
||||
### Core Test Files (`node/`)
|
||||
|
||||
**Main Test Suites:**
|
||||
|
||||
- `smoke.e2e.ts` - CJS/ESM dual module compatibility tests and basic import validation
|
||||
- `openai.e2e.ts` - OpenAI provider integration tests (LLM, agents, tools)
|
||||
- `claude.e2e.ts` - Anthropic Claude provider tests
|
||||
- `ollama.e2e.ts` - Ollama local LLM provider tests
|
||||
- `react.e2e.ts` - ReAct agent framework tests
|
||||
- `issue.e2e.ts` - Regression tests for specific GitHub issues
|
||||
|
||||
**Specialized Tests:**
|
||||
|
||||
- `embedding/clip.e2e.ts` - CLIP embedding model tests
|
||||
- `vector-store/` - Vector database integration tests (Pinecone, PostgreSQL with pgvector)
|
||||
|
||||
### Test Utilities
|
||||
|
||||
- `utils.ts` - Common test utilities and helper functions
|
||||
- `fixtures/` - Test data and mock tool definitions
|
||||
- `snapshot/` - Stored test snapshots for regression testing
|
||||
- `mock-register.js` & `mock-module.js` - LLM response mocking system
|
||||
|
||||
### Examples Directory (`examples/`)
|
||||
|
||||
Runtime-specific example applications that serve as integration tests:
|
||||
|
||||
**Edge/Serverless Runtimes:**
|
||||
|
||||
- `cloudflare-worker-agent/` - Cloudflare Workers agent example with Vitest
|
||||
- `cloudflare-hono/` - Cloudflare Workers with Hono framework
|
||||
- `nextjs-edge-runtime/` - Next.js Edge Runtime compatibility
|
||||
- `nextjs-node-runtime/` - Next.js Node.js runtime example
|
||||
- `nextjs-agent/` - Next.js with agent integration
|
||||
|
||||
**Client-Side:**
|
||||
|
||||
- `llama-parse-browser/` - Browser-based LlamaParse integration
|
||||
- `vite-import-llamaindex/` - Vite bundler compatibility test
|
||||
|
||||
**Alternative Frameworks:**
|
||||
|
||||
- `waku-query-engine/` - Waku framework with query engine integration
|
||||
|
||||
## Testing Patterns
|
||||
|
||||
### Mock System
|
||||
|
||||
The e2e tests use a sophisticated mocking system for consistent testing:
|
||||
|
||||
- **Mock Register**: `mock-register.js` enables LLM response mocking
|
||||
- **Snapshot Testing**: Pre-recorded responses stored in `snapshot/` directory
|
||||
- **Real API Mode**: Tests can run against real APIs when `OPENAI_API_KEY`, `ANTHROPIC_API_KEY`, etc. are provided
|
||||
|
||||
### Test Categories
|
||||
|
||||
1. **Smoke Tests**: Basic import/export validation and dual module (CJS/ESM) compatibility
|
||||
2. **Provider Integration**: LLM provider functionality (chat, streaming, function calling)
|
||||
3. **Agent Tests**: Agent framework validation with tool calling and reasoning
|
||||
4. **Runtime Compatibility**: Cross-platform runtime environment testing
|
||||
5. **Regression Tests**: Issue-specific tests preventing regressions
|
||||
|
||||
### Environment Conditions
|
||||
|
||||
Tests validate multiple JavaScript runtime conditions:
|
||||
|
||||
- `edge-light` - Vercel Edge Runtime
|
||||
- `workerd` - Cloudflare Workers runtime
|
||||
- `react-server` - React Server Components environment
|
||||
|
||||
## Dependencies
|
||||
|
||||
The package includes comprehensive workspace dependencies for testing all major LlamaIndexTS features:
|
||||
|
||||
**Core Dependencies:**
|
||||
|
||||
- `@llamaindex/core` - Base abstractions
|
||||
- `@llamaindex/env` - Runtime environment compatibility
|
||||
- `llamaindex` - Main package
|
||||
|
||||
**Provider Dependencies:**
|
||||
|
||||
- `@llamaindex/openai` - OpenAI integration
|
||||
- `@llamaindex/anthropic` - Anthropic Claude integration
|
||||
- `@llamaindex/ollama` - Ollama local LLM support
|
||||
- `@llamaindex/clip` - CLIP embedding models
|
||||
- `@llamaindex/pinecone` - Pinecone vector store
|
||||
- `@llamaindex/postgres` - PostgreSQL with pgvector
|
||||
|
||||
**Testing Utilities:**
|
||||
|
||||
- `@faker-js/faker` - Test data generation
|
||||
- `@huggingface/transformers` - Local model support
|
||||
- `consola` - Logging in tests
|
||||
- `dotenv` - Environment variable management
|
||||
- `tsx` - TypeScript execution for Node.js
|
||||
|
||||
## Development Notes
|
||||
|
||||
- **Build Dependency**: E2E tests depend on build artifacts, so always run `pnpm build` before testing
|
||||
- **API Keys**: Real API testing requires environment variables (`OPENAI_API_KEY`, `ANTHROPIC_API_KEY`, etc.)
|
||||
- **Snapshot Updates**: Use `npm run e2e:updatesnap` to update test snapshots after intentional changes
|
||||
- **Mock vs Real**: Use mock mode for CI/fast development, real mode for integration validation
|
||||
- **Runtime Testing**: Examples serve dual purpose as integration tests and usage documentation
|
||||
- **Node.js Test Runner**: Uses built-in Node.js test runner with tsx for TypeScript support
|
||||
|
||||
## Common Workflows
|
||||
|
||||
1. **Adding New Provider**: Create test file in `node/`, add mock snapshots, validate across runtimes
|
||||
2. **Runtime Compatibility**: Add example in `examples/` with framework-specific testing setup
|
||||
3. **Regression Testing**: Add specific test case in `issue.e2e.ts` with GitHub issue reference
|
||||
4. **Mock Updates**: Update snapshots when LLM provider responses change intentionally
|
||||
@@ -0,0 +1,156 @@
|
||||
# CLAUDE.md
|
||||
|
||||
This file provides guidance to Claude Code (claude.ai/code) when working with the LlamaIndexTS Cloudflare Workers + Hono example.
|
||||
|
||||
## Package Overview
|
||||
|
||||
The `@llamaindex/cloudflare-hono` package is an end-to-end example demonstrating how to use LlamaIndexTS in a Cloudflare Workers environment with the Hono web framework. This example showcases building an AI agent with vector search capabilities that runs on Cloudflare's edge runtime.
|
||||
|
||||
## Development Commands
|
||||
|
||||
- `npm run dev` or `npm start` - Start local development server with Wrangler
|
||||
- `npm run build` - Build for deployment (dry run to dist directory)
|
||||
- `npm run deploy` - Deploy to Cloudflare Workers
|
||||
- `npm run cf-typegen` - Generate TypeScript types for Cloudflare Workers
|
||||
|
||||
## Architecture
|
||||
|
||||
This example demonstrates a complete RAG (Retrieval-Augmented Generation) system running on Cloudflare Workers:
|
||||
|
||||
### Key Components
|
||||
|
||||
1. **Hono Framework**: Lightweight web framework optimized for edge runtimes
|
||||
2. **OpenAI Integration**: GPT-4o-mini for language model and text-embedding-3-small for embeddings
|
||||
3. **Pinecone Vector Store**: Cloud vector database for document storage and retrieval
|
||||
4. **OpenAI Agent**: Function-calling agent with tool integration
|
||||
5. **Query Engine Tool**: Business information retrieval tool
|
||||
|
||||
### Request Flow
|
||||
|
||||
1. POST request to `/llm` endpoint with `{ message: "user question" }`
|
||||
2. Environment setup using `@llamaindex/env` for Cloudflare Workers compatibility
|
||||
3. Dynamic imports for tree-shaking and edge runtime optimization
|
||||
4. LLM and embedding model configuration with API keys from environment
|
||||
5. Vector store connection to Pinecone with predefined namespace
|
||||
6. Vector index creation and retriever setup (top-k=3 similarity search)
|
||||
7. Query engine tool creation for business information retrieval
|
||||
8. OpenAI agent initialization with tools
|
||||
9. Agent chat execution and response extraction
|
||||
|
||||
### Runtime Optimizations
|
||||
|
||||
- **Dynamic Imports**: All LlamaIndex packages imported asynchronously for optimal cold start performance
|
||||
- **Environment Setup**: Uses `@llamaindex/env` package for Cloudflare Workers compatibility
|
||||
- **Tree Shaking**: Selective imports reduce bundle size for edge deployment
|
||||
- **Async Operations**: Fully async pipeline optimized for serverless execution
|
||||
|
||||
## Configuration
|
||||
|
||||
### Wrangler Configuration (`wrangler.toml`)
|
||||
|
||||
- **Runtime**: Cloudflare Workers with Node.js AsyncLocalStorage compatibility
|
||||
- **Compatibility Date**: 2024-11-12 with `nodejs_als` flag
|
||||
- **Observability**: Enabled for monitoring and debugging
|
||||
- **Entry Point**: `src/index.ts`
|
||||
|
||||
### TypeScript Configuration
|
||||
|
||||
- **Target**: ES2021 for modern JavaScript features
|
||||
- **Module**: ES2022 with bundler module resolution
|
||||
- **Types**: Cloudflare Workers types for runtime compatibility
|
||||
- **Strict Mode**: Enabled for type safety
|
||||
|
||||
### Environment Variables
|
||||
|
||||
Required Cloudflare Workers environment variables:
|
||||
|
||||
- `OPENAI_API_KEY` - OpenAI API access for LLM and embeddings
|
||||
- `PINECONE_API_KEY` - Pinecone vector database access
|
||||
|
||||
## Dependencies
|
||||
|
||||
### Runtime Dependencies
|
||||
|
||||
- `hono` - Lightweight web framework for edge runtimes
|
||||
|
||||
### Development Dependencies
|
||||
|
||||
- `@cloudflare/workers-types` - TypeScript definitions for Cloudflare Workers
|
||||
- `wrangler` - Cloudflare Workers CLI and development server
|
||||
- `typescript` - TypeScript compiler
|
||||
|
||||
### LlamaIndexTS Integration
|
||||
|
||||
This example relies on workspace dependencies:
|
||||
|
||||
- `llamaindex` - Core LlamaIndexTS functionality
|
||||
- `@llamaindex/openai` - OpenAI provider (LLM, embeddings, agents)
|
||||
- `@llamaindex/pinecone` - Pinecone vector store integration
|
||||
- `@llamaindex/env` - Runtime environment compatibility layer
|
||||
|
||||
## Code Patterns
|
||||
|
||||
### Environment Setup Pattern
|
||||
|
||||
```typescript
|
||||
const { setEnvs } = await import("@llamaindex/env");
|
||||
setEnvs(c.env);
|
||||
```
|
||||
|
||||
Required first step for Cloudflare Workers compatibility.
|
||||
|
||||
### Dynamic Import Pattern
|
||||
|
||||
```typescript
|
||||
const { VectorStoreIndex, Settings } = await import("llamaindex");
|
||||
const { OpenAI, OpenAIAgent } = await import("@llamaindex/openai");
|
||||
```
|
||||
|
||||
Optimizes bundle size and cold start performance.
|
||||
|
||||
### Settings Configuration
|
||||
|
||||
```typescript
|
||||
Settings.llm = new OpenAI({ model: "gpt-4o-mini" });
|
||||
Settings.embedModel = new OpenAIEmbedding({ model: "text-embedding-3-small" });
|
||||
Settings.nodeParser = new SentenceSplitter({ chunkSize: 8191 });
|
||||
```
|
||||
|
||||
Global configuration for consistent LLM behavior.
|
||||
|
||||
### Agent Tool Integration
|
||||
|
||||
```typescript
|
||||
const tools = [
|
||||
new QueryEngineTool({ queryEngine, metadata: { name, description } }),
|
||||
];
|
||||
const agent = new OpenAIAgent({ tools });
|
||||
```
|
||||
|
||||
Function-calling agent with domain-specific tools.
|
||||
|
||||
## Usage
|
||||
|
||||
1. **Local Development**: Run `npm run dev` to start Wrangler development server
|
||||
2. **Environment Setup**: Configure `OPENAI_API_KEY` and `PINECONE_API_KEY` in Wrangler
|
||||
3. **API Testing**: POST to `/llm` with JSON payload `{ message: "your question" }`
|
||||
4. **Deployment**: Run `npm run deploy` to publish to Cloudflare Workers
|
||||
|
||||
## Integration Testing
|
||||
|
||||
This example serves as an integration test for:
|
||||
|
||||
- Cloudflare Workers runtime compatibility
|
||||
- Hono framework integration
|
||||
- OpenAI provider functionality
|
||||
- Pinecone vector store operations
|
||||
- Agent workflow execution
|
||||
- Dynamic import optimization
|
||||
- Environment variable handling
|
||||
|
||||
## Performance Considerations
|
||||
|
||||
- **Cold Start**: Dynamic imports minimize initial bundle size
|
||||
- **Memory Usage**: Efficient vector operations with Pinecone cloud storage
|
||||
- **Latency**: Edge deployment reduces geographic latency
|
||||
- **Concurrency**: Serverless architecture handles concurrent requests efficiently
|
||||
@@ -1,5 +1,43 @@
|
||||
# @llamaindex/cloudflare-worker-agent-test
|
||||
|
||||
## 0.0.165
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.11.4
|
||||
|
||||
## 0.0.164
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.11.3
|
||||
|
||||
## 0.0.163
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.11.2
|
||||
|
||||
## 0.0.162
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.11.1
|
||||
|
||||
## 0.0.161
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [b0cd530]
|
||||
- Updated dependencies [361a685]
|
||||
- llamaindex@0.11.0
|
||||
|
||||
## 0.0.160
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.10.6
|
||||
|
||||
## 0.0.159
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -0,0 +1,127 @@
|
||||
# CLAUDE.md
|
||||
|
||||
This file provides guidance to Claude Code (claude.ai/code) when working with the Cloudflare Worker Agent example in the LlamaIndexTS e2e testing suite.
|
||||
|
||||
## Package Overview
|
||||
|
||||
The `@llamaindex/cloudflare-worker-agent-test` package demonstrates how to use LlamaIndex.TS within a Cloudflare Worker environment. This example serves as both a functional integration test and a reference implementation for deploying AI agents on Cloudflare's edge platform.
|
||||
|
||||
## Development Commands
|
||||
|
||||
Local development and testing:
|
||||
|
||||
- `npm run dev` or `npm start` - Start Wrangler development server
|
||||
- `npm run build` - Build worker for deployment (dry-run with output to dist/)
|
||||
- `npm run deploy` - Deploy worker to Cloudflare
|
||||
- `npm run test` - Run Vitest tests using Cloudflare Workers test environment
|
||||
- `npm run cf-typegen` - Generate TypeScript types from wrangler.toml bindings
|
||||
|
||||
## Architecture
|
||||
|
||||
### Worker Implementation (`src/index.ts`)
|
||||
|
||||
The worker implements a basic HTTP handler that:
|
||||
|
||||
1. **Environment Setup**: Uses `@llamaindex/env` to configure runtime environment variables
|
||||
2. **Agent Initialization**: Creates an OpenAI agent with streaming support
|
||||
3. **Request Processing**: Accepts text input via HTTP request body
|
||||
4. **Streaming Response**: Returns streaming AI responses (though currently returns static "Hello, world!")
|
||||
|
||||
**Key Components:**
|
||||
|
||||
- Environment interface with `OPENAI_API_KEY` requirement
|
||||
- Dynamic imports for optimal bundle size (`@llamaindex/env`, `@llamaindex/openai`)
|
||||
- OpenAI agent with streaming chat capability
|
||||
- Transform stream for encoding chat response deltas
|
||||
|
||||
### Configuration Files
|
||||
|
||||
**Wrangler Configuration (`wrangler.toml`):**
|
||||
|
||||
- Worker name: "agent"
|
||||
- Entry point: `src/index.ts`
|
||||
- Compatibility date: 2024-04-23
|
||||
- Node.js compatibility enabled via `nodejs_compat` flag
|
||||
- Commented examples for all major Cloudflare Worker bindings (D1, KV, R2, etc.)
|
||||
|
||||
**TypeScript Configuration (`tsconfig.json`):**
|
||||
|
||||
- Target: ES2021 with ES2022 modules
|
||||
- Bundler module resolution for Cloudflare Workers
|
||||
- Cloudflare Workers types included (`@cloudflare/workers-types/2023-07-01`)
|
||||
- Isolated modules enabled for edge runtime compatibility
|
||||
|
||||
### Testing Setup
|
||||
|
||||
**Vitest Configuration (`vitest.config.ts`):**
|
||||
|
||||
- Uses `@cloudflare/vitest-pool-workers` for Cloudflare Workers testing environment
|
||||
- Integrates with wrangler.toml configuration
|
||||
- Enables testing in actual Workers runtime conditions
|
||||
|
||||
**Test Implementation (`test/index.spec.ts`):**
|
||||
|
||||
- Unit-style testing with Cloudflare Workers test utilities
|
||||
- Mock environment variables (OPENAI_API_KEY)
|
||||
- Uses `createExecutionContext()` and `waitOnExecutionContext()` for proper async testing
|
||||
- Currently marked as failing due to implementation bug (returns "Hello World!" instead of actual agent response)
|
||||
|
||||
## Runtime Environment
|
||||
|
||||
### Cloudflare Workers Compatibility
|
||||
|
||||
This example demonstrates LlamaIndex.TS compatibility with the Cloudflare Workers runtime (`workerd`):
|
||||
|
||||
- **Edge Runtime**: Runs on Cloudflare's global edge network
|
||||
- **Node.js Compatibility**: Uses `nodejs_compat` flag for Node.js APIs
|
||||
- **Module System**: ESM-only with dynamic imports for code splitting
|
||||
- **Environment Variables**: Secure handling via Cloudflare Workers environment bindings
|
||||
|
||||
### Key Dependencies
|
||||
|
||||
- `llamaindex` (workspace) - Main LlamaIndex.TS package
|
||||
- `@cloudflare/workers-types` - TypeScript definitions for Workers APIs
|
||||
- `@cloudflare/vitest-pool-workers` - Testing framework for Workers environment
|
||||
- `wrangler` - Cloudflare Workers CLI and build tool
|
||||
|
||||
## Development Notes
|
||||
|
||||
### Environment Variables
|
||||
|
||||
- Create `.dev.vars` file with `OPENAI_API_KEY=your_key_here` for local development
|
||||
- Production secrets managed via `wrangler secret put OPENAI_API_KEY`
|
||||
|
||||
### Known Issues
|
||||
|
||||
- **Response Bug**: Worker currently returns static "Hello, world!" instead of streaming agent response (line 34 in `src/index.ts`)
|
||||
- **Test Status**: Main test marked as `.fails()` due to above implementation issue
|
||||
|
||||
### Bundle Optimization
|
||||
|
||||
- Uses dynamic imports to enable code splitting and reduce initial bundle size
|
||||
- Critical for Cloudflare Workers size limits and cold start performance
|
||||
- Environment setup (`@llamaindex/env`) imported dynamically to defer execution
|
||||
|
||||
### Security Considerations
|
||||
|
||||
- API keys handled through Cloudflare Workers environment bindings
|
||||
- No sensitive data stored in source code
|
||||
- Secure environment variable access pattern using `env` parameter
|
||||
|
||||
## Common Workflows
|
||||
|
||||
1. **Local Development**: Use `npm run dev` with `.dev.vars` file for API keys
|
||||
2. **Testing**: Run `npm test` to validate Workers runtime compatibility
|
||||
3. **Deployment**: Use `npm run deploy` after configuring production secrets
|
||||
4. **Debugging**: Use `wrangler tail` to view production logs and errors
|
||||
5. **Type Generation**: Run `npm run cf-typegen` after modifying wrangler.toml bindings
|
||||
|
||||
## Integration Testing Purpose
|
||||
|
||||
This example serves multiple purposes in the e2e test suite:
|
||||
|
||||
- **Runtime Validation**: Ensures LlamaIndex.TS works in Cloudflare Workers environment
|
||||
- **Bundle Testing**: Validates that dynamic imports and code splitting work correctly
|
||||
- **API Integration**: Tests OpenAI provider integration in edge runtime
|
||||
- **Streaming Support**: Demonstrates streaming response handling in Workers
|
||||
- **Reference Implementation**: Provides template for real-world Cloudflare Workers deployments
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@llamaindex/cloudflare-worker-agent-test",
|
||||
"version": "0.0.159",
|
||||
"version": "0.0.165",
|
||||
"type": "module",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
|
||||
@@ -1,5 +1,44 @@
|
||||
# @llamaindex/llama-parse-browser-test
|
||||
|
||||
## 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
|
||||
|
||||
@@ -0,0 +1,111 @@
|
||||
# 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,7 +1,7 @@
|
||||
{
|
||||
"name": "@llamaindex/llama-parse-browser-test",
|
||||
"private": true,
|
||||
"version": "0.0.61",
|
||||
"version": "0.0.67",
|
||||
"type": "module",
|
||||
"scripts": {
|
||||
"dev": "vite",
|
||||
|
||||
@@ -1,5 +1,43 @@
|
||||
# @llamaindex/next-agent-test
|
||||
|
||||
## 0.1.165
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.11.4
|
||||
|
||||
## 0.1.164
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.11.3
|
||||
|
||||
## 0.1.163
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.11.2
|
||||
|
||||
## 0.1.162
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.11.1
|
||||
|
||||
## 0.1.161
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [b0cd530]
|
||||
- Updated dependencies [361a685]
|
||||
- llamaindex@0.11.0
|
||||
|
||||
## 0.1.160
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.10.6
|
||||
|
||||
## 0.1.159
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -0,0 +1,121 @@
|
||||
# CLAUDE.md
|
||||
|
||||
This file provides guidance to Claude Code (claude.ai/code) when working with the Next.js Agent example in the LlamaIndexTS e2e testing suite.
|
||||
|
||||
## Package Overview
|
||||
|
||||
The `@llamaindex/next-agent-test` package is a Next.js application example that demonstrates integration between LlamaIndexTS and Next.js, specifically showcasing agent functionality with React Server Components and streaming UI using the Vercel AI SDK.
|
||||
|
||||
This example serves as both an integration test for Next.js compatibility and a reference implementation for building LlamaIndex-powered chat applications with Next.js.
|
||||
|
||||
## Development Commands
|
||||
|
||||
Local development commands:
|
||||
|
||||
- `npm run dev` - Start the Next.js development server on http://localhost:3000
|
||||
- `npm run build` - Build the application for production
|
||||
- `npm run start` - Start the production server
|
||||
|
||||
From the workspace root:
|
||||
|
||||
- `pnpm build` - Build all packages (required before running this example)
|
||||
- `pnpm e2e` - Run e2e tests including this Next.js integration
|
||||
|
||||
## Architecture
|
||||
|
||||
### Next.js Configuration
|
||||
|
||||
The application uses a custom Next.js configuration with the LlamaIndex Next.js plugin:
|
||||
|
||||
- `next.config.mjs` imports and applies `withLlamaIndex` from `llamaindex/next`
|
||||
- Enables Edge Runtime compatibility for LlamaIndex components
|
||||
- Uses Next.js 15 with React 19
|
||||
|
||||
### Runtime Environment
|
||||
|
||||
- **Edge Runtime**: The main page (`src/app/page.tsx`) exports `runtime = "edge"` for Vercel Edge Runtime compatibility
|
||||
- **React Server Components**: Uses Next.js App Router with RSC architecture
|
||||
- **Streaming UI**: Integrates Vercel AI SDK's `createStreamableUI` for real-time agent responses
|
||||
|
||||
### Key Components
|
||||
|
||||
**Main Application (`src/app/page.tsx`):**
|
||||
|
||||
- Client component using React's `useFormState` hook
|
||||
- Triggers server action `chatWithAgent` with a simple form interface
|
||||
- Displays streaming agent responses in real-time
|
||||
|
||||
**Server Actions (`src/actions/index.tsx`):**
|
||||
|
||||
- `chatWithAgent` function creates an OpenAI agent and handles streaming chat
|
||||
- Uses `OpenAIAgent` from `@llamaindex/openai` package
|
||||
- Implements streaming response with `createStreamableUI` from AI SDK
|
||||
- Accepts question string and previous chat messages as parameters
|
||||
|
||||
**Test Page (`src/app/test/page.tsx`):**
|
||||
|
||||
- Simple import test that ensures `llamaindex` package loads correctly
|
||||
- Serves as a basic smoke test for package compatibility
|
||||
|
||||
### Dependencies
|
||||
|
||||
**Core Dependencies:**
|
||||
|
||||
- `llamaindex` - Main LlamaIndex package (workspace dependency)
|
||||
- `next` - Next.js framework (v15.3.0+)
|
||||
- `react` & `react-dom` - React 19 for latest features
|
||||
- `ai` - Vercel AI SDK for streaming UI components
|
||||
|
||||
**Development Dependencies:**
|
||||
|
||||
- TypeScript configuration for Next.js development
|
||||
- ESLint with Next.js specific rules
|
||||
|
||||
## Integration Patterns
|
||||
|
||||
### Agent Integration
|
||||
|
||||
The example demonstrates how to:
|
||||
|
||||
1. Create an OpenAI agent with configurable tools
|
||||
2. Handle streaming chat responses in a server action
|
||||
3. Integrate with React's form state management
|
||||
4. Display real-time streaming responses in the UI
|
||||
|
||||
### Next.js Best Practices
|
||||
|
||||
- Uses App Router with proper server/client component separation
|
||||
- Implements React Server Actions for agent communication
|
||||
- Leverages Edge Runtime for optimal performance
|
||||
- Follows Next.js 15 conventions with React 19 features
|
||||
|
||||
## Testing Role
|
||||
|
||||
This example serves multiple testing purposes in the e2e suite:
|
||||
|
||||
1. **Next.js Compatibility**: Validates LlamaIndex works with latest Next.js versions
|
||||
2. **Edge Runtime Testing**: Ensures agent functionality works in edge environments
|
||||
3. **Streaming Integration**: Tests real-time agent responses with AI SDK
|
||||
4. **React Server Components**: Validates RSC compatibility with LlamaIndex agents
|
||||
5. **Build Integration**: Confirms Next.js build process works with LlamaIndex
|
||||
|
||||
## Development Notes
|
||||
|
||||
- **Build Dependency**: This example requires the LlamaIndex packages to be built first (`pnpm build` from workspace root)
|
||||
- **API Keys**: Real agent functionality requires OpenAI API key in environment variables
|
||||
- **Edge Runtime**: The application is configured for edge runtime compatibility, making it suitable for Vercel deployment
|
||||
- **Streaming UI**: Demonstrates modern streaming patterns for AI applications
|
||||
- **Framework Integration**: Shows best practices for integrating LlamaIndex with React-based frameworks
|
||||
|
||||
## Environment Requirements
|
||||
|
||||
- Node.js environment with Next.js support
|
||||
- OpenAI API key for real agent functionality (optional for basic testing)
|
||||
- Compatible with Vercel Edge Runtime and standard Node.js runtime
|
||||
|
||||
## Common Workflows
|
||||
|
||||
1. **Local Development**: Run `npm run dev` after building workspace packages
|
||||
2. **Testing Agent Flow**: Use the simple form interface to test streaming agent responses
|
||||
3. **Build Validation**: Run `npm run build` to ensure production build compatibility
|
||||
4. **Integration Testing**: Part of e2e test suite validating Next.js + LlamaIndex integration
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@llamaindex/next-agent-test",
|
||||
"version": "0.1.159",
|
||||
"version": "0.1.165",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"dev": "next dev",
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
"use server";
|
||||
import { OpenAIAgent } from "@llamaindex/openai";
|
||||
import { createStreamableUI } from "ai/rsc";
|
||||
import type { ChatMessage } from "llamaindex";
|
||||
import { OpenAIAgent } from "llamaindex";
|
||||
|
||||
export async function chatWithAgent(
|
||||
question: string,
|
||||
|
||||
@@ -1,5 +1,43 @@
|
||||
# test-edge-runtime
|
||||
|
||||
## 0.1.164
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.11.4
|
||||
|
||||
## 0.1.163
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.11.3
|
||||
|
||||
## 0.1.162
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.11.2
|
||||
|
||||
## 0.1.161
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.11.1
|
||||
|
||||
## 0.1.160
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [b0cd530]
|
||||
- Updated dependencies [361a685]
|
||||
- llamaindex@0.11.0
|
||||
|
||||
## 0.1.159
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.10.6
|
||||
|
||||
## 0.1.158
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -0,0 +1,128 @@
|
||||
# CLAUDE.md
|
||||
|
||||
This file provides guidance to Claude Code (claude.ai/code) when working with the LlamaIndexTS Next.js Edge Runtime example.
|
||||
|
||||
## Package Overview
|
||||
|
||||
The `@llamaindex/nextjs-edge-runtime-test` package is an end-to-end test example that validates LlamaIndexTS compatibility with Next.js Edge Runtime. This example serves as both a test case and a reference implementation for using LlamaIndex in Vercel Edge Runtime environments.
|
||||
|
||||
## Purpose
|
||||
|
||||
This example specifically tests:
|
||||
|
||||
- LlamaIndex package import compatibility in Edge Runtime
|
||||
- Next.js Edge Runtime environment detection
|
||||
- Proper runtime configuration for LlamaIndex in serverless edge environments
|
||||
- Integration with Next.js 15.x App Router using edge runtime
|
||||
|
||||
## Development Commands
|
||||
|
||||
Standard Next.js commands:
|
||||
|
||||
- `npm run dev` - Start development server
|
||||
- `npm run build` - Build for production
|
||||
- `npm start` - Start production server
|
||||
|
||||
From the workspace root:
|
||||
|
||||
- `pnpm build` - Build all packages (required before testing)
|
||||
- `pnpm e2e` - Run all e2e tests including this example
|
||||
|
||||
## Architecture
|
||||
|
||||
### Next.js Configuration
|
||||
|
||||
**next.config.mjs:**
|
||||
|
||||
- Uses `withLlamaIndex` wrapper from `llamaindex/next` for proper Edge Runtime configuration
|
||||
- Applies necessary bundling and polyfill configurations for LlamaIndex compatibility
|
||||
|
||||
### Runtime Configuration
|
||||
|
||||
**Edge Runtime Setup:**
|
||||
|
||||
- Both `src/app/layout.tsx` and `src/app/page.tsx` export `runtime = "edge"`
|
||||
- Forces Next.js to use Edge Runtime instead of Node.js runtime
|
||||
- Validates LlamaIndex works in constrained serverless environments
|
||||
|
||||
### Runtime Validation
|
||||
|
||||
**src/utils/llm.ts:**
|
||||
|
||||
- Imports the main `llamaindex` package to test compatibility
|
||||
- Performs runtime environment validation by checking for `EdgeRuntime` global
|
||||
- Throws error if not running in expected Edge Runtime environment
|
||||
- Acts as a smoke test for package loading in edge environments
|
||||
|
||||
### Application Structure
|
||||
|
||||
**App Router Setup:**
|
||||
|
||||
- Uses Next.js 13+ App Router with TypeScript
|
||||
- Minimal React components for testing runtime compatibility
|
||||
- CSS imports to validate bundling works correctly
|
||||
- Path aliases configured for `@/*` imports
|
||||
|
||||
## Key Features
|
||||
|
||||
### Edge Runtime Compatibility
|
||||
|
||||
- Tests LlamaIndex package loading in Vercel Edge Runtime
|
||||
- Validates proper tree-shaking and bundling for edge environments
|
||||
- Ensures no Node.js-specific APIs are accidentally imported
|
||||
|
||||
### LlamaIndex Integration
|
||||
|
||||
- Uses workspace dependency `llamaindex: "workspace:*"`
|
||||
- Leverages `withLlamaIndex` Next.js plugin for proper configuration
|
||||
- Tests base package import without specific providers
|
||||
|
||||
### Environment Detection
|
||||
|
||||
- Runtime environment validation ensures code runs in expected context
|
||||
- Prevents deployment issues by catching runtime mismatches early
|
||||
- Provides clear error messages for debugging
|
||||
|
||||
## Dependencies
|
||||
|
||||
**Core Dependencies:**
|
||||
|
||||
- `llamaindex` - Main LlamaIndexTS package (workspace dependency)
|
||||
- `next` - Next.js framework (v15.3.0)
|
||||
- `react` & `react-dom` - React framework (v19.x)
|
||||
|
||||
**Development Dependencies:**
|
||||
|
||||
- TypeScript types for Node.js, React, and React DOM
|
||||
- TypeScript compiler for type checking
|
||||
|
||||
## Development Notes
|
||||
|
||||
- **Build Dependency**: Ensure `pnpm build` is run from workspace root before testing
|
||||
- **Edge Runtime Only**: This example is specifically designed for Edge Runtime, not Node.js runtime
|
||||
- **Minimal Implementation**: Intentionally minimal to isolate Edge Runtime compatibility testing
|
||||
- **Import Testing**: The `src/utils/llm.ts` file serves as an import compatibility test
|
||||
- **Bundle Size**: Edge Runtime has size constraints, so this tests LlamaIndex bundle compatibility
|
||||
|
||||
## Testing Purpose
|
||||
|
||||
This example validates that:
|
||||
|
||||
1. LlamaIndex packages can be imported in Edge Runtime environments
|
||||
2. Next.js configuration works correctly with LlamaIndex
|
||||
3. Runtime environment detection functions properly
|
||||
4. Bundle size and tree-shaking work for edge deployments
|
||||
5. No Node.js-specific APIs are inadvertently used
|
||||
|
||||
## Common Issues
|
||||
|
||||
- **Runtime Detection Failures**: If `EdgeRuntime` is not detected, check Next.js configuration
|
||||
- **Import Errors**: Ensure workspace packages are built before running
|
||||
- **Bundle Size**: Edge Runtime has memory/size limits that may affect large imports
|
||||
- **API Compatibility**: Some LlamaIndex features may not work in Edge Runtime due to API limitations
|
||||
|
||||
## Related Examples
|
||||
|
||||
- `../nextjs-node-runtime/` - Node.js runtime equivalent
|
||||
- `../cloudflare-worker-agent/` - Cloudflare Workers edge runtime
|
||||
- `../nextjs-agent/` - Full Next.js agent implementation
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@llamaindex/nextjs-edge-runtime-test",
|
||||
"version": "0.1.158",
|
||||
"version": "0.1.164",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"dev": "next dev",
|
||||
|
||||
@@ -1,5 +1,52 @@
|
||||
# @llamaindex/next-node-runtime
|
||||
|
||||
## 0.1.32
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- @llamaindex/huggingface@0.1.12
|
||||
- llamaindex@0.11.4
|
||||
- @llamaindex/readers@3.1.6
|
||||
|
||||
## 0.1.31
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.11.3
|
||||
|
||||
## 0.1.30
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- @llamaindex/huggingface@0.1.11
|
||||
- llamaindex@0.11.2
|
||||
- @llamaindex/readers@3.1.5
|
||||
|
||||
## 0.1.29
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.11.1
|
||||
|
||||
## 0.1.28
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [b0cd530]
|
||||
- Updated dependencies [361a685]
|
||||
- llamaindex@0.11.0
|
||||
- @llamaindex/huggingface@0.1.10
|
||||
- @llamaindex/readers@3.1.4
|
||||
|
||||
## 0.1.27
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [76c9a80]
|
||||
- @llamaindex/huggingface@0.1.9
|
||||
- llamaindex@0.10.6
|
||||
- @llamaindex/readers@3.1.3
|
||||
|
||||
## 0.1.26
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -0,0 +1,129 @@
|
||||
# CLAUDE.md
|
||||
|
||||
This file provides guidance to Claude Code (claude.ai/code) when working with the Next.js Node Runtime example package.
|
||||
|
||||
## Package Overview
|
||||
|
||||
The `@llamaindex/next-node-runtime-test` package is an end-to-end test example that demonstrates LlamaIndexTS integration with Next.js running on the Node.js runtime. This example validates that LlamaIndex packages work correctly in a Next.js App Router environment with server-side rendering and server actions.
|
||||
|
||||
## Development Commands
|
||||
|
||||
From this directory:
|
||||
|
||||
- `npm run dev` - Start development server on http://localhost:3000
|
||||
- `npm run build` - Build the Next.js application
|
||||
- `npm run start` - Start production server
|
||||
|
||||
From the e2e root directory:
|
||||
|
||||
- `pnpm e2e` - Run all e2e tests including this example
|
||||
|
||||
## Application Structure
|
||||
|
||||
### Configuration Files
|
||||
|
||||
- `next.config.mjs` - Next.js configuration with LlamaIndex integration using `withLlamaIndex()`
|
||||
- `tsconfig.json` - TypeScript configuration for Next.js with App Router
|
||||
- `package.json` - Dependencies including `llamaindex`, `@llamaindex/huggingface`, and `@llamaindex/readers`
|
||||
|
||||
### Source Structure
|
||||
|
||||
**App Router Pages:**
|
||||
|
||||
- `src/app/page.tsx` - Home page that demonstrates tokenizer usage with `runtime = "nodejs"`
|
||||
- `src/app/layout.tsx` - Root layout component with Inter font
|
||||
|
||||
**API Routes:**
|
||||
|
||||
- `src/app/api/openai/route.ts` - POST endpoint that calls OpenAI server action
|
||||
|
||||
**Server Actions:**
|
||||
|
||||
- `src/actions/openai.ts` - Server action demonstrating full LlamaIndex workflow with OpenAI agent
|
||||
|
||||
**Utilities:**
|
||||
|
||||
- `src/utils/tokenizer.ts` - Runtime validation and tokenization example
|
||||
|
||||
## Key Features Demonstrated
|
||||
|
||||
### 1. Runtime Validation (`src/utils/tokenizer.ts`)
|
||||
|
||||
Tests that the application runs in Node.js runtime (not Edge):
|
||||
|
||||
```typescript
|
||||
// @ts-expect-error EdgeRuntime is not defined in type
|
||||
if (typeof EdgeRuntime === "string") {
|
||||
throw new Error("Expected to not run in EdgeRuntime");
|
||||
}
|
||||
```
|
||||
|
||||
Uses LlamaIndex tokenizers:
|
||||
|
||||
```typescript
|
||||
import { Tokenizers, tokenizers } from "@llamaindex/env/tokenizers";
|
||||
```
|
||||
|
||||
### 2. OpenAI Agent Integration (`src/actions/openai.ts`)
|
||||
|
||||
Demonstrates a complete LlamaIndex workflow:
|
||||
|
||||
- **LLM Configuration**: OpenAI GPT-4o with API key management
|
||||
- **Embedding Model**: HuggingFace BAAI/bge-small-en-v1.5 embeddings
|
||||
- **Document Loading**: SimpleDirectoryReader for local file processing
|
||||
- **Vector Index**: VectorStoreIndex creation from documents
|
||||
- **Tool Integration**: Query engine as a tool for the agent
|
||||
- **Agent Creation**: OpenAIAgent with tools for conversational AI
|
||||
- **Callback Handling**: Event listeners for tool calls and results
|
||||
|
||||
### 3. Next.js Integration
|
||||
|
||||
- **Server Actions**: "use server" directive for server-side LlamaIndex operations
|
||||
- **API Routes**: RESTful endpoint for external integration
|
||||
- **App Router**: Modern Next.js routing with TypeScript support
|
||||
- **LlamaIndex Plugin**: `withLlamaIndex()` wrapper for proper bundling
|
||||
|
||||
## Dependencies
|
||||
|
||||
**Core LlamaIndex:**
|
||||
|
||||
- `llamaindex` - Main LlamaIndex package
|
||||
- `@llamaindex/huggingface` - HuggingFace embedding models
|
||||
- `@llamaindex/readers` - Document readers including SimpleDirectoryReader
|
||||
|
||||
**Next.js Stack:**
|
||||
|
||||
- `next@^15.3.0` - Next.js framework
|
||||
- `react@19.0.0` & `react-dom@19.0.0` - React runtime
|
||||
- `typescript@^5.7.3` - TypeScript support
|
||||
|
||||
## Testing Purpose
|
||||
|
||||
This example serves as an integration test for:
|
||||
|
||||
1. **Node.js Runtime Compatibility**: Ensures LlamaIndex works in Next.js Node.js runtime
|
||||
2. **Server Actions**: Validates server-side LlamaIndex operations
|
||||
3. **Document Processing**: Tests file reading and vector indexing
|
||||
4. **Agent Workflows**: Validates OpenAI agent with tool integration
|
||||
5. **Bundling**: Ensures proper webpack bundling with `withLlamaIndex()`
|
||||
6. **API Integration**: Tests REST API endpoints with LlamaIndex backend
|
||||
|
||||
## Environment Variables
|
||||
|
||||
- `NEXT_PUBLIC_OPENAI_KEY` - OpenAI API key (falls back to "FAKE_KEY_TO_PASS_TESTS" for testing)
|
||||
|
||||
## Development Notes
|
||||
|
||||
- **Runtime Enforcement**: Explicitly sets `runtime = "nodejs"` in page components
|
||||
- **Error Handling**: Comprehensive try-catch in server actions
|
||||
- **Callback Management**: Event listeners for debugging tool interactions
|
||||
- **Testing Compatibility**: Fake API key fallback for automated testing
|
||||
- **Bundle Optimization**: Uses `withLlamaIndex()` for proper webpack configuration
|
||||
- **Type Safety**: Full TypeScript support with Next.js type definitions
|
||||
|
||||
## Common Workflows
|
||||
|
||||
1. **Local Development**: `npm run dev` to start development server with hot reload
|
||||
2. **Production Testing**: `npm run build && npm run start` to test production build
|
||||
3. **Integration Testing**: Run from e2e root with `pnpm e2e` for automated validation
|
||||
4. **Agent Testing**: POST to `/api/openai` endpoint with query payload for agent responses
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@llamaindex/next-node-runtime-test",
|
||||
"version": "0.1.26",
|
||||
"version": "0.1.32",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"dev": "next dev",
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
"use server";
|
||||
import { HuggingFaceEmbedding } from "@llamaindex/huggingface";
|
||||
import { OpenAI, OpenAIAgent } from "@llamaindex/openai";
|
||||
import { SimpleDirectoryReader } from "@llamaindex/readers/directory";
|
||||
import { OpenAI, OpenAIAgent, Settings, VectorStoreIndex } from "llamaindex";
|
||||
import { Settings, VectorStoreIndex } from "llamaindex";
|
||||
|
||||
Settings.llm = new OpenAI({
|
||||
apiKey: process.env.NEXT_PUBLIC_OPENAI_KEY ?? "FAKE_KEY_TO_PASS_TESTS",
|
||||
|
||||
@@ -1,5 +1,43 @@
|
||||
# vite-import-llamaindex
|
||||
|
||||
## 0.0.31
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.11.4
|
||||
|
||||
## 0.0.30
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.11.3
|
||||
|
||||
## 0.0.29
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.11.2
|
||||
|
||||
## 0.0.28
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.11.1
|
||||
|
||||
## 0.0.27
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [b0cd530]
|
||||
- Updated dependencies [361a685]
|
||||
- llamaindex@0.11.0
|
||||
|
||||
## 0.0.26
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.10.6
|
||||
|
||||
## 0.0.25
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -0,0 +1,108 @@
|
||||
# CLAUDE.md
|
||||
|
||||
This file provides guidance to Claude Code (claude.ai/code) when working with the vite-import-llamaindex example package.
|
||||
|
||||
## Package Overview
|
||||
|
||||
The `vite-import-llamaindex` package is a minimal Vite-based compatibility test that validates LlamaIndexTS can be properly imported and bundled in browser environments using Vite. This example serves as both an integration test and a demonstration of bundle size validation.
|
||||
|
||||
## Purpose
|
||||
|
||||
This example specifically tests:
|
||||
|
||||
- **Vite Bundler Compatibility**: Ensures LlamaIndexTS works correctly with Vite's bundling system
|
||||
- **Browser Import Validation**: Validates that the `llamaindex` package can be imported in browser-compatible builds
|
||||
- **Bundle Size Monitoring**: Uses size-limit to track and validate bundle output size
|
||||
- **Dual Module Support**: Tests both ESM and CJS output formats through Vite's library mode
|
||||
|
||||
## Development Commands
|
||||
|
||||
Local package commands:
|
||||
|
||||
- `npm run build` - Build the example using Vite library mode
|
||||
- `npm run size-limit` - Check bundle size against configured limits
|
||||
|
||||
From the root directory:
|
||||
|
||||
- `pnpm build` - Build all packages (required before testing)
|
||||
- `pnpm e2e` - Run all e2e tests including this example
|
||||
|
||||
## Project Structure
|
||||
|
||||
```
|
||||
vite-import-llamaindex/
|
||||
├── src/
|
||||
│ └── main.ts # Main entry point that imports llamaindex
|
||||
├── public/
|
||||
│ └── vite.svg # Vite logo asset
|
||||
├── package.json # Package configuration with size-limit setup
|
||||
├── vite.config.ts # Vite library build configuration
|
||||
├── tsconfig.json # TypeScript configuration
|
||||
└── CHANGELOG.md # Version history
|
||||
```
|
||||
|
||||
## Configuration Details
|
||||
|
||||
### Vite Configuration (`vite.config.ts`)
|
||||
|
||||
- **Library Mode**: Configured to build as a library with dual format output (ESM + CJS)
|
||||
- **Entry Point**: `src/main.ts` as the main entry
|
||||
- **Output Name**: `LlamaIndexImportTest`
|
||||
- **Formats**: Both ES modules and CommonJS for compatibility testing
|
||||
|
||||
### TypeScript Configuration (`tsconfig.json`)
|
||||
|
||||
- **Target**: ES2020 for modern browser compatibility
|
||||
- **Module System**: ESNext with bundler resolution for Vite
|
||||
- **Strict Mode**: Enabled with comprehensive linting rules
|
||||
- **DOM Types**: Includes DOM and DOM.Iterable for browser environment
|
||||
|
||||
### Bundle Size Monitoring
|
||||
|
||||
The package uses `size-limit` to monitor bundle size:
|
||||
|
||||
```json
|
||||
"size-limit": [
|
||||
{
|
||||
"path": "dist/LlamaIndexImportTest.js"
|
||||
}
|
||||
]
|
||||
```
|
||||
|
||||
This ensures the bundled output remains within reasonable size constraints for browser applications.
|
||||
|
||||
## Test Approach
|
||||
|
||||
The test validates:
|
||||
|
||||
1. **Import Success**: The `llamaindex` package can be imported without errors
|
||||
2. **Bundle Generation**: Vite can successfully bundle the code into browser-compatible output
|
||||
3. **Size Validation**: The resulting bundle meets size requirements
|
||||
4. **Module Compatibility**: Both ESM and CJS outputs are generated correctly
|
||||
|
||||
## Dependencies
|
||||
|
||||
- **`llamaindex`**: Workspace dependency for testing the main package
|
||||
- **`vite`**: Build tool and bundler
|
||||
- **`typescript`**: TypeScript compiler
|
||||
- **`@size-limit/preset-big-lib`**: Bundle size analysis for libraries
|
||||
- **`size-limit`**: Bundle size monitoring tool
|
||||
|
||||
## Development Notes
|
||||
|
||||
- **Build Dependency**: This example depends on the main `llamaindex` package being built first
|
||||
- **Browser Focus**: Specifically tests browser compatibility, not Node.js environments
|
||||
- **Size Monitoring**: Bundle size is actively monitored to prevent bloat
|
||||
- **Minimal Example**: Kept intentionally simple to isolate bundling issues
|
||||
- **Integration Test**: Serves as both an example and an automated test in the e2e suite
|
||||
|
||||
## Common Issues
|
||||
|
||||
1. **Build Failures**: Ensure `pnpm build` is run from the root before testing this example
|
||||
2. **Size Limit Violations**: If bundle size exceeds limits, investigate dependency bloat
|
||||
3. **Import Errors**: Check that the `llamaindex` package exports are browser-compatible
|
||||
4. **TypeScript Errors**: Verify TypeScript configuration matches Vite requirements
|
||||
|
||||
## Relationship to E2E Testing
|
||||
|
||||
This example is part of the broader e2e testing suite and validates that LlamaIndexTS maintains browser compatibility. It ensures that when users integrate LlamaIndexTS with Vite in their own projects, they won't encounter bundling or import issues.
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "vite-import-llamaindex",
|
||||
"private": true,
|
||||
"version": "0.0.25",
|
||||
"version": "0.0.31",
|
||||
"type": "module",
|
||||
"scripts": {
|
||||
"build": "vite build",
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
{"root":["./src/main.ts","./vite.config.ts"],"version":"5.7.3"}
|
||||
@@ -1,5 +1,43 @@
|
||||
# @llamaindex/waku-query-engine-test
|
||||
|
||||
## 0.0.165
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.11.4
|
||||
|
||||
## 0.0.164
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.11.3
|
||||
|
||||
## 0.0.163
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.11.2
|
||||
|
||||
## 0.0.162
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.11.1
|
||||
|
||||
## 0.0.161
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [b0cd530]
|
||||
- Updated dependencies [361a685]
|
||||
- llamaindex@0.11.0
|
||||
|
||||
## 0.0.160
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.10.6
|
||||
|
||||
## 0.0.159
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -0,0 +1,131 @@
|
||||
# CLAUDE.md
|
||||
|
||||
This file provides guidance to Claude Code (claude.ai/code) when working with the LlamaIndexTS Waku Query Engine example.
|
||||
|
||||
## Package Overview
|
||||
|
||||
The `@llamaindex/waku-query-engine-test` package demonstrates LlamaIndexTS integration with the Waku React framework. This example showcases how to build a document query interface using LlamaIndex's VectorStoreIndex and QueryEngine capabilities within a Waku application that supports both static rendering and server actions.
|
||||
|
||||
## Development Commands
|
||||
|
||||
- `npm run dev` - Start Waku development server
|
||||
- `npm run build` - Build the application for production
|
||||
- `npm run start` - Start the production server
|
||||
|
||||
## Architecture
|
||||
|
||||
### Framework Integration
|
||||
|
||||
This example uses **Waku 0.22.2**, a lightweight React framework that supports:
|
||||
|
||||
- React Server Components (RSC)
|
||||
- Server actions with "use server" directive
|
||||
- Static site generation with `render: "static"` config
|
||||
- Client-side hydration with "use client" components
|
||||
|
||||
### LlamaIndex Integration
|
||||
|
||||
The core LlamaIndex functionality is implemented in `src/actions.ts`:
|
||||
|
||||
**Key Components:**
|
||||
|
||||
- **Document Loading**: Reads text from `node_modules/llamaindex/examples/abramov.txt`
|
||||
- **Vector Index**: Creates embeddings using `VectorStoreIndex.fromDocuments()`
|
||||
- **Query Engine**: Provides semantic search capabilities via `index.asQueryEngine()`
|
||||
- **Lazy Loading**: QueryEngine is initialized once and cached for subsequent requests
|
||||
|
||||
**Data Flow:**
|
||||
|
||||
1. User inputs question in chat interface (`src/components/chat.tsx`)
|
||||
2. Form submission triggers server action (`chatWithAI`)
|
||||
3. Server action queries the VectorStoreIndex
|
||||
4. Response is returned and displayed in the UI
|
||||
|
||||
### Component Structure
|
||||
|
||||
**Server Components:**
|
||||
|
||||
- `src/pages/_layout.tsx` - Root layout with static metadata
|
||||
- `src/pages/index.tsx` - Home page with static rendering config
|
||||
- `src/components/header.tsx` - Navigation header
|
||||
- `src/components/footer.tsx` - Site footer
|
||||
|
||||
**Client Components:**
|
||||
|
||||
- `src/components/chat.tsx` - Interactive chat interface with form state management
|
||||
|
||||
### Styling
|
||||
|
||||
- **TailwindCSS 4.1.4** for utility-first styling
|
||||
- **PostCSS** for CSS processing
|
||||
- **Nunito font** via Google Fonts
|
||||
- Responsive design with mobile-first approach
|
||||
|
||||
## Dependencies
|
||||
|
||||
**Core Dependencies:**
|
||||
|
||||
- `@llamaindex/env` - Runtime environment compatibility
|
||||
- `llamaindex` - Main LlamaIndexTS package for document indexing and querying
|
||||
- `waku` - React framework for SSR/SSG
|
||||
- `react` & `react-dom` - React 19.0.0 with experimental features
|
||||
- `react-server-dom-webpack` - React Server Components support
|
||||
|
||||
**Development Dependencies:**
|
||||
|
||||
- `typescript` - TypeScript 5.7.3 with strict mode
|
||||
- `tailwindcss` & `@tailwindcss/postcss` - Styling framework
|
||||
- `rollup` - Build tool used by Waku
|
||||
|
||||
## TypeScript Configuration
|
||||
|
||||
- **Target**: ESNext with modern features
|
||||
- **Module**: ESNext with bundler resolution
|
||||
- **React**: Experimental types for React 19 features
|
||||
- **Strict**: Full TypeScript strict mode enabled
|
||||
|
||||
## Key Features Demonstrated
|
||||
|
||||
1. **Server Actions Integration**: Seamless LlamaIndex queries via Waku server actions
|
||||
2. **Document RAG**: Retrieval-Augmented Generation using vector embeddings
|
||||
3. **Static Generation**: Pages are statically rendered while maintaining interactive features
|
||||
4. **React 19 Features**: Uses latest React with experimental types
|
||||
5. **Modern Styling**: TailwindCSS 4.x with PostCSS integration
|
||||
|
||||
## Testing Context
|
||||
|
||||
This example serves as an end-to-end test for:
|
||||
|
||||
- LlamaIndexTS compatibility with Waku framework
|
||||
- React Server Components integration
|
||||
- Vector store and query engine functionality
|
||||
- Server action patterns with LlamaIndex
|
||||
- Build and deployment workflows
|
||||
|
||||
## Development Notes
|
||||
|
||||
- **File Loading**: Uses `@llamaindex/env` fs abstraction for cross-platform file access
|
||||
- **Query Caching**: QueryEngine is lazily loaded and cached for performance
|
||||
- **Error Handling**: Basic error handling in server actions and form submissions
|
||||
- **Bundle Size**: Waku's optimized bundling ensures minimal client-side JavaScript
|
||||
- **Runtime Support**: Compatible with Node.js runtime environments
|
||||
|
||||
## Common Patterns
|
||||
|
||||
**Adding New Documents:**
|
||||
|
||||
1. Place document files in accessible location
|
||||
2. Update `lazyLoadQueryEngine()` to load additional documents
|
||||
3. Rebuild vector index with new document set
|
||||
|
||||
**Extending Chat Interface:**
|
||||
|
||||
1. Modify `Chat` component for enhanced UI features
|
||||
2. Update `chatWithAI` server action for additional processing
|
||||
3. Add error states and loading indicators as needed
|
||||
|
||||
**Styling Updates:**
|
||||
|
||||
1. Modify TailwindCSS classes in components
|
||||
2. Update `tailwind.config.js` for custom configurations
|
||||
3. Use `src/styles.css` for global styles
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@llamaindex/waku-query-engine-test",
|
||||
"version": "0.0.159",
|
||||
"version": "0.0.165",
|
||||
"type": "module",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
import { ClipEmbedding } from "@llamaindex/clip";
|
||||
import type { LoadTransformerEvent } from "@llamaindex/env/multi-model";
|
||||
import { setTransformers } from "@llamaindex/env/multi-model";
|
||||
import { OpenAIEmbedding } from "@llamaindex/openai";
|
||||
import { ImageNode, Settings } from "llamaindex";
|
||||
import assert from "node:assert";
|
||||
import { type Mock, test } from "node:test";
|
||||
@@ -19,6 +20,7 @@ test.before(() => {
|
||||
|
||||
test.beforeEach(() => {
|
||||
callback.mock.resetCalls();
|
||||
Settings.embedModel = new OpenAIEmbedding();
|
||||
});
|
||||
|
||||
await test.skip("clip embedding", async (t) => {
|
||||
|
||||
@@ -1,10 +1,6 @@
|
||||
import type { TaskStep } from "@llamaindex/core/agent";
|
||||
import {
|
||||
LLMSingleSelector,
|
||||
OpenAIAgent,
|
||||
Settings,
|
||||
type ChatMessage,
|
||||
} from "llamaindex";
|
||||
import { OpenAIAgent } from "@llamaindex/openai";
|
||||
import { LLMSingleSelector, Settings, type ChatMessage } from "llamaindex";
|
||||
import assert from "node:assert";
|
||||
import { test } from "node:test";
|
||||
import { divideNumbersTool, sumNumbersTool } from "./fixtures/tools.js";
|
||||
|
||||
@@ -1,11 +1,10 @@
|
||||
import { extractText } from "@llamaindex/core/utils";
|
||||
import { OpenAI, OpenAIAgent } from "@llamaindex/openai";
|
||||
import { consola } from "consola";
|
||||
import {
|
||||
Document,
|
||||
FunctionTool,
|
||||
ObjectIndex,
|
||||
OpenAI,
|
||||
OpenAIAgent,
|
||||
QueryEngineTool,
|
||||
SentenceSplitter,
|
||||
Settings,
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
import { extractText } from "@llamaindex/core/utils";
|
||||
import { OpenAI, ReActAgent, Settings, type LLM } from "llamaindex";
|
||||
import { OpenAI } from "@llamaindex/openai";
|
||||
import { ReActAgent, Settings, type LLM } from "llamaindex";
|
||||
import { ok } from "node:assert";
|
||||
import { beforeEach, test } from "node:test";
|
||||
import { getWeatherTool } from "./fixtures/tools.js";
|
||||
|
||||
@@ -1,8 +1,9 @@
|
||||
import { OpenAIEmbedding } from "@llamaindex/openai";
|
||||
import { PGVectorStore } from "@llamaindex/postgres";
|
||||
import { config } from "dotenv";
|
||||
import { Document, VectorStoreQueryMode } from "llamaindex";
|
||||
import { Document, Settings, VectorStoreQueryMode } from "llamaindex";
|
||||
import assert from "node:assert";
|
||||
import { test } from "node:test";
|
||||
import { beforeEach, test } from "node:test";
|
||||
import pg from "pg";
|
||||
import { registerTypes } from "pgvector/pg";
|
||||
|
||||
@@ -14,6 +15,10 @@ const pgConfig = {
|
||||
database: "llamaindex_node_test",
|
||||
};
|
||||
|
||||
beforeEach(async () => {
|
||||
Settings.embedModel = new OpenAIEmbedding();
|
||||
});
|
||||
|
||||
await test("init with client", async (t) => {
|
||||
const pgClient = new pg.Client(pgConfig);
|
||||
await pgClient.connect();
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
package-lock.json
|
||||
@@ -0,0 +1,16 @@
|
||||
{
|
||||
"name": "e2e-npm",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"test": "node --import tsx --test test/*.e2e.ts"
|
||||
},
|
||||
"dependencies": {
|
||||
"@llamaindex/workflow": "1.1.1",
|
||||
"llamaindex": "0.10.5",
|
||||
"zod": "^3.23.8"
|
||||
},
|
||||
"devDependencies": {
|
||||
"tsx": "^4.19.1",
|
||||
"@types/node": "^22.9.0"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
import { OpenAI } from "@llamaindex/openai";
|
||||
import { agent } from "@llamaindex/workflow";
|
||||
import { Settings, tool } from "llamaindex";
|
||||
import { ok } from "node:assert";
|
||||
import { test } from "node:test";
|
||||
import { z } from "zod";
|
||||
|
||||
Settings.llm = new OpenAI({ model: "gpt-4-0613" });
|
||||
|
||||
test("creating agent from workflow package", async () => {
|
||||
const calculatorAgent = agent({
|
||||
tools: [
|
||||
tool({
|
||||
name: "add",
|
||||
description: "Adds two numbers",
|
||||
parameters: z.object({ x: z.number(), y: z.number() }),
|
||||
execute: ({ x, y }) => x + y,
|
||||
}),
|
||||
],
|
||||
});
|
||||
ok(calculatorAgent !== undefined, "calculatorAgent should be defined");
|
||||
|
||||
const agents = calculatorAgent.getAgents();
|
||||
const currentLLM = agents?.[0].llm;
|
||||
ok(
|
||||
(currentLLM as OpenAI)?.model === (Settings.llm as OpenAI)?.model,
|
||||
"Agent should use the same LLM model as setup in Settings instance",
|
||||
);
|
||||
});
|
||||
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"compilerOptions": {
|
||||
"module": "node16",
|
||||
"moduleResolution": "node16",
|
||||
"target": "ESNext",
|
||||
"types": ["node"],
|
||||
"strict": true,
|
||||
"esModuleInterop": true,
|
||||
"skipLibCheck": true,
|
||||
"forceConsistentCasingInFileNames": true
|
||||
},
|
||||
"include": ["test/**/*.ts"]
|
||||
}
|
||||
+1
-1
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "@llamaindex/e2e",
|
||||
"private": true,
|
||||
"version": "0.1.0",
|
||||
"version": "0.1.1",
|
||||
"type": "module",
|
||||
"scripts": {
|
||||
"e2e": "node --import tsx --import ./mock-register.js --test ./node/**/*.e2e.ts",
|
||||
|
||||
+1
-2
@@ -1,3 +1,2 @@
|
||||
package-lock.json
|
||||
storage
|
||||
tmp_data
|
||||
tmp_data
|
||||
|
||||
@@ -1,5 +1,219 @@
|
||||
# examples
|
||||
|
||||
## 0.3.18
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [c927457]
|
||||
- @llamaindex/anthropic@0.3.10
|
||||
- @llamaindex/openai@0.4.2
|
||||
- @llamaindex/core@0.6.8
|
||||
- @llamaindex/clip@0.0.58
|
||||
- @llamaindex/deepinfra@0.0.58
|
||||
- @llamaindex/deepseek@0.0.18
|
||||
- @llamaindex/fireworks@0.0.18
|
||||
- @llamaindex/groq@0.0.73
|
||||
- @llamaindex/huggingface@0.1.12
|
||||
- @llamaindex/jinaai@0.0.18
|
||||
- @llamaindex/perplexity@0.0.15
|
||||
- @llamaindex/azure@0.1.19
|
||||
- @llamaindex/elastic-search@0.1.8
|
||||
- @llamaindex/milvus@0.1.17
|
||||
- @llamaindex/qdrant@0.1.18
|
||||
- @llamaindex/supabase@0.1.7
|
||||
- @llamaindex/together@0.0.18
|
||||
- @llamaindex/vllm@0.0.44
|
||||
- @llamaindex/xai@0.0.5
|
||||
- @llamaindex/cloud@4.0.12
|
||||
- llamaindex@0.11.4
|
||||
- @llamaindex/node-parser@2.0.8
|
||||
- @llamaindex/assemblyai@0.1.7
|
||||
- @llamaindex/cohere@0.0.22
|
||||
- @llamaindex/discord@0.1.7
|
||||
- @llamaindex/google@0.3.5
|
||||
- @llamaindex/mistral@0.1.8
|
||||
- @llamaindex/mixedbread@0.0.22
|
||||
- @llamaindex/notion@0.1.7
|
||||
- @llamaindex/ollama@0.1.8
|
||||
- @llamaindex/portkey-ai@0.0.50
|
||||
- @llamaindex/replicate@0.0.50
|
||||
- @llamaindex/astra@0.0.22
|
||||
- @llamaindex/chroma@0.0.22
|
||||
- @llamaindex/firestore@1.0.15
|
||||
- @llamaindex/mongodb@0.0.23
|
||||
- @llamaindex/pinecone@0.1.8
|
||||
- @llamaindex/postgres@0.0.51
|
||||
- @llamaindex/upstash@0.0.22
|
||||
- @llamaindex/weaviate@0.0.22
|
||||
- @llamaindex/vercel@0.1.8
|
||||
- @llamaindex/voyage-ai@1.0.14
|
||||
- @llamaindex/readers@3.1.6
|
||||
- @llamaindex/tools@0.0.13
|
||||
- @llamaindex/workflow@1.1.5
|
||||
|
||||
## 0.3.17
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [59601dd]
|
||||
- @llamaindex/openai@0.4.1
|
||||
- @llamaindex/core@0.6.7
|
||||
- @llamaindex/clip@0.0.57
|
||||
- @llamaindex/deepinfra@0.0.57
|
||||
- @llamaindex/deepseek@0.0.17
|
||||
- @llamaindex/fireworks@0.0.17
|
||||
- @llamaindex/groq@0.0.72
|
||||
- @llamaindex/huggingface@0.1.11
|
||||
- @llamaindex/jinaai@0.0.17
|
||||
- @llamaindex/perplexity@0.0.14
|
||||
- @llamaindex/azure@0.1.17
|
||||
- @llamaindex/elastic-search@0.1.7
|
||||
- @llamaindex/milvus@0.1.16
|
||||
- @llamaindex/qdrant@0.1.16
|
||||
- @llamaindex/supabase@0.1.6
|
||||
- @llamaindex/together@0.0.17
|
||||
- @llamaindex/vllm@0.0.43
|
||||
- @llamaindex/xai@0.0.4
|
||||
- @llamaindex/cloud@4.0.10
|
||||
- llamaindex@0.11.2
|
||||
- @llamaindex/node-parser@2.0.7
|
||||
- @llamaindex/anthropic@0.3.8
|
||||
- @llamaindex/assemblyai@0.1.6
|
||||
- @llamaindex/cohere@0.0.21
|
||||
- @llamaindex/discord@0.1.6
|
||||
- @llamaindex/google@0.3.3
|
||||
- @llamaindex/mistral@0.1.7
|
||||
- @llamaindex/mixedbread@0.0.21
|
||||
- @llamaindex/notion@0.1.6
|
||||
- @llamaindex/ollama@0.1.7
|
||||
- @llamaindex/portkey-ai@0.0.49
|
||||
- @llamaindex/replicate@0.0.49
|
||||
- @llamaindex/astra@0.0.21
|
||||
- @llamaindex/chroma@0.0.21
|
||||
- @llamaindex/firestore@1.0.14
|
||||
- @llamaindex/mongodb@0.0.22
|
||||
- @llamaindex/pinecone@0.1.7
|
||||
- @llamaindex/postgres@0.0.50
|
||||
- @llamaindex/upstash@0.0.21
|
||||
- @llamaindex/weaviate@0.0.21
|
||||
- @llamaindex/vercel@0.1.7
|
||||
- @llamaindex/voyage-ai@1.0.13
|
||||
- @llamaindex/readers@3.1.5
|
||||
- @llamaindex/tools@0.0.12
|
||||
- @llamaindex/workflow@1.1.4
|
||||
|
||||
## 0.3.16
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [680b529]
|
||||
- Updated dependencies [b0cd530]
|
||||
- Updated dependencies [c73c659]
|
||||
- Updated dependencies [361a685]
|
||||
- Updated dependencies [3e66ddc]
|
||||
- @llamaindex/workflow@1.1.3
|
||||
- @llamaindex/core@0.6.6
|
||||
- llamaindex@0.11.0
|
||||
- @llamaindex/qdrant@0.1.15
|
||||
- @llamaindex/azure@0.1.16
|
||||
- @llamaindex/openai@0.4.0
|
||||
- @llamaindex/cloud@4.0.8
|
||||
- @llamaindex/node-parser@2.0.6
|
||||
- @llamaindex/anthropic@0.3.7
|
||||
- @llamaindex/assemblyai@0.1.5
|
||||
- @llamaindex/clip@0.0.56
|
||||
- @llamaindex/cohere@0.0.20
|
||||
- @llamaindex/deepinfra@0.0.56
|
||||
- @llamaindex/discord@0.1.5
|
||||
- @llamaindex/google@0.3.2
|
||||
- @llamaindex/huggingface@0.1.10
|
||||
- @llamaindex/jinaai@0.0.16
|
||||
- @llamaindex/mistral@0.1.6
|
||||
- @llamaindex/mixedbread@0.0.20
|
||||
- @llamaindex/notion@0.1.5
|
||||
- @llamaindex/ollama@0.1.6
|
||||
- @llamaindex/perplexity@0.0.13
|
||||
- @llamaindex/portkey-ai@0.0.48
|
||||
- @llamaindex/replicate@0.0.48
|
||||
- @llamaindex/astra@0.0.20
|
||||
- @llamaindex/chroma@0.0.20
|
||||
- @llamaindex/elastic-search@0.1.6
|
||||
- @llamaindex/firestore@1.0.13
|
||||
- @llamaindex/milvus@0.1.15
|
||||
- @llamaindex/mongodb@0.0.21
|
||||
- @llamaindex/pinecone@0.1.6
|
||||
- @llamaindex/postgres@0.0.49
|
||||
- @llamaindex/supabase@0.1.5
|
||||
- @llamaindex/upstash@0.0.20
|
||||
- @llamaindex/weaviate@0.0.20
|
||||
- @llamaindex/vercel@0.1.6
|
||||
- @llamaindex/voyage-ai@1.0.12
|
||||
- @llamaindex/readers@3.1.4
|
||||
- @llamaindex/tools@0.0.11
|
||||
- @llamaindex/deepseek@0.0.16
|
||||
- @llamaindex/fireworks@0.0.16
|
||||
- @llamaindex/groq@0.0.71
|
||||
- @llamaindex/together@0.0.16
|
||||
- @llamaindex/vllm@0.0.42
|
||||
- @llamaindex/xai@0.0.3
|
||||
|
||||
## 0.3.15
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- d671ed6: Add functionality for search params when querying Qdrant vector store.
|
||||
- Updated dependencies [7a7ca60]
|
||||
- Updated dependencies [7a7ca60]
|
||||
- Updated dependencies [76c9a80]
|
||||
- Updated dependencies [168d11f]
|
||||
- Updated dependencies [d671ed6]
|
||||
- Updated dependencies [40f5f41]
|
||||
- @llamaindex/xai@0.0.2
|
||||
- @llamaindex/fireworks@0.0.15
|
||||
- @llamaindex/elastic-search@0.1.5
|
||||
- @llamaindex/firestore@1.0.12
|
||||
- @llamaindex/pinecone@0.1.5
|
||||
- @llamaindex/postgres@0.0.48
|
||||
- @llamaindex/supabase@0.1.4
|
||||
- @llamaindex/weaviate@0.0.19
|
||||
- @llamaindex/mongodb@0.0.20
|
||||
- @llamaindex/upstash@0.0.19
|
||||
- @llamaindex/chroma@0.0.19
|
||||
- @llamaindex/milvus@0.1.14
|
||||
- @llamaindex/qdrant@0.1.14
|
||||
- @llamaindex/astra@0.0.19
|
||||
- @llamaindex/azure@0.1.15
|
||||
- @llamaindex/huggingface@0.1.9
|
||||
- @llamaindex/assemblyai@0.1.4
|
||||
- @llamaindex/mixedbread@0.0.19
|
||||
- @llamaindex/perplexity@0.0.12
|
||||
- @llamaindex/portkey-ai@0.0.47
|
||||
- @llamaindex/anthropic@0.3.6
|
||||
- @llamaindex/deepinfra@0.0.55
|
||||
- @llamaindex/replicate@0.0.47
|
||||
- @llamaindex/voyage-ai@1.0.11
|
||||
- @llamaindex/discord@0.1.4
|
||||
- @llamaindex/mistral@0.1.5
|
||||
- @llamaindex/cohere@0.0.19
|
||||
- @llamaindex/google@0.3.1
|
||||
- @llamaindex/jinaai@0.0.15
|
||||
- @llamaindex/notion@0.1.4
|
||||
- @llamaindex/ollama@0.1.5
|
||||
- @llamaindex/openai@0.3.7
|
||||
- @llamaindex/vercel@0.1.5
|
||||
- @llamaindex/clip@0.0.55
|
||||
- @llamaindex/tools@0.0.10
|
||||
- @llamaindex/workflow@1.1.2
|
||||
- @llamaindex/core@0.6.5
|
||||
- @llamaindex/cloud@4.0.7
|
||||
- llamaindex@0.10.6
|
||||
- @llamaindex/deepseek@0.0.15
|
||||
- @llamaindex/groq@0.0.70
|
||||
- @llamaindex/together@0.0.15
|
||||
- @llamaindex/vllm@0.0.41
|
||||
- @llamaindex/node-parser@2.0.5
|
||||
- @llamaindex/readers@3.1.3
|
||||
|
||||
## 0.3.14
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -0,0 +1,172 @@
|
||||
# CLAUDE.md - Examples Package
|
||||
|
||||
This directory contains comprehensive examples demonstrating LlamaIndex.TS functionality across different use cases and integrations.
|
||||
|
||||
## Running Examples
|
||||
|
||||
All examples are executable TypeScript files that can be run directly:
|
||||
|
||||
```bash
|
||||
# Run a specific example
|
||||
npx tsx ./rag/starter.ts
|
||||
npx tsx ./agents/agent/single-agent.ts
|
||||
npx tsx ./models/openai/openai.ts
|
||||
|
||||
# Or use the package script
|
||||
npm start # runs ./starter.ts (if it exists)
|
||||
```
|
||||
|
||||
## Environment Setup
|
||||
|
||||
Most examples require API keys. Set environment variables before running:
|
||||
|
||||
```bash
|
||||
export OPENAI_API_KEY="sk-..."
|
||||
export ANTHROPIC_API_KEY="sk-..."
|
||||
export PINECONE_API_KEY="..."
|
||||
# Add other provider keys as needed
|
||||
```
|
||||
|
||||
## Example Categories
|
||||
|
||||
### Agents (`agents/`)
|
||||
|
||||
Demonstrates agent functionality and workflows:
|
||||
|
||||
- **`agent/`** - Modern agent implementations using `@llamaindex/workflow`
|
||||
- `single-agent.ts` - Basic agent with tool usage
|
||||
- `multiple-agents.ts` - Multi-agent coordination
|
||||
- `blog-writer.ts` - Content generation agent
|
||||
- `with-anthropic.ts`, `with-ollama.ts` - Provider-specific agents
|
||||
- **`workflow/`** - Workflow orchestration examples
|
||||
- **`toolsStream.ts`** - Streaming tool interactions
|
||||
|
||||
### RAG (Retrieval-Augmented Generation) (`rag/`)
|
||||
|
||||
Core RAG functionality examples:
|
||||
|
||||
- `starter.ts` - Basic RAG setup with VectorStoreIndex
|
||||
- `chatEngine.ts` - Conversational RAG interface
|
||||
- `chat-engine/` - Different chat engine implementations
|
||||
- `extractors/` - Metadata extraction examples
|
||||
- `nodeParser/` - Custom text chunking strategies
|
||||
- `split.ts`, `sentenceWindow.ts` - Text processing techniques
|
||||
|
||||
### Models (`models/`)
|
||||
|
||||
Provider-specific LLM and embedding examples:
|
||||
|
||||
- **`openai/`** - OpenAI integration (chat, completions, embeddings, multimodal)
|
||||
- **`anthropic/`** - Claude models with streaming and caching
|
||||
- **`gemini/`** - Google Gemini including live API examples
|
||||
- **`ollama/`**, **`groq/`**, **`mistral/`** - Alternative LLM providers
|
||||
- **`rerankers/`** - Result reranking implementations
|
||||
|
||||
### Storage (`storage/`)
|
||||
|
||||
Vector store and database integrations:
|
||||
|
||||
- **`pinecone-vector-store/`** - Pinecone setup and querying
|
||||
- **`chromadb/`**, **`qdrantdb/`**, **`weaviate/`** - Alternative vector stores
|
||||
- **`mongodb/`**, **`pg/`**, **`firestore/`** - Database integrations
|
||||
- **`metadata-filter/`** - Filtering and search parameters
|
||||
|
||||
### Multimodal (`multimodal/`)
|
||||
|
||||
Vision and multimodal capabilities:
|
||||
|
||||
- `chat.ts` - Image analysis with chat
|
||||
- `load.ts`, `retrieve.ts` - Multimodal document processing
|
||||
- `clip.ts` - CLIP embeddings for images
|
||||
|
||||
### Readers (`readers/`)
|
||||
|
||||
Document ingestion from various sources:
|
||||
|
||||
- `src/` - File format readers (PDF, DOCX, CSV, JSON, HTML)
|
||||
- `llamaparse.ts` - LlamaParse document processing
|
||||
- `discord/`, `notion/`, `assemblyai/` - Platform-specific readers
|
||||
|
||||
### Cloud (`cloud/`)
|
||||
|
||||
LlamaCloud integration examples:
|
||||
|
||||
- `chat.ts`, `query.ts` - Cloud-based RAG
|
||||
- `from-documents.ts` - Document upload to cloud
|
||||
|
||||
### Deprecated (`deprecated/`)
|
||||
|
||||
Legacy agent implementations for reference (prefer `agents/agent/` for new code).
|
||||
|
||||
## Key Development Patterns
|
||||
|
||||
### Example Structure
|
||||
|
||||
Most examples follow this pattern:
|
||||
|
||||
```typescript
|
||||
import { ... } from "llamaindex";
|
||||
import { ... } from "@llamaindex/provider";
|
||||
|
||||
async function main() {
|
||||
// Setup (API keys, configuration)
|
||||
// Create components (LLM, embeddings, vector store)
|
||||
// Build index or engine
|
||||
// Execute query/chat
|
||||
// Output results
|
||||
}
|
||||
|
||||
main().catch(console.error);
|
||||
```
|
||||
|
||||
### Provider Imports
|
||||
|
||||
Examples use modular provider imports:
|
||||
|
||||
```typescript
|
||||
// Specific provider packages
|
||||
import { OpenAI } from "@llamaindex/openai";
|
||||
import { claude } from "@llamaindex/anthropic";
|
||||
|
||||
// Core functionality
|
||||
import { VectorStoreIndex, Document } from "llamaindex";
|
||||
```
|
||||
|
||||
### Error Handling
|
||||
|
||||
Include proper error handling and API key validation:
|
||||
|
||||
```typescript
|
||||
if (!process.env.OPENAI_API_KEY) {
|
||||
console.log("API key required");
|
||||
process.exit(1);
|
||||
}
|
||||
```
|
||||
|
||||
## Dependencies
|
||||
|
||||
The examples package includes all major LlamaIndex.TS providers and integrations. Key dependencies:
|
||||
|
||||
- **Core**: `llamaindex`, `@llamaindex/core`
|
||||
- **Providers**: All LLM, embedding, and vector store providers
|
||||
- **Tools**: `@llamaindex/workflow`, `@llamaindex/tools`
|
||||
- **Utilities**: `tsx` for TypeScript execution, `dotenv` for environment variables
|
||||
|
||||
## Usage Notes
|
||||
|
||||
1. **Build First**: Some examples may require building the packages first: `pnpm build`
|
||||
2. **Data Files**: Many examples reference files in `./data/` directory
|
||||
3. **API Costs**: Be aware that running examples will consume API credits
|
||||
4. **Environment**: Examples are designed to run in Node.js environment
|
||||
5. **Interactive Examples**: Some examples include readline interfaces for interactive testing
|
||||
|
||||
## Creating New Examples
|
||||
|
||||
When adding new examples:
|
||||
|
||||
1. Follow the established directory structure by category
|
||||
2. Use descriptive filenames that indicate functionality
|
||||
3. Include proper imports from modular packages
|
||||
4. Add error handling and environment validation
|
||||
5. Include comments explaining key concepts
|
||||
6. Test with minimal required dependencies
|
||||
+1
-1
@@ -9,7 +9,7 @@ make sure you have basic knowledge of the [LlamaIndexTS](https://ts.llamaindex.a
|
||||
# export your API key
|
||||
export OPENAI_API_KEY="sk-..."
|
||||
|
||||
npx tsx ./chatEngine.ts
|
||||
npx tsx ./rag/chatEngine.ts
|
||||
```
|
||||
|
||||
## Build your own RAG app
|
||||
|
||||
@@ -92,7 +92,7 @@ async function multiWeatherAgent() {
|
||||
agentInputEvent.include(event) ||
|
||||
stopAgentEvent.include(event)
|
||||
) {
|
||||
console.log(event);
|
||||
console.log(event.data);
|
||||
} else if (agentStreamEvent.include(event)) {
|
||||
for (const chunk of event.data.delta) {
|
||||
process.stdout.write(chunk);
|
||||
|
||||
@@ -1,9 +1,10 @@
|
||||
import { openai } from "@llamaindex/openai";
|
||||
import {
|
||||
agent,
|
||||
agentStreamEvent,
|
||||
agentToolCallResultEvent,
|
||||
} from "@llamaindex/workflow";
|
||||
import { Document, VectorStoreIndex, openai } from "llamaindex";
|
||||
import { Document, VectorStoreIndex } from "llamaindex";
|
||||
|
||||
async function main() {
|
||||
const index = await VectorStoreIndex.fromDocuments([
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
*/
|
||||
import { openai } from "@llamaindex/openai";
|
||||
import { agent } from "@llamaindex/workflow";
|
||||
import { getWeatherTool } from "../deprecated/utils/tools";
|
||||
import { getWeatherTool } from "../../deprecated/agents/utils/tools";
|
||||
|
||||
async function main() {
|
||||
const weatherAgent = agent({
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import { ollama } from "@llamaindex/ollama";
|
||||
import { agent } from "@llamaindex/workflow";
|
||||
import { getWeatherTool } from "../deprecated/utils/tools";
|
||||
import { getWeatherTool } from "../../deprecated/agents/utils/tools";
|
||||
|
||||
async function main() {
|
||||
const myAgent = agent({
|
||||
|
||||
@@ -1,12 +1,20 @@
|
||||
import fs from "node:fs/promises";
|
||||
|
||||
import { openai, OpenAIEmbedding } from "@llamaindex/openai";
|
||||
import {
|
||||
Document,
|
||||
MetadataMode,
|
||||
NodeWithScore,
|
||||
Settings,
|
||||
VectorStoreIndex,
|
||||
} from "llamaindex";
|
||||
|
||||
Settings.llm = openai({
|
||||
apiKey: process.env.OPENAI_API_KEY,
|
||||
model: "gpt-4o",
|
||||
});
|
||||
Settings.embedModel = new OpenAIEmbedding();
|
||||
|
||||
async function main() {
|
||||
// Load essay from abramov.txt in Node
|
||||
const path = "node_modules/llamaindex/examples/abramov.txt";
|
||||
@@ -7,7 +7,7 @@ import {
|
||||
VectorStoreIndex,
|
||||
} from "llamaindex";
|
||||
|
||||
import essay from "./essay";
|
||||
import essay from "../data/essay";
|
||||
|
||||
// Update llm to use OpenAI
|
||||
Settings.llm = new OpenAI({ model: "gpt-3.5-turbo", temperature: 0.1 });
|
||||
@@ -1,20 +0,0 @@
|
||||
import {
|
||||
Document,
|
||||
SentenceSplitter,
|
||||
Settings,
|
||||
VectorStoreIndex,
|
||||
} from "llamaindex";
|
||||
|
||||
export const STORAGE_DIR = "./data";
|
||||
|
||||
// Update node parser
|
||||
Settings.nodeParser = new SentenceSplitter({
|
||||
chunkSize: 512,
|
||||
chunkOverlap: 20,
|
||||
});
|
||||
(async () => {
|
||||
// generate a document with a very long sentence (9000 words long)
|
||||
const longSentence = "is ".repeat(9000) + ".";
|
||||
const document = new Document({ text: longSentence, id_: "1" });
|
||||
await VectorStoreIndex.fromDocuments([document]);
|
||||
})();
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user