Compare commits

..

8 Commits

Author SHA1 Message Date
Alex Yang b185bda5b1 RELEASING: Releasing 2 package(s)
Releases:
  create-llama@0.0.14
  llamaindex@0.0.45

[skip ci]
2024-01-14 18:14:55 -06:00
Alex Yang d79804e271 docs: update README.md (#376) 2024-01-14 18:10:55 -06:00
Alex Yang 2b356c8613 fix(create-llama): component choice (#377) 2024-01-14 18:10:33 -06:00
Alex Yang 2e6b36ef4b docs: update changelog (#374) 2024-01-12 18:49:53 -06:00
Alex Yang edd0f66234 feat: support Together AI (#373) 2024-01-12 18:41:48 -06:00
Alex Yang 2da407d66c fix: cover type check on all ts files (#372) 2024-01-12 15:36:04 -06:00
Alex Yang fa574f709e chore(core): use bunchee to bundle (#370) 2024-01-12 12:50:33 -06:00
Alex Yang 1e6171521b refactor: use crypto.randomUUID (#371)
Ref: https://nodejs.org/docs/latest/api/crypto.html#cryptorandomuuidoptions
2024-01-12 12:30:17 -06:00
42 changed files with 938 additions and 1236 deletions
+18
View File
@@ -18,3 +18,21 @@ jobs:
run: pnpm install
- name: Run tests
run: pnpm run test
typecheck:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: pnpm/action-setup@v2
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version-file: ".nvmrc"
cache: "pnpm"
- name: Install dependencies
run: pnpm install
- name: Build
run: pnpm run build
working-directory: ./packages/core
- name: Run Type Check
run: pnpm run type-check
+1
View File
@@ -37,6 +37,7 @@ yarn-error.log*
.vercel
dist/
lib/
# vs code
.vscode/launch.json
+2 -1
View File
@@ -1,3 +1,4 @@
apps/docs/i18n
pnpm-lock.yaml
lib/
dist/
+5
View File
@@ -1,5 +1,10 @@
# LlamaIndex.TS
[![NPM Version](https://img.shields.io/npm/v/llamaindex)](https://www.npmjs.com/package/llamaindex)
[![NPM License](https://img.shields.io/npm/l/llamaindex)](https://www.npmjs.com/package/llamaindex)
[![NPM Downloads](https://img.shields.io/npm/dm/llamaindex)](https://www.npmjs.com/package/llamaindex)
[![Discord](https://img.shields.io/discord/1059199217496772688)](https://discord.com/invite/eN6D2HQ4aX)
LlamaIndex is a data framework for your LLM application.
Use your own data with large language models (LLMs, OpenAI ChatGPT and others) in Typescript and Javascript.
+1
View File
@@ -7,6 +7,7 @@
# Generated files
.docusaurus
.cache-loader
lib
# Misc
.DS_Store
+2
View File
@@ -28,8 +28,10 @@
},
"devDependencies": {
"@docusaurus/module-type-aliases": "2.4.3",
"@docusaurus/theme-classic": "^2.4.3",
"@docusaurus/types": "^2.4.3",
"@tsconfig/docusaurus": "^2.0.1",
"@types/node": "^18.19.6",
"docusaurus-plugin-typedoc": "^0.19.2",
"typedoc": "^0.24.8",
"typedoc-plugin-markdown": "^3.16.0",
+6 -2
View File
@@ -1,7 +1,11 @@
{
// This file is not used in compilation. It is here just for a nice editor experience.
"extends": "@tsconfig/docusaurus/tsconfig.json",
"extends": "./node_modules/@tsconfig/docusaurus/tsconfig.json",
"compilerOptions": {
"baseUrl": "."
"baseUrl": ".",
"composite": true,
"incremental": true,
"outDir": "./lib",
"tsBuildInfoFile": "./lib/.tsbuildinfo"
}
}
+1 -1
View File
@@ -4,7 +4,7 @@
"name": "examples",
"dependencies": {
"@datastax/astra-db-ts": "^0.1.2",
"@notionhq/client": "^2.2.13",
"@notionhq/client": "^2.2.14",
"@pinecone-database/pinecone": "^1.1.2",
"chromadb": "^1.7.3",
"commander": "^11.1.0",
+1 -2
View File
@@ -1,7 +1,6 @@
import { Portkey } from "llamaindex";
(async () => {
const llms = [{}];
const portkey = new Portkey({
mode: "single",
llms: [
@@ -13,7 +12,7 @@ import { Portkey } from "llamaindex";
},
],
});
const result = portkey.stream_chat([
const result = portkey.streamChat([
{ role: "system", content: "You are a helpful assistant." },
{ role: "user", content: "Tell me a joke." },
]);
+30
View File
@@ -0,0 +1,30 @@
import { TogetherEmbedding, TogetherLLM } from "llamaindex";
// process.env.TOGETHER_API_KEY is required
const together = new TogetherLLM({
model: "mistralai/Mixtral-8x7B-Instruct-v0.1",
});
(async () => {
const generator = await together.chat(
[
{
role: "system",
content: "You are an AI assistant",
},
{
role: "user",
content: "Tell me about San Francisco",
},
],
undefined,
true,
);
console.log("Chatting with Together AI...");
for await (const message of generator) {
process.stdout.write(message);
}
const embedding = new TogetherEmbedding();
const vector = await embedding.getTextEmbedding("Hello world!");
console.log("vector:", vector);
})();
+1
View File
@@ -1,4 +1,5 @@
{
"extends": "../tsconfig.json",
"compilerOptions": {
"target": "es2016",
"module": "commonjs",
+3 -1
View File
@@ -8,6 +8,7 @@
"lint": "turbo run lint",
"prepare": "husky install",
"test": "turbo run test",
"type-check": "tsc -b --diagnostics",
"new-version": "turbo run build lint test --filter=\"!docs\" && changeset version",
"new-snapshot": "turbo run build lint test --filter=\"!docs\" && changeset version --snapshot"
},
@@ -23,7 +24,8 @@
"prettier": "^3.1.1",
"prettier-plugin-organize-imports": "^3.2.4",
"ts-jest": "^29.1.1",
"turbo": "^1.11.2"
"turbo": "^1.11.2",
"typescript": "^5.3.3"
},
"packageManager": "pnpm@8.10.5+sha256.a4bd9bb7b48214bbfcd95f264bd75bb70d100e5d4b58808f5cd6ab40c6ac21c5",
"pnpm": {
+6
View File
@@ -1,5 +1,11 @@
# llamaindex
## 0.0.45
### Patch Changes
- 2e6b36e: feat: support together AI
## 0.0.44
### Patch Changes
+33 -1
View File
@@ -1,5 +1,10 @@
# LlamaIndex.TS
[![NPM Version](https://img.shields.io/npm/v/llamaindex)](https://www.npmjs.com/package/llamaindex)
[![NPM License](https://img.shields.io/npm/l/llamaindex)](https://www.npmjs.com/package/llamaindex)
[![NPM Downloads](https://img.shields.io/npm/dm/llamaindex)](https://www.npmjs.com/package/llamaindex)
[![Discord](https://img.shields.io/discord/1059199217496772688)](https://discord.com/invite/eN6D2HQ4aX)
LlamaIndex is a data framework for your LLM application.
Use your own data with large language models (LLMs, OpenAI ChatGPT and others) in Typescript and Javascript.
@@ -12,7 +17,7 @@ LlamaIndex.TS aims to be a lightweight, easy to use set of libraries to help you
## Getting started with an example:
LlamaIndex.TS requries Node v18 or higher. You can download it from https://nodejs.org or use https://nvm.sh (our preferred option).
LlamaIndex.TS requires Node v18 or higher. You can download it from https://nodejs.org or use https://nvm.sh (our preferred option).
In a new folder:
@@ -84,11 +89,38 @@ Check out our NextJS playground at https://llama-playground.vercel.app/. The sou
- [SimplePrompt](/packages/core/src/Prompt.ts): A simple standardized function call definition that takes in inputs and formats them in a template literal. SimplePrompts can be specialized using currying and combined using other SimplePrompt functions.
## Note: NextJS:
If you're using NextJS App Router, you'll need to use the NodeJS runtime (default) and add the following config to your next.config.js to have it use imports/exports in the same way Node does.
```js
export const runtime = "nodejs"; // default
```
```js
// next.config.js
/** @type {import('next').NextConfig} */
const nextConfig = {
webpack: (config) => {
config.resolve.alias = {
...config.resolve.alias,
sharp$: false,
"onnxruntime-node$": false,
mongodb$: false,
};
return config;
},
};
module.exports = nextConfig;
```
## Supported LLMs:
- OpenAI GPT-3.5-turbo and GPT-4
- Anthropic Claude Instant and Claude 2
- Llama2 Chat LLMs (70B, 13B, and 7B parameters)
- MistralAI Chat LLMs
## Contributing:
+25 -10
View File
@@ -1,6 +1,6 @@
{
"name": "llamaindex",
"version": "0.0.44",
"version": "0.0.45",
"license": "MIT",
"dependencies": {
"@anthropic-ai/sdk": "^0.9.1",
@@ -27,31 +27,46 @@
"rake-modified": "^1.0.8",
"replicate": "^0.21.1",
"string-strip-html": "^13.4.3",
"uuid": "^9.0.1",
"wink-nlp": "^1.14.3"
},
"devDependencies": {
"@types/jest": "^29.5.11",
"@types/lodash": "^4.14.202",
"@types/node": "^18.19.2",
"@types/node": "^18.19.6",
"@types/papaparse": "^5.3.14",
"@types/pg": "^8.10.9",
"@types/uuid": "^9.0.7",
"bunchee": "^4.3.3",
"node-stdlib-browser": "^1.2.0",
"tsup": "^7.2.0",
"typescript": "^5.3.2"
"typescript": "^5.3.3"
},
"engines": {
"node": ">=18.0.0"
},
"types": "./dist/index.d.ts",
"main": "./dist/index.js",
"module": "./dist/index.mjs",
"repository": "run-llama/LlamaIndexTS",
"exports": {
".": {
"types": "./dist/index.d.mts",
"import": "./dist/index.mjs",
"require": "./dist/index.js"
}
},
"files": [
"dist",
"examples",
"src",
"types",
"CHANGELOG.md"
],
"repository": {
"type": "git",
"url": "https://github.com/run-llama/LlamaIndexTS.git",
"directory": "packages/core"
},
"scripts": {
"lint": "eslint .",
"test": "jest",
"build": "tsup src/index.ts --format esm,cjs --dts",
"dev": "tsup src/index.ts --format esm,cjs --dts --watch"
"build": "bunchee",
"dev": "bunchee -w"
}
}
+4 -4
View File
@@ -1,4 +1,4 @@
import { v4 as uuidv4 } from "uuid";
import { randomUUID } from "node:crypto";
import { ChatHistory } from "./ChatHistory";
import { NodeWithScore, TextNode } from "./Node";
import {
@@ -206,7 +206,7 @@ export class DefaultContextGenerator implements ContextGenerator {
async generate(message: string, parentEvent?: Event): Promise<Context> {
if (!parentEvent) {
parentEvent = {
id: uuidv4(),
id: randomUUID(),
type: "wrapper",
tags: ["final"],
};
@@ -272,7 +272,7 @@ export class ContextChatEngine implements ChatEngine {
}
const parentEvent: Event = {
id: uuidv4(),
id: randomUUID(),
type: "wrapper",
tags: ["final"],
};
@@ -304,7 +304,7 @@ export class ContextChatEngine implements ChatEngine {
chatHistory = chatHistory ?? this.chatHistory;
const parentEvent: Event = {
id: uuidv4(),
id: randomUUID(),
type: "wrapper",
tags: ["final"],
};
+2 -2
View File
@@ -1,6 +1,6 @@
import { encodingForModel } from "js-tiktoken";
import { v4 as uuidv4 } from "uuid";
import { randomUUID } from "node:crypto";
import { Event, EventTag, EventType } from "./callbacks/CallbackManager";
export enum Tokenizers {
@@ -64,7 +64,7 @@ class GlobalsHelper {
tags?: EventTag[];
}): Event {
return {
id: uuidv4(),
id: randomUUID(),
type,
// inherit parent tags if tags not set
tags: tags || parentEvent?.tags,
+3 -4
View File
@@ -1,7 +1,6 @@
import _ from "lodash";
import { createHash } from "node:crypto";
import path from "path";
import { v4 as uuidv4 } from "uuid";
import { createHash, randomUUID } from "node:crypto";
import path from "node:path";
export enum NodeRelationship {
SOURCE = "SOURCE",
@@ -49,7 +48,7 @@ export abstract class BaseNode<T extends Metadata = Metadata> {
*
* Set to a UUID by default.
*/
id_: string = uuidv4();
id_: string = randomUUID();
embedding?: number[];
// Metadata fields
+4 -4
View File
@@ -1,4 +1,4 @@
import { v4 as uuidv4 } from "uuid";
import { randomUUID } from "node:crypto";
import { NodeWithScore, TextNode } from "./Node";
import {
BaseQuestionGenerator,
@@ -72,7 +72,7 @@ export class RetrieverQueryEngine implements BaseQueryEngine {
async query(query: string, parentEvent?: Event) {
const _parentEvent: Event = parentEvent || {
id: uuidv4(),
id: randomUUID(),
type: "wrapper",
tags: ["final"],
};
@@ -136,14 +136,14 @@ export class SubQuestionQueryEngine implements BaseQueryEngine {
// groups final retrieval+synthesis operation
const parentEvent: Event = {
id: uuidv4(),
id: randomUUID(),
type: "wrapper",
tags: ["final"],
};
// groups all sub-queries
const subQueryParentEvent: Event = {
id: uuidv4(),
id: randomUUID(),
parentId: parentEvent.id,
type: "wrapper",
tags: ["intermediate"],
@@ -14,7 +14,7 @@ export enum OpenAIEmbeddingModelType {
}
export class OpenAIEmbedding extends BaseEmbedding {
model: OpenAIEmbeddingModelType;
model: OpenAIEmbeddingModelType | string;
// OpenAI session params
apiKey?: string = undefined;
+1
View File
@@ -3,5 +3,6 @@ export * from "./HuggingFaceEmbedding";
export * from "./MistralAIEmbedding";
export * from "./MultiModalEmbedding";
export * from "./OpenAIEmbedding";
export { TogetherEmbedding } from "./together";
export * from "./types";
export * from "./utils";
+16
View File
@@ -0,0 +1,16 @@
import { OpenAIEmbedding } from "./OpenAIEmbedding";
export class TogetherEmbedding extends OpenAIEmbedding {
override model: string;
constructor(init?: Partial<OpenAIEmbedding>) {
super({
apiKey: process.env.TOGETHER_API_KEY,
...init,
additionalSessionOptions: {
...init?.additionalSessionOptions,
baseURL: "https://api.together.xyz/v1",
},
});
this.model = init?.model ?? "togethercomputer/m2-bert-80M-32k-retrieval";
}
}
+2 -2
View File
@@ -1,4 +1,4 @@
import { v4 as uuidv4 } from "uuid";
import { randomUUID } from "node:crypto";
import { BaseNode, Document, jsonToNode } from "../Node";
import { BaseQueryEngine } from "../QueryEngine";
import { BaseRetriever } from "../Retriever";
@@ -16,7 +16,7 @@ export abstract class IndexStruct {
indexId: string;
summary?: string;
constructor(indexId = uuidv4(), summary = undefined) {
constructor(indexId = randomUUID(), summary = undefined) {
this.indexId = indexId;
this.summary = summary;
}
+6 -2
View File
@@ -129,7 +129,7 @@ export class OpenAI implements LLM {
hasStreaming: boolean = true;
// Per completion OpenAI params
model: keyof typeof ALL_AVAILABLE_OPENAI_MODELS;
model: keyof typeof ALL_AVAILABLE_OPENAI_MODELS | string;
temperature: number;
topP: number;
maxTokens?: number;
@@ -205,12 +205,16 @@ export class OpenAI implements LLM {
}
get metadata() {
const contextWindow =
ALL_AVAILABLE_OPENAI_MODELS[
this.model as keyof typeof ALL_AVAILABLE_OPENAI_MODELS
]?.contextWindow ?? 1024;
return {
model: this.model,
temperature: this.temperature,
topP: this.topP,
maxTokens: this.maxTokens,
contextWindow: ALL_AVAILABLE_OPENAI_MODELS[this.model].contextWindow,
contextWindow,
tokenizer: Tokenizers.CL100K_BASE,
};
}
+1
View File
@@ -1,3 +1,4 @@
export * from "./LLM";
export * from "./mistral";
export { Ollama } from "./ollama";
export { TogetherLLM } from "./together";
+14
View File
@@ -0,0 +1,14 @@
import { OpenAI } from "./LLM";
export class TogetherLLM extends OpenAI {
constructor(init?: Partial<OpenAI>) {
super({
...init,
apiKey: process.env.TOGETHER_API_KEY,
additionalSessionOptions: {
...init?.additionalSessionOptions,
baseURL: "https://api.together.xyz/v1",
},
});
}
}
+4 -2
View File
@@ -1,5 +1,7 @@
{
"compilerOptions": {
"rootDir": ".",
"outDir": "./lib/",
"esModuleInterop": true,
"forceConsistentCasingInFileNames": true,
"isolatedModules": true,
@@ -10,8 +12,8 @@
"strict": true,
"lib": ["es2015", "dom"],
"target": "ES2015",
"resolveJsonModule": true,
"typeRoots": ["./types", "./node_modules/@types"]
"resolveJsonModule": true
},
"include": ["./src"],
"exclude": ["node_modules"]
}
+7
View File
@@ -1,5 +1,12 @@
# create-llama
## 0.0.14
### Patch Changes
- 2e6b36e: fix: re-organize file structure
- 2b356c8: fix: relative path incorrect
## 0.0.13
### Patch Changes
+3 -3
View File
@@ -9,8 +9,8 @@ import { makeDir } from "./helpers/make-dir";
import fs from "fs";
import terminalLink from "terminal-link";
import type { InstallTemplateArgs } from "./templates";
import { installTemplate } from "./templates";
import type { InstallTemplateArgs } from "./helpers";
import { installTemplate } from "./helpers";
export type InstallAppArgs = Omit<
InstallTemplateArgs,
@@ -94,7 +94,7 @@ export async function createApp({
});
// copy readme for fullstack
await fs.promises.copyFile(
path.join(__dirname, "templates", "README-fullstack.md"),
path.join(__dirname, "..", "templates", "README-fullstack.md"),
path.join(root, "README.md"),
);
} else {
+1 -1
View File
@@ -8,7 +8,7 @@ import type {
TemplateFramework,
TemplateType,
TemplateUI,
} from "../templates";
} from "../helpers";
import { createTestDir, runApp, runCreateLlama, type AppType } from "./utils";
const templateTypes: TemplateType[] = ["streaming", "simple"];
+12
View File
@@ -0,0 +1,12 @@
{
"extends": "../../../tsconfig.json",
"compilerOptions": {
"tsBuildInfoFile": "./lib/.e2e.tsbuildinfo"
},
"include": ["./**/*.ts"],
"references": [
{
"path": ".."
}
]
}
@@ -1,14 +1,14 @@
import { copy } from "../helpers/copy";
import { callPackageManager } from "../helpers/install";
import { copy } from "./copy";
import { callPackageManager } from "./install";
import fs from "fs/promises";
import path from "path";
import { cyan } from "picocolors";
import { COMMUNITY_OWNER, COMMUNITY_REPO } from "../helpers/constant";
import { PackageManager } from "../helpers/get-pkg-manager";
import { downloadAndExtractRepo } from "../helpers/repo";
import { COMMUNITY_OWNER, COMMUNITY_REPO } from "./constant";
import { PackageManager } from "./get-pkg-manager";
import { installPythonTemplate } from "./python";
import { downloadAndExtractRepo } from "./repo";
import {
InstallTemplateArgs,
TemplateEngine,
@@ -71,7 +71,13 @@ const copyTestData = async (
vectorDb?: TemplateVectorDB,
) => {
if (engine === "context") {
const srcPath = path.join(__dirname, "components", "data");
const srcPath = path.join(
__dirname,
"..",
"templates",
"components",
"data",
);
const destPath = path.join(root, "data");
console.log(`\nCopying test data to ${cyan(destPath)}\n`);
await copy("**", destPath, {
@@ -2,7 +2,7 @@ import fs from "fs/promises";
import path from "path";
import { cyan } from "picocolors";
import { parse, stringify } from "smol-toml";
import { copy } from "../helpers/copy";
import { copy } from "./copy";
import { InstallTemplateArgs, TemplateVectorDB } from "./types";
interface Dependency {
@@ -101,7 +101,14 @@ export const installPythonTemplate = async ({
"root" | "framework" | "template" | "engine" | "vectorDb"
>) => {
console.log("\nInitializing Python project with template:", template, "\n");
const templatePath = path.join(__dirname, "types", template, framework);
const templatePath = path.join(
__dirname,
"..",
"templates",
"types",
template,
framework,
);
await copy("**", root, {
parents: true,
cwd: templatePath,
@@ -123,7 +130,7 @@ export const installPythonTemplate = async ({
});
if (engine === "context") {
const compPath = path.join(__dirname, "components");
const compPath = path.join(__dirname, "..", "templates", "components");
const VectorDBPath = path.join(
compPath,
"vectordbs",
@@ -46,7 +46,14 @@ export const installTSTemplate = async ({
* Copy the template files to the target directory.
*/
console.log("\nInitializing project with template:", template, "\n");
const templatePath = path.join(__dirname, "types", template, framework);
const templatePath = path.join(
__dirname,
"..",
"templates",
"types",
template,
framework,
);
const copySource = ["**"];
if (!eslint) copySource.push("!eslintrc.json");
@@ -80,7 +87,7 @@ export const installTSTemplate = async ({
* Copy the selected chat engine files to the target directory and reference it.
*/
let relativeEngineDestPath;
const compPath = path.join(__dirname, "components");
const compPath = path.join(__dirname, "..", "templates", "components");
if (engine && (framework === "express" || framework === "nextjs")) {
console.log("\nUsing chat engine:", engine, "\n");
+3 -2
View File
@@ -1,6 +1,6 @@
{
"name": "create-llama",
"version": "0.0.13",
"version": "0.0.14",
"keywords": [
"rag",
"llamaindex",
@@ -17,7 +17,8 @@
"create-llama": "./dist/index.js"
},
"files": [
"dist"
"./dist/index.js",
"./templates"
],
"scripts": {
"clean": "rimraf --glob ./dist ./templates/**/__pycache__ ./templates/**/node_modules ./templates/**/poetry.lock",
+2 -2
View File
@@ -4,9 +4,9 @@ import path from "path";
import { blue, green } from "picocolors";
import prompts from "prompts";
import { InstallAppArgs } from "./create-app";
import { TemplateFramework } from "./helpers";
import { COMMUNITY_OWNER, COMMUNITY_REPO } from "./helpers/constant";
import { getRepoRootFolders } from "./helpers/repo";
import { TemplateFramework } from "./templates";
export type QuestionArgs = Omit<InstallAppArgs, "appPath" | "packageManager">;
@@ -40,7 +40,7 @@ const getVectorDbChoices = (framework: TemplateFramework) => {
];
const vectodbLang = framework === "fastapi" ? "python" : "typescript";
const compPath = path.join(__dirname, "components");
const compPath = path.join(__dirname, "..", "templates", "components");
const vectordbPath = path.join(compPath, "vectordbs", vectodbLang);
const availableChoices = fs
+10 -2
View File
@@ -1,11 +1,19 @@
{
"extends": "../../tsconfig.json",
"compilerOptions": {
"target": "es2019",
"moduleResolution": "node",
"strict": true,
"resolveJsonModule": true,
"esModuleInterop": true,
"skipLibCheck": false
"skipLibCheck": true
},
"exclude": ["templates", "dist"]
"include": [
"create-app.ts",
"index.ts",
"./helpers",
"questions.ts",
"package.json"
],
"exclude": ["dist"]
}
+1
View File
@@ -10,6 +10,7 @@ module.exports = {
"REPLICATE_API_TOKEN",
"ANTHROPIC_API_KEY",
"ASSEMBLYAI_API_KEY",
"TOGETHER_API_KEY",
"ASTRA_DB_APPLICATION_TOKEN",
"ASTRA_DB_ENDPOINT",
+643 -1176
View File
File diff suppressed because it is too large Load Diff
+32
View File
@@ -0,0 +1,32 @@
{
"compilerOptions": {
"target": "es2016",
"module": "commonjs",
"esModuleInterop": true,
"forceConsistentCasingInFileNames": true,
"strict": true,
"skipLibCheck": true,
"outDir": "./lib",
"tsBuildInfoFile": "./lib/.tsbuildinfo",
"incremental": true,
"composite": true
},
"files": [],
"references": [
{
"path": "./apps/docs/tsconfig.json"
},
{
"path": "./packages/core"
},
{
"path": "./packages/create-llama"
},
{
"path": "./packages/create-llama/e2e"
},
{
"path": "./examples"
}
]
}