Compare commits

..

21 Commits

Author SHA1 Message Date
github-actions[bot] ca75c81bc0 Release 0.7.9 (#1388)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: himself65 <himself65@users.noreply.github.com>
2024-10-24 12:32:24 -07:00
Alex Yang 691c5bcaf1 fix: export embeddings utils (#1387) 2024-10-24 12:23:57 -07:00
Alex Yang 9ab998c5d5 chore: add bug report template (#1385) 2024-10-24 11:37:04 -07:00
github-actions[bot] 938b417028 Release 0.7.8 (#1384)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: himself65 <himself65@users.noreply.github.com>
2024-10-24 10:17:01 -07:00
Alex Yang fa60fc66ae fix(env): no esm shim (#1383) 2024-10-24 10:08:49 -07:00
marcusschiesser 5607ed2fec chore: update lock file 2024-10-24 16:05:41 +07:00
github-actions[bot] f57ad6150e Release 0.7.7 2024-10-24 16:05:41 +07:00
Marcus Schiesser 2486bd8f41 feat: Add files_via_content example for LlamaCloud retrieval 2024-10-24 15:55:08 +07:00
Marcus Schiesser e2a0876ddd fix: Remove chunk size limit for prompt helper (use LLM default) 2024-10-24 15:55:08 +07:00
github-actions[bot] a75d899a57 Release 0.7.6 (#1373)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2024-10-24 00:03:09 -07:00
Alex Yang 809a6e7eea docs(next): generate llamacloud api (#1377) 2024-10-24 00:02:59 -07:00
Wassim Chegham da6eb6474b feat: add user-agent to Azure OpenAI LLM and Embedding (#1367) 2024-10-23 20:28:26 -07:00
Alex Yang cd83f8ee4f fix(next-doc): dark mode & create llama preview (#1376) 2024-10-23 19:23:44 -07:00
Thuc Pham 534d5505cb fix: replicate deps warning in nextjs (#1370) 2024-10-23 19:08:04 -07:00
Alex Yang eb87b96518 feat(next-doc): update create llama preview (#1375) 2024-10-23 19:05:21 -07:00
Alex Yang 9510d45046 chore: fix build command 2024-10-23 18:01:09 -07:00
Alex Yang 9b5b012fdf feat: new doc (#1374) 2024-10-23 17:56:59 -07:00
Parham Saidi a5a75f618d feat: added sonnet 3.5 v2 support via bedrock (#1371) 2024-10-23 10:22:06 -07:00
github-actions[bot] 051faddefd Release 0.7.5 (#1368)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2024-10-22 22:47:37 -07:00
Thuc Pham 9f22aae57c fix: unable to resolve unpdf in nextjs (#1369) 2024-10-23 11:48:22 +07:00
Marcus Schiesser e9a111d9d3 fix: VectorIndexRetrieverOptions typing (#1366)
Co-authored-by: Alex Yang <himself65@outlook.com>
2024-10-22 11:00:07 -07:00
133 changed files with 7095 additions and 1066 deletions
+46
View File
@@ -0,0 +1,46 @@
---
name: Bug report
about: Create a report to help us improve
title: ""
labels: bug
assignees: ""
---
**Describe the bug**
A clear and concise description of what the bug is.
**To Reproduce**
Code to reproduce the behavior:
```ts
// paste the code here
```
**Expected behavior**
A clear and concise description of what you expected to happen.
**Screenshots**
If applicable, add screenshots to help explain your problem.
**Desktop (please complete the following information):**
- OS: [e.g. macOS, Linux]
- JS Runtime / Framework / Bundler (select all applicable)
- [ ] Node.js
- [ ] Deno
- [ ] Bun
- [ ] Next.js
- [ ] ESBuild
- [ ] Rollup
- [ ] Webpack
- [ ] Turbopack
- [ ] Vite
- [ ] Waku
- [ ] Edge Runtime
- [ ] AWS Lambda
- [ ] Cloudflare Worker
- [ ] Others (please elaborate on this)
- Version [e.g. 22]
**Additional context**
Add any other context about the problem here.
+1
View File
@@ -4,3 +4,4 @@ pnpm-lock.yaml
lib/
dist/
.docusaurus/
.source/
+2 -1
View File
@@ -13,5 +13,6 @@
},
"[json]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
}
},
"prettier.prettierPath": "./node_modules/prettier"
}
+36
View File
@@ -1,5 +1,41 @@
# docs
## 0.0.101
### Patch Changes
- Updated dependencies [691c5bc]
- llamaindex@0.7.9
## 0.0.100
### Patch Changes
- llamaindex@0.7.8
## 0.0.99
### Patch Changes
- Updated dependencies [2486bd8]
- @llamaindex/examples@0.0.10
- llamaindex@0.7.7
## 0.0.98
### Patch Changes
- Updated dependencies [534d550]
- llamaindex@0.7.6
## 0.0.97
### Patch Changes
- Updated dependencies [e9a111d]
- Updated dependencies [9f22aae]
- llamaindex@0.7.5
## 0.0.96
### Patch Changes
@@ -31,7 +31,34 @@ META_LLAMA3_8B_INSTRUCT = "meta.llama3-8b-instruct-v1:0";
META_LLAMA3_70B_INSTRUCT = "meta.llama3-70b-instruct-v1:0";
META_LLAMA3_1_8B_INSTRUCT = "meta.llama3-1-8b-instruct-v1:0"; // available on us-west-2
META_LLAMA3_1_70B_INSTRUCT = "meta.llama3-1-70b-instruct-v1:0"; // available on us-west-2
META_LLAMA3_1_405B_INSTRUCT = "meta.llama3-1-405b-instruct-v1:0"; // preview only, available on us-west-2, tool calling supported
META_LLAMA3_1_405B_INSTRUCT = "meta.llama3-1-405b-instruct-v1:0"; // available on us-west-2, tool calling supported
META_LLAMA3_2_1B_INSTRUCT = "meta.llama3-2-1b-instruct-v1:0"; // only available via inference endpoints (see below)
META_LLAMA3_2_3B_INSTRUCT = "meta.llama3-2-3b-instruct-v1:0"; // only available via inference endpoints (see below)
META_LLAMA3_2_11B_INSTRUCT = "meta.llama3-2-11b-instruct-v1:0"; // only available via inference endpoints (see below), multimodal and function call supported
META_LLAMA3_2_90B_INSTRUCT = "meta.llama3-2-90b-instruct-v1:0"; // only available via inference endpoints (see below), multimodal and function call supported
```
You can also use Bedrock's Inference endpoints by using the model names:
```ts
// US
US_ANTHROPIC_CLAUDE_3_HAIKU = "us.anthropic.claude-3-haiku-20240307-v1:0";
US_ANTHROPIC_CLAUDE_3_OPUS = "us.anthropic.claude-3-opus-20240229-v1:0";
US_ANTHROPIC_CLAUDE_3_SONNET = "us.anthropic.claude-3-sonnet-20240229-v1:0";
US_ANTHROPIC_CLAUDE_3_5_SONNET = "us.anthropic.claude-3-5-sonnet-20240620-v1:0";
US_ANTHROPIC_CLAUDE_3_5_SONNET_V2 =
"us.anthropic.claude-3-5-sonnet-20241022-v2:0";
US_META_LLAMA_3_2_1B_INSTRUCT = "us.meta.llama3-2-1b-instruct-v1:0";
US_META_LLAMA_3_2_3B_INSTRUCT = "us.meta.llama3-2-3b-instruct-v1:0";
US_META_LLAMA_3_2_11B_INSTRUCT = "us.meta.llama3-2-11b-instruct-v1:0";
US_META_LLAMA_3_2_90B_INSTRUCT = "us.meta.llama3-2-90b-instruct-v1:0";
// EU
EU_ANTHROPIC_CLAUDE_3_HAIKU = "eu.anthropic.claude-3-haiku-20240307-v1:0";
EU_ANTHROPIC_CLAUDE_3_SONNET = "eu.anthropic.claude-3-sonnet-20240229-v1:0";
EU_ANTHROPIC_CLAUDE_3_5_SONNET = "eu.anthropic.claude-3-5-sonnet-20240620-v1:0";
EU_META_LLAMA_3_2_1B_INSTRUCT = "eu.meta.llama3-2-1b-instruct-v1:0";
EU_META_LLAMA_3_2_3B_INSTRUCT = "eu.meta.llama3-2-3b-instruct-v1:0";
```
Sonnet, Haiku and Opus are multimodal, image_url only supports base64 data url format, e.g. `data:image/jpeg;base64,SGVsbG8sIFdvcmxkIQ==`
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "docs",
"version": "0.0.96",
"version": "0.0.101",
"private": true,
"scripts": {
"docusaurus": "docusaurus",
+31
View File
@@ -0,0 +1,31 @@
# deps
/node_modules
# generated content
.contentlayer
.content-collections
.source
# test & build
/coverage
/.next/
/out/
/build
*.tsbuildinfo
# misc
.DS_Store
*.pem
/.pnp
.pnp.js
npm-debug.log*
yarn-debug.log*
yarn-error.log*
# others
.env*.local
.vercel
next-env.d.ts
# build
/src/content/docs/cloud/api
+26
View File
@@ -0,0 +1,26 @@
# next
This is a Next.js application generated with
[Create Fumadocs](https://github.com/fuma-nama/fumadocs).
Run development server:
```bash
npm run dev
# or
pnpm dev
# or
yarn dev
```
Open http://localhost:3000 with your browser to see the result.
## Learn More
To learn more about Next.js and Fumadocs, take a look at the following
resources:
- [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js
features and API.
- [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial.
- [Fumadocs](https://fumadocs.vercel.app) - learn about Fumadocs
+20
View File
@@ -0,0 +1,20 @@
{
"$schema": "https://ui.shadcn.com/schema.json",
"style": "new-york",
"rsc": true,
"tsx": true,
"tailwind": {
"config": "tailwind.config.js",
"css": "app/global.css",
"baseColor": "neutral",
"cssVariables": true,
"prefix": ""
},
"aliases": {
"components": "@/components",
"utils": "@/lib/utils",
"ui": "@/components/ui",
"lib": "@/lib",
"hooks": "@/hooks"
}
}
+10
View File
@@ -0,0 +1,10 @@
import { createMDX } from "fumadocs-mdx/next";
const withMDX = createMDX();
/** @type {import('next').NextConfig} */
const config = {
reactStrictMode: true,
};
export default withMDX(config);
+45
View File
@@ -0,0 +1,45 @@
{
"name": "@llamaindex/doc",
"version": "0.0.0",
"private": true,
"scripts": {
"build": "pnpm run build:docs && next build",
"dev": "next dev",
"start": "next start",
"postinstall": "fumadocs-mdx",
"build:docs": "node ./scripts/generate-docs.mjs"
},
"dependencies": {
"@icons-pack/react-simple-icons": "^10.1.0",
"@radix-ui/react-icons": "^1.3.0",
"@radix-ui/react-slot": "^1.1.0",
"class-variance-authority": "^0.7.0",
"clsx": "2.1.1",
"foxact": "^0.2.39",
"fumadocs-core": "14.0.2",
"fumadocs-mdx": "11.0.0",
"fumadocs-openapi": "^5.5.3",
"fumadocs-ui": "14.0.2",
"hast-util-to-jsx-runtime": "^2.3.2",
"lucide-react": "^0.436.0",
"next": "15.0.0",
"react": "^18.3.1",
"react-dom": "^18.3.1",
"react-icons": "^5.3.0",
"react-text-transition": "^3.1.0",
"rimraf": "^6.0.1",
"shiki": "^1.22.0",
"tailwind-merge": "^2.5.2",
"tailwindcss-animate": "^1.0.7"
},
"devDependencies": {
"@types/mdx": "^2.0.13",
"@types/node": "22.7.8",
"@types/react": "^18.3.12",
"@types/react-dom": "^18.3.1",
"autoprefixer": "^10.4.20",
"postcss": "^8.4.47",
"tailwindcss": "^3.4.14",
"typescript": "^5.6.3"
}
}
+6
View File
@@ -0,0 +1,6 @@
module.exports = {
plugins: {
tailwindcss: {},
autoprefixer: {},
},
};
Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 867 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 73 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

+22
View File
@@ -0,0 +1,22 @@
import * as OpenAPI from "fumadocs-openapi";
import { fileURLToPath } from "node:url";
import { rimrafSync } from "rimraf";
const out = "./src/content/docs/cloud/api";
// clean generated files
rimrafSync(out, {
filter(v) {
return !v.endsWith("index.mdx") && !v.endsWith("meta.json");
},
});
void OpenAPI.generateFiles({
input: [
fileURLToPath(
new URL("../../../packages/cloud/openapi.json", import.meta.url),
),
],
output: out,
groupBy: "tag",
});
+7
View File
@@ -0,0 +1,7 @@
import { defineConfig, defineDocs } from "fumadocs-mdx/config";
export const { docs, meta } = defineDocs({
dir: "./src/content/docs",
});
export default defineConfig();
+19
View File
@@ -0,0 +1,19 @@
import { baseOptions } from "@/app/layout.config";
import { Footer } from "@/components/website/Footer";
import { HomeLayout } from "fumadocs-ui/layouts/home";
import type { ReactNode } from "react";
export default function Layout({
children,
}: {
children: ReactNode;
}): React.ReactElement {
return (
<HomeLayout {...baseOptions}>
{children}
<div className="container">
<Footer />
</div>
</HomeLayout>
);
}
+85
View File
@@ -0,0 +1,85 @@
import { CodeBlock } from "@/components/code-block";
import { Contributing } from "@/components/contribution";
import { CreateAppAnimation } from "@/components/create-app-animation";
import { Feature } from "@/components/feature";
import { NpmInstall } from "@/components/npm-install";
import { TextEffect } from "@/components/text-effect";
import { Button } from "@/components/ui/button";
import { SiStackblitz } from "@icons-pack/react-simple-icons";
import { Bot, Terminal } from "lucide-react";
import Link from "next/link";
export default function HomePage() {
return (
<main className="container mx-auto px-4 py-12">
<h1 className="text-4xl md:text-6xl font-bold text-center mb-4">
Build RAG Web App using
<br /> <span className="text-blue-500">LlamaIndex.TS</span>
</h1>
<p className="text-xl text-center text-fd-muted-foreground mb-12 ">
LlamaIndex.TS is the JS/TS library from our popular Python library
llama-index for building LLM applications
</p>
<div className="text-center text-lg text-fd-muted-foreground mb-12">
<span>Designed for building web applications under </span>
<TextEffect />
</div>
<div className="flex flex-wrap justify-center gap-4">
<Link href="/docs/llamaindex">
<Button variant="outline">Get Started</Button>
</Link>
<NpmInstall />
<Link
href="https://stackblitz.com/github/run-llama/LlamaIndexTS/tree/main/examples"
target="_blank"
rel="noreferrer noopener"
>
<Button className="bg-blue-500 text-white hover:bg-blue-600">
<SiStackblitz />
Playground
</Button>
</Link>
</div>
<div className="mt-4" />
<div className="grid grid-cols-1 border-r md:grid-cols-2">
<Feature
icon={Bot}
subheading="Agent"
heading="Build agent for RAG"
description="Build agents for RAG using LlamaIndex.TS. Agents are the core building blocks of RAG applications."
>
<CodeBlock
code={`
import { FunctionTool } from "llamaindex";
import { OpenAIAgent } from "@llamaindex/openai";
const interpreterTool = FunctionTool.from(...);
const systemPrompt = \`...\`;
const agent = new OpenAIAgent({
llm,
tools: [interpreterTool],
systemPrompt,
});
await agent.chat('...');`}
lang="ts"
/>
</Feature>
<Feature
icon={Terminal}
subheading="Create Llama CLI"
heading="CLI for starting RAG app with one line"
description="A command line tool to generate LlamaIndex apps, the easiest way to get started with LlamaIndex."
>
<div className="my-6">
<CreateAppAnimation />
</div>
</Feature>
</div>
<Contributing />
<div className="border-b" />
</main>
);
}
+4
View File
@@ -0,0 +1,4 @@
import { source } from "@/lib/source";
import { createFromSource } from "fumadocs-core/search/server";
export const { GET } = createFromSource(source);
@@ -0,0 +1,51 @@
import { openapi, source } from "@/lib/source";
import defaultMdxComponents from "fumadocs-ui/mdx";
import {
DocsBody,
DocsDescription,
DocsPage,
DocsTitle,
} from "fumadocs-ui/page";
import { notFound } from "next/navigation";
export default async function Page(props: {
params: Promise<{ slug?: string[] }>;
}) {
const params = await props.params;
const page = source.getPage(params.slug);
if (!page) notFound();
const MDX = page.data.body;
return (
<DocsPage toc={page.data.toc} full={page.data.full}>
<DocsTitle>{page.data.title}</DocsTitle>
<DocsDescription>{page.data.description}</DocsDescription>
<DocsBody>
<MDX
components={{
...defaultMdxComponents,
APIPage: openapi.APIPage,
}}
/>
</DocsBody>
</DocsPage>
);
}
export async function generateStaticParams() {
return source.generateParams();
}
export async function generateMetadata(props: {
params: Promise<{ slug?: string[] }>;
}) {
const params = await props.params;
const page = source.getPage(params.slug);
if (!page) notFound();
return {
title: page.data.title,
description: page.data.description,
};
}
+12
View File
@@ -0,0 +1,12 @@
import { baseOptions } from "@/app/layout.config";
import { source } from "@/lib/source";
import { DocsLayout } from "fumadocs-ui/layouts/docs";
import type { ReactNode } from "react";
export default function Layout({ children }: { children: ReactNode }) {
return (
<DocsLayout tree={source.pageTree} {...baseOptions}>
{children}
</DocsLayout>
);
}
+97
View File
@@ -0,0 +1,97 @@
@tailwind base;
@tailwind components;
@tailwind utilities;
@layer base {
:root {
--page-max-width: 1840px;
--plus-icon: url("data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTEiIGhlaWdodD0iMTEiIHZpZXdCb3g9IjAgMCAxMSAxMSIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik03IDFDNyAwLjQ0NzcxNSA2LjU1MjI4IDAgNiAwSDVDNC40NDc3MiAwIDQgMC40NDc3MTUgNCAxVjNDNCAzLjU1MjI5IDMuNTUyMjggNCAzIDRIMUMwLjQ0NzcxNSA0IDAgNC40NDc3MiAwIDVWNkMwIDYuNTUyMjggMC40NDc3MTUgNyAxIDdIM0MzLjU1MjI4IDcgNCA3LjQ0NzcyIDQgOFYxMEM0IDEwLjU1MjMgNC40NDc3MiAxMSA1IDExSDZDNi41NTIyOCAxMSA3IDEwLjU1MjMgNyAxMFY4QzcgNy40NDc3MSA3LjQ0NzcyIDcgOCA3SDEwQzEwLjU1MjMgNyAxMSA2LjU1MjI4IDExIDZWNUMxMSA0LjQ0NzcyIDEwLjU1MjMgNCAxMCA0SDhDNy40NDc3MiA0IDcgMy41NTIyOCA3IDNWMVoiIGZpbGw9IiNBREE4QzQiLz4KPC9zdmc+Cg==");
--color-neutral-000: #ffffff;
--color-neutral-100: #f7f6fc;
--color-neutral-200: #cac6dd;
--color-neutral-400: #757185;
--color-neutral-800: #252134;
--color-neutral-900: #0e0c15;
--color-purple-400: #858dff;
--color-red-400: #ff776f;
--color-green-400: #7adb78;
--color-yellow-400: #ffc876;
--color-violet-400: #ac6aff;
--color-pink-400: #ff98e2;
--background: 0 0% 100%;
--foreground: 0 0% 3.9%;
--card: 0 0% 100%;
--card-foreground: 0 0% 3.9%;
--popover: 0 0% 100%;
--popover-foreground: 0 0% 3.9%;
--primary: 0 0% 9%;
--primary-foreground: 0 0% 98%;
--secondary: 0 0% 96.1%;
--secondary-foreground: 0 0% 9%;
--muted: 0 0% 96.1%;
--muted-foreground: 0 0% 45.1%;
--accent: 0 0% 96.1%;
--accent-foreground: 0 0% 9%;
--destructive: 0 84.2% 60.2%;
--destructive-foreground: 0 0% 98%;
--border: 0 0% 89.8%;
--input: 0 0% 89.8%;
--ring: 0 0% 3.9%;
--chart-1: 12 76% 61%;
--chart-2: 173 58% 39%;
--chart-3: 197 37% 24%;
--chart-4: 43 74% 66%;
--chart-5: 27 87% 67%;
--radius: 0.5rem;
}
.dark {
--color-neutral-000: #0e0c15;
--color-neutral-100: #252134;
--color-neutral-200: #757185;
--color-neutral-400: #cac6dd;
--color-neutral-800: #f7f6fc;
--color-neutral-900: #ffffff;
--color-purple-400: #858dff;
--color-red-400: #ff776f;
--color-green-400: #7adb78;
--color-yellow-400: #ffc876;
--color-violet-400: #ac6aff;
--color-pink-400: #ff98e2;
--background: 0 0% 3.9%;
--foreground: 0 0% 98%;
--card: 0 0% 3.9%;
--card-foreground: 0 0% 98%;
--popover: 0 0% 3.9%;
--popover-foreground: 0 0% 98%;
--primary: 0 0% 98%;
--primary-foreground: 0 0% 9%;
--secondary: 0 0% 14.9%;
--secondary-foreground: 0 0% 98%;
--muted: 0 0% 14.9%;
--muted-foreground: 0 0% 63.9%;
--accent: 0 0% 14.9%;
--accent-foreground: 0 0% 98%;
--destructive: 0 62.8% 30.6%;
--destructive-foreground: 0 0% 98%;
--border: 0 0% 14.9%;
--input: 0 0% 14.9%;
--ring: 0 0% 83.1%;
--chart-1: 220 70% 50%;
--chart-2: 160 60% 45%;
--chart-3: 30 80% 55%;
--chart-4: 280 65% 60%;
--chart-5: 340 75% 55%;
}
}
@layer base {
* {
@apply border-border;
}
body {
@apply bg-background text-foreground;
}
}
+21
View File
@@ -0,0 +1,21 @@
import type { BaseLayoutProps } from "fumadocs-ui/layouts/shared";
/**
* Shared layout configurations
*
* you can configure layouts individually from:
* Home Layout: app/(home)/layout.tsx
* Docs Layout: app/docs/layout.tsx
*/
export const baseOptions: BaseLayoutProps = {
nav: {
title: "LlamaIndex.TS",
},
links: [
{
text: "Documentation",
url: "/docs/llamaindex",
active: "nested-url",
},
],
};
+37
View File
@@ -0,0 +1,37 @@
import { RootProvider } from "fumadocs-ui/provider";
import { Inter } from "next/font/google";
import type { ReactNode } from "react";
import "./global.css";
const inter = Inter({
subsets: ["latin"],
});
export default function Layout({ children }: { children: ReactNode }) {
return (
<html lang="en" className={inter.className} suppressHydrationWarning>
<head>
<link
rel="apple-touch-icon"
sizes="180x180"
href="/apple-touch-icon.png"
/>
<link
rel="icon"
type="image/png"
sizes="32x32"
href="/favicon-32x32.png"
/>
<link
rel="icon"
type="image/png"
sizes="16x16"
href="/favicon-16x16.png"
/>
</head>
<body className="flex flex-col min-h-screen">
<RootProvider>{children}</RootProvider>
</body>
</html>
);
}
+53
View File
@@ -0,0 +1,53 @@
import * as Base from "fumadocs-ui/components/codeblock";
import { toJsxRuntime, type Jsx } from "hast-util-to-jsx-runtime";
import { Fragment } from "react";
import { jsx, jsxs } from "react/jsx-runtime";
import { codeToHast } from "shiki";
export interface CodeBlockProps {
code: string;
wrapper?: Base.CodeBlockProps;
lang: "bash" | "ts" | "tsx";
}
export async function CodeBlock({
code,
lang,
wrapper,
}: CodeBlockProps): Promise<React.ReactElement> {
const hast = await codeToHast(code, {
lang,
defaultColor: false,
themes: {
light: "github-light",
dark: "vesper",
},
transformers: [
{
name: "rehype-code:pre-process",
line(node) {
if (node.children.length === 0) {
// Keep the empty lines when using grid layout
node.children.push({
type: "text",
value: " ",
});
}
},
},
],
});
const rendered = toJsxRuntime(hast, {
jsx: jsx as Jsx,
jsxs: jsxs as Jsx,
Fragment,
development: false,
components: {
// @ts-expect-error -- JSX component
pre: Base.Pre,
},
});
return <Base.CodeBlock {...wrapper}>{rendered}</Base.CodeBlock>;
}
+29
View File
@@ -0,0 +1,29 @@
import ContributorCounter from "@/components/contributor-count";
import { buttonVariants } from "@/components/ui/button";
import { cn } from "@/lib/utils";
import { Heart } from "lucide-react";
import { ReactElement } from "react";
export function Contributing(): ReactElement {
return (
<div className="flex flex-col items-center border-x border-t px-4 py-16 text-center">
<Heart className="mb-4" />
<h2 className="mb-4 text-xl font-semibold sm:text-2xl">
Made Possible by You.
</h2>
<p className="mb-4 text-fd-muted-foreground">
LlamaIndex.TS is powered by the open source community.
</p>
<div className="mb-8 flex flex-row items-center gap-2">
<a
href="https://github.com/run-llama/LlamaIndexTS/graphs/contributors"
rel="noreferrer noopener"
className={cn(buttonVariants({ variant: "ghost" }))}
>
See Contributors
</a>
</div>
<ContributorCounter repoOwner="run-llama" repoName="LlamaIndexTS" />
</div>
);
}
@@ -0,0 +1,61 @@
import { fetchContributors } from "@/lib/get-contributors";
import { cn } from "@/lib/utils";
import Image from "next/image";
import type { HTMLAttributes, ReactElement } from "react";
export interface ContributorCounterProps
extends HTMLAttributes<HTMLDivElement> {
repoOwner: string;
repoName: string;
displayCount?: number;
}
export default async function ContributorCounter({
repoOwner,
repoName,
displayCount = 20,
...props
}: ContributorCounterProps): Promise<ReactElement> {
const contributors = await fetchContributors(repoOwner, repoName);
const topContributors = contributors
.filter((contributor) => contributor.login !== repoOwner)
.slice(0, displayCount);
return (
<div
{...props}
className={cn("flex flex-col items-center gap-4", props.className)}
>
<div className="flex flex-row flex-wrap items-center justify-center md:pe-4">
{topContributors.map((contributor, i) => (
<a
key={contributor.login}
href={`https://github.com/${contributor.login}`}
rel="noreferrer noopener"
target="_blank"
className="size-10 overflow-hidden rounded-full border-4 border-fd-background bg-fd-background md:-mr-4 md:size-12"
style={{
zIndex: topContributors.length - i,
}}
>
<Image
src={contributor.avatar_url}
alt={`${contributor.login}'s avatar`}
unoptimized
width={48}
height={48}
/>
</a>
))}
{displayCount < contributors.length ? (
<div className="size-12 content-center rounded-full bg-fd-secondary text-center">
+{contributors.length - displayCount}
</div>
) : null}
</div>
<div className="text-center text-sm text-fd-muted-foreground">
Some of our best contributors.
</div>
</div>
);
}
@@ -0,0 +1,248 @@
"use client";
import { cn } from "@/lib/utils";
import { TerminalIcon } from "lucide-react";
import {
Fragment,
HTMLAttributes,
ReactElement,
ReactNode,
useEffect,
useState,
} from "react";
import { Input } from "./ui/input";
export function CreateAppAnimation(): React.ReactElement {
const installCmd = "npx create-llama@latest";
const tickTime = 100;
const timeCommandEnter = installCmd.length;
const timeCommandRun = timeCommandEnter + 3;
const timeCommandEnd = timeCommandRun + 3;
const timeWindowOpen = timeCommandEnd + 1;
const timeEnd = timeWindowOpen + 1;
const [tick, setTick] = useState(timeEnd);
useEffect(() => {
const timer = setInterval(() => {
setTick((prev) => (prev >= timeEnd ? prev : prev + 1));
}, tickTime);
return () => {
clearInterval(timer);
};
}, [timeEnd]);
const lines: ReactElement[] = [];
lines.push(
<span key="command_type">
{installCmd.substring(0, tick)}
{tick < timeCommandEnter && (
<div className="inline-block h-3 w-1 animate-pulse bg-white" />
)}
</span>,
);
if (tick >= timeCommandEnter) {
lines.push(<span key="space"> </span>);
}
if (tick > timeCommandRun)
lines.push(
<Fragment key="command_response">
<span className="font-bold"> Create Llama</span>
<span></span>
{tick > timeCommandRun + 1 && (
<>
<span className="font-bold"> What is your project named?</span>
<span> my-app</span>
</>
)}
{tick > timeCommandRun + 2 && (
<>
<span></span>
<span className="font-bold"> What app do you want to build?</span>
</>
)}
{tick > timeCommandRun + 3 && (
<>
<span> Agentic RAG</span>
<span> Data Scientist</span>
</>
)}
</Fragment>,
);
return (
<div
className="relative"
onMouseEnter={() => {
if (tick >= timeEnd) {
setTick(0);
}
}}
>
{tick > timeWindowOpen && (
<LaunchAppWindow className="absolute bottom-5 right-4 z-10 animate-in fade-in slide-in-from-top-10" />
)}
<pre className="overflow-hidden rounded-xl border text-xs">
<div className="flex flex-row items-center gap-2 border-b px-4 py-2">
<TerminalIcon className="size-4" />{" "}
<span className="font-bold">Terminal</span>
<div className="grow" />
<div className="size-2 rounded-full bg-red-400" />
</div>
<div className="min-h-[200px] bg-gradient-to-b from-fd-secondary [mask-image:linear-gradient(to_bottom,white,transparent)]">
<code className="grid p-4">{lines}</code>
</div>
</pre>
</div>
);
}
function UserMessage({ children }: { children: ReactNode }) {
return (
<div className="group relative flex items-start">
<div className="flex h-8 w-8 shrink-0 select-none items-center justify-center rounded-md border shadow-sm bg-background">
<IconUser />
</div>
<div className="ml-4 flex-1 space-y-2 overflow-hidden px-1">
{children}
</div>
</div>
);
}
function BotMessage({
children,
className,
}: {
children: ReactNode;
className?: string;
}) {
return (
<div className={cn("group relative flex items-start", className)}>
<div className="flex h-8 w-8 shrink-0 select-none items-center justify-center rounded-md border shadow-sm bg-primary text-primary-foreground">
<IconAI />
</div>
<div className="ml-4 flex-1 space-y-2 overflow-hidden px-1">
{children}
</div>
</div>
);
}
export function ChatExample() {
const userMessageFull =
"Hello, please summarize the article on the file I uploaded.";
const botMessageFull = "Processing...";
const tickTime = 100;
const userMessageDuration = userMessageFull.length;
const botMessageDelay = userMessageDuration + 10;
const botMessageDuration = botMessageDelay + botMessageFull.length;
const totalDuration = botMessageDuration + 10;
const [tick, setTick] = useState(0);
useEffect(() => {
// Increment tick every tickTime milliseconds
const timer = setInterval(() => {
setTick((prev) => (prev >= totalDuration ? prev : prev + 1));
}, tickTime);
return () => {
clearInterval(timer);
};
}, [totalDuration]);
const userMessageLength = Math.min(tick, userMessageFull.length);
const botMessageLength = Math.max(
0,
Math.min(tick - botMessageDelay, botMessageFull.length),
);
return (
<div className="max-w-64">
<div className="flex flex-col px-4 gap-2">
{userMessageLength === userMessageFull.length && (
<UserMessage>
<span>{userMessageFull}</span>
</UserMessage>
)}
{tick > botMessageDelay && (
<BotMessage>
<div>
<p>
{botMessageFull.substring(0, botMessageLength)}
{tick - botMessageDelay < botMessageFull.length && (
<span className="inline-block h-3 w-1 animate-pulse bg-white" />
)}
</p>
</div>
</BotMessage>
)}
</div>
<Input
className="mt-4"
value={
userMessageFull.substring(0, userMessageLength) === userMessageFull
? ""
: userMessageFull.substring(0, userMessageLength)
}
readOnly
placeholder="Input message..."
/>
</div>
);
}
function LaunchAppWindow(
props: HTMLAttributes<HTMLDivElement>,
): React.ReactElement {
return (
<div
{...props}
className={cn(
"overflow-hidden rounded-md border bg-fd-background shadow-xl",
props.className,
)}
>
<div className="relative flex h-6 flex-row items-center border-b bg-fd-muted px-4 text-xs text-fd-muted-foreground">
<p className="absolute inset-x-0 text-center">localhost:8080</p>
</div>
<div className="p-4 text-sm">
<ChatExample />
</div>
</div>
);
}
function IconUser({ className, ...props }: React.ComponentProps<"svg">) {
return (
<svg
xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 256 256"
fill="currentColor"
className={cn("h-4 w-4", className)}
{...props}
>
<path d="M230.92 212c-15.23-26.33-38.7-45.21-66.09-54.16a72 72 0 1 0-73.66 0c-27.39 8.94-50.86 27.82-66.09 54.16a8 8 0 1 0 13.85 8c18.84-32.56 52.14-52 89.07-52s70.23 19.44 89.07 52a8 8 0 1 0 13.85-8ZM72 96a56 56 0 1 1 56 56 56.06 56.06 0 0 1-56-56Z" />
</svg>
);
}
function IconAI({ className, ...props }: React.ComponentProps<"svg">) {
return (
<svg
fill="currentColor"
viewBox="0 0 256 256"
role="img"
xmlns="http://www.w3.org/2000/svg"
className={cn("h-4 w-4", className)}
{...props}
>
<path d="M197.58,129.06l-51.61-19-19-51.65a15.92,15.92,0,0,0-29.88,0L78.07,110l-51.65,19a15.92,15.92,0,0,0,0,29.88L78,178l19,51.62a15.92,15.92,0,0,0,29.88,0l19-51.61,51.65-19a15.92,15.92,0,0,0,0-29.88ZM140.39,163a15.87,15.87,0,0,0-9.43,9.43l-19,51.46L93,172.39A15.87,15.87,0,0,0,83.61,163h0L32.15,144l51.46-19A15.87,15.87,0,0,0,93,115.61l19-51.46,19,51.46a15.87,15.87,0,0,0,9.43,9.43l51.46,19ZM144,40a8,8,0,0,1,8-8h16V16a8,8,0,0,1,16,0V32h16a8,8,0,0,1,0,16H184V64a8,8,0,0,1-16,0V48H152A8,8,0,0,1,144,40ZM248,88a8,8,0,0,1-8,8h-8v8a8,8,0,0,1-16,0V96h-8a8,8,0,0,1,0-16h8V72a8,8,0,0,1,16,0v8h8A8,8,0,0,1,248,88Z"></path>
</svg>
);
}
+33
View File
@@ -0,0 +1,33 @@
import { cn } from "@/lib/utils";
import { LucideIcon } from "lucide-react";
import { HTMLAttributes, ReactElement, ReactNode } from "react";
export function Feature({
className,
icon: Icon,
heading,
subheading,
description,
...props
}: HTMLAttributes<HTMLDivElement> & {
icon: LucideIcon;
subheading: ReactNode;
heading: ReactNode;
description: ReactNode;
}): ReactElement {
return (
<div
className={cn("border-l border-t px-6 py-12 md:py-16", className)}
{...props}
>
<div className="mb-4 inline-flex items-center gap-2 text-sm font-medium text-fd-muted-foreground">
<Icon className="size-4" />
<p>{subheading}</p>
</div>
<h2 className="mb-2 text-lg font-semibold">{heading}</h2>
<p className="text-fd-muted-foreground">{description}</p>
{props.children}
</div>
);
}
+46
View File
@@ -0,0 +1,46 @@
"use client";
import { Button } from "@/components/ui/button";
import { useClipboard } from "foxact/use-clipboard";
import { Check, Copy } from "lucide-react";
import { useCallback, useState } from "react";
export const NpmInstall = () => {
const { copy } = useClipboard();
const [hasCheckIcon, setHasCheckIcon] = useState(false);
return (
<Button
onClick={useCallback(() => {
copy("npm i llamaindex")
.then(() => {
setHasCheckIcon(true);
setTimeout(() => {
setHasCheckIcon(false);
}, 1000);
})
.catch(console.error);
}, [copy])}
variant="outline"
className="flex flex-row items-center justify-center"
>
<code className="mr-2">$ npm i llamaindex</code>
<div className="relative cursor-pointer bg-transparent w-4 h-4">
<div
className={`absolute inset-0 transform transition-all duration-300 ${
hasCheckIcon ? "scale-0 opacity-0" : "scale-100 opacity-100"
}`}
>
<Copy className="h-4 w-4 text-zinc-800 dark:text-zinc-200" />
</div>
<div
className={`absolute inset-0 transform transition-all duration-300 ${
hasCheckIcon ? "scale-100 opacity-100" : "scale-0 opacity-0"
}`}
>
<Check className="h-4 w-4 text-zinc-800 dark:text-zinc-200" />
</div>
</div>
</Button>
);
};
+28
View File
@@ -0,0 +1,28 @@
"use client";
import { useEffect, useState } from "react";
import ReactTextTransition from "react-text-transition";
const supports = [
"Next.js",
"Node.js",
"Hono",
"Express.js",
"Deno",
"Nest.js",
"Waku",
];
export const TextEffect = () => {
const [counter, setCounter] = useState(0);
useEffect(() => {
const id = setInterval(() => {
setCounter(
(Math.floor(Math.random() * supports.length) + 1) % supports.length,
);
}, 4000);
return () => {
clearInterval(id);
};
}, []);
return <ReactTextTransition inline>{supports[counter]}</ReactTextTransition>;
};
+57
View File
@@ -0,0 +1,57 @@
import { Slot } from "@radix-ui/react-slot";
import { cva, type VariantProps } from "class-variance-authority";
import * as React from "react";
import { cn } from "@/lib/utils";
const buttonVariants = cva(
"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0",
{
variants: {
variant: {
default:
"bg-primary text-primary-foreground shadow hover:bg-primary/90",
destructive:
"bg-destructive text-destructive-foreground shadow-sm hover:bg-destructive/90",
outline:
"border border-input bg-background shadow-sm hover:bg-accent hover:text-accent-foreground",
secondary:
"bg-secondary text-secondary-foreground shadow-sm hover:bg-secondary/80",
ghost: "hover:bg-accent hover:text-accent-foreground",
link: "text-primary underline-offset-4 hover:underline",
},
size: {
default: "h-9 px-4 py-2",
sm: "h-8 rounded-md px-3 text-xs",
lg: "h-10 rounded-md px-8",
icon: "h-9 w-9",
},
},
defaultVariants: {
variant: "default",
size: "default",
},
},
);
export interface ButtonProps
extends React.ButtonHTMLAttributes<HTMLButtonElement>,
VariantProps<typeof buttonVariants> {
asChild?: boolean;
}
const Button = React.forwardRef<HTMLButtonElement, ButtonProps>(
({ className, variant, size, asChild = false, ...props }, ref) => {
const Comp = asChild ? Slot : "button";
return (
<Comp
className={cn(buttonVariants({ variant, size, className }))}
ref={ref}
{...props}
/>
);
},
);
Button.displayName = "Button";
export { Button, buttonVariants };
+25
View File
@@ -0,0 +1,25 @@
import * as React from "react";
import { cn } from "@/lib/utils";
export interface InputProps
extends React.InputHTMLAttributes<HTMLInputElement> {}
const Input = React.forwardRef<HTMLInputElement, InputProps>(
({ className, type, ...props }, ref) => {
return (
<input
type={type}
className={cn(
"flex h-9 w-full rounded-md border border-input bg-transparent px-3 py-1 text-sm shadow-sm transition-colors file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50",
className,
)}
ref={ref}
{...props}
/>
);
},
);
Input.displayName = "Input";
export { Input };
@@ -0,0 +1,151 @@
.footer {
width: 100%;
max-width: var(--page-max-width);
margin-inline: auto;
margin-top: 6em;
position: relative;
}
.navContainer {
display: flex;
justify-content: space-between;
align-items: center;
flex-direction: column;
row-gap: 3em;
border-bottom: 1px var(--color-neutral-200) solid;
margin-bottom: 2em;
padding-bottom: 2em;
}
.logoContainer {
display: flex;
align-items: center;
flex-direction: column;
}
.nav {
display: flex;
gap: 5em;
margin-bottom: 2em;
flex-wrap: wrap;
gap: 3em;
row-gap: 2em;
text-align: center;
flex-direction: column;
}
.nav ul {
display: flex;
flex-direction: column;
gap: 0.5em;
list-style: none;
}
.nav ul a {
color: var(--color-neutral-400);
text-decoration: none;
}
.nav ul a:hover {
color: var(--color-neutral-900);
}
.nav ul a:hover span {
color: var(--color-neutral-900);
}
.nav ul a span {
transition: color 300ms cubic-bezier(0.72, 0, 0.12, 1);
}
.navHeader,
.navHeader a {
color: var(--color-neutral-900);
text-decoration: none;
letter-spacing: -0.03em;
}
.navHeader a {
transition: color 300ms cubic-bezier(0.72, 0, 0.12, 1);
}
.navHeader a:hover {
color: var(--color-neutral-800);
}
.navHeader {
margin-bottom: 0.5em;
}
.socialContainer {
display: flex;
flex-direction: column;
margin-top: 2em;
}
.copyright {
text-align: center;
color: var(--color-neutral-400);
letter-spacing: -0.01em;
}
.copyright a {
color: currentColor;
text-decoration: none;
transition: color 300ms cubic-bezier(0.72, 0, 0.12, 1);
}
.copyright a:hover {
color: var(--color-neutral-800);
}
.copyrightContainer {
display: flex;
justify-content: space-between;
column-gap: 2em;
row-gap: 1em;
flex-wrap: wrap;
margin-bottom: 3em;
}
.legalNav {
display: flex;
flex-wrap: wrap;
gap: 1em;
}
@media (max-width: 600px) {
.footer {
padding: 0 2em;
}
.footer::before,
.footer::after {
display: none;
}
}
@media (min-width: 450px) {
.navContainer {
align-items: flex-start;
}
.nav {
text-align: left;
flex-direction: row;
}
.logoContainer {
align-items: flex-start;
}
.copyright {
text-align: left;
}
}
@media (min-width: 1300px) {
.navContainer {
flex-direction: row;
}
}
+214
View File
@@ -0,0 +1,214 @@
import Image from "next/image";
import { Text } from "@/components/website/Text";
import { Socials } from "@/components/website/Socials";
import styles from "./Footer.module.css";
const Footer = () => {
return (
<footer className={styles.footer}>
<div className={styles.navContainer}>
<div className={styles.logoContainer}>
<Image
src="/llamaindex.svg"
alt="LlamaIndex"
width={213}
height={42}
/>
<div className={styles.socialContainer}>
<Socials />
</div>
</div>
<div className={styles.nav}>
<div>
<Text size={20} weight={600} as="h3" className={styles.navHeader}>
<a href="https://llamaindex.ai">LlamaIndex</a>
</Text>
<ul>
<li>
<a href="https://llamaindex.ai/blog">
<Text as="span">Blog</Text>
</a>
</li>
<li>
<a href="https://llamaindex.ai/partners">
<Text as="span">Partners</Text>
</a>
</li>
<li>
<a href="https://llamaindex.ai/careers">
<Text as="span">Careers</Text>
</a>
</li>
<li>
<a href="https://llamaindex.ai/contact">
<Text as="span">Contact</Text>
</a>
</li>
<li>
<a href="https://llamaindex.statuspage.io" target="_blank">
<Text as="span">Status</Text>
</a>
</li>
</ul>
</div>
<div>
<Text size={20} weight={600} as="h3" className={styles.navHeader}>
<a href="https://llamaindex.ai/enterprise">Enterprise</a>
</Text>
<ul>
<li>
<a
href="https://cloud.llamaindex.ai"
data-tracking-variant="link"
data-tracking-section="footer"
>
<Text as="span">LlamaCloud</Text>
</a>
</li>
<li>
<a
href="https://cloud.llamaindex.ai/parse"
data-tracking-variant="link"
data-tracking-section="footer"
>
<Text as="span">LlamaParse</Text>
</a>
</li>
<li>
<a
href="https://llamaindex.ai/llamacloud-sharepoint-data-loading-for-generative-ai"
data-tracking-variant="link"
data-tracking-section="footer"
>
<Text as="span">SharePoint</Text>
</a>
</li>
</ul>
</div>
<div>
<Text size={20} weight={600} as="h3" className={styles.navHeader}>
<a href="https://llamaindex.ai/open-source">Open Source</a>
</Text>
<ul>
<li>
<a href="https://pypi.org/project/llama-index/">
<Text as="span">Python package</Text>
</a>
</li>
<li>
<a href="https://docs.llamaindex.ai">
<Text as="span">Python docs</Text>
</a>
</li>
<li>
<a href="https://www.npmjs.com/package/llamaindex">
<Text as="span">TypeScript package</Text>
</a>
</li>
<li>
<a href="https://ts.llamaindex.ai">
<Text as="span">TypeScript docs</Text>
</a>
</li>
<li>
<a href="https://llamahub.ai">
<Text as="span">LlamaHub</Text>
</a>
</li>
<li>
<a href="https://github.com/run-llama">
<Text as="span">GitHub</Text>
</a>
</li>
</ul>
</div>
<div>
<Text size={20} weight={600} as="h3" className={styles.navHeader}>
<a href="https://llamaindex.ai/community">Community</a>
</Text>
<ul>
<li>
<a href="https://llamaindex.ai/community#newsletter">
<Text as="span">Newsletter</Text>
</a>
</li>
<li>
<a href="https://discord.com/invite/eN6D2HQ4aX">
<Text as="span">Discord</Text>
</a>
</li>
<li>
<a href="https://twitter.com/llama_index">
<Text as="span">Twitter/X</Text>
</a>
</li>
<li>
<a href="https://www.linkedin.com/company/91154103/">
<Text as="span">LinkedIn</Text>
</a>
</li>
<li>
<a href="https://www.youtube.com/@LlamaIndex">
<Text as="span">YouTube</Text>
</a>
</li>
</ul>
</div>
<div>
<Text size={20} weight={600} as="h3" className={styles.navHeader}>
Starter projects
</Text>
<ul>
<li>
<a href="https://www.npmjs.com/package/create-llama">
<Text as="span">create-llama</Text>
</a>
</li>
<li>
<a href="https://secinsights.ai">
<Text as="span">SEC Insights</Text>
</a>
</li>
<li>
<a href="https://chat.llamaindex.ai/">
<Text as="span">Chat LlamaIndex</Text>
</a>
</li>
<li>
<a href="https://github.com/run-llama/llamabot">
<Text as="span">LlamaBot</Text>
</a>
</li>
<li>
<a href="https://docs.llamaindex.ai/en/stable/use_cases/q_and_a/rag_cli.html">
<Text as="span">RAG CLI</Text>
</a>
</li>
</ul>
</div>
</div>
</div>
<div className={styles.copyrightContainer}>
<Text className={styles.copyright} size={14}>
&copy; {new Date().getFullYear()} LlamaIndex
</Text>
<div className={styles.legalNav}>
<Text className={styles.copyright} size={14}>
<a href="https://llamaindex.ai/files/privacy-notice.pdf">
Privacy Notice
</a>
</Text>
<Text className={styles.copyright} size={14}>
<a href="https://llamaindex.ai/files/terms-of-service.pdf">
Terms of Service
</a>
</Text>
</div>
</div>
</footer>
);
};
export { Footer };
@@ -0,0 +1,4 @@
.underline {
display: inline-grid;
gap: 0.25rem;
}
@@ -0,0 +1,43 @@
import { ReactNode } from "react";
import styles from "./HeadingUnderline.module.css";
interface HeadingUnderlineProps {
children: ReactNode;
}
const HeadingUnderline = ({ children }: HeadingUnderlineProps) => (
<span className={styles.underline}>
{children}
<svg
xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 352 16"
fill="none"
preserveAspectRatio="none"
>
<path
fill="url(#paint0_angular_57_743)"
fillRule="evenodd"
d="M350.974 15.007C216.288-1.307 61.29 8.211.669 15.01L0 9.048C60.879 2.22 216.381-7.34 351.695 9.05l-.721 5.956Z"
clipRule="evenodd"
/>
<defs>
<linearGradient
id="paint0_angular_57_743"
x1={172}
x2={180.5}
y1={32.5}
y2={-24.5}
gradientUnits="userSpaceOnUse"
>
<stop stopColor="#BB8DEB" />
<stop offset={0.291} stopColor="#F8DFD8" />
<stop offset={0.632} stopColor="#FFA6EA" />
<stop offset={0.881} stopColor="#45DFF8" />
</linearGradient>
</defs>
</svg>
</span>
);
export { HeadingUnderline };
@@ -0,0 +1,53 @@
.socials {
--background-color: var(--color-neutral-100);
--icon-color: var(--color-neutral-400);
list-style: none;
display: flex;
gap: 2em;
}
.socials a {
width: 2.5em;
height: 2.5em;
display: flex;
align-items: center;
justify-content: center;
border-radius: 50%;
background-color: var(--background-color);
color: var(--icon-color);
transition:
color 300ms cubic-bezier(0.72, 0, 0.12, 1),
background 300ms cubic-bezier(0.72, 0, 0.12, 1);
}
.socials a:hover {
background-color: var(--icon-color);
color: var(--background-color);
}
.socials-theme-dark {
--background-color: #dedceb;
}
.socialsWithDescription {
flex-direction: column;
}
.socialsWithDescription li {
display: flex;
align-items: center;
gap: 1em;
}
.icons {
display: flex;
align-items: center;
gap: 0.5em;
}
@media (max-width: 600px) {
.socials {
gap: 1em;
}
}
@@ -0,0 +1,119 @@
import clsx from "clsx";
import {
FaDiscord,
FaGithub,
FaLinkedin,
FaPython,
FaYoutube,
} from "react-icons/fa";
import { FaXTwitter } from "react-icons/fa6";
import { SiTypescript } from "react-icons/si";
import { Text } from "@/components/website/Text";
import styles from "./Socials.module.css";
interface SocialsProps {
className?: string;
showDescription?: boolean;
theme?: "light" | "dark";
}
const Socials = ({
theme = "light",
showDescription = false,
className,
}: SocialsProps) => (
<>
{!showDescription && <IconsList theme={theme} className={className} />}
{showDescription && (
<IconsWithDescription theme={theme} className={className} />
)}
</>
);
const IconsList = ({ theme, className }: SocialsProps) => (
<ul
className={clsx(
styles.socials,
styles[`socials-theme-${theme}`],
className,
)}
>
<li>
<a href="https://github.com/run-llama/llama_index">
<FaGithub />
</a>
</li>
<li>
<a href="https://discord.com/invite/eN6D2HQ4aX">
<FaDiscord />
</a>
</li>
<li>
<a href="https://twitter.com/llama_index">
<FaXTwitter />
</a>
</li>
<li>
<a href="https://www.linkedin.com/company/91154103/">
<FaLinkedin />
</a>
</li>
<li>
<a href="https://www.youtube.com/@LlamaIndex">
<FaYoutube />
</a>
</li>
</ul>
);
const IconsWithDescription = ({ theme, className }: SocialsProps) => (
<ul
className={clsx(
styles.socials,
styles.socialsWithDescription,
styles[`socials-theme-${theme}`],
className,
)}
>
<li>
<div className={styles.icons}>
<a href="https://github.com/run-llama/llama_index">
<FaPython />
</a>
<a href="https://github.com/run-llama/LlamaIndexTS">
<SiTypescript />
</a>
</div>
<Text>File issues and contribute patches</Text>
</li>
<li>
<div className={styles.icons}>
<a href="https://twitter.com/llama_index">
<FaXTwitter />
</a>
<a href="https://www.linkedin.com/company/91154103/">
<FaLinkedin />
</a>
</div>
<Text>Follow us on social media for the latest updates</Text>
</li>
<li>
<a href="https://discord.com/invite/eN6D2HQ4aX">
<FaDiscord />
</a>
<Text>Get help from LlamaIndex and your peers</Text>
</li>
<li>
<a href="https://www.youtube.com/@LlamaIndex">
<FaYoutube />
</a>
<Text>Dive in to our tutorials and webinars</Text>
</li>
</ul>
);
export { Socials };
@@ -0,0 +1,96 @@
.text {
font-family: var(--font-inter);
font-size: clamp(0.875rem, -0.4286rem + 4.5714vw, 1rem); /* 14px -> 16px */
line-height: 1.6;
letter-spacing: -0.04em;
}
.text-size-12,
.text-size-16,
.text-size-18,
.text-size-20 {
color: var(--color-neutral-400);
letter-spacing: 0;
}
.text-size-32,
.text-size-36,
.text-size-40,
.text-size-48,
.text-size-60 {
font-weight: 600;
}
.text-weight-400 {
font-weight: 400;
}
.text-weight-500 {
font-weight: 500;
}
.text-weight-600 {
font-weight: 600;
}
.text-align-center {
text-align: center;
}
.text-size-12 {
font-size: 0.75em;
}
.text-size-14 {
font-size: 0.875em;
}
.text-size-18 {
font-size: clamp(1rem, -0.4286rem + 4.5714vw, 1.125rem); /* 16px -> 18px */
}
.text-size-20 {
font-size: clamp(1rem, -0.4286rem + 4.5714vw, 1.25rem); /* 16px -> 20px */
}
.text-size-24 {
font-size: clamp(1.25rem, -0.4286rem + 4.5714vw, 1.5rem); /* 20px -> 24px */
line-height: 1.5;
}
.text-size-28 {
font-size: clamp(1.25rem, -0.4286rem + 4.5714vw, 1.75rem);
line-height: 1.4;
}
.text-size-32 {
font-size: clamp(1.25rem, -0.4286rem + 4.5714vw, 2rem); /* 20px -> 32px */
}
.text-size-36 {
font-size: clamp(1.5rem, -0.4286rem + 4.5714vw, 2.25rem); /* 24px -> 36px */
}
.text-size-40 {
line-height: 1.2;
font-size: clamp(1.75rem, -0.4286rem + 4.5714vw, 2.5rem); /* 28px -> 40px */
}
.text-size-48 {
font-size: 3em;
font-size: clamp(1.75rem, -0.4286rem + 4.5714vw, 3rem); /* 28px -> 48px */
line-height: 1.25;
}
.text-size-60 {
line-height: 1.2;
font-size: clamp(1.75rem, -0.4286rem + 4.5714vw, 3.75rem); /* 28px -> 60px */
}
.text-family-sourceCodePro {
font-family: var(--font-source-code-pro);
}
.text-family-spaceGrotesk {
font-family: var(--font-space-grotesk);
}
+70
View File
@@ -0,0 +1,70 @@
import clsx from "clsx";
import { Fragment, ReactNode } from "react";
import { HeadingUnderline } from "@/components/website/HeadingUnderline";
import styles from "./Text.module.css";
export interface TextProps {
align?: "left" | "center" | "right";
size?: 12 | 14 | 16 | 18 | 20 | 24 | 28 | 32 | 36 | 40 | 48 | 60;
family?: "inter" | "spaceGrotesk" | "sourceCodePro";
weight?: 400 | 500 | 600;
children?: ReactNode;
className?: string;
as?: any;
maximumWidth?: any;
}
const Text = ({
align = "left",
weight,
children,
className,
size = 16,
family,
maximumWidth,
as = "p",
}: TextProps) => {
const Component = as;
const renderTextWithComponent = (substring: string) => {
if (substring.startsWith("|") && substring.endsWith("|")) {
const content = substring.slice(1, -1);
return <HeadingUnderline>{content}</HeadingUnderline>;
}
return substring;
};
const renderedString =
children &&
typeof children === "string" &&
children
.toString()
.split(/(\|.*?\|)/g)
.map((substring: string) => (
<Fragment key={substring}>
{renderTextWithComponent(substring)}
</Fragment>
));
return (
<Component
className={clsx(
styles.text,
align && styles[`text-align-${align}`],
size && styles[`text-size-${size}`],
weight && styles[`text-weight-${weight}`],
family && styles[`text-family-${family}`],
className,
)}
style={{ maxWidth: maximumWidth ? `${maximumWidth}px` : undefined }}
>
{renderedString || children}
</Component>
);
};
export { Text };
@@ -0,0 +1,8 @@
---
title: LlamaCloud
description: LlamaCloud is a new generation of managed parsing, ingestion, and retrieval services, designed to bring production-grade context-augmentation to your LLM and RAG applications.
---
This is TypeScript binding for LlamaCloud API. It provides a simple way to interact with LlamaCloud API.
If you are looking for the official documentation, please visit the [Official Document](https://docs.cloud.llamaindex.ai/)
@@ -0,0 +1,6 @@
{
"title": "LlamaCloud",
"description": "The Cloud framework for LLM",
"root": true,
"pages": ["---Guide---", "index", "api"]
}
@@ -0,0 +1,95 @@
---
title: What is LlamaIndex?
description: LlamaIndex is a framework for building LLM-powered applications.
---
import {
SiGithub,
SiNpm,
SiX,
SiDiscord,
} from "@icons-pack/react-simple-icons";
import { CodeBlock, Pre } from "fumadocs-ui/components/codeblock";
import { Tab, Tabs } from "fumadocs-ui/components/tabs";
LlamaIndex helps you ingest, structure, and access private or domain-specific data. It's available [as a Python package](https://docs.llamaindex.ai/en/stable/) and in TypeScript (this package).
LlamaIndex.TS offers the core features of LlamaIndex for JS Runtime-agnostic (Node.js, Deno, and Bun) applications.
## 🚀 Why LlamaIndex.TS?
LLMs offer a natural language interface between humans and inferred data. Widely available models come pre-trained on huge amounts of publicly available data, from Wikipedia and mailing lists to textbooks and source code.
Applications built on top of LLMs often require augmenting these models with private or domain-specific data. That data is often distributed across siloed applications and data stores. It's behind APIs, in SQL databases, or trapped in PDFs and slide decks.
LlamaIndex.TS helps you unlock that data and then build powerful applications with it.
## 🦙 What is LlamaIndex for?
LlamaIndex.TS handles several major use cases:
- **Structured Data Extraction**: turning complex, unstructured and semi-structured data into uniform, programmatically accessible formats.
- **Retrieval-Augmented Generation (RAG)**: answering queries across your internal data by providing LLMs with up-to-date, semantically relevant context including Question and Answer systems and chat bots.
- **Autonomous Agents**: building software that is capable of intelligently selecting and using tools to accomplish tasks in an interactive, unsupervised manner.
## 👨‍👩‍👧‍👦 Who is LlamaIndex for?
LlamaIndex targets the "AI Engineer": developers building software in any domain that can be enhanced by LLM-powered functionality, without needing to be an expert in machine learning or natural language processing.
Our high-level API allows beginner users to use LlamaIndex.TS to ingest, index, and query their data in just a few lines of code.
For more complex applications, our lower-level APIs allow advanced users to customize and extend any module—data connectors, indices, retrievers, and query engines, to fit their needs.
## Getting Started
<Tabs items={["npm", "yarn", "pnpm"]}>
<Tab value="npm">
<CodeBlock language="shell">
<Pre>npm install llamaindex</Pre>
</CodeBlock>
</Tab>
<Tab value="yarn">
<CodeBlock language="shell">
<Pre>yarn add llamaindex</Pre>
</CodeBlock>
</Tab>
<Tab value="pnpm">
<CodeBlock language="shell">
<Pre>pnpm add llamaindex</Pre>
</CodeBlock>
</Tab>
</Tabs>
Our documentation includes [Installation Instructions](./getting_started/installation.mdx) and a [Starter Tutorial](./getting_started/starter_tutorial/retrieval_augmented_generation.mdx) to build your first application.
Once you're up and running, [High-Level Concepts](./getting_started/concepts.md) has an overview of LlamaIndex's modular architecture. For more hands-on practical examples, look through our Examples section on the sidebar.
## 🗺️ Ecosystem
To download or contribute, find LlamaIndex on:
<Cards>
<Card
icon={<SiGithub />}
title="GitHub"
href="https://github.com/run-llama/LlamaIndexTS"
/>
<Card
icon={<SiNpm />}
title="NPM"
href="https://www.npmjs.com/package/llamaindex"
/>
</Cards>
## Community
Need help? Have a feature suggestion? Join the LlamaIndex community:
<Cards>
<Card icon={<SiX />} title="Twitter" href="https://twitter.com/llama_index" />
<Card
icon={<SiDiscord />}
title="Discord"
href="https://discord.gg/dGcwcsnxhU"
/>
</Cards>
@@ -0,0 +1,6 @@
{
"title": "LlamaIndex",
"description": "The Data framework for LLM",
"root": true,
"pages": ["---Guide---", "index"]
}
+3
View File
@@ -0,0 +1,3 @@
{
"pages": ["llamaindex", "cloud"]
}
+31
View File
@@ -0,0 +1,31 @@
export interface Contributor {
avatar_url: string;
login: string;
contributions: number;
}
export async function fetchContributors(
repoOwner: string,
repoName: string,
): Promise<Contributor[]> {
const headers = new Headers();
if (process.env.GITHUB_TOKEN)
headers.set('Authorization', `Bearer ${process.env.GITHUB_TOKEN}`);
const response = await fetch(
`https://api.github.com/repos/${repoOwner}/${repoName}/contributors?per_page=50`,
{
headers,
next: { revalidate: 1000 * 1000 },
},
);
if (!response.ok) {
throw new Error(`Failed to fetch contributors: ${response.statusText}`);
}
const contributors = (await response.json()) as Contributor[];
return contributors
.filter((contributor) => !contributor.login.endsWith('[bot]'))
.sort((a, b) => b.contributions - a.contributions);
}
+11
View File
@@ -0,0 +1,11 @@
import { docs, meta } from '../../.source';
import { createMDXSource } from 'fumadocs-mdx';
import { loader } from 'fumadocs-core/source';
import { createOpenAPI } from "fumadocs-openapi/server";
export const source = loader({
baseUrl: '/docs',
source: createMDXSource(docs, meta),
});
export const openapi = createOpenAPI();
+6
View File
@@ -0,0 +1,6 @@
import { clsx, type ClassValue } from "clsx"
import { twMerge } from "tailwind-merge"
export function cn(...inputs: ClassValue[]) {
return twMerge(clsx(inputs))
}
+67
View File
@@ -0,0 +1,67 @@
import { createPreset } from "fumadocs-ui/tailwind-plugin";
/** @type {import('tailwindcss').Config} */
export default {
darkMode: ["class"],
content: [
"./src/components/**/*.{ts,tsx}",
"./src/app/**/*.{ts,tsx}",
"./src/content/**/*.{md,mdx}",
"./src/mdx-components.{ts,tsx}",
"./node_modules/fumadocs-ui/dist/**/*.js",
"./node_modules/fumadocs-openapi/dist/**/*.js",
],
presets: [createPreset()],
plugins: [require("tailwindcss-animate")],
theme: {
extend: {
borderRadius: {
lg: "var(--radius)",
md: "calc(var(--radius) - 2px)",
sm: "calc(var(--radius) - 4px)",
},
colors: {
background: "hsl(var(--background))",
foreground: "hsl(var(--foreground))",
card: {
DEFAULT: "hsl(var(--card))",
foreground: "hsl(var(--card-foreground))",
},
popover: {
DEFAULT: "hsl(var(--popover))",
foreground: "hsl(var(--popover-foreground))",
},
primary: {
DEFAULT: "hsl(var(--primary))",
foreground: "hsl(var(--primary-foreground))",
},
secondary: {
DEFAULT: "hsl(var(--secondary))",
foreground: "hsl(var(--secondary-foreground))",
},
muted: {
DEFAULT: "hsl(var(--muted))",
foreground: "hsl(var(--muted-foreground))",
},
accent: {
DEFAULT: "hsl(var(--accent))",
foreground: "hsl(var(--accent-foreground))",
},
destructive: {
DEFAULT: "hsl(var(--destructive))",
foreground: "hsl(var(--destructive-foreground))",
},
border: "hsl(var(--border))",
input: "hsl(var(--input))",
ring: "hsl(var(--ring))",
chart: {
1: "hsl(var(--chart-1))",
2: "hsl(var(--chart-2))",
3: "hsl(var(--chart-3))",
4: "hsl(var(--chart-4))",
5: "hsl(var(--chart-5))",
},
},
},
},
};
+29
View File
@@ -0,0 +1,29 @@
{
"compilerOptions": {
"baseUrl": ".",
"target": "ESNext",
"lib": ["dom", "dom.iterable", "esnext"],
"allowJs": true,
"skipLibCheck": true,
"strict": true,
"forceConsistentCasingInFileNames": true,
"noEmit": true,
"esModuleInterop": true,
"module": "esnext",
"moduleResolution": "bundler",
"resolveJsonModule": true,
"isolatedModules": true,
"jsx": "preserve",
"incremental": true,
"paths": {
"@/*": ["./src/*"]
},
"plugins": [
{
"name": "next"
}
]
},
"include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"],
"exclude": ["node_modules"]
}
+9
View File
@@ -1,5 +1,14 @@
# examples
## 0.0.10
### Patch Changes
- 2486bd8: Add files_via_content example for LlamaCloud retrieval
- Updated dependencies [e2a0876]
- @llamaindex/core@0.3.4
- llamaindex@0.7.7
## 0.0.9
### Patch Changes
+44
View File
@@ -0,0 +1,44 @@
import {
DefaultAzureCredential,
getBearerTokenProvider,
} from "@azure/identity";
import "dotenv/config";
import { OpenAI, OpenAIEmbedding } from "llamaindex";
const AZURE_COGNITIVE_SERVICES_SCOPE =
"https://cognitiveservices.azure.com/.default";
(async () => {
const credential = new DefaultAzureCredential();
const azureADTokenProvider = getBearerTokenProvider(
credential,
AZURE_COGNITIVE_SERVICES_SCOPE,
);
const azure = {
azureADTokenProvider,
deployment: process.env.AZURE_DEPLOYMENT_NAME ?? "gpt-35-turbo",
};
const llm = new OpenAI({ azure });
// complete api
const response1 = await llm.complete({ prompt: "How are you?" });
console.log(response1.text);
// chat api
const response2 = await llm.chat({
messages: [{ content: "Tell me a joke.", role: "user" }],
});
console.log(response2.message.content);
// embeddings
const embedModel = new OpenAIEmbedding({
azure: {
...azure,
deployment: process.env.EMBEDDING_MODEL,
},
});
const texts = ["hello", "world"];
const embeddings = await embedModel.getTextEmbeddingsBatch(texts);
console.log(`\nWe have ${embeddings.length} embeddings`);
})();
+2 -1
View File
@@ -12,7 +12,8 @@ async function main() {
});
const queryEngine = index.asQueryEngine({
similarityTopK: 5,
// retrieve the whole content of a file instead of just chunks of the file
retrieval_mode: "files_via_content",
});
const rl = readline.createInterface({ input, output });
+3 -3
View File
@@ -1,12 +1,12 @@
{
"name": "@llamaindex/examples",
"private": true,
"version": "0.0.9",
"version": "0.0.10",
"dependencies": {
"@aws-crypto/sha256-js": "^5.2.0",
"@azure/identity": "^4.4.1",
"@datastax/astra-db-ts": "^1.4.1",
"@llamaindex/core": "^0.3.0",
"@llamaindex/core": "^0.3.4",
"@notionhq/client": "^2.2.15",
"@pinecone-database/pinecone": "^3.0.2",
"@vercel/postgres": "^0.10.0",
@@ -15,7 +15,7 @@
"commander": "^12.1.0",
"dotenv": "^16.4.5",
"js-tiktoken": "^1.0.14",
"llamaindex": "^0.7.0",
"llamaindex": "^0.7.7",
"mongodb": "^6.7.0",
"pathe": "^1.1.2",
"postgres": "^3.4.4"
+5 -6
View File
@@ -2,8 +2,7 @@
"name": "@llamaindex/monorepo",
"private": true,
"scripts": {
"build": "turbo run build",
"build:release": "turbo run build --filter=\"./packages/*\"",
"build": "turbo run build --filter=\"./packages/*\"",
"dev": "turbo run dev --filter=\"./packages/*\"",
"format": "prettier --ignore-unknown --cache --check .",
"format:write": "prettier --ignore-unknown --write .",
@@ -13,10 +12,10 @@
"test": "turbo run test",
"type-check": "tsc -b --diagnostics",
"circular-check": "madge --circular ./packages/**/**/dist/index.js",
"release": "pnpm run build:release && changeset publish",
"release-snapshot": "pnpm run build:release && changeset publish --tag snapshot",
"new-version": "changeset version && pnpm format:write && pnpm run build:release",
"new-snapshot": "pnpm run build:release && changeset version --snapshot"
"release": "pnpm run build && changeset publish",
"release-snapshot": "pnpm run build && changeset publish --tag snapshot",
"new-version": "changeset version && pnpm format:write && pnpm run build",
"new-snapshot": "pnpm run build && changeset version --snapshot"
},
"devDependencies": {
"@changesets/cli": "^2.27.5",
+34
View File
@@ -1,5 +1,39 @@
# @llamaindex/autotool
## 4.0.9
### Patch Changes
- Updated dependencies [691c5bc]
- llamaindex@0.7.9
## 4.0.8
### Patch Changes
- llamaindex@0.7.8
## 4.0.7
### Patch Changes
- llamaindex@0.7.7
## 4.0.6
### Patch Changes
- Updated dependencies [534d550]
- llamaindex@0.7.6
## 4.0.5
### Patch Changes
- Updated dependencies [e9a111d]
- Updated dependencies [9f22aae]
- llamaindex@0.7.5
## 4.0.4
### Patch Changes
@@ -1,5 +1,44 @@
# @llamaindex/autotool-01-node-example
## 0.0.41
### Patch Changes
- Updated dependencies [691c5bc]
- llamaindex@0.7.9
- @llamaindex/autotool@4.0.9
## 0.0.40
### Patch Changes
- llamaindex@0.7.8
- @llamaindex/autotool@4.0.8
## 0.0.39
### Patch Changes
- llamaindex@0.7.7
- @llamaindex/autotool@4.0.7
## 0.0.38
### Patch Changes
- Updated dependencies [534d550]
- llamaindex@0.7.6
- @llamaindex/autotool@4.0.6
## 0.0.37
### Patch Changes
- Updated dependencies [e9a111d]
- Updated dependencies [9f22aae]
- llamaindex@0.7.5
- @llamaindex/autotool@4.0.5
## 0.0.36
### Patch Changes
@@ -13,5 +13,5 @@
"scripts": {
"start": "node --import tsx --import @llamaindex/autotool/node ./src/index.ts"
},
"version": "0.0.36"
"version": "0.0.41"
}
@@ -1,5 +1,44 @@
# @llamaindex/autotool-02-next-example
## 0.1.85
### Patch Changes
- Updated dependencies [691c5bc]
- llamaindex@0.7.9
- @llamaindex/autotool@4.0.9
## 0.1.84
### Patch Changes
- llamaindex@0.7.8
- @llamaindex/autotool@4.0.8
## 0.1.83
### Patch Changes
- llamaindex@0.7.7
- @llamaindex/autotool@4.0.7
## 0.1.82
### Patch Changes
- Updated dependencies [534d550]
- llamaindex@0.7.6
- @llamaindex/autotool@4.0.6
## 0.1.81
### Patch Changes
- Updated dependencies [e9a111d]
- Updated dependencies [9f22aae]
- llamaindex@0.7.5
- @llamaindex/autotool@4.0.5
## 0.1.80
### Patch Changes
@@ -1,7 +1,7 @@
{
"name": "@llamaindex/autotool-02-next-example",
"private": true,
"version": "0.1.80",
"version": "0.1.85",
"scripts": {
"dev": "next dev",
"build": "next build",
@@ -25,8 +25,8 @@
},
"devDependencies": {
"@types/node": "^22.5.1",
"@types/react": "^18.3.5",
"@types/react-dom": "^18.3.0",
"@types/react": "^18.3.12",
"@types/react-dom": "^18.3.1",
"@types/react-syntax-highlighter": "^15.5.11",
"autoprefixer": "^10.4.20",
"cross-env": "^7.0.3",
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "@llamaindex/autotool",
"type": "module",
"version": "4.0.4",
"version": "4.0.9",
"description": "auto transpile your JS function to LLM Agent compatible",
"files": [
"dist",
+22
View File
@@ -1,5 +1,27 @@
# @llamaindex/cloud
## 1.0.7
### Patch Changes
- Updated dependencies [691c5bc]
- @llamaindex/core@0.3.6
## 1.0.6
### Patch Changes
- Updated dependencies [fa60fc6]
- @llamaindex/env@0.1.16
- @llamaindex/core@0.3.5
## 1.0.5
### Patch Changes
- Updated dependencies [e2a0876]
- @llamaindex/core@0.3.4
## 1.0.4
### Patch Changes
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@llamaindex/cloud",
"version": "1.0.4",
"version": "1.0.7",
"type": "module",
"license": "MIT",
"scripts": {
+28
View File
@@ -1,5 +1,33 @@
# @llamaindex/community
## 0.0.55
### Patch Changes
- Updated dependencies [691c5bc]
- @llamaindex/core@0.3.6
## 0.0.54
### Patch Changes
- Updated dependencies [fa60fc6]
- @llamaindex/env@0.1.16
- @llamaindex/core@0.3.5
## 0.0.53
### Patch Changes
- Updated dependencies [e2a0876]
- @llamaindex/core@0.3.4
## 0.0.52
### Patch Changes
- a5a75f6: feat: added sonnet 3.5 v2
## 0.0.51
### Patch Changes
+1 -1
View File
@@ -4,7 +4,7 @@
## Current Features:
- Bedrock support for the Anthropic Claude Models [usage](https://ts.llamaindex.ai/modules/llms/available_llms/bedrock)
- Bedrock support for the Anthropic Claude Models [usage](https://ts.llamaindex.ai/modules/llms/available_llms/bedrock) including the latest Sonnet 3.5 v2
- Bedrock support for the Meta LLama 2, 3, 3.1 and 3.2 Models [usage](https://ts.llamaindex.ai/modules/llms/available_llms/bedrock)
- Meta LLama3.1 405b and Llama3.2 tool call support
- Meta 3.2 11B and 90B vision support
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "@llamaindex/community",
"description": "Community package for LlamaIndexTS",
"version": "0.0.51",
"version": "0.0.55",
"type": "module",
"types": "dist/type/index.d.ts",
"main": "dist/cjs/index.js",
@@ -65,6 +65,7 @@ export const BEDROCK_MODELS = {
ANTHROPIC_CLAUDE_3_HAIKU: "anthropic.claude-3-haiku-20240307-v1:0",
ANTHROPIC_CLAUDE_3_OPUS: "anthropic.claude-3-opus-20240229-v1:0",
ANTHROPIC_CLAUDE_3_5_SONNET: "anthropic.claude-3-5-sonnet-20240620-v1:0",
ANTHROPIC_CLAUDE_3_5_SONNET_V2: "anthropic.claude-3-5-sonnet-20241022-v2:0",
META_LLAMA2_13B_CHAT: "meta.llama2-13b-chat-v1",
META_LLAMA2_70B_CHAT: "meta.llama2-70b-chat-v1",
META_LLAMA3_8B_INSTRUCT: "meta.llama3-8b-instruct-v1:0",
@@ -89,6 +90,8 @@ export const INFERENCE_BEDROCK_MODELS = {
US_ANTHROPIC_CLAUDE_3_SONNET: "us.anthropic.claude-3-sonnet-20240229-v1:0",
US_ANTHROPIC_CLAUDE_3_5_SONNET:
"us.anthropic.claude-3-5-sonnet-20240620-v1:0",
US_ANTHROPIC_CLAUDE_3_5_SONNET_V2:
"us.anthropic.claude-3-5-sonnet-20241022-v2:0",
US_META_LLAMA_3_2_1B_INSTRUCT: "us.meta.llama3-2-1b-instruct-v1:0",
US_META_LLAMA_3_2_3B_INSTRUCT: "us.meta.llama3-2-3b-instruct-v1:0",
US_META_LLAMA_3_2_11B_INSTRUCT: "us.meta.llama3-2-11b-instruct-v1:0",
@@ -117,6 +120,8 @@ export const INFERENCE_TO_BEDROCK_MAP: Record<
BEDROCK_MODELS.ANTHROPIC_CLAUDE_3_SONNET,
[INFERENCE_BEDROCK_MODELS.US_ANTHROPIC_CLAUDE_3_5_SONNET]:
BEDROCK_MODELS.ANTHROPIC_CLAUDE_3_5_SONNET,
[INFERENCE_BEDROCK_MODELS.US_ANTHROPIC_CLAUDE_3_5_SONNET_V2]:
BEDROCK_MODELS.ANTHROPIC_CLAUDE_3_5_SONNET_V2,
[INFERENCE_BEDROCK_MODELS.US_META_LLAMA_3_2_1B_INSTRUCT]:
BEDROCK_MODELS.META_LLAMA3_2_1B_INSTRUCT,
[INFERENCE_BEDROCK_MODELS.US_META_LLAMA_3_2_3B_INSTRUCT]:
@@ -163,6 +168,7 @@ const CHAT_ONLY_MODELS = {
[BEDROCK_MODELS.ANTHROPIC_CLAUDE_3_HAIKU]: 200000,
[BEDROCK_MODELS.ANTHROPIC_CLAUDE_3_OPUS]: 200000,
[BEDROCK_MODELS.ANTHROPIC_CLAUDE_3_5_SONNET]: 200000,
[BEDROCK_MODELS.ANTHROPIC_CLAUDE_3_5_SONNET_V2]: 200000,
[BEDROCK_MODELS.META_LLAMA2_13B_CHAT]: 2048,
[BEDROCK_MODELS.META_LLAMA2_70B_CHAT]: 4096,
[BEDROCK_MODELS.META_LLAMA3_8B_INSTRUCT]: 8192,
@@ -197,6 +203,7 @@ export const STREAMING_MODELS = new Set([
BEDROCK_MODELS.ANTHROPIC_CLAUDE_3_HAIKU,
BEDROCK_MODELS.ANTHROPIC_CLAUDE_3_OPUS,
BEDROCK_MODELS.ANTHROPIC_CLAUDE_3_5_SONNET,
BEDROCK_MODELS.ANTHROPIC_CLAUDE_3_5_SONNET_V2,
BEDROCK_MODELS.META_LLAMA2_13B_CHAT,
BEDROCK_MODELS.META_LLAMA2_70B_CHAT,
BEDROCK_MODELS.META_LLAMA3_8B_INSTRUCT,
@@ -218,6 +225,7 @@ export const TOOL_CALL_MODELS: BEDROCK_MODELS[] = [
BEDROCK_MODELS.ANTHROPIC_CLAUDE_3_HAIKU,
BEDROCK_MODELS.ANTHROPIC_CLAUDE_3_OPUS,
BEDROCK_MODELS.ANTHROPIC_CLAUDE_3_5_SONNET,
BEDROCK_MODELS.ANTHROPIC_CLAUDE_3_5_SONNET_V2,
BEDROCK_MODELS.META_LLAMA3_1_405B_INSTRUCT,
BEDROCK_MODELS.META_LLAMA3_2_1B_INSTRUCT,
BEDROCK_MODELS.META_LLAMA3_2_3B_INSTRUCT,
@@ -251,6 +259,7 @@ export const BEDROCK_MODEL_MAX_TOKENS: Partial<Record<BEDROCK_MODELS, number>> =
[BEDROCK_MODELS.ANTHROPIC_CLAUDE_3_HAIKU]: 4096,
[BEDROCK_MODELS.ANTHROPIC_CLAUDE_3_OPUS]: 4096,
[BEDROCK_MODELS.ANTHROPIC_CLAUDE_3_5_SONNET]: 4096,
[BEDROCK_MODELS.ANTHROPIC_CLAUDE_3_5_SONNET_V2]: 4096,
[BEDROCK_MODELS.META_LLAMA2_13B_CHAT]: 2048,
[BEDROCK_MODELS.META_LLAMA2_70B_CHAT]: 2048,
[BEDROCK_MODELS.META_LLAMA3_8B_INSTRUCT]: 2048,
+19
View File
@@ -1,5 +1,24 @@
# @llamaindex/core
## 0.3.6
### Patch Changes
- 691c5bc: fix: export embeddings utils
## 0.3.5
### Patch Changes
- Updated dependencies [fa60fc6]
- @llamaindex/env@0.1.16
## 0.3.4
### Patch Changes
- e2a0876: Remove chunk size limit for prompt helper (use LLM default)
## 0.3.3
### Patch Changes
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "@llamaindex/core",
"type": "module",
"version": "0.3.3",
"version": "0.3.6",
"description": "LlamaIndex Core Module",
"exports": {
"./agent": {
+7 -1
View File
@@ -2,4 +2,10 @@ export { BaseEmbedding, batchEmbeddings } from "./base";
export type { BaseEmbeddingOptions, EmbeddingInfo } from "./base";
export { MultiModalEmbedding } from "./muti-model";
export { truncateMaxTokens } from "./tokenizer";
export { DEFAULT_SIMILARITY_TOP_K, SimilarityType, similarity } from "./utils";
export {
DEFAULT_SIMILARITY_TOP_K,
SimilarityType,
getTopKEmbeddings,
getTopKMMREmbeddings,
similarity,
} from "./utils";
+118
View File
@@ -62,3 +62,121 @@ export function similarity(
throw new Error("Not implemented yet");
}
}
/**
* Get the top K embeddings from a list of embeddings ordered by similarity to the query.
* @param queryEmbedding
* @param embeddings list of embeddings to consider
* @param similarityTopK max number of embeddings to return, default 2
* @param embeddingIds ids of embeddings in the embeddings list
* @param similarityCutoff minimum similarity score
* @returns
*/
// eslint-disable-next-line max-params
export function getTopKEmbeddings(
queryEmbedding: number[],
embeddings: number[][],
similarityTopK: number = 2,
embeddingIds: any[] | null = null,
similarityCutoff: number | null = null,
): [number[], any[]] {
if (embeddingIds == null) {
embeddingIds = Array(embeddings.length).map((_, i) => i);
}
if (embeddingIds.length !== embeddings.length) {
throw new Error(
"getTopKEmbeddings: embeddings and embeddingIds length mismatch",
);
}
const similarities: { similarity: number; id: number }[] = [];
for (let i = 0; i < embeddings.length; i++) {
const sim = similarity(queryEmbedding, embeddings[i]!);
if (similarityCutoff == null || sim > similarityCutoff) {
similarities.push({ similarity: sim, id: embeddingIds[i] });
}
}
similarities.sort((a, b) => b.similarity - a.similarity); // Reverse sort
const resultSimilarities: number[] = [];
const resultIds: any[] = [];
for (let i = 0; i < similarityTopK; i++) {
if (i >= similarities.length) {
break;
}
resultSimilarities.push(similarities[i]!.similarity);
resultIds.push(similarities[i]!.id);
}
return [resultSimilarities, resultIds];
}
// eslint-disable-next-line max-params
export function getTopKMMREmbeddings(
queryEmbedding: number[],
embeddings: number[][],
similarityFn: ((...args: any[]) => number) | null = null,
similarityTopK: number | null = null,
embeddingIds: any[] | null = null,
_similarityCutoff: number | null = null,
mmrThreshold: number | null = null,
): [number[], any[]] {
const threshold = mmrThreshold || 0.5;
similarityFn = similarityFn || similarity;
if (embeddingIds === null || embeddingIds.length === 0) {
embeddingIds = Array.from({ length: embeddings.length }, (_, i) => i);
}
const fullEmbedMap = new Map(embeddingIds.map((value, i) => [value, i]));
const embedMap = new Map(fullEmbedMap);
const embedSimilarity: Map<any, number> = new Map();
let score: number = Number.NEGATIVE_INFINITY;
let highScoreId: any | null = null;
for (let i = 0; i < embeddings.length; i++) {
const emb = embeddings[i];
const similarity = similarityFn(queryEmbedding, emb);
embedSimilarity.set(embeddingIds[i], similarity);
if (similarity * threshold > score) {
highScoreId = embeddingIds[i];
score = similarity * threshold;
}
}
const results: [number, any][] = [];
const embeddingLength = embeddings.length;
const similarityTopKCount = similarityTopK || embeddingLength;
while (results.length < Math.min(similarityTopKCount, embeddingLength)) {
results.push([score, highScoreId]);
embedMap.delete(highScoreId);
const recentEmbeddingId = highScoreId;
score = Number.NEGATIVE_INFINITY;
for (const embedId of Array.from(embedMap.keys())) {
const overlapWithRecent = similarityFn(
embeddings[embedMap.get(embedId)!],
embeddings[fullEmbedMap.get(recentEmbeddingId)!],
);
if (
threshold * embedSimilarity.get(embedId)! -
(1 - threshold) * overlapWithRecent >
score
) {
score =
threshold * embedSimilarity.get(embedId)! -
(1 - threshold) * overlapWithRecent;
highScoreId = embedId;
}
}
}
const resultSimilarities = results.map(([s, _]) => s);
const resultIds = results.map(([_, n]) => n);
return [resultSimilarities, resultIds];
}
+1 -2
View File
@@ -1,7 +1,6 @@
import { type Tokenizer, tokenizers } from "@llamaindex/env";
import {
DEFAULT_CHUNK_OVERLAP_RATIO,
DEFAULT_CHUNK_SIZE,
DEFAULT_CONTEXT_WINDOW,
DEFAULT_NUM_OUTPUTS,
DEFAULT_PADDING,
@@ -171,7 +170,7 @@ export class PromptHelper {
) {
const {
chunkOverlapRatio = DEFAULT_CHUNK_OVERLAP_RATIO,
chunkSizeLimit = DEFAULT_CHUNK_SIZE,
chunkSizeLimit = undefined,
tokenizer = Settings.tokenizer,
separator = " ",
} = options ?? {};
+6
View File
@@ -1,5 +1,11 @@
# @llamaindex/env
## 0.1.16
### Patch Changes
- fa60fc6: fix(env): no esm shim
## 0.1.15
### Patch Changes
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "@llamaindex/env",
"description": "environment wrapper, supports all JS environment including node, deno, bun, edge runtime, and cloudflare worker",
"version": "0.1.15",
"version": "0.1.16",
"type": "module",
"types": "dist/index.d.ts",
"module": "dist/index.js",
+1 -10
View File
@@ -1,13 +1,4 @@
const glo: any =
typeof globalThis !== "undefined"
? globalThis
: // @ts-expect-error
typeof window !== "undefined"
? // @ts-expect-error
window
: typeof global !== "undefined"
? global
: {};
import { glo } from "./utils/shared.js";
const importIdentifier = "__ $@llamaindex/env$ __";
+5 -3
View File
@@ -11,6 +11,7 @@
*
* @module
*/
/** rollup-private-do-not-use-esm-shim-polyfill */
import { ok } from "node:assert";
import { createHash, randomUUID } from "node:crypto";
import { EOL } from "node:os";
@@ -19,7 +20,7 @@ import { Readable } from "node:stream";
import { fileURLToPath } from "node:url";
import { createWriteStream, fs } from "./fs/node.js";
import "./global-check.js";
import type { SHA256 } from "./node-polyfill.js";
import { type SHA256, process } from "./node-polyfill.js";
export function createSHA256(): SHA256 {
const hash = createHash("sha256");
@@ -49,12 +50,13 @@ export {
} from "./utils/index.js";
export { NotSupportCurrentRuntimeClass } from "./utils/shared.js";
export {
createWriteStream,
EOL,
Readable,
createWriteStream,
fileURLToPath,
fs,
ok,
path,
process,
randomUUID,
Readable,
};
+2
View File
@@ -49,6 +49,8 @@ export function randomUUID(): string {
return crypto.randomUUID();
}
export const process: NodeJS.Process = globalThis.process;
export {
AsyncLocalStorage,
CustomEvent,
+20
View File
@@ -1,3 +1,5 @@
import { glo } from "./shared.js";
// DO NOT EXPOSE THIS VARIABLE TO PUBLIC, IT IS USED INTERNALLY FOR BROWSER ENVIRONMENT
export const INTERNAL_ENV: Record<string, string> = {};
@@ -43,3 +45,21 @@ export class AsyncLocalStorage<T> {
const defaultCustomEvent = (globalThis as any).CustomEvent;
export { defaultCustomEvent as CustomEvent };
const defaultProcess: NodeJS.Process = (globalThis as any).process || {};
const processProxy = new Proxy(defaultProcess, {
get(_target, prop) {
switch (prop) {
case "version":
return glo.navigator.version; // Return empty string for version
case "platform":
return "browser"; // Return browser platform
case "arch":
return "javascript"; // Return javascript arch
default:
break;
}
return ""; // Return empty string for all other properties
},
});
export { processProxy as process };
+13
View File
@@ -11,3 +11,16 @@ export class NotSupportCurrentRuntimeClass {
} as any;
}
}
// This is a workaround for the lack of globalThis in some environments
// It's being used across multiple places inside the `env` package
export const glo: any =
typeof globalThis !== "undefined"
? globalThis
: // @ts-expect-error
typeof window !== "undefined"
? // @ts-expect-error
window
: typeof global !== "undefined"
? global
: {};
+1
View File
@@ -53,5 +53,6 @@ export {
AsyncLocalStorage,
CustomEvent,
getEnv,
process,
setEnvs,
} from "./utils/index.web.js";
+34
View File
@@ -1,5 +1,39 @@
# @llamaindex/experimental
## 0.0.110
### Patch Changes
- Updated dependencies [691c5bc]
- llamaindex@0.7.9
## 0.0.109
### Patch Changes
- llamaindex@0.7.8
## 0.0.108
### Patch Changes
- llamaindex@0.7.7
## 0.0.107
### Patch Changes
- Updated dependencies [534d550]
- llamaindex@0.7.6
## 0.0.106
### Patch Changes
- Updated dependencies [e9a111d]
- Updated dependencies [9f22aae]
- llamaindex@0.7.5
## 0.0.105
### Patch Changes
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "@llamaindex/experimental",
"description": "Experimental package for LlamaIndexTS",
"version": "0.0.105",
"version": "0.0.110",
"type": "module",
"types": "dist/type/index.d.ts",
"main": "dist/cjs/index.js",
+66
View File
@@ -1,5 +1,71 @@
# llamaindex
## 0.7.9
### Patch Changes
- 691c5bc: fix: export embeddings utils
- Updated dependencies [691c5bc]
- @llamaindex/core@0.3.6
- @llamaindex/cloud@1.0.7
- @llamaindex/anthropic@0.0.7
- @llamaindex/clip@0.0.7
- @llamaindex/deepinfra@0.0.7
- @llamaindex/huggingface@0.0.7
- @llamaindex/ollama@0.0.14
- @llamaindex/openai@0.1.23
- @llamaindex/portkey-ai@0.0.7
- @llamaindex/replicate@0.0.7
- @llamaindex/groq@0.0.22
## 0.7.8
### Patch Changes
- Updated dependencies [fa60fc6]
- @llamaindex/env@0.1.16
- @llamaindex/cloud@1.0.6
- @llamaindex/core@0.3.5
- @llamaindex/anthropic@0.0.6
- @llamaindex/clip@0.0.6
- @llamaindex/deepinfra@0.0.6
- @llamaindex/groq@0.0.21
- @llamaindex/huggingface@0.0.6
- @llamaindex/ollama@0.0.13
- @llamaindex/openai@0.1.22
- @llamaindex/portkey-ai@0.0.6
- @llamaindex/replicate@0.0.6
## 0.7.7
### Patch Changes
- Updated dependencies [e2a0876]
- @llamaindex/core@0.3.4
- @llamaindex/cloud@1.0.5
- @llamaindex/anthropic@0.0.5
- @llamaindex/clip@0.0.5
- @llamaindex/deepinfra@0.0.5
- @llamaindex/huggingface@0.0.5
- @llamaindex/ollama@0.0.12
- @llamaindex/openai@0.1.21
- @llamaindex/portkey-ai@0.0.5
- @llamaindex/replicate@0.0.5
- @llamaindex/groq@0.0.20
## 0.7.6
### Patch Changes
- 534d550: fix: replicate deps warning in nextjs
## 0.7.5
### Patch Changes
- e9a111d: fix: VectorIndexRetrieverOptions typing
- 9f22aae: fix: unable to resolve unpdf in nextjs
## 0.7.4
### Patch Changes
@@ -1,5 +1,39 @@
# @llamaindex/cloudflare-worker-agent-test
## 0.0.94
### Patch Changes
- Updated dependencies [691c5bc]
- llamaindex@0.7.9
## 0.0.93
### Patch Changes
- llamaindex@0.7.8
## 0.0.92
### Patch Changes
- llamaindex@0.7.7
## 0.0.91
### Patch Changes
- Updated dependencies [534d550]
- llamaindex@0.7.6
## 0.0.90
### Patch Changes
- Updated dependencies [e9a111d]
- Updated dependencies [9f22aae]
- llamaindex@0.7.5
## 0.0.89
### Patch Changes
@@ -1,6 +1,6 @@
{
"name": "@llamaindex/cloudflare-worker-agent-test",
"version": "0.0.89",
"version": "0.0.94",
"type": "module",
"private": true,
"scripts": {
@@ -1,5 +1,23 @@
# @llamaindex/llama-parse-browser-test
## 0.0.18
### Patch Changes
- @llamaindex/cloud@1.0.7
## 0.0.17
### Patch Changes
- @llamaindex/cloud@1.0.6
## 0.0.16
### Patch Changes
- @llamaindex/cloud@1.0.5
## 0.0.15
### Patch Changes
@@ -1,7 +1,7 @@
{
"name": "@llamaindex/llama-parse-browser-test",
"private": true,
"version": "0.0.15",
"version": "0.0.18",
"type": "module",
"scripts": {
"dev": "vite",
@@ -1,5 +1,39 @@
# @llamaindex/next-agent-test
## 0.1.94
### Patch Changes
- Updated dependencies [691c5bc]
- llamaindex@0.7.9
## 0.1.93
### Patch Changes
- llamaindex@0.7.8
## 0.1.92
### Patch Changes
- llamaindex@0.7.7
## 0.1.91
### Patch Changes
- Updated dependencies [534d550]
- llamaindex@0.7.6
## 0.1.90
### Patch Changes
- Updated dependencies [e9a111d]
- Updated dependencies [9f22aae]
- llamaindex@0.7.5
## 0.1.89
### Patch Changes
@@ -1,6 +1,6 @@
{
"name": "@llamaindex/next-agent-test",
"version": "0.1.89",
"version": "0.1.94",
"private": true,
"scripts": {
"dev": "next dev",
@@ -17,8 +17,8 @@
},
"devDependencies": {
"@types/node": "^22.5.1",
"@types/react": "^18.3.5",
"@types/react-dom": "^18.3.0",
"@types/react": "^18.3.12",
"@types/react-dom": "^18.3.1",
"eslint": "8.57.0",
"eslint-config-next": "14.2.11",
"postcss": "^8.4.41",
@@ -1,6 +1,6 @@
"use client";
import { chatWithAgent } from "@/actions";
import type { ReactNode } from "react";
import { type ReactNode } from "react";
import { useFormState } from "react-dom";
export const runtime = "edge";
@@ -1,5 +1,39 @@
# test-edge-runtime
## 0.1.93
### Patch Changes
- Updated dependencies [691c5bc]
- llamaindex@0.7.9
## 0.1.92
### Patch Changes
- llamaindex@0.7.8
## 0.1.91
### Patch Changes
- llamaindex@0.7.7
## 0.1.90
### Patch Changes
- Updated dependencies [534d550]
- llamaindex@0.7.6
## 0.1.89
### Patch Changes
- Updated dependencies [e9a111d]
- Updated dependencies [9f22aae]
- llamaindex@0.7.5
## 0.1.88
### Patch Changes

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