Compare commits
24 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 938b417028 | |||
| fa60fc66ae | |||
| 5607ed2fec | |||
| f57ad6150e | |||
| 2486bd8f41 | |||
| e2a0876ddd | |||
| a75d899a57 | |||
| 809a6e7eea | |||
| da6eb6474b | |||
| cd83f8ee4f | |||
| 534d5505cb | |||
| eb87b96518 | |||
| 9510d45046 | |||
| 9b5b012fdf | |||
| a5a75f618d | |||
| 051faddefd | |||
| 9f22aae57c | |||
| e9a111d9d3 | |||
| bb7622e4d4 | |||
| 06f632b2cb | |||
| 76b925e62a | |||
| 0493f679a4 | |||
| 0e0a627c9a | |||
| 4ba2cfe7ab |
@@ -4,3 +4,4 @@ pnpm-lock.yaml
|
||||
lib/
|
||||
dist/
|
||||
.docusaurus/
|
||||
.source/
|
||||
|
||||
@@ -13,5 +13,6 @@
|
||||
},
|
||||
"[json]": {
|
||||
"editor.defaultFormatter": "esbenp.prettier-vscode"
|
||||
}
|
||||
},
|
||||
"prettier.prettierPath": "./node_modules/prettier"
|
||||
}
|
||||
|
||||
@@ -1,5 +1,52 @@
|
||||
# docs
|
||||
|
||||
## 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
|
||||
|
||||
- llamaindex@0.7.4
|
||||
|
||||
## 0.0.95
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.7.3
|
||||
|
||||
## 0.0.94
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.7.2
|
||||
|
||||
## 0.0.93
|
||||
|
||||
### 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,6 +1,6 @@
|
||||
{
|
||||
"name": "docs",
|
||||
"version": "0.0.93",
|
||||
"version": "0.0.100",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"docusaurus": "docusaurus",
|
||||
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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"
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
@@ -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"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
module.exports = {
|
||||
plugins: {
|
||||
tailwindcss: {},
|
||||
autoprefixer: {},
|
||||
},
|
||||
};
|
||||
|
After Width: | Height: | Size: 11 KiB |
|
After Width: | Height: | Size: 15 KiB |
|
After Width: | Height: | Size: 9.8 KiB |
|
After Width: | Height: | Size: 867 B |
|
After Width: | Height: | Size: 1.5 KiB |
|
After Width: | Height: | Size: 15 KiB |
|
After Width: | Height: | Size: 73 KiB |
|
After Width: | Height: | Size: 7.4 KiB |
|
After Width: | Height: | Size: 2.2 KiB |
@@ -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",
|
||||
});
|
||||
@@ -0,0 +1,7 @@
|
||||
import { defineConfig, defineDocs } from "fumadocs-mdx/config";
|
||||
|
||||
export const { docs, meta } = defineDocs({
|
||||
dir: "./src/content/docs",
|
||||
});
|
||||
|
||||
export default defineConfig();
|
||||
@@ -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>
|
||||
);
|
||||
}
|
||||
@@ -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>
|
||||
);
|
||||
}
|
||||
@@ -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,
|
||||
};
|
||||
}
|
||||
@@ -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>
|
||||
);
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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",
|
||||
},
|
||||
],
|
||||
};
|
||||
@@ -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>
|
||||
);
|
||||
}
|
||||
@@ -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>;
|
||||
}
|
||||
@@ -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>
|
||||
);
|
||||
}
|
||||
@@ -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>
|
||||
);
|
||||
}
|
||||
@@ -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>
|
||||
);
|
||||
};
|
||||
@@ -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>;
|
||||
};
|
||||
@@ -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 };
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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}>
|
||||
© {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);
|
||||
}
|
||||
@@ -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"]
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
{
|
||||
"pages": ["llamaindex", "cloud"]
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
@@ -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();
|
||||
@@ -0,0 +1,6 @@
|
||||
import { clsx, type ClassValue } from "clsx"
|
||||
import { twMerge } from "tailwind-merge"
|
||||
|
||||
export function cn(...inputs: ClassValue[]) {
|
||||
return twMerge(clsx(inputs))
|
||||
}
|
||||
@@ -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))",
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
};
|
||||
@@ -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"]
|
||||
}
|
||||
@@ -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
|
||||
|
||||
@@ -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`);
|
||||
})();
|
||||
@@ -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 });
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -0,0 +1,52 @@
|
||||
import { Language, LlamaParseReader } from "llamaindex";
|
||||
import fs from "node:fs";
|
||||
import path from "node:path";
|
||||
|
||||
type LlamaParseReaderParams = Partial<
|
||||
Omit<LlamaParseReader, "language" | "apiKey">
|
||||
> & {
|
||||
language?: Language | Language[] | undefined;
|
||||
apiKey?: string | undefined;
|
||||
};
|
||||
|
||||
async function main() {
|
||||
const filePath = "../data/pto_policy_employee.docx";
|
||||
if (!fs.existsSync(filePath)) {
|
||||
console.error(`File ${filePath} does not exist`);
|
||||
process.exit(1);
|
||||
} else {
|
||||
console.log(`File ${filePath} exists`);
|
||||
}
|
||||
|
||||
const params: LlamaParseReaderParams = {
|
||||
verbose: true,
|
||||
parsingInstruction:
|
||||
"Extract the text from the document a long with any images and tables. This is a document for a course and the contents of the images are important.",
|
||||
fastMode: false,
|
||||
gpt4oMode: true,
|
||||
useVendorMultimodalModel: true,
|
||||
vendorMultimodalModelName: "anthropic-sonnet-3.5",
|
||||
premiumMode: true,
|
||||
resultType: "markdown",
|
||||
apiKey: process.env.LLAMA_CLOUD_API_KEY,
|
||||
doNotCache: true,
|
||||
};
|
||||
|
||||
// set up the llamaparse reader
|
||||
const reader = new LlamaParseReader(params);
|
||||
|
||||
const buffer = fs.readFileSync(filePath);
|
||||
const documents = await reader.loadDataAsContent(
|
||||
new Uint8Array(buffer),
|
||||
path.basename(filePath),
|
||||
);
|
||||
|
||||
let allText = "";
|
||||
documents.forEach((doc) => {
|
||||
allText += doc.text;
|
||||
});
|
||||
|
||||
console.log(allText);
|
||||
}
|
||||
|
||||
main().catch(console.error);
|
||||
@@ -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",
|
||||
@@ -39,9 +38,6 @@
|
||||
"overrides": {
|
||||
"trim": "1.0.1",
|
||||
"protobufjs": "7.2.6"
|
||||
},
|
||||
"patchedDependencies": {
|
||||
"python-format-js@1.4.3": "patches/python-format-js@1.4.3.patch"
|
||||
}
|
||||
},
|
||||
"lint-staged": {
|
||||
|
||||
@@ -1,5 +1,50 @@
|
||||
# @llamaindex/autotool
|
||||
|
||||
## 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
|
||||
|
||||
- llamaindex@0.7.4
|
||||
|
||||
## 4.0.3
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.7.3
|
||||
|
||||
## 4.0.2
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.7.2
|
||||
|
||||
## 4.0.1
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,5 +1,57 @@
|
||||
# @llamaindex/autotool-01-node-example
|
||||
|
||||
## 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
|
||||
|
||||
- llamaindex@0.7.4
|
||||
- @llamaindex/autotool@4.0.4
|
||||
|
||||
## 0.0.35
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.7.3
|
||||
- @llamaindex/autotool@4.0.3
|
||||
|
||||
## 0.0.34
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.7.2
|
||||
- @llamaindex/autotool@4.0.2
|
||||
|
||||
## 0.0.33
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -13,5 +13,5 @@
|
||||
"scripts": {
|
||||
"start": "node --import tsx --import @llamaindex/autotool/node ./src/index.ts"
|
||||
},
|
||||
"version": "0.0.33"
|
||||
"version": "0.0.40"
|
||||
}
|
||||
|
||||
@@ -1,5 +1,57 @@
|
||||
# @llamaindex/autotool-02-next-example
|
||||
|
||||
## 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
|
||||
|
||||
- llamaindex@0.7.4
|
||||
- @llamaindex/autotool@4.0.4
|
||||
|
||||
## 0.1.79
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.7.3
|
||||
- @llamaindex/autotool@4.0.3
|
||||
|
||||
## 0.1.78
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.7.2
|
||||
- @llamaindex/autotool@4.0.2
|
||||
|
||||
## 0.1.77
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "@llamaindex/autotool-02-next-example",
|
||||
"private": true,
|
||||
"version": "0.1.77",
|
||||
"version": "0.1.84",
|
||||
"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,7 +1,7 @@
|
||||
{
|
||||
"name": "@llamaindex/autotool",
|
||||
"type": "module",
|
||||
"version": "4.0.1",
|
||||
"version": "4.0.8",
|
||||
"description": "auto transpile your JS function to LLM Agent compatible",
|
||||
"files": [
|
||||
"dist",
|
||||
|
||||
@@ -1,5 +1,41 @@
|
||||
# @llamaindex/cloud
|
||||
|
||||
## 1.0.6
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [fa60fc6]
|
||||
- @llamaindex/env@0.1.16
|
||||
- @llamaindex/core@0.3.5
|
||||
|
||||
## 1.0.5
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [e2a0876]
|
||||
- @llamaindex/core@0.3.4
|
||||
|
||||
## 1.0.4
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- 06f632b: fix(cloud): allow filename in llama parse
|
||||
|
||||
## 1.0.3
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [0493f67]
|
||||
- @llamaindex/core@0.3.3
|
||||
|
||||
## 1.0.2
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [4ba2cfe]
|
||||
- @llamaindex/env@0.1.15
|
||||
- @llamaindex/core@0.3.2
|
||||
|
||||
## 1.0.1
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,11 +1,12 @@
|
||||
{
|
||||
"name": "@llamaindex/cloud",
|
||||
"version": "1.0.1",
|
||||
"version": "1.0.6",
|
||||
"type": "module",
|
||||
"license": "MIT",
|
||||
"scripts": {
|
||||
"generate": "pnpx @hey-api/openapi-ts@0.53.0",
|
||||
"build": "pnpm run generate && bunchee"
|
||||
"generate": "pnpx @hey-api/openapi-ts@0.53.11",
|
||||
"build": "pnpm run generate && bunchee",
|
||||
"dev": "bunchee --watch"
|
||||
},
|
||||
"files": [
|
||||
"openapi.json",
|
||||
@@ -49,8 +50,8 @@
|
||||
"directory": "packages/cloud"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@hey-api/client-fetch": "^0.2.4",
|
||||
"@hey-api/openapi-ts": "^0.53.0",
|
||||
"@hey-api/client-fetch": "^0.4.2",
|
||||
"@hey-api/openapi-ts": "^0.53.11",
|
||||
"@llamaindex/core": "workspace:*",
|
||||
"@llamaindex/env": "workspace:*",
|
||||
"bunchee": "5.5.1"
|
||||
|
||||
@@ -84,6 +84,13 @@ export class LlamaParseReader extends FileReader {
|
||||
disableReconstruction?: boolean | undefined;
|
||||
inputS3Path?: string | undefined;
|
||||
outputS3PathPrefix?: string | undefined;
|
||||
continuousMode?: boolean | undefined;
|
||||
isFormattingInstruction?: boolean | undefined;
|
||||
annotateLinks?: boolean | undefined;
|
||||
azureOpenaiDeploymentName?: string | undefined;
|
||||
azureOpenaiEndpoint?: string | undefined;
|
||||
azureOpenaiApiVersion?: string | undefined;
|
||||
azureOpenaiKey?: string | undefined;
|
||||
|
||||
// numWorkers is implemented in SimpleDirectoryReader
|
||||
stdout?: WriteStream | undefined;
|
||||
@@ -144,13 +151,19 @@ export class LlamaParseReader extends FileReader {
|
||||
}
|
||||
|
||||
// Create a job for the LlamaParse API
|
||||
private async createJob(data: Uint8Array): Promise<string> {
|
||||
async #createJob(data: Uint8Array, filename?: string): Promise<string> {
|
||||
if (this.verbose) {
|
||||
console.log("Started uploading the file");
|
||||
}
|
||||
|
||||
// todo: remove Blob usage when we drop Node.js 18 support
|
||||
const file: File | Blob =
|
||||
globalThis.File && filename
|
||||
? new File([data], filename)
|
||||
: new Blob([data]);
|
||||
|
||||
const body = {
|
||||
file: new Blob([data]),
|
||||
file,
|
||||
language: this.language,
|
||||
parsing_instruction: this.parsingInstruction,
|
||||
skip_diagonal_text: this.skipDiagonalText,
|
||||
@@ -175,6 +188,13 @@ export class LlamaParseReader extends FileReader {
|
||||
disable_reconstruction: this.disableReconstruction,
|
||||
input_s3_path: this.inputS3Path,
|
||||
output_s3_path_prefix: this.outputS3PathPrefix,
|
||||
continuous_mode: this.continuousMode,
|
||||
is_formatting_instruction: this.isFormattingInstruction,
|
||||
annotate_links: this.annotateLinks,
|
||||
azure_openai_deployment_name: this.azureOpenaiDeploymentName,
|
||||
azure_openai_endpoint: this.azureOpenaiEndpoint,
|
||||
azure_openai_api_version: this.azureOpenaiApiVersion,
|
||||
azure_openai_key: this.azureOpenaiKey,
|
||||
} satisfies {
|
||||
[Key in keyof Body_upload_file_api_v1_parsing_upload_post]-?:
|
||||
| Body_upload_file_api_v1_parsing_upload_post[Key]
|
||||
@@ -286,10 +306,14 @@ export class LlamaParseReader extends FileReader {
|
||||
* To be used with resultType = "text" and "markdown"
|
||||
*
|
||||
* @param {Uint8Array} fileContent - The content of the file to be loaded.
|
||||
* @param {string} filename - The name of the file to be loaded.
|
||||
* @return {Promise<Document[]>} A Promise object that resolves to an array of Document objects.
|
||||
*/
|
||||
async loadDataAsContent(fileContent: Uint8Array): Promise<Document[]> {
|
||||
return this.createJob(fileContent)
|
||||
async loadDataAsContent(
|
||||
fileContent: Uint8Array,
|
||||
filename?: string,
|
||||
): Promise<Document[]> {
|
||||
return this.#createJob(fileContent, filename)
|
||||
.then(async (jobId) => {
|
||||
if (this.verbose) {
|
||||
console.log(`Started parsing the file under job id ${jobId}`);
|
||||
@@ -312,7 +336,9 @@ export class LlamaParseReader extends FileReader {
|
||||
})
|
||||
.catch((error) => {
|
||||
if (this.ignoreErrors) {
|
||||
console.warn(`Error while parsing the file: ${error.message}`);
|
||||
console.warn(
|
||||
`Error while parsing the file: ${error.message ?? error.detail}`,
|
||||
);
|
||||
return [];
|
||||
} else {
|
||||
throw error;
|
||||
@@ -336,7 +362,10 @@ export class LlamaParseReader extends FileReader {
|
||||
? await fs.readFile(filePathOrContent)
|
||||
: filePathOrContent;
|
||||
// Creates a job for the file
|
||||
jobId = await this.createJob(data);
|
||||
jobId = await this.#createJob(
|
||||
data,
|
||||
isFilePath ? path.basename(filePathOrContent) : undefined,
|
||||
);
|
||||
if (this.verbose) {
|
||||
console.log(`Started parsing the file under job id ${jobId}`);
|
||||
}
|
||||
|
||||
@@ -1,5 +1,41 @@
|
||||
# @llamaindex/community
|
||||
|
||||
## 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
|
||||
|
||||
- Updated dependencies [0493f67]
|
||||
- @llamaindex/core@0.3.3
|
||||
|
||||
## 0.0.50
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [4ba2cfe]
|
||||
- @llamaindex/env@0.1.15
|
||||
- @llamaindex/core@0.3.2
|
||||
|
||||
## 0.0.49
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -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,7 +1,7 @@
|
||||
{
|
||||
"name": "@llamaindex/community",
|
||||
"description": "Community package for LlamaIndexTS",
|
||||
"version": "0.0.49",
|
||||
"version": "0.0.54",
|
||||
"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,
|
||||
|
||||
@@ -1,5 +1,31 @@
|
||||
# @llamaindex/core
|
||||
|
||||
## 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
|
||||
|
||||
- 0493f67: fix(core): inline `python-format-js`
|
||||
|
||||
## 0.3.2
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [4ba2cfe]
|
||||
- @llamaindex/env@0.1.15
|
||||
|
||||
## 0.3.1
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "@llamaindex/core",
|
||||
"type": "module",
|
||||
"version": "0.3.1",
|
||||
"version": "0.3.5",
|
||||
"description": "LlamaIndex Core Module",
|
||||
"exports": {
|
||||
"./agent": {
|
||||
@@ -336,8 +336,7 @@
|
||||
"ajv": "^8.17.1",
|
||||
"bunchee": "5.5.1",
|
||||
"happy-dom": "^15.7.4",
|
||||
"natural": "^8.0.1",
|
||||
"python-format-js": "^1.4.3"
|
||||
"natural": "^8.0.1"
|
||||
},
|
||||
"dependencies": {
|
||||
"@llamaindex/env": "workspace:*",
|
||||
|
||||
@@ -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 ?? {};
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import format from "python-format-js";
|
||||
import type { ChatMessage } from "../llms";
|
||||
import type { BaseOutputParser, Metadata } from "../schema";
|
||||
import { objectEntries } from "../utils";
|
||||
import { format } from "./format";
|
||||
import { PromptType } from "./prompt-type";
|
||||
|
||||
type MappingFn<TemplatesVar extends string[] = string[]> = (
|
||||
|
||||
@@ -0,0 +1,207 @@
|
||||
/**
|
||||
* MIT License
|
||||
*
|
||||
* Copyright (c) 2019 jhonararipe
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to deal
|
||||
* in the Software without restriction, including without limitation the rights
|
||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
* copies of the Software, and to permit persons to whom the Software is
|
||||
* furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all
|
||||
* copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
* SOFTWARE.
|
||||
*/
|
||||
"use strict";
|
||||
function formatImpl(this: string, ...args_: any[]) {
|
||||
// Create variables
|
||||
let self = this;
|
||||
const __patterns__ = self.match(/({.*?})/g);
|
||||
const {
|
||||
REF,
|
||||
FILL_CHAR,
|
||||
MASK_NUMBER,
|
||||
ALIGN_OP,
|
||||
CROP_SIZE,
|
||||
DOT,
|
||||
FRACTION,
|
||||
TYPE_VAR,
|
||||
} = {
|
||||
REF: 1,
|
||||
FILL_CHAR: 2,
|
||||
MASK_NUMBER: 3,
|
||||
ALIGN_OP: 4,
|
||||
CROP_SIZE: 5,
|
||||
DOT: 6,
|
||||
FRACTION: 7,
|
||||
TYPE_VAR: 8,
|
||||
};
|
||||
const DEFAULT_PLACE = 6;
|
||||
const ALL_REGEXP =
|
||||
/{(\w+)?:([^>\^<\d#]|0)?([#%,])?([>^<\.])?(\d+)?(\.)?(\d+)?([eEfFgGdxXobn#%])?}/g;
|
||||
const regExpBasic = /{\[?(\w+)\]?}/; // it's not best solution
|
||||
const isObject = typeof args_[0] === "object";
|
||||
// types/use logic
|
||||
__patterns__?.map((pattern, patt_index) => {
|
||||
const kargs = ALL_REGEXP.exec(pattern) || ALL_REGEXP.exec(pattern);
|
||||
const wargs = regExpBasic.exec(pattern);
|
||||
|
||||
// Insert values (one 2 one / array / object)
|
||||
const INDEX_VAR =
|
||||
(wargs ? wargs[REF] : kargs ? kargs[REF] : patt_index) || patt_index;
|
||||
// @ts-expect-error
|
||||
const NATUAL_VALUE = isObject ? args_[0][INDEX_VAR] : args_[INDEX_VAR];
|
||||
// @ts-expect-error
|
||||
let ACTUAL_VALUE = isObject ? args_[0][INDEX_VAR] : args_[INDEX_VAR];
|
||||
|
||||
// Verify sintax/semantic
|
||||
if (ACTUAL_VALUE === null || ACTUAL_VALUE === undefined)
|
||||
throw new Error(
|
||||
`Replacement index ${INDEX_VAR} out of range for positional args tuple`,
|
||||
);
|
||||
if (kargs) {
|
||||
// If TYPE_VAR is not defined and the first argument is a number, pad a string should from left, so set TYPE_VAR to "d"
|
||||
if (kargs[TYPE_VAR] === undefined && typeof ACTUAL_VALUE === "number") {
|
||||
kargs[TYPE_VAR] = "d";
|
||||
}
|
||||
const LETTER =
|
||||
(!kargs[FILL_CHAR]
|
||||
? false
|
||||
: !kargs[ALIGN_OP] &&
|
||||
[..."FfbefoxXn"].includes(kargs[FILL_CHAR].toLowerCase())
|
||||
? kargs[FILL_CHAR]
|
||||
: kargs[TYPE_VAR]) || kargs[TYPE_VAR];
|
||||
// padronaze
|
||||
if (LETTER) {
|
||||
const floatSize = pattern.includes(".")
|
||||
? Number(kargs[FRACTION] || kargs[CROP_SIZE])
|
||||
: DEFAULT_PLACE;
|
||||
switch (LETTER) {
|
||||
case "E":
|
||||
ACTUAL_VALUE =
|
||||
ACTUAL_VALUE.toExponential(DEFAULT_PLACE).toUpperCase();
|
||||
break;
|
||||
case "e":
|
||||
ACTUAL_VALUE = ACTUAL_VALUE.toExponential(DEFAULT_PLACE);
|
||||
break;
|
||||
case "X":
|
||||
ACTUAL_VALUE = ACTUAL_VALUE.toString(16).toUpperCase();
|
||||
break;
|
||||
case "x":
|
||||
ACTUAL_VALUE = ACTUAL_VALUE.toString(16); // Hexadecimal
|
||||
break;
|
||||
case "b":
|
||||
ACTUAL_VALUE = ACTUAL_VALUE.toString(2); // Binary
|
||||
break;
|
||||
case "f":
|
||||
case "F":
|
||||
ACTUAL_VALUE = ACTUAL_VALUE.toFixed(floatSize);
|
||||
break;
|
||||
case "o":
|
||||
ACTUAL_VALUE = ACTUAL_VALUE.toString(8); // Octal
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
// mask
|
||||
switch (kargs[MASK_NUMBER]) {
|
||||
case "#":
|
||||
const MASK = {
|
||||
x: "0x",
|
||||
X: "0X",
|
||||
o: "0o",
|
||||
b: "0b",
|
||||
}[LETTER];
|
||||
ACTUAL_VALUE = MASK + ACTUAL_VALUE;
|
||||
break;
|
||||
}
|
||||
}
|
||||
// signal
|
||||
if (
|
||||
// @ts-expect-error
|
||||
[..." +-,%"].includes(kargs[FILL_CHAR]) &&
|
||||
typeof NATUAL_VALUE === "number"
|
||||
) {
|
||||
ACTUAL_VALUE = ACTUAL_VALUE.toString().replace("-", "");
|
||||
if (NATUAL_VALUE >= 0)
|
||||
switch (kargs[FILL_CHAR]) {
|
||||
case "+":
|
||||
ACTUAL_VALUE = "+" + ACTUAL_VALUE;
|
||||
break;
|
||||
case " ":
|
||||
ACTUAL_VALUE = " " + ACTUAL_VALUE;
|
||||
break;
|
||||
case ",":
|
||||
ACTUAL_VALUE = NATUAL_VALUE.toString()
|
||||
.split(/(?=(?:...)*$)/)
|
||||
.join(kargs[FILL_CHAR]);
|
||||
break;
|
||||
case "%":
|
||||
ACTUAL_VALUE =
|
||||
(NATUAL_VALUE * 100).toFixed(
|
||||
// @ts-expect-error
|
||||
kargs[FRACTION] || DEFAULT_PLACE,
|
||||
) + "%";
|
||||
break;
|
||||
}
|
||||
else ACTUAL_VALUE = "-" + ACTUAL_VALUE;
|
||||
}
|
||||
// space / order / trim
|
||||
if (kargs[CROP_SIZE]) {
|
||||
ACTUAL_VALUE = ACTUAL_VALUE.toString();
|
||||
const FILL_ELEMENT = kargs[FILL_CHAR] || " ";
|
||||
const SIZE_STRING = ACTUAL_VALUE.length;
|
||||
const SIZE_ARG = kargs[CROP_SIZE];
|
||||
const FILL_LENGTH = SIZE_STRING > SIZE_ARG ? SIZE_STRING : SIZE_ARG;
|
||||
const FILL = FILL_ELEMENT.repeat(FILL_LENGTH);
|
||||
|
||||
switch (kargs[ALIGN_OP] || kargs[FILL_CHAR]) {
|
||||
case "<":
|
||||
ACTUAL_VALUE = ACTUAL_VALUE.padEnd(FILL_LENGTH, FILL_ELEMENT);
|
||||
break;
|
||||
case ".":
|
||||
if (!(LETTER && /[fF]/.test(LETTER)))
|
||||
ACTUAL_VALUE = ACTUAL_VALUE.slice(0, SIZE_ARG);
|
||||
break;
|
||||
case ">":
|
||||
ACTUAL_VALUE = ACTUAL_VALUE.padStart(FILL_LENGTH, FILL_ELEMENT);
|
||||
break;
|
||||
case "^":
|
||||
const length_start = Math.floor((FILL_LENGTH - SIZE_STRING) / 2);
|
||||
const string_start =
|
||||
length_start > 0
|
||||
? FILL_ELEMENT.repeat(length_start) + ACTUAL_VALUE
|
||||
: ACTUAL_VALUE;
|
||||
|
||||
ACTUAL_VALUE = FILL.replace(
|
||||
RegExp(`.{${string_start.length}}`),
|
||||
string_start,
|
||||
);
|
||||
break;
|
||||
default:
|
||||
ACTUAL_VALUE = LETTER
|
||||
? ACTUAL_VALUE.padStart(FILL_LENGTH, FILL_ELEMENT)
|
||||
: ACTUAL_VALUE.padEnd(FILL_LENGTH, FILL_ELEMENT);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// SET Definitive value
|
||||
self = self.replace(pattern, ACTUAL_VALUE);
|
||||
});
|
||||
|
||||
return self;
|
||||
}
|
||||
|
||||
export const format = (inputString: string, ...param: any[]) =>
|
||||
formatImpl.apply(inputString, param);
|
||||
@@ -42,13 +42,13 @@ export interface BaseReader {
|
||||
export abstract class FileReader implements BaseReader {
|
||||
abstract loadDataAsContent(
|
||||
fileContent: Uint8Array,
|
||||
fileName?: string,
|
||||
filename?: string,
|
||||
): Promise<Document[]>;
|
||||
|
||||
async loadData(filePath: string): Promise<Document[]> {
|
||||
const fileContent = await fs.readFile(filePath);
|
||||
const fileName = path.basename(filePath);
|
||||
const docs = await this.loadDataAsContent(fileContent, fileName);
|
||||
const filename = path.basename(filePath);
|
||||
const docs = await this.loadDataAsContent(fileContent, filename);
|
||||
docs.forEach(FileReader.addMetaData(filePath));
|
||||
return docs;
|
||||
}
|
||||
|
||||
@@ -1,5 +1,17 @@
|
||||
# @llamaindex/env
|
||||
|
||||
## 0.1.16
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- fa60fc6: fix(env): no esm shim
|
||||
|
||||
## 0.1.15
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- 4ba2cfe: fix(env): align export APIs
|
||||
|
||||
## 0.1.14
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,10 +1,11 @@
|
||||
{
|
||||
"name": "@llamaindex/env",
|
||||
"description": "environment wrapper, supports all JS environment including node, deno, bun, edge runtime, and cloudflare worker",
|
||||
"version": "0.1.14",
|
||||
"version": "0.1.16",
|
||||
"type": "module",
|
||||
"types": "dist/type/index.d.ts",
|
||||
"main": "dist/cjs/index.js",
|
||||
"types": "dist/index.d.ts",
|
||||
"module": "dist/index.js",
|
||||
"main": "dist/index.cjs",
|
||||
"keywords": [
|
||||
"llm",
|
||||
"llama",
|
||||
@@ -24,29 +25,30 @@
|
||||
"exports": {
|
||||
".": {
|
||||
"node": {
|
||||
"types": "./dist/type/index.d.ts",
|
||||
"types": "./dist/index.d.ts",
|
||||
"import": "./dist/index.js",
|
||||
"default": "./dist/cjs/index.js"
|
||||
"require": "./dist/index.cjs",
|
||||
"default": "./dist/index.cjs"
|
||||
},
|
||||
"workerd": {
|
||||
"types": "./dist/type/index.workerd.d.ts",
|
||||
"types": "./dist/index.workerd.d.ts",
|
||||
"default": "./dist/index.workerd.js"
|
||||
},
|
||||
"edge-light": {
|
||||
"types": "./dist/type/index.edge-light.d.ts",
|
||||
"types": "./dist/index.edge-light.d.ts",
|
||||
"default": "./dist/index.edge-light.js"
|
||||
},
|
||||
"browser": {
|
||||
"types": "./dist/type/index.browser.d.ts",
|
||||
"types": "./dist/index.browser.d.ts",
|
||||
"default": "./dist/index.browser.js"
|
||||
},
|
||||
"import": {
|
||||
"types": "./dist/type/index.d.ts",
|
||||
"types": "./dist/index.d.ts",
|
||||
"default": "./dist/index.js"
|
||||
},
|
||||
"require": {
|
||||
"types": "./dist/type/index.d.ts",
|
||||
"default": "./dist/cjs/index.js"
|
||||
"types": "./dist/index.d.cts",
|
||||
"default": "./dist/index.cjs"
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -61,27 +63,19 @@
|
||||
"directory": "packages/env"
|
||||
},
|
||||
"scripts": {
|
||||
"build": "rm -rf ./dist && pnpm run build:esm && pnpm run build:cjs && pnpm run build:type",
|
||||
"build:esm": "swc src -d dist --strip-leading-paths --config-file ../../.swcrc",
|
||||
"build:cjs": "swc src -d dist/cjs --strip-leading-paths --config-file ../../.cjs.swcrc",
|
||||
"build:type": "tsc -p tsconfig.json",
|
||||
"postbuild": "node -e \"require('fs').writeFileSync('./dist/cjs/package.json', JSON.stringify({ type: 'commonjs' }))\"",
|
||||
"dev": "concurrently \"pnpm run build:esm --watch\" \"pnpm run build:cjs --watch\" \"pnpm run build:type --watch\"",
|
||||
"dev": "bunchee --watch",
|
||||
"build": "bunchee",
|
||||
"test": "vitest"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@aws-crypto/sha256-js": "^5.2.0",
|
||||
"@swc/cli": "^0.4.0",
|
||||
"@swc/core": "^1.7.22",
|
||||
"@types/node": "^22.5.1",
|
||||
"@types/readable-stream": "^4.0.15",
|
||||
"@xenova/transformers": "^2.17.2",
|
||||
"concurrently": "^8.2.2",
|
||||
"bunchee": "5.5.1",
|
||||
"gpt-tokenizer": "^2.5.0",
|
||||
"pathe": "^1.1.2",
|
||||
"vitest": "^2.0.5"
|
||||
},
|
||||
"dependencies": {
|
||||
"@types/node": "^22.5.1"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@aws-crypto/sha256-js": "^5.2.0",
|
||||
"@xenova/transformers": "^2.17.2",
|
||||
|
||||
@@ -5,4 +5,7 @@
|
||||
*/
|
||||
import memFS from "./memfs/index.js";
|
||||
|
||||
export function createWriteStream() {
|
||||
throw new Error("Not supported in this environment.");
|
||||
}
|
||||
export const fs = memFS.promises;
|
||||
|
||||
@@ -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$ __";
|
||||
|
||||
|
||||
@@ -4,7 +4,6 @@
|
||||
* @module
|
||||
*/
|
||||
import "./global-check.js";
|
||||
export * from "./web-polyfill.js";
|
||||
|
||||
export { consoleLogger, emptyLogger, type Logger } from "./logger/index.js";
|
||||
export {
|
||||
@@ -15,6 +14,7 @@ export {
|
||||
} from "./multi-model/index.browser.js";
|
||||
export { Tokenizers, tokenizers, type Tokenizer } from "./tokenizers/js.js";
|
||||
export { NotSupportCurrentRuntimeClass } from "./utils/shared.js";
|
||||
export * from "./web-polyfill.js";
|
||||
// @ts-expect-error
|
||||
if (typeof window === "undefined") {
|
||||
console.warn(
|
||||
|
||||
@@ -4,8 +4,6 @@
|
||||
* @module
|
||||
*/
|
||||
import "./global-check.js";
|
||||
export * from "./node-polyfill.js";
|
||||
|
||||
export { consoleLogger, emptyLogger, type Logger } from "./logger/index.js";
|
||||
export {
|
||||
loadTransformers,
|
||||
@@ -13,5 +11,6 @@ export {
|
||||
type LoadTransformerEvent,
|
||||
type OnLoad,
|
||||
} from "./multi-model/index.non-nodejs.js";
|
||||
export * from "./node-polyfill.js";
|
||||
export { Tokenizers, tokenizers, type Tokenizer } from "./tokenizers/js.js";
|
||||
export { NotSupportCurrentRuntimeClass } from "./utils/shared.js";
|
||||
|
||||
@@ -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,
|
||||
};
|
||||
|
||||
@@ -9,9 +9,12 @@
|
||||
*/
|
||||
import { Sha256 } from "@aws-crypto/sha256-js";
|
||||
import pathe from "pathe";
|
||||
import { fs } from "./fs/memory.js";
|
||||
import { NotSupportCurrentRuntimeClass } from "./utils/shared.js";
|
||||
|
||||
export { fs, pathe as path };
|
||||
export { createWriteStream, fs } from "./fs/memory.js";
|
||||
export { fileURLToPath } from "./url/index.js";
|
||||
export { pathe as path };
|
||||
export const Readable = NotSupportCurrentRuntimeClass.bind("non-Node.js");
|
||||
|
||||
export interface SHA256 {
|
||||
update(data: string | Uint8Array): void;
|
||||
@@ -46,6 +49,8 @@ export function randomUUID(): string {
|
||||
return crypto.randomUUID();
|
||||
}
|
||||
|
||||
export const process: NodeJS.Process = globalThis.process;
|
||||
|
||||
export {
|
||||
AsyncLocalStorage,
|
||||
CustomEvent,
|
||||
|
||||
@@ -0,0 +1,172 @@
|
||||
// Copyright (c) 2000-2006, The Perl Foundation.
|
||||
//
|
||||
// Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed.
|
||||
//
|
||||
// Preamble
|
||||
//
|
||||
// This license establishes the terms under which a given free software Package may be copied, modified, distributed, and/or redistributed. The intent is that the Copyright Holder maintains some artistic control over the development of that Package while still keeping the Package available as open source and free software.
|
||||
//
|
||||
// You are always permitted to make arrangements wholly outside of this license directly with the Copyright Holder of a given Package. If the terms of this license do not permit the full use that you propose to make of the Package, you should contact the Copyright Holder and seek a different licensing arrangement.
|
||||
//
|
||||
// Definitions
|
||||
//
|
||||
// "Copyright Holder" means the individual(s) or organization(s) named in the copyright notice for the entire Package.
|
||||
//
|
||||
// "Contributor" means any party that has contributed code or other material to the Package, in accordance with the Copyright Holder's procedures.
|
||||
//
|
||||
// "You" and "your" means any person who would like to copy, distribute, or modify the Package.
|
||||
//
|
||||
// "Package" means the collection of files distributed by the Copyright Holder, and derivatives of that collection and/or of those files. A given Package may consist of either the Standard Version, or a Modified Version.
|
||||
//
|
||||
// "Distribute" means providing a copy of the Package or making it accessible to anyone else, or in the case of a company or organization, to others outside of your company or organization.
|
||||
//
|
||||
// "Distributor Fee" means any fee that you charge for Distributing this Package or providing support for this Package to another party. It does not mean licensing fees.
|
||||
//
|
||||
// "Standard Version" refers to the Package if it has not been modified, or has been modified only in ways explicitly requested by the Copyright Holder.
|
||||
//
|
||||
// "Modified Version" means the Package, if it has been changed, and such changes were not explicitly requested by the Copyright Holder.
|
||||
//
|
||||
// "Original License" means this Artistic License as Distributed with the Standard Version of the Package, in its current version or as it may be modified by The Perl Foundation in the future.
|
||||
//
|
||||
// "Source" form means the source code, documentation source, and configuration files for the Package.
|
||||
//
|
||||
// "Compiled" form means the compiled bytecode, object code, binary, or any other form resulting from mechanical transformation or translation of the Source form.
|
||||
//
|
||||
// Permission for Use and Modification Without Distribution
|
||||
//
|
||||
// (1) You are permitted to use the Standard Version and create and use Modified Versions for any purpose without restriction, provided that you do not Distribute the Modified Version.
|
||||
//
|
||||
// Permissions for Redistribution of the Standard Version
|
||||
//
|
||||
// (2) You may Distribute verbatim copies of the Source form of the Standard Version of this Package in any medium without restriction, either gratis or for a Distributor Fee, provided that you duplicate all of the original copyright notices and associated disclaimers. At your discretion, such verbatim copies may or may not include a Compiled form of the Package.
|
||||
//
|
||||
// (3) You may apply any bug fixes, portability changes, and other modifications made available from the Copyright Holder. The resulting Package will still be considered the Standard Version, and as such will be subject to the Original License.
|
||||
//
|
||||
// Distribution of Modified Versions of the Package as Source
|
||||
//
|
||||
// (4) You may Distribute your Modified Version as Source (either gratis or for a Distributor Fee, and with or without a Compiled form of the Modified Version) provided that you clearly document how it differs from the Standard Version, including, but not limited to, documenting any non-standard features, executables, or modules, and provided that you do at least ONE of the following:
|
||||
//
|
||||
// (a) make the Modified Version available to the Copyright Holder of the Standard Version, under the Original License, so that the Copyright Holder may include your modifications in the Standard Version.
|
||||
// (b) ensure that installation of your Modified Version does not prevent the user installing or running the Standard Version. In addition, the Modified Version must bear a name that is different from the name of the Standard Version.
|
||||
// (c) allow anyone who receives a copy of the Modified Version to make the Source form of the Modified Version available to others under
|
||||
//
|
||||
// (i) the Original License or
|
||||
// (ii) a license that permits the licensee to freely copy, modify and redistribute the Modified Version using the same licensing terms that apply to the copy that the licensee received, and requires that the Source form of the Modified Version, and of any works derived from it, be made freely available in that license fees are prohibited but Distributor Fees are allowed.
|
||||
//
|
||||
// Distribution of Compiled Forms of the Standard Version or Modified Versions without the Source
|
||||
//
|
||||
// (5) You may Distribute Compiled forms of the Standard Version without the Source, provided that you include complete instructions on how to get the Source of the Standard Version. Such instructions must be valid at the time of your distribution. If these instructions, at any time while you are carrying out such distribution, become invalid, you must provide new instructions on demand or cease further distribution. If you provide valid instructions or cease distribution within thirty days after you become aware that the instructions are invalid, then you do not forfeit any of your rights under this license.
|
||||
//
|
||||
// (6) You may Distribute a Modified Version in Compiled form without the Source, provided that you comply with Section 4 with respect to the Source of the Modified Version.
|
||||
//
|
||||
// Aggregating or Linking the Package
|
||||
//
|
||||
// (7) You may aggregate the Package (either the Standard Version or Modified Version) with other packages and Distribute the resulting aggregation provided that you do not charge a licensing fee for the Package. Distributor Fees are permitted, and licensing fees for other components in the aggregation are permitted. The terms of this license apply to the use and Distribution of the Standard or Modified Versions as included in the aggregation.
|
||||
//
|
||||
// (8) You are permitted to link Modified and Standard Versions with other works, to embed the Package in a larger work of your own, or to build stand-alone binary or bytecode versions of applications that include the Package, and Distribute the result without restriction, provided the result does not expose a direct interface to the Package.
|
||||
//
|
||||
// Items That are Not Considered Part of a Modified Version
|
||||
//
|
||||
// (9) Works (including, but not limited to, modules and scripts) that merely extend or make use of the Package, do not, by themselves, cause the Package to be a Modified Version. In addition, such works are not considered parts of the Package itself, and are not subject to the terms of this license.
|
||||
//
|
||||
// General Provisions
|
||||
//
|
||||
// (10) Any use, modification, and distribution of the Standard or Modified Versions is governed by this Artistic License. By using, modifying or distributing the Package, you accept this license. Do not use, modify, or distribute the Package, if you do not accept this license.
|
||||
//
|
||||
// (11) If your Modified Version has been derived from a Modified Version made by someone other than you, you are nevertheless required to ensure that your Modified Version complies with the requirements of this license.
|
||||
//
|
||||
// (12) This license does not grant you the right to use any trademark, service mark, tradename, or logo of the Copyright Holder.
|
||||
//
|
||||
// (13) This license includes the non-exclusive, worldwide, free-of-charge patent license to make, have made, use, offer to sell, sell, import and otherwise transfer the Package with respect to any patent claims licensable by the Copyright Holder that are necessarily infringed by the Package. If you institute patent litigation (including a cross-claim or counterclaim) against any party alleging that the Package constitutes direct or contributory patent infringement, then this Artistic License to you shall terminate on the date that such litigation is filed.
|
||||
//
|
||||
// (14) Disclaimer of Warranty:
|
||||
// THE PACKAGE IS PROVIDED BY THE COPYRIGHT HOLDER AND CONTRIBUTORS "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES. THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT ARE DISCLAIMED TO THE EXTENT PERMITTED BY YOUR LOCAL LAW. UNLESS REQUIRED BY LAW, NO COPYRIGHT HOLDER OR CONTRIBUTOR WILL BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING IN ANY WAY OUT OF THE USE OF THE PACKAGE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
/**
|
||||
* This function ensures the correct decodings of percent-encoded characters as
|
||||
* well as ensuring a cross-platform valid absolute path string.
|
||||
*/
|
||||
export function fileURLToPath(href: string, separator: string): string {
|
||||
// conform with Node.js fileURLToPath
|
||||
if (!href.includes(":/")) {
|
||||
const error = new Error("Invalid URL") as any;
|
||||
error.code = "ERR_INVALID_URL";
|
||||
throw error;
|
||||
}
|
||||
if (!href.startsWith("file:")) {
|
||||
const error = new Error("The URL must be of scheme file") as any;
|
||||
error.code = "ERR_INVALID_URL_SCHEME";
|
||||
throw error;
|
||||
}
|
||||
|
||||
// https://en.wikipedia.org/wiki/File_URI_scheme#Examples
|
||||
// https://nodejs.org/api/url.html#urlfileurltopathurl
|
||||
// file:/path (no hostname)
|
||||
// file://hostname/path
|
||||
// file:///path (empty hostname)
|
||||
let file;
|
||||
if (separator === "\\") {
|
||||
// is windows
|
||||
if (href.startsWith("file:///")) {
|
||||
// is full path, e.g. file:///foo
|
||||
file = href.substring(8);
|
||||
if (file[1] !== ":") {
|
||||
const error = new Error("File URL path must be absolute") as any;
|
||||
error.code = "ERR_INVALID_FILE_URL_PATH";
|
||||
throw error;
|
||||
}
|
||||
} else if (href.startsWith("file://localhost/")) {
|
||||
// is localhost path, e.g. file://localhost/foo
|
||||
// conform with Node.js fileURLToPath
|
||||
file = href.substring(17); // trim leading slash
|
||||
if (file[1] !== ":") {
|
||||
const error = new Error("File URL path must be absolute") as any;
|
||||
error.code = "ERR_INVALID_FILE_URL_PATH";
|
||||
throw error;
|
||||
}
|
||||
} else if (href.startsWith("file://")) {
|
||||
// is host path, e.g. file://hostname/foo
|
||||
// conform with Node.js fileURLToPath, which does not error
|
||||
file = href.substring(7);
|
||||
file = separator + separator + file;
|
||||
} else if (href.startsWith("file:/")) {
|
||||
// is full path with unknown drive letter
|
||||
// conform with Node.js fileURLToPath
|
||||
file = href.substring(6);
|
||||
if (file[1] !== ":") {
|
||||
const error = new Error("File URL path must be absolute") as any;
|
||||
error.code = "ERR_INVALID_FILE_URL_PATH";
|
||||
throw error;
|
||||
}
|
||||
} else {
|
||||
file = href;
|
||||
}
|
||||
|
||||
// replace slashes with backslashes
|
||||
file = file.replace(/[/]/g, separator);
|
||||
} else if (separator === "/") {
|
||||
// is posix
|
||||
if (href.startsWith("file:///")) {
|
||||
// is full path, e.g. file:///foo
|
||||
file = href.substring(7); // keep leading slash
|
||||
} else if (href.startsWith("file://")) {
|
||||
// is host path, e.g. file://localhost/foo
|
||||
if (!href.startsWith("file://localhost/")) {
|
||||
const error = new Error(
|
||||
'File URL host must be "localhost" or empty',
|
||||
) as any;
|
||||
error.code = "ERR_INVALID_FILE_URL_HOST";
|
||||
throw error;
|
||||
}
|
||||
file = href.substring(16); // keep leading slash
|
||||
} else if (href.startsWith("file:/")) {
|
||||
// is full path, e.g. file:/foo
|
||||
file = href.substring(5); // keep leading slash
|
||||
} else {
|
||||
file = href;
|
||||
}
|
||||
} else {
|
||||
file = href;
|
||||
}
|
||||
return 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 };
|
||||
|
||||
@@ -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
|
||||
: {};
|
||||
|
||||
@@ -9,9 +9,12 @@
|
||||
*/
|
||||
import { Sha256 } from "@aws-crypto/sha256-js";
|
||||
import pathe from "pathe";
|
||||
import { fs } from "./fs/memory.js";
|
||||
import { NotSupportCurrentRuntimeClass } from "./utils/shared.js";
|
||||
|
||||
export { fs, pathe as path };
|
||||
export { createWriteStream, fs } from "./fs/memory.js";
|
||||
export { fileURLToPath } from "./url/index.js";
|
||||
export { pathe as path };
|
||||
export const Readable = NotSupportCurrentRuntimeClass.bind("browser");
|
||||
|
||||
export interface SHA256 {
|
||||
update(data: string | Uint8Array): void;
|
||||
@@ -50,5 +53,6 @@ export {
|
||||
AsyncLocalStorage,
|
||||
CustomEvent,
|
||||
getEnv,
|
||||
process,
|
||||
setEnvs,
|
||||
} from "./utils/index.web.js";
|
||||
|
||||
@@ -1,5 +1,50 @@
|
||||
# @llamaindex/experimental
|
||||
|
||||
## 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
|
||||
|
||||
- llamaindex@0.7.4
|
||||
|
||||
## 0.0.104
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.7.3
|
||||
|
||||
## 0.0.103
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.7.2
|
||||
|
||||
## 0.0.102
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "@llamaindex/experimental",
|
||||
"description": "Experimental package for LlamaIndexTS",
|
||||
"version": "0.0.102",
|
||||
"version": "0.0.109",
|
||||
"type": "module",
|
||||
"types": "dist/type/index.d.ts",
|
||||
"main": "dist/cjs/index.js",
|
||||
|
||||
@@ -1,5 +1,95 @@
|
||||
# llamaindex
|
||||
|
||||
## 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
|
||||
|
||||
- Updated dependencies [06f632b]
|
||||
- @llamaindex/cloud@1.0.4
|
||||
|
||||
## 0.7.3
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [0493f67]
|
||||
- @llamaindex/core@0.3.3
|
||||
- @llamaindex/cloud@1.0.3
|
||||
- @llamaindex/anthropic@0.0.4
|
||||
- @llamaindex/clip@0.0.4
|
||||
- @llamaindex/deepinfra@0.0.4
|
||||
- @llamaindex/huggingface@0.0.4
|
||||
- @llamaindex/ollama@0.0.11
|
||||
- @llamaindex/openai@0.1.20
|
||||
- @llamaindex/portkey-ai@0.0.4
|
||||
- @llamaindex/replicate@0.0.4
|
||||
- @llamaindex/groq@0.0.19
|
||||
|
||||
## 0.7.2
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [4ba2cfe]
|
||||
- @llamaindex/env@0.1.15
|
||||
- @llamaindex/cloud@1.0.2
|
||||
- @llamaindex/core@0.3.2
|
||||
- @llamaindex/anthropic@0.0.3
|
||||
- @llamaindex/clip@0.0.3
|
||||
- @llamaindex/deepinfra@0.0.3
|
||||
- @llamaindex/groq@0.0.18
|
||||
- @llamaindex/huggingface@0.0.3
|
||||
- @llamaindex/ollama@0.0.10
|
||||
- @llamaindex/openai@0.1.19
|
||||
- @llamaindex/portkey-ai@0.0.3
|
||||
- @llamaindex/replicate@0.0.3
|
||||
|
||||
## 0.7.1
|
||||
|
||||
### Patch Changes
|
||||
|
||||