chore: move postgres storage classes to @llamaindex/postgres (#1597)

This commit is contained in:
Thuc Pham
2025-01-20 12:24:44 +07:00
committed by GitHub
parent d6c270ec7a
commit 94566169fb
54 changed files with 674 additions and 505 deletions
+8
View File
@@ -0,0 +1,8 @@
---
"@llamaindex/e2e": patch
"@llamaindex/core": patch
"llamaindex": patch
"pg-vector-store": patch
---
refactor: @llamaindex/postgres
+1 -1
View File
@@ -150,7 +150,7 @@ jobs:
done
- name: Pack provider packages
run: |
for dir in packages/providers/*; do
for dir in packages/providers/* packages/providers/storage/*; do
if [ -d "$dir" ] && [ -f "$dir/package.json" ]; then
echo "Packing $dir"
pnpm pack --pack-destination ${{ runner.temp }} -C $dir
+1 -2
View File
@@ -1,6 +1,5 @@
import { config } from "dotenv";
import { Document, VectorStoreQueryMode } from "llamaindex";
import { PGVectorStore } from "llamaindex/vector-store/PGVectorStore";
import { Document, PGVectorStore, VectorStoreQueryMode } from "llamaindex";
import assert from "node:assert";
import { test } from "node:test";
import pg from "pg";
+19 -2
View File
@@ -37,7 +37,7 @@ Read and follow the instructions in the README.md file located one directory up
To import documents and save the embedding vectors to your database:
> `npx tsx pg-vector-store/load-docs.ts data`
> `npx tsx vector-store/pg/load-docs.ts data`
where data is the directory containing your input files. Using the `data` directory in the example above will read all of the files in that directory using the LlamaIndexTS default readers for each file type.
@@ -45,6 +45,23 @@ where data is the directory containing your input files. Using the `data` direct
To query using the resulting vector store:
> `npx tsx pg-vector-store/query.ts`
> `npx tsx vector-store/pg/query.ts`
The script will prompt for a question, then process and present the answer using the PGVectorStore data and your OpenAI API key. It will continue to prompt until you enter `q`, `quit` or `exit` as the next query.
## Supabase
You can try the supabase example by running:
> `npx tsx vector-store/pg/supabase.ts`
This will use the `POSTGRES_URL` environment variable to connect to your Supabase database.
Get one from the Supabase project settings page. See more details here: https://supabase.com/docs/guides/database/connecting-to-postgres#direct-connection
## Vercel
You can try the vercel example by running:
> `npx tsx vector-store/pg/vercel.ts`
For more information on Vercel Postgres, see: https://vercel.com/docs/storage/vercel-postgres/sdk
+34
View File
@@ -0,0 +1,34 @@
import dotenv from "dotenv";
import {
PGVectorStore,
SimpleDirectoryReader,
storageContextFromDefaults,
VectorStoreIndex,
} from "llamaindex";
dotenv.config();
// Get direct connection string from Supabase and set it as POSTGRES_URL environment variable
// https://supabase.com/docs/guides/database/connecting-to-postgres#direct-connection
const sourceDir = "../data";
const connectionString = process.env.POSTGRES_URL;
const rdr = new SimpleDirectoryReader();
const docs = await rdr.loadData({ directoryPath: sourceDir });
const pgvs = new PGVectorStore({ clientConfig: { connectionString } });
pgvs.setCollection(sourceDir);
const ctx = await storageContextFromDefaults({ vectorStore: pgvs });
const index = await VectorStoreIndex.fromDocuments(docs, {
storageContext: ctx,
});
const queryEngine = index.asQueryEngine();
const results = await queryEngine.query({
query: "Information about the planet",
});
console.log(results);
+15
View File
@@ -1,5 +1,6 @@
import { getEnv } from "@llamaindex/env";
import type { Tokenizer } from "@llamaindex/env/tokenizers";
import type { BaseEmbedding } from "../embeddings";
import type { LLM } from "../llms";
import {
type CallbackManager,
@@ -12,6 +13,11 @@ import {
setChunkSize,
withChunkSize,
} from "./settings/chunk-size";
import {
getEmbeddedModel,
setEmbeddedModel,
withEmbeddedModel,
} from "./settings/embedModel";
import { getLLM, setLLM, withLLM } from "./settings/llm";
import {
getTokenizer,
@@ -29,6 +35,15 @@ export const Settings = {
withLLM<Result>(llm: LLM, fn: () => Result): Result {
return withLLM(llm, fn);
},
get embedModel() {
return getEmbeddedModel();
},
set embedModel(embedModel) {
setEmbeddedModel(embedModel);
},
withEmbedModel<Result>(embedModel: BaseEmbedding, fn: () => Result): Result {
return withEmbeddedModel(embedModel, fn);
},
get tokenizer() {
return getTokenizer();
},
@@ -1,15 +1,18 @@
import type { BaseEmbedding } from "@llamaindex/core/embeddings";
import { AsyncLocalStorage } from "@llamaindex/env";
import { OpenAIEmbedding } from "@llamaindex/openai";
const embeddedModelAsyncLocalStorage = new AsyncLocalStorage<BaseEmbedding>();
let globalEmbeddedModel: BaseEmbedding | null = null;
export function getEmbeddedModel(): BaseEmbedding {
if (globalEmbeddedModel === null) {
globalEmbeddedModel = new OpenAIEmbedding();
const currentEmbeddedModel =
embeddedModelAsyncLocalStorage.getStore() ?? globalEmbeddedModel;
if (!currentEmbeddedModel) {
throw new Error(
"Cannot find Embedding, please set `Settings.embedModel = ...` on the top of your code",
);
}
return embeddedModelAsyncLocalStorage.getStore() ?? globalEmbeddedModel;
return currentEmbeddedModel;
}
export function setEmbeddedModel(embeddedModel: BaseEmbedding) {
@@ -0,0 +1,167 @@
import { path } from "@llamaindex/env";
import {
DEFAULT_DOC_STORE_PERSIST_FILENAME,
DEFAULT_PERSIST_DIR,
} from "../../global";
import type { StoredValue } from "../../schema";
import { BaseNode, Document, ObjectType, TextNode } from "../../schema";
const TYPE_KEY = "__type__";
const DATA_KEY = "__data__";
export interface Serializer<T> {
toPersistence(data: Record<string, unknown>): T;
fromPersistence(data: T): Record<string, unknown>;
}
export const jsonSerializer: Serializer<string> = {
toPersistence(data) {
return JSON.stringify(data);
},
fromPersistence(data) {
return JSON.parse(data);
},
};
export const noneSerializer: Serializer<Record<string, unknown>> = {
toPersistence(data) {
return data;
},
fromPersistence(data) {
return data;
},
};
type DocJson<Data> = {
[TYPE_KEY]: ObjectType;
[DATA_KEY]: Data;
};
export function isValidDocJson(
docJson: StoredValue | null | undefined,
): docJson is DocJson<unknown> {
return (
typeof docJson === "object" &&
docJson !== null &&
docJson[TYPE_KEY] !== undefined &&
docJson[DATA_KEY] !== undefined
);
}
export function docToJson(
doc: BaseNode,
serializer: Serializer<unknown>,
): DocJson<unknown> {
return {
[DATA_KEY]: serializer.toPersistence(doc.toJSON()),
[TYPE_KEY]: doc.type,
};
}
export function jsonToDoc<Data>(
docDict: DocJson<Data>,
serializer: Serializer<Data>,
): BaseNode {
const docType = docDict[TYPE_KEY];
// fixme: zod type check this
// eslint-disable-next-line @typescript-eslint/no-explicit-any
const dataDict: any = serializer.fromPersistence(docDict[DATA_KEY]);
let doc: BaseNode;
if (docType === ObjectType.DOCUMENT) {
doc = new Document({
text: dataDict.text,
id_: dataDict.id_,
embedding: dataDict.embedding,
hash: dataDict.hash,
metadata: dataDict.metadata,
});
} else if (docType === ObjectType.TEXT) {
doc = new TextNode({
text: dataDict.text,
id_: dataDict.id_,
hash: dataDict.hash,
metadata: dataDict.metadata,
relationships: dataDict.relationships,
});
} else {
throw new Error(`Unknown doc type: ${docType}`);
}
return doc;
}
const DEFAULT_PERSIST_PATH = path.join(
DEFAULT_PERSIST_DIR,
DEFAULT_DOC_STORE_PERSIST_FILENAME,
);
export interface RefDocInfo {
nodeIds: string[];
// eslint-disable-next-line @typescript-eslint/no-explicit-any
extraInfo: Record<string, any>;
}
export abstract class BaseDocumentStore {
// eslint-disable-next-line @typescript-eslint/no-explicit-any
serializer: Serializer<any> = jsonSerializer;
// Save/load
persist(persistPath: string = DEFAULT_PERSIST_PATH): void {
// Persist the docstore to a file.
}
// Main interface
abstract docs(): Promise<Record<string, BaseNode>>;
abstract addDocuments(docs: BaseNode[], allowUpdate: boolean): Promise<void>;
abstract getDocument(
docId: string,
raiseError: boolean,
): Promise<BaseNode | undefined>;
abstract deleteDocument(docId: string, raiseError: boolean): Promise<void>;
abstract documentExists(docId: string): Promise<boolean>;
// Hash
abstract setDocumentHash(docId: string, docHash: string): Promise<void>;
abstract getDocumentHash(docId: string): Promise<string | undefined>;
abstract getAllDocumentHashes(): Promise<Record<string, string>>;
// Ref Docs
abstract getAllRefDocInfo(): Promise<Record<string, RefDocInfo> | undefined>;
abstract getRefDocInfo(refDocId: string): Promise<RefDocInfo | undefined>;
abstract deleteRefDoc(refDocId: string, raiseError: boolean): Promise<void>;
// Nodes
getNodes(nodeIds: string[], raiseError: boolean = true): Promise<BaseNode[]> {
return Promise.all(
nodeIds.map((nodeId) => this.getNode(nodeId, raiseError)),
);
}
async getNode(nodeId: string, raiseError: boolean = true): Promise<BaseNode> {
const doc = await this.getDocument(nodeId, raiseError);
if (!(doc instanceof BaseNode)) {
throw new Error(`Document ${nodeId} is not a Node.`);
}
return doc;
}
async getNodeDict(nodeIdDict: {
[index: number]: string;
}): Promise<Record<number, BaseNode>> {
const result: Record<number, BaseNode> = {};
for (const index in nodeIdDict) {
result[index] = await this.getNode(nodeIdDict[index]!);
}
return result;
}
}
+2 -167
View File
@@ -1,167 +1,2 @@
import { path } from "@llamaindex/env";
import {
DEFAULT_DOC_STORE_PERSIST_FILENAME,
DEFAULT_PERSIST_DIR,
} from "../../global";
import type { StoredValue } from "../../schema";
import { BaseNode, Document, ObjectType, TextNode } from "../../schema";
const TYPE_KEY = "__type__";
const DATA_KEY = "__data__";
export interface Serializer<T> {
toPersistence(data: Record<string, unknown>): T;
fromPersistence(data: T): Record<string, unknown>;
}
export const jsonSerializer: Serializer<string> = {
toPersistence(data) {
return JSON.stringify(data);
},
fromPersistence(data) {
return JSON.parse(data);
},
};
export const noneSerializer: Serializer<Record<string, unknown>> = {
toPersistence(data) {
return data;
},
fromPersistence(data) {
return data;
},
};
type DocJson<Data> = {
[TYPE_KEY]: ObjectType;
[DATA_KEY]: Data;
};
export function isValidDocJson(
docJson: StoredValue | null | undefined,
): docJson is DocJson<unknown> {
return (
typeof docJson === "object" &&
docJson !== null &&
docJson[TYPE_KEY] !== undefined &&
docJson[DATA_KEY] !== undefined
);
}
export function docToJson(
doc: BaseNode,
serializer: Serializer<unknown>,
): DocJson<unknown> {
return {
[DATA_KEY]: serializer.toPersistence(doc.toJSON()),
[TYPE_KEY]: doc.type,
};
}
export function jsonToDoc<Data>(
docDict: DocJson<Data>,
serializer: Serializer<Data>,
): BaseNode {
const docType = docDict[TYPE_KEY];
// fixme: zod type check this
// eslint-disable-next-line @typescript-eslint/no-explicit-any
const dataDict: any = serializer.fromPersistence(docDict[DATA_KEY]);
let doc: BaseNode;
if (docType === ObjectType.DOCUMENT) {
doc = new Document({
text: dataDict.text,
id_: dataDict.id_,
embedding: dataDict.embedding,
hash: dataDict.hash,
metadata: dataDict.metadata,
});
} else if (docType === ObjectType.TEXT) {
doc = new TextNode({
text: dataDict.text,
id_: dataDict.id_,
hash: dataDict.hash,
metadata: dataDict.metadata,
relationships: dataDict.relationships,
});
} else {
throw new Error(`Unknown doc type: ${docType}`);
}
return doc;
}
const DEFAULT_PERSIST_PATH = path.join(
DEFAULT_PERSIST_DIR,
DEFAULT_DOC_STORE_PERSIST_FILENAME,
);
export interface RefDocInfo {
nodeIds: string[];
// eslint-disable-next-line @typescript-eslint/no-explicit-any
extraInfo: Record<string, any>;
}
export abstract class BaseDocumentStore {
// eslint-disable-next-line @typescript-eslint/no-explicit-any
serializer: Serializer<any> = jsonSerializer;
// Save/load
persist(persistPath: string = DEFAULT_PERSIST_PATH): void {
// Persist the docstore to a file.
}
// Main interface
abstract docs(): Promise<Record<string, BaseNode>>;
abstract addDocuments(docs: BaseNode[], allowUpdate: boolean): Promise<void>;
abstract getDocument(
docId: string,
raiseError: boolean,
): Promise<BaseNode | undefined>;
abstract deleteDocument(docId: string, raiseError: boolean): Promise<void>;
abstract documentExists(docId: string): Promise<boolean>;
// Hash
abstract setDocumentHash(docId: string, docHash: string): Promise<void>;
abstract getDocumentHash(docId: string): Promise<string | undefined>;
abstract getAllDocumentHashes(): Promise<Record<string, string>>;
// Ref Docs
abstract getAllRefDocInfo(): Promise<Record<string, RefDocInfo> | undefined>;
abstract getRefDocInfo(refDocId: string): Promise<RefDocInfo | undefined>;
abstract deleteRefDoc(refDocId: string, raiseError: boolean): Promise<void>;
// Nodes
getNodes(nodeIds: string[], raiseError: boolean = true): Promise<BaseNode[]> {
return Promise.all(
nodeIds.map((nodeId) => this.getNode(nodeId, raiseError)),
);
}
async getNode(nodeId: string, raiseError: boolean = true): Promise<BaseNode> {
const doc = await this.getDocument(nodeId, raiseError);
if (!(doc instanceof BaseNode)) {
throw new Error(`Document ${nodeId} is not a Node.`);
}
return doc;
}
async getNodeDict(nodeIdDict: {
[index: number]: string;
}): Promise<Record<number, BaseNode>> {
const result: Record<number, BaseNode> = {};
for (const index in nodeIdDict) {
result[index] = await this.getNode(nodeIdDict[index]!);
}
return result;
}
}
export * from "./base-document-store";
export * from "./kv-document-store";
@@ -1,15 +1,13 @@
import { DEFAULT_NAMESPACE } from "@llamaindex/core/global";
import type { BaseNode } from "@llamaindex/core/schema";
import { ObjectType } from "@llamaindex/core/schema";
import type { RefDocInfo } from "@llamaindex/core/storage/doc-store";
import { DEFAULT_NAMESPACE } from "../../global";
import { BaseNode, ObjectType, type StoredValue } from "../../schema";
import type { BaseKVStore } from "../kv-store";
import {
BaseDocumentStore,
docToJson,
isValidDocJson,
jsonToDoc,
} from "@llamaindex/core/storage/doc-store";
import type { BaseKVStore } from "@llamaindex/core/storage/kv-store";
import _ from "lodash";
type RefDocInfo,
} from "./base-document-store";
type DocMetaData = { docHash: string; refDocId?: string };
@@ -68,7 +66,7 @@ export class KVDocumentStore extends BaseDocumentStore {
extraInfo: {},
};
refDocInfo.nodeIds.push(doc.id_);
if (_.isEmpty(refDocInfo.extraInfo)) {
if (Object.keys(refDocInfo.extraInfo).length === 0) {
refDocInfo.extraInfo = {};
}
await this.kvstore.put(
@@ -88,7 +86,7 @@ export class KVDocumentStore extends BaseDocumentStore {
raiseError: boolean = true,
): Promise<BaseNode | undefined> {
const json = await this.kvstore.get(docId, this.nodeCollection);
if (_.isNil(json)) {
if (this.isNil(json)) {
if (raiseError) {
throw new Error(`docId ${docId} not found.`);
} else {
@@ -103,23 +101,23 @@ export class KVDocumentStore extends BaseDocumentStore {
async getRefDocInfo(refDocId: string): Promise<RefDocInfo | undefined> {
const refDocInfo = await this.kvstore.get(refDocId, this.refDocCollection);
return refDocInfo ? (_.clone(refDocInfo) as RefDocInfo) : undefined;
return refDocInfo ? (structuredClone(refDocInfo) as RefDocInfo) : undefined;
}
async getAllRefDocInfo(): Promise<Record<string, RefDocInfo> | undefined> {
const refDocInfos = await this.kvstore.getAll(this.refDocCollection);
if (_.isNil(refDocInfos)) {
if (this.isNil(refDocInfos)) {
return;
}
return refDocInfos as Record<string, RefDocInfo>;
}
async refDocExists(refDocId: string): Promise<boolean> {
return !_.isNil(await this.getRefDocInfo(refDocId));
return !this.isNil(await this.getRefDocInfo(refDocId));
}
async documentExists(docId: string): Promise<boolean> {
return !_.isNil(await this.kvstore.get(docId, this.nodeCollection));
return !this.isNil(await this.kvstore.get(docId, this.nodeCollection));
}
private async removeRefDocNode(docId: string): Promise<void> {
@@ -129,13 +127,13 @@ export class KVDocumentStore extends BaseDocumentStore {
}
const refDocId = metadata.refDocId;
if (_.isNil(refDocId)) {
if (this.isNil(refDocId)) {
return;
}
const refDocInfo = await this.kvstore.get(refDocId, this.refDocCollection);
if (!_.isNil(refDocInfo)) {
if (refDocInfo.nodeIds.length > 0) {
if (!this.isNil(refDocInfo)) {
if (refDocInfo!.nodeIds.length > 0) {
await this.kvstore.put(refDocId, refDocInfo, this.refDocCollection);
}
await this.kvstore.delete(refDocId, this.metadataCollection);
@@ -164,7 +162,7 @@ export class KVDocumentStore extends BaseDocumentStore {
raiseError: boolean = true,
): Promise<void> {
const refDocInfo = await this.getRefDocInfo(refDocId);
if (_.isNil(refDocInfo)) {
if (this.isNil(refDocInfo)) {
if (raiseError) {
throw new Error(`ref_doc_id ${refDocId} not found.`);
} else {
@@ -172,7 +170,7 @@ export class KVDocumentStore extends BaseDocumentStore {
}
}
for (const docId of refDocInfo.nodeIds) {
for (const docId of refDocInfo!.nodeIds) {
await this.deleteDocument(docId, false, false);
}
@@ -187,7 +185,7 @@ export class KVDocumentStore extends BaseDocumentStore {
async getDocumentHash(docId: string): Promise<string | undefined> {
const metadata = await this.kvstore.get(docId, this.metadataCollection);
return _.get(metadata, "docHash");
return metadata?.docHash;
}
async getAllDocumentHashes(): Promise<Record<string, string>> {
@@ -201,4 +199,8 @@ export class KVDocumentStore extends BaseDocumentStore {
}
return hashes;
}
private isNil(value: RefDocInfo | StoredValue | undefined): boolean {
return value === null || value === undefined;
}
}
+107
View File
@@ -1,3 +1,7 @@
import type { BaseEmbedding } from "../embeddings/base.js";
import { Settings } from "../global";
import type { BaseNode, ModalityType } from "../schema/node.js";
/**
* should compatible with npm:pg and npm:postgres
*/
@@ -12,3 +16,106 @@ export interface IsomorphicDB {
close: () => Promise<void>;
onCloseEvent: (listener: () => void) => void;
}
export interface VectorStoreQueryResult {
nodes?: BaseNode[];
similarities: number[];
ids: string[];
}
export enum VectorStoreQueryMode {
DEFAULT = "default",
SPARSE = "sparse",
HYBRID = "hybrid",
// fit learners
SVM = "svm",
LOGISTIC_REGRESSION = "logistic_regression",
LINEAR_REGRESSION = "linear_regression",
// maximum marginal relevance
MMR = "mmr",
// for Azure AI Search
SEMANTIC_HYBRID = "semantic_hybrid",
}
export enum FilterOperator {
EQ = "==", // default operator (string, number)
IN = "in", // In array (string or number)
GT = ">", // greater than (number)
LT = "<", // less than (number)
NE = "!=", // not equal to (string, number)
GTE = ">=", // greater than or equal to (number)
LTE = "<=", // less than or equal to (number)
NIN = "nin", // Not in array (string or number)
ANY = "any", // Contains any (array of strings)
ALL = "all", // Contains all (array of strings)
TEXT_MATCH = "text_match", // full text match (allows you to search for a specific substring, token or phrase within the text field)
CONTAINS = "contains", // metadata array contains value (string or number)
IS_EMPTY = "is_empty", // the field is not exist or empty (null or empty array)
}
export enum FilterCondition {
AND = "and",
OR = "or",
}
export type MetadataFilterValue = string | number | string[] | number[];
export interface MetadataFilter {
key: string;
value?: MetadataFilterValue;
operator: `${FilterOperator}`; // ==, any, all,...
}
export interface MetadataFilters {
filters: Array<MetadataFilter>;
condition?: `${FilterCondition}`; // and, or
}
export interface MetadataInfo {
name: string;
type: string;
description: string;
}
export interface VectorStoreInfo {
metadataInfo: MetadataInfo[];
contentInfo: string;
}
export interface VectorStoreQuery {
queryEmbedding?: number[];
similarityTopK: number;
docIds?: string[];
queryStr?: string;
mode: VectorStoreQueryMode;
alpha?: number;
filters?: MetadataFilters | undefined;
mmrThreshold?: number;
}
// Supported types of vector stores (for each modality)
export type VectorStoreByType = {
[P in ModalityType]?: BaseVectorStore;
};
export type VectorStoreBaseParams = {
embeddingModel?: BaseEmbedding | undefined;
};
export abstract class BaseVectorStore<Client = unknown> {
embedModel: BaseEmbedding;
abstract storesText: boolean;
isEmbeddingQuery?: boolean;
abstract client(): Client;
abstract add(embeddingResults: BaseNode[]): Promise<string[]>;
abstract delete(refDocId: string, deleteOptions?: object): Promise<void>;
abstract query(
query: VectorStoreQuery,
options?: object,
): Promise<VectorStoreQueryResult>;
protected constructor(params?: VectorStoreBaseParams) {
this.embedModel = params?.embeddingModel ?? Settings.embedModel;
}
}
+1 -17
View File
@@ -46,13 +46,13 @@
"@llamaindex/readers": "workspace:*",
"@llamaindex/replicate": "workspace:*",
"@llamaindex/vllm": "workspace:*",
"@llamaindex/postgres": "workspace:*",
"@mistralai/mistralai": "^1.3.4",
"@mixedbread-ai/sdk": "^2.2.11",
"@pinecone-database/pinecone": "^4.0.0",
"@qdrant/js-client-rest": "^1.11.0",
"@types/lodash": "^4.17.7",
"@types/node": "^22.9.0",
"@types/pg": "^8.11.8",
"@upstash/vector": "^1.1.5",
"@zilliz/milvus2-sdk-node": "^2.4.6",
"ajv": "^8.17.1",
@@ -74,27 +74,11 @@
"wink-nlp": "^2.3.0",
"zod": "^3.23.8"
},
"peerDependencies": {
"pg": "^8.12.0",
"pgvector": "0.2.0"
},
"peerDependenciesMeta": {
"pg": {
"optional": true
},
"pgvector": {
"optional": true
}
},
"devDependencies": {
"@swc/cli": "^0.5.0",
"@swc/core": "^1.9.2",
"@vercel/postgres": "^0.10.0",
"concurrently": "^9.1.0",
"glob": "^11.0.0",
"pg": "^8.12.0",
"pgvector": "0.2.0",
"postgres": "^3.4.4",
"typescript": "^5.7.2"
},
"engines": {
+3 -8
View File
@@ -13,11 +13,6 @@ import {
} from "@llamaindex/core/node-parser";
import { AsyncLocalStorage } from "@llamaindex/env";
import type { ServiceContext } from "./ServiceContext.js";
import {
getEmbeddedModel,
setEmbeddedModel,
withEmbeddedModel,
} from "./internal/settings/EmbedModel.js";
export type PromptConfig = {
llm?: string;
@@ -84,15 +79,15 @@ class GlobalSettings implements Config {
}
get embedModel(): BaseEmbedding {
return getEmbeddedModel();
return CoreSettings.embedModel;
}
set embedModel(embedModel: BaseEmbedding) {
setEmbeddedModel(embedModel);
CoreSettings.embedModel = embedModel;
}
withEmbedModel<Result>(embedModel: BaseEmbedding, fn: () => Result): Result {
return withEmbeddedModel(embedModel, fn);
return CoreSettings.withEmbedModel(embedModel, fn);
}
get nodeParser(): NodeParser {
+4 -1
View File
@@ -1,12 +1,15 @@
//#region initial setup for OpenAI
import { OpenAI } from "@llamaindex/openai";
import { OpenAI, OpenAIEmbedding } from "@llamaindex/openai";
import { Settings } from "./Settings.js";
try {
// eslint-disable-next-line @typescript-eslint/no-unused-expressions
Settings.llm;
// eslint-disable-next-line @typescript-eslint/no-unused-expressions
Settings.embedModel;
} catch {
Settings.llm = new OpenAI();
Settings.embedModel = new OpenAIEmbedding();
}
//#endregion
@@ -19,6 +19,7 @@ import {
} from "@llamaindex/core/schema";
import type { BaseIndexStore } from "@llamaindex/core/storage/index-store";
import { extractText } from "@llamaindex/core/utils";
import { VectorStoreQueryMode } from "@llamaindex/core/vector-store";
import type { ServiceContext } from "../../ServiceContext.js";
import { nodeParserFromSettingsOrContext } from "../../Settings.js";
import { RetrieverQueryEngine } from "../../engines/query/RetrieverQueryEngine.js";
@@ -38,7 +39,6 @@ import type {
VectorStoreByType,
VectorStoreQueryResult,
} from "../../vector-store/index.js";
import { VectorStoreQueryMode } from "../../vector-store/types.js";
import type { BaseIndexInit } from "../BaseIndex.js";
import { BaseIndex } from "../BaseIndex.js";
@@ -10,7 +10,7 @@ import type { BaseDocumentStore } from "@llamaindex/core/storage/doc-store";
import type {
BaseVectorStore,
VectorStoreByType,
} from "../vector-store/types.js";
} from "@llamaindex/core/vector-store";
import { IngestionCache, getTransformationHash } from "./IngestionCache.js";
import {
DocStoreStrategy,
@@ -1,6 +1,6 @@
import { BaseNode } from "@llamaindex/core/schema";
import type { BaseDocumentStore } from "@llamaindex/core/storage/doc-store";
import type { BaseVectorStore } from "../../vector-store/types.js";
import type { BaseVectorStore } from "@llamaindex/core/vector-store";
import { classify } from "./classify.js";
import { RollbackableTransformComponent } from "./rollback.js";
@@ -1,6 +1,6 @@
import { BaseNode } from "@llamaindex/core/schema";
import type { BaseDocumentStore } from "@llamaindex/core/storage/doc-store";
import type { BaseVectorStore } from "../../vector-store/types.js";
import type { BaseVectorStore } from "@llamaindex/core/vector-store";
import { classify } from "./classify.js";
import { RollbackableTransformComponent } from "./rollback.js";
@@ -1,5 +1,5 @@
import type { BaseDocumentStore } from "@llamaindex/core/storage/doc-store";
import type { BaseVectorStore } from "../../vector-store/types.js";
import type { BaseVectorStore } from "@llamaindex/core/vector-store";
import { DuplicatesStrategy } from "./DuplicatesStrategy.js";
import { UpsertsAndDeleteStrategy } from "./UpsertsAndDeleteStrategy.js";
import { UpsertsStrategy } from "./UpsertsStrategy.js";
@@ -9,13 +9,13 @@ import {
BaseIndexStore,
SimpleIndexStore,
} from "@llamaindex/core/storage/index-store";
import { path } from "@llamaindex/env";
import type { ServiceContext } from "../ServiceContext.js";
import { SimpleVectorStore } from "../vector-store/SimpleVectorStore.js";
import type {
BaseVectorStore,
VectorStoreByType,
} from "../vector-store/types.js";
} from "@llamaindex/core/vector-store";
import { path } from "@llamaindex/env";
import type { ServiceContext } from "../ServiceContext.js";
import { SimpleVectorStore } from "../vector-store/SimpleVectorStore.js";
import { SimpleDocumentStore } from "./docStore/SimpleDocumentStore.js";
export interface StorageContext {
@@ -1,6 +1,6 @@
import { KVDocumentStore } from "@llamaindex/core/storage/doc-store";
import { MongoClient } from "mongodb";
import { AzureCosmosVCoreKVStore } from "../kvStore/AzureCosmosMongovCoreKVStore.js";
import { KVDocumentStore } from "./KVDocumentStore.js";
const DEFAULT_DATABASE = "DocumentStoreDB";
const DEFAULT_COLLECTION = "DocumentStoreCollection";
@@ -1,10 +1,10 @@
import { KVDocumentStore } from "@llamaindex/core/storage/doc-store";
import {
AzureCosmosNoSqlKVStore,
type AadTokenOptions,
type AccountAndKeyOptions,
type ConnectionStringOptions,
} from "../kvStore/AzureCosmosNoSqlKVStore.js";
import { KVDocumentStore } from "./KVDocumentStore.js";
const DEFAULT_DATABASE = "DocumentStoreDB";
const DEFAULT_CONTAINER = "DocumentStoreContainer";
@@ -3,13 +3,13 @@ import {
DEFAULT_NAMESPACE,
DEFAULT_PERSIST_DIR,
} from "@llamaindex/core/global";
import { KVDocumentStore } from "@llamaindex/core/storage/doc-store";
import {
BaseInMemoryKVStore,
SimpleKVStore,
} from "@llamaindex/core/storage/kv-store";
import { path } from "@llamaindex/env";
import _ from "lodash";
import { KVDocumentStore } from "./KVDocumentStore.js";
// eslint-disable-next-line @typescript-eslint/no-explicit-any
type SaveDict = Record<string, any>;
+5 -3
View File
@@ -2,17 +2,19 @@ export * from "@llamaindex/core/storage/chat-store";
export * from "@llamaindex/core/storage/doc-store";
export * from "@llamaindex/core/storage/index-store";
export * from "@llamaindex/core/storage/kv-store";
export {
PostgresDocumentStore,
PostgresIndexStore,
PostgresKVStore,
} from "@llamaindex/postgres";
export * from "./chatStore/AzureCosmosMongovCoreChatStore.js";
export * from "./chatStore/AzureCosmosNoSqlChatStore.js";
export * from "./docStore/AzureCosmosMongovCoreDocumentStore.js";
export * from "./docStore/AzureCosmosNoSqlDocumentStore.js";
export { PostgresDocumentStore } from "./docStore/PostgresDocumentStore.js";
export { SimpleDocumentStore } from "./docStore/SimpleDocumentStore.js";
export * from "./FileSystem.js";
export * from "./indexStore/AzureCosmosMongovCoreIndexStore.js";
export * from "./indexStore/AzureCosmosNoSqlIndexStore.js";
export { PostgresIndexStore } from "./indexStore/PostgresIndexStore.js";
export * from "./kvStore/AzureCosmosMongovCoreKVStore.js";
export * from "./kvStore/AzureCosmosNoSqlKVStore.js";
export { PostgresKVStore } from "./kvStore/PostgresKVStore.js";
export * from "./StorageContext.js";
@@ -8,7 +8,6 @@ import {
} from "@datastax/astra-db-ts";
import type { BaseNode } from "@llamaindex/core/schema";
import { MetadataMode } from "@llamaindex/core/schema";
import { getEnv } from "@llamaindex/env";
import {
BaseVectorStore,
FilterCondition,
@@ -18,7 +17,8 @@ import {
type VectorStoreBaseParams,
type VectorStoreQuery,
type VectorStoreQueryResult,
} from "./types.js";
} from "@llamaindex/core/vector-store";
import { getEnv } from "@llamaindex/env";
import {
metadataDictToNode,
nodeToMetadata,
@@ -1,13 +1,13 @@
import type { BaseNode } from "@llamaindex/core/schema";
import { MetadataMode } from "@llamaindex/core/schema";
import { getEnv } from "@llamaindex/env";
import { Collection, Db, MongoClient } from "mongodb";
import {
BaseVectorStore,
type VectorStoreBaseParams,
type VectorStoreQuery,
type VectorStoreQueryResult,
} from "./types.js";
} from "@llamaindex/core/vector-store";
import { getEnv } from "@llamaindex/env";
import { Collection, Db, MongoClient } from "mongodb";
import { metadataDictToNode, nodeToMetadata } from "./utils.js";
/** Azure Cosmos DB for MongoDB vCore Similarity type. */
@@ -20,7 +20,7 @@ import {
type VectorStoreBaseParams,
type VectorStoreQuery,
type VectorStoreQueryResult,
} from "./types.js";
} from "@llamaindex/core/vector-store";
/** Azure Cosmos DB for NoSQL database creation options. */
export type AzureCosmosDBNoSqlCreateDatabaseOptions = Partial<
@@ -1,14 +1,5 @@
import type { BaseNode } from "@llamaindex/core/schema";
import { MetadataMode } from "@llamaindex/core/schema";
import {
ChromaClient,
type ChromaClientParams,
type DeleteParams,
type QueryRecordsParams,
type QueryResponse,
type Where,
type WhereDocument,
} from "chromadb";
import {
BaseVectorStore,
FilterCondition,
@@ -18,7 +9,16 @@ import {
type VectorStoreBaseParams,
type VectorStoreQuery,
type VectorStoreQueryResult,
} from "./types.js";
} from "@llamaindex/core/vector-store";
import {
ChromaClient,
type ChromaClientParams,
type DeleteParams,
type QueryRecordsParams,
type QueryResponse,
type Where,
type WhereDocument,
} from "chromadb";
import { metadataDictToNode, nodeToMetadata } from "./utils.js";
type ChromaDeleteOptions = {
@@ -1,5 +1,12 @@
import type { ChannelOptions } from "@grpc/grpc-js";
import { BaseNode, MetadataMode, type Metadata } from "@llamaindex/core/schema";
import {
BaseVectorStore,
type MetadataFilters,
type VectorStoreBaseParams,
type VectorStoreQuery,
type VectorStoreQueryResult,
} from "@llamaindex/core/vector-store";
import { getEnv } from "@llamaindex/env";
import {
DataType,
@@ -9,13 +16,6 @@ import {
type RowData,
type SearchSimpleReq,
} from "@zilliz/milvus2-sdk-node";
import {
BaseVectorStore,
type MetadataFilters,
type VectorStoreBaseParams,
type VectorStoreQuery,
type VectorStoreQueryResult,
} from "./types.js";
import {
metadataDictToNode,
nodeToMetadata,
@@ -1,9 +1,6 @@
import type { BaseEmbedding } from "@llamaindex/core/embeddings";
import type { BaseNode } from "@llamaindex/core/schema";
import { MetadataMode } from "@llamaindex/core/schema";
import { getEnv } from "@llamaindex/env";
import type { BulkWriteOptions, Collection } from "mongodb";
import { MongoClient } from "mongodb";
import {
BaseVectorStore,
FilterCondition,
@@ -13,7 +10,10 @@ import {
type VectorStoreBaseParams,
type VectorStoreQuery,
type VectorStoreQueryResult,
} from "./types.js";
} from "@llamaindex/core/vector-store";
import { getEnv } from "@llamaindex/env";
import type { BulkWriteOptions, Collection } from "mongodb";
import { MongoClient } from "mongodb";
import { metadataDictToNode, nodeToMetadata } from "./utils.js";
// define your Atlas Search index. See detail https://www.mongodb.com/docs/atlas/atlas-search/field-types/knn-vector/
@@ -7,7 +7,7 @@ import {
type VectorStoreBaseParams,
type VectorStoreQuery,
type VectorStoreQueryResult,
} from "./types.js";
} from "@llamaindex/core/vector-store";
import type { BaseNode, Metadata } from "@llamaindex/core/schema";
import { getEnv } from "@llamaindex/env";
@@ -7,7 +7,7 @@ import {
type VectorStoreBaseParams,
type VectorStoreQuery,
type VectorStoreQueryResult,
} from "./types.js";
} from "@llamaindex/core/vector-store";
import type { QdrantClientParams, Schemas } from "@qdrant/js-client-rest";
import { QdrantClient } from "@qdrant/js-client-rest";
@@ -5,8 +5,6 @@ import {
} from "@llamaindex/core/embeddings";
import { DEFAULT_PERSIST_DIR } from "@llamaindex/core/global";
import type { BaseNode } from "@llamaindex/core/schema";
import { fs, path } from "@llamaindex/env";
import { exists } from "../storage/FileSystem.js";
import {
BaseVectorStore,
FilterOperator,
@@ -16,7 +14,9 @@ import {
type VectorStoreBaseParams,
type VectorStoreQuery,
type VectorStoreQueryResult,
} from "./types.js";
} from "@llamaindex/core/vector-store";
import { fs, path } from "@llamaindex/env";
import { exists } from "../storage/FileSystem.js";
import {
nodeToMetadata,
parseArrayValue,
@@ -5,7 +5,7 @@ import {
type VectorStoreBaseParams,
type VectorStoreQuery,
type VectorStoreQueryResult,
} from "./types.js";
} from "@llamaindex/core/vector-store";
import type { BaseNode, Metadata, TextNode } from "@llamaindex/core/schema";
import { getEnv } from "@llamaindex/env";
@@ -8,8 +8,6 @@ import weaviate, {
type WeaviateNonGenericObject,
} from "weaviate-client";
import { getEnv } from "@llamaindex/env";
import type { BaseHybridOptions } from "weaviate-client";
import {
BaseVectorStore,
VectorStoreQueryMode,
@@ -18,7 +16,9 @@ import {
type VectorStoreBaseParams,
type VectorStoreQuery,
type VectorStoreQueryResult,
} from "./types.js";
} from "@llamaindex/core/vector-store";
import { getEnv } from "@llamaindex/env";
import type { BaseHybridOptions } from "weaviate-client";
import {
metadataDictToNode,
nodeToMetadata,
@@ -27,7 +27,6 @@ import {
ManagedIdentityCredential,
} from "@azure/identity";
import { type BaseNode, MetadataMode } from "@llamaindex/core/schema";
import { consoleLogger, getEnv } from "@llamaindex/env";
import {
BaseVectorStore,
FilterCondition,
@@ -37,7 +36,8 @@ import {
type VectorStoreQuery,
VectorStoreQueryMode,
type VectorStoreQueryResult,
} from "../types.js";
} from "@llamaindex/core/vector-store";
import { consoleLogger, getEnv } from "@llamaindex/env";
import { metadataDictToNode, nodeToMetadata } from "../utils.js";
import {
AzureAISearchVectorStoreConfig,
@@ -4,11 +4,11 @@ import {
type VectorizedQuery,
} from "@azure/search-documents";
import {
TextNode,
type VectorStoreQuery,
type VectorStoreQueryResult,
} from "llamaindex";
} from "@llamaindex/core/vector-store";
import type { TextNode } from "@llamaindex/core/schema";
import { consoleLogger } from "@llamaindex/env";
import { metadataDictToNode } from "../utils.js";
import {
@@ -1,3 +1,11 @@
export * from "@llamaindex/core/vector-store";
export {
DEFAULT_DIMENSIONS,
PGVECTOR_SCHEMA,
PGVECTOR_TABLE,
PGVectorStore,
type PGVectorStoreConfig,
} from "@llamaindex/postgres";
export * from "./AstraDBVectorStore.js";
export * from "./azure/AzureAISearchVectorStore.js";
export * from "./AzureCosmosDBMongoVectorStore.js";
@@ -5,9 +13,7 @@ export * from "./AzureCosmosDBNoSqlVectorStore.js";
export * from "./ChromaVectorStore.js";
export * from "./MilvusVectorStore.js";
export * from "./MongoDBAtlasVectorStore.js";
export * from "./PGVectorStore.js";
export * from "./PineconeVectorStore.js";
export * from "./QdrantVectorStore.js";
export * from "./SimpleVectorStore.js";
export * from "./types.js";
export * from "./WeaviateVectorStore.js";
@@ -1,106 +0,0 @@
import type { BaseEmbedding } from "@llamaindex/core/embeddings";
import type { BaseNode, ModalityType } from "@llamaindex/core/schema";
import { getEmbeddedModel } from "../internal/settings/EmbedModel.js";
export interface VectorStoreQueryResult {
nodes?: BaseNode[];
similarities: number[];
ids: string[];
}
export enum VectorStoreQueryMode {
DEFAULT = "default",
SPARSE = "sparse",
HYBRID = "hybrid",
// fit learners
SVM = "svm",
LOGISTIC_REGRESSION = "logistic_regression",
LINEAR_REGRESSION = "linear_regression",
// maximum marginal relevance
MMR = "mmr",
// for Azure AI Search
SEMANTIC_HYBRID = "semantic_hybrid",
}
export enum FilterOperator {
EQ = "==", // default operator (string, number)
IN = "in", // In array (string or number)
GT = ">", // greater than (number)
LT = "<", // less than (number)
NE = "!=", // not equal to (string, number)
GTE = ">=", // greater than or equal to (number)
LTE = "<=", // less than or equal to (number)
NIN = "nin", // Not in array (string or number)
ANY = "any", // Contains any (array of strings)
ALL = "all", // Contains all (array of strings)
TEXT_MATCH = "text_match", // full text match (allows you to search for a specific substring, token or phrase within the text field)
CONTAINS = "contains", // metadata array contains value (string or number)
IS_EMPTY = "is_empty", // the field is not exist or empty (null or empty array)
}
export enum FilterCondition {
AND = "and",
OR = "or",
}
export type MetadataFilterValue = string | number | string[] | number[];
export interface MetadataFilter {
key: string;
value?: MetadataFilterValue;
operator: `${FilterOperator}`; // ==, any, all,...
}
export interface MetadataFilters {
filters: Array<MetadataFilter>;
condition?: `${FilterCondition}`; // and, or
}
export interface MetadataInfo {
name: string;
type: string;
description: string;
}
export interface VectorStoreInfo {
metadataInfo: MetadataInfo[];
contentInfo: string;
}
export interface VectorStoreQuery {
queryEmbedding?: number[];
similarityTopK: number;
docIds?: string[];
queryStr?: string;
mode: VectorStoreQueryMode;
alpha?: number;
filters?: MetadataFilters | undefined;
mmrThreshold?: number;
}
// Supported types of vector stores (for each modality)
export type VectorStoreByType = {
[P in ModalityType]?: BaseVectorStore;
};
export type VectorStoreBaseParams = {
embeddingModel?: BaseEmbedding | undefined;
};
export abstract class BaseVectorStore<Client = unknown> {
embedModel: BaseEmbedding;
abstract storesText: boolean;
isEmbeddingQuery?: boolean;
abstract client(): Client;
abstract add(embeddingResults: BaseNode[]): Promise<string[]>;
abstract delete(refDocId: string, deleteOptions?: object): Promise<void>;
abstract query(
query: VectorStoreQuery,
options?: object,
): Promise<VectorStoreQueryResult>;
protected constructor(params?: VectorStoreBaseParams) {
this.embedModel = params?.embeddingModel ?? getEmbeddedModel();
}
}
@@ -1,6 +1,6 @@
import type { BaseNode, Metadata } from "@llamaindex/core/schema";
import { ObjectType, jsonToNode } from "@llamaindex/core/schema";
import type { MetadataFilterValue } from "./types.js";
import type { MetadataFilterValue } from "@llamaindex/core/vector-store";
const DEFAULT_TEXT_KEY = "text";
@@ -1,7 +1,4 @@
import {
storageContextFromDefaults,
type StorageContext,
} from "llamaindex/storage/StorageContext";
import { storageContextFromDefaults, type StorageContext } from "llamaindex";
import { existsSync, rmSync } from "node:fs";
import { mkdtemp } from "node:fs/promises";
import { tmpdir } from "node:os";
@@ -1,6 +1,6 @@
import type { BaseNode } from "@llamaindex/core/schema";
import { AzureCosmosDBNoSqlVectorStore } from "llamaindex";
import type { Mocked } from "vitest";
import { AzureCosmosDBNoSqlVectorStore } from "../../src/vector-store.js";
export class TestableAzureCosmosDBNoSqlVectorStore extends AzureCosmosDBNoSqlVectorStore {
public nodes: BaseNode[] = [];
@@ -1,5 +1,5 @@
import type { BaseNode } from "@llamaindex/core/schema";
import { QdrantVectorStore } from "llamaindex/vector-store";
import { QdrantVectorStore } from "llamaindex";
export class TestableQdrantVectorStore extends QdrantVectorStore {
public nodes: BaseNode[] = [];
@@ -1,9 +1,9 @@
/* eslint-disable @typescript-eslint/no-explicit-any */
import { SearchClient, SearchIndexClient } from "@azure/search-documents";
import { AzureAISearchVectorStore } from "llamaindex";
import { afterEach, beforeEach } from "node:test";
import { describe, expect, it, vi } from "vitest";
import { AzureAISearchVectorStore } from "../../src/vector-store.js";
// We test only for the initialization of the store, and the search and index clients, will variants of the options provided
const MOCK_ENDPOINT = "https://test-endpoint.com";
@@ -0,0 +1,66 @@
{
"name": "@llamaindex/postgres",
"description": "PostgreSQL Storage for LlamaIndex",
"version": "0.0.29",
"type": "module",
"main": "./dist/index.cjs",
"module": "./dist/index.js",
"exports": {
".": {
"edge-light": {
"types": "./dist/index.edge-light.d.ts",
"default": "./dist/index.edge-light.js"
},
"workerd": {
"types": "./dist/index.edge-light.d.ts",
"default": "./dist/index.edge-light.js"
},
"require": {
"types": "./dist/index.d.cts",
"default": "./dist/index.cjs"
},
"import": {
"types": "./dist/index.d.ts",
"default": "./dist/index.js"
}
}
},
"files": [
"dist"
],
"repository": {
"type": "git",
"url": "https://github.com/run-llama/LlamaIndexTS.git",
"directory": "packages/providers/storage/postgres"
},
"scripts": {
"build": "bunchee",
"dev": "bunchee --watch"
},
"devDependencies": {
"bunchee": "6.2.0",
"@types/pg": "^8.11.8",
"@vercel/postgres": "^0.10.0",
"pg": "^8.12.0",
"pgvector": "0.2.0",
"postgres": "^3.4.4"
},
"dependencies": {
"@llamaindex/core": "workspace:*",
"@llamaindex/env": "workspace:*",
"pg": "^8.11.3",
"pg-promise": "^11.5.4"
},
"peerDependencies": {
"pg": "^8.12.0",
"pgvector": "0.2.0"
},
"peerDependenciesMeta": {
"pg": {
"optional": true
},
"pgvector": {
"optional": true
}
}
}
@@ -1,20 +1,18 @@
import type pg from "pg";
import type { IsomorphicDB } from "@llamaindex/core/vector-store";
import type { VercelPool } from "@vercel/postgres";
import type { Sql } from "postgres";
import {
BaseVectorStore,
FilterCondition,
FilterOperator,
type IsomorphicDB,
type MetadataFilter,
type MetadataFilterValue,
type VectorStoreBaseParams,
type VectorStoreQuery,
type VectorStoreQueryResult,
} from "./types.js";
import { escapeLikeString } from "./utils.js";
} from "@llamaindex/core/vector-store";
import type { VercelPool } from "@vercel/postgres";
import type { Sql } from "postgres";
import type { BaseEmbedding } from "@llamaindex/core/embeddings";
import { DEFAULT_COLLECTION } from "@llamaindex/core/global";
@@ -487,7 +485,7 @@ export class PGVectorStore extends BaseVectorStore {
}
if (filter.operator === FilterOperator.TEXT_MATCH) {
const escapedValue = escapeLikeString(filter.value as string);
const escapedValue = this.escapeLikeString(filter.value as string);
return {
clause: `metadata->>'${filter.key}' LIKE $${paramIndex}`,
param: `%${escapedValue}%`,
@@ -592,4 +590,8 @@ export class PGVectorStore extends BaseVectorStore {
persist(persistPath: string): Promise<void> {
return Promise.resolve();
}
private escapeLikeString(value: string) {
return value.replace(/[%_\\]/g, "\\$&");
}
}
@@ -1,10 +1,9 @@
import { DEFAULT_NAMESPACE } from "@llamaindex/core/global";
import { noneSerializer } from "@llamaindex/core/storage/doc-store";
import {
PostgresKVStore,
type PostgresKVStoreConfig,
} from "../kvStore/PostgresKVStore.js";
import { KVDocumentStore } from "./KVDocumentStore.js";
KVDocumentStore,
noneSerializer,
} from "@llamaindex/core/storage/doc-store";
import { PostgresKVStore, type PostgresKVStoreConfig } from "./PostgresKVStore";
const DEFAULT_TABLE_NAME = "llamaindex_doc_store";
@@ -1,9 +1,6 @@
import { DEFAULT_NAMESPACE } from "@llamaindex/core/global";
import {
PostgresKVStore,
type PostgresKVStoreConfig,
} from "../kvStore/PostgresKVStore.js";
import { KVIndexStore } from "./KVIndexStore.js";
import { KVIndexStore } from "@llamaindex/core/storage/index-store";
import { PostgresKVStore, type PostgresKVStoreConfig } from "./PostgresKVStore";
const DEFAULT_TABLE_NAME = "llamaindex_index_store";
@@ -0,0 +1,4 @@
export * from "./PGVectorStore";
export * from "./PostgresDocumentStore";
export * from "./PostgresIndexStore";
export * from "./PostgresKVStore";
@@ -0,0 +1,19 @@
{
"extends": "../../../../tsconfig.json",
"compilerOptions": {
"target": "ESNext",
"module": "ESNext",
"moduleResolution": "bundler",
"outDir": "./lib",
"tsBuildInfoFile": "./lib/.tsbuildinfo"
},
"include": ["./src"],
"references": [
{
"path": "../../../core/tsconfig.json"
},
{
"path": "../../../env/tsconfig.json"
}
]
}
+106 -96
View File
@@ -1001,6 +1001,9 @@ importers:
'@llamaindex/portkey-ai':
specifier: workspace:*
version: link:../providers/portkey-ai
'@llamaindex/postgres':
specifier: workspace:*
version: link:../providers/storage/postgres
'@llamaindex/readers':
specifier: workspace:*
version: link:../readers
@@ -1028,9 +1031,6 @@ importers:
'@types/node':
specifier: ^22.9.0
version: 22.9.0
'@types/pg':
specifier: ^8.11.8
version: 8.11.8
'@upstash/vector':
specifier: ^1.1.5
version: 1.1.5
@@ -1098,24 +1098,12 @@ importers:
'@swc/core':
specifier: ^1.9.2
version: 1.9.2(@swc/helpers@0.5.15)
'@vercel/postgres':
specifier: ^0.10.0
version: 0.10.0
concurrently:
specifier: ^9.1.0
version: 9.1.0
glob:
specifier: ^11.0.0
version: 11.0.0
pg:
specifier: ^8.12.0
version: 8.12.0
pgvector:
specifier: 0.2.0
version: 0.2.0
postgres:
specifier: ^3.4.4
version: 3.4.4
typescript:
specifier: ^5.7.2
version: 5.7.2
@@ -1328,6 +1316,37 @@ importers:
specifier: 6.2.0
version: 6.2.0(typescript@5.7.2)
packages/providers/storage/postgres:
dependencies:
'@llamaindex/core':
specifier: workspace:*
version: link:../../../core
'@llamaindex/env':
specifier: workspace:*
version: link:../../../env
pg:
specifier: ^8.11.3
version: 8.13.1
pg-promise:
specifier: ^11.5.4
version: 11.10.2(pg-query-stream@4.7.1(pg@8.13.1))
devDependencies:
'@types/pg':
specifier: ^8.11.8
version: 8.11.8
'@vercel/postgres':
specifier: ^0.10.0
version: 0.10.0
bunchee:
specifier: 6.2.0
version: 6.2.0(typescript@5.7.2)
pgvector:
specifier: 0.2.0
version: 0.2.0
postgres:
specifier: ^3.4.4
version: 3.4.4
packages/providers/vercel:
dependencies:
'@llamaindex/core':
@@ -2054,10 +2073,6 @@ packages:
resolution: {integrity: sha512-IzD+hfqGqFtXymHXm4RzrZW2MsSH2M7RLmZsKaKVi7SUxbeYTUeX+ALk8gVzkM8ykb7EzlDLWCNErKfAa57rYQ==}
engines: {node: '>=18.0.0'}
'@babel/code-frame@7.22.5':
resolution: {integrity: sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ==}
engines: {node: '>=6.9.0'}
'@babel/code-frame@7.26.2':
resolution: {integrity: sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==}
engines: {node: '>=6.9.0'}
@@ -2100,10 +2115,6 @@ packages:
resolution: {integrity: sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==}
engines: {node: '>=6.9.0'}
'@babel/helper-validator-identifier@7.22.5':
resolution: {integrity: sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==}
engines: {node: '>=6.9.0'}
'@babel/helper-validator-identifier@7.25.9':
resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==}
engines: {node: '>=6.9.0'}
@@ -2116,10 +2127,6 @@ packages:
resolution: {integrity: sha512-tbhNuIxNcVb21pInl3ZSjksLCvgdZy9KwJ8brv993QtIVKJBBkYXz4q4ZbAv31GdnC+R90np23L5FbEBlthAEw==}
engines: {node: '>=6.9.0'}
'@babel/highlight@7.22.5':
resolution: {integrity: sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw==}
engines: {node: '>=6.9.0'}
'@babel/parser@7.22.7':
resolution: {integrity: sha512-7NF8pOkHP5o2vpmGgNGcfAeCvOYhGLyA3Z4eBQkT1RJlWu47n63bCs93QfJ2hIAFCil7L5P2IWhs1oToVgrL0Q==}
engines: {node: '>=6.0.0'}
@@ -3210,9 +3217,6 @@ packages:
'@jridgewell/sourcemap-codec@1.4.14':
resolution: {integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==}
'@jridgewell/sourcemap-codec@1.4.15':
resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==}
'@jridgewell/sourcemap-codec@1.5.0':
resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==}
@@ -5583,6 +5587,10 @@ packages:
engines: {node: '>=16', npm: '>=7'}
hasBin: true
assert-options@0.8.2:
resolution: {integrity: sha512-XaXoMxY0zuwAb0YuZjxIm8FeWvNq0aWNIbrzHhFjme8Smxw4JlPoyrAKQ6808k5UvQdhvnWqHZCphq5mXd4TDA==}
engines: {node: '>=10.0.0'}
assertion-error@2.0.1:
resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==}
engines: {node: '>=12'}
@@ -5965,10 +5973,6 @@ packages:
resolution: {integrity: sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==}
engines: {node: '>=18'}
cli-spinners@2.9.0:
resolution: {integrity: sha512-4/aL9X3Wh0yiMQlE+eeRhWP6vclO3QRtw1JHKIT0FFUs5FjpFmESqtMvYZ0+lbzBw900b95mS0hohy+qn2VK/g==}
engines: {node: '>=6'}
cli-spinners@2.9.2:
resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==}
engines: {node: '>=6'}
@@ -7171,9 +7175,6 @@ packages:
tailwindcss:
optional: true
function-bind@1.1.1:
resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==}
function-bind@1.1.2:
resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==}
@@ -7266,9 +7267,6 @@ packages:
resolution: {integrity: sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==}
engines: {node: '>= 0.4'}
get-tsconfig@4.5.0:
resolution: {integrity: sha512-MjhiaIWCJ1sAU4pIQ5i5OfOuHHxVo1oYeNsWTON7jxYkod8pHocXeh+SSbmu5OZZZK73B6cbJ2XADzXehLyovQ==}
get-tsconfig@4.8.1:
resolution: {integrity: sha512-k9PN+cFBmaLWtVz29SkUoqU5O0slLuHJXt/2P+tMVFT+phsSGXGkp9t3rQIqdz0e+06EHNGs3oM6ZX1s2zHxRg==}
@@ -7720,9 +7718,6 @@ packages:
resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==}
engines: {node: '>= 0.4'}
is-core-module@2.12.1:
resolution: {integrity: sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==}
is-core-module@2.16.0:
resolution: {integrity: sha512-urTSINYfAYgcbLb0yDQ6egFm6h3Mo1DcF9EkyXSRjjzdHbsulg01qhwWuXdOoUBuTkbQ80KDboXa0vFJ+BDH+g==}
engines: {node: '>= 0.4'}
@@ -9445,10 +9440,19 @@ packages:
pg-connection-string@2.7.0:
resolution: {integrity: sha512-PI2W9mv53rXJQEOb8xNR8lH7Hr+EKa6oJa38zsK0S/ky2er16ios1wLKhZyxzD7jUReiWokc9WK5nxSnC7W1TA==}
pg-cursor@2.12.1:
resolution: {integrity: sha512-V13tEaA9Oq1w+V6Q3UBIB/blxJrwbbr35/dY54r/86soBJ7xkP236bXaORUTVXUPt9B6Ql2BQu+uwQiuMfRVgg==}
peerDependencies:
pg: ^8
pg-int8@1.0.1:
resolution: {integrity: sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==}
engines: {node: '>=4.0.0'}
pg-minify@1.6.5:
resolution: {integrity: sha512-u0UE8veaCnMfJmoklqneeBBopOAPG3/6DHqGVHYAhz8DkJXh9dnjPlz25fRxn4e+6XVzdOp7kau63Rp52fZ3WQ==}
engines: {node: '>=14.0.0'}
pg-numeric@1.0.2:
resolution: {integrity: sha512-BM/Thnrw5jm2kKLE5uJkXqqExRUY/toLHda65XgFTBTFYZyopbKjBe29Ii3RbkvlsMoFwD+tHeGaCjjv0gHlyw==}
engines: {node: '>=4'}
@@ -9458,9 +9462,20 @@ packages:
peerDependencies:
pg: '>=8.0'
pg-promise@11.10.2:
resolution: {integrity: sha512-wK4yjxZdfxBmAMcs40q6IsC1SOzdLilc1yNvJqlbOjtm2syayqLDCt1JQ9lhS6yNSgVlGOQZT88yb/SADJmEBw==}
engines: {node: '>=14.0'}
peerDependencies:
pg-query-stream: 4.7.1
pg-protocol@1.7.0:
resolution: {integrity: sha512-hTK/mE36i8fDDhgDFjy6xNOG+LCorxLG3WO17tku+ij6sVHXh1jQUJ8hYAnRhNla4QVD2H8er/FOjc/+EgC6yQ==}
pg-query-stream@4.7.1:
resolution: {integrity: sha512-UMgsgn/pOIYsIifRySp59vwlpTpLADMK9HWJtq5ff0Z3MxBnPMGnCQeaQl5VuL+7ov4F96mSzIRIcz+Duo6OiQ==}
peerDependencies:
pg: ^8
pg-types@2.2.0:
resolution: {integrity: sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==}
engines: {node: '>=4'}
@@ -10157,10 +10172,6 @@ packages:
engines: {node: '>= 0.4'}
hasBin: true
resolve@1.22.2:
resolution: {integrity: sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==}
hasBin: true
resolve@1.22.9:
resolution: {integrity: sha512-QxrmX1DzraFIi9PxdG5VkRfRwIgjwyud+z/iBwfRRrVmHc+P9Q7u2lSSpQ6bjr2gy5lrqIiU9vb6iAeGf2400A==}
hasBin: true
@@ -10547,6 +10558,10 @@ packages:
spdx-license-ids@3.0.20:
resolution: {integrity: sha512-jg25NiDV/1fLtSgEgyvVyDunvaNHbuwF9lfNV17gSmPFAlYzdfNBlLtLzXTevwkPj7DhGbmN9VnmJIgLnhvaBw==}
spex@3.4.0:
resolution: {integrity: sha512-8JeZJ7QlEBnSj1W1fKXgbB2KUPA8k4BxFMf6lZX/c1ZagU/1b9uZWZK0yD6yjfzqAIuTNG4YlRmtMpQiXuohsg==}
engines: {node: '>=14.0.0'}
split2@4.2.0:
resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==}
engines: {node: '>= 10.x'}
@@ -13310,7 +13325,7 @@ snapshots:
'@azure/abort-controller@1.1.0':
dependencies:
tslib: 2.6.0
tslib: 2.8.1
'@azure/abort-controller@2.1.2':
dependencies:
@@ -13433,10 +13448,6 @@ snapshots:
transitivePeerDependencies:
- supports-color
'@babel/code-frame@7.22.5':
dependencies:
'@babel/highlight': 7.22.5
'@babel/code-frame@7.26.2':
dependencies:
'@babel/helper-validator-identifier': 7.25.9
@@ -13503,8 +13514,6 @@ snapshots:
'@babel/helper-string-parser@7.25.9': {}
'@babel/helper-validator-identifier@7.22.5': {}
'@babel/helper-validator-identifier@7.25.9': {}
'@babel/helper-validator-option@7.25.9': {}
@@ -13514,12 +13523,6 @@ snapshots:
'@babel/template': 7.25.9
'@babel/types': 7.26.3
'@babel/highlight@7.22.5':
dependencies:
'@babel/helper-validator-identifier': 7.22.5
chalk: 2.4.2
js-tokens: 4.0.0
'@babel/parser@7.22.7':
dependencies:
'@babel/types': 7.22.5
@@ -13563,7 +13566,7 @@ snapshots:
'@babel/types@7.22.5':
dependencies:
'@babel/helper-string-parser': 7.22.5
'@babel/helper-validator-identifier': 7.22.5
'@babel/helper-validator-identifier': 7.25.9
to-fast-properties: 2.0.0
'@babel/types@7.26.3':
@@ -14401,13 +14404,13 @@ snapshots:
'@jridgewell/gen-mapping@0.3.3':
dependencies:
'@jridgewell/set-array': 1.1.2
'@jridgewell/sourcemap-codec': 1.4.15
'@jridgewell/sourcemap-codec': 1.5.0
'@jridgewell/trace-mapping': 0.3.18
'@jridgewell/gen-mapping@0.3.8':
dependencies:
'@jridgewell/set-array': 1.2.1
'@jridgewell/sourcemap-codec': 1.4.15
'@jridgewell/sourcemap-codec': 1.5.0
'@jridgewell/trace-mapping': 0.3.25
'@jridgewell/resolve-uri@3.1.0': {}
@@ -14425,8 +14428,6 @@ snapshots:
'@jridgewell/sourcemap-codec@1.4.14': {}
'@jridgewell/sourcemap-codec@1.4.15': {}
'@jridgewell/sourcemap-codec@1.5.0': {}
'@jridgewell/trace-mapping@0.3.18':
@@ -14437,12 +14438,12 @@ snapshots:
'@jridgewell/trace-mapping@0.3.25':
dependencies:
'@jridgewell/resolve-uri': 3.1.1
'@jridgewell/sourcemap-codec': 1.4.15
'@jridgewell/sourcemap-codec': 1.5.0
'@jridgewell/trace-mapping@0.3.9':
dependencies:
'@jridgewell/resolve-uri': 3.1.1
'@jridgewell/sourcemap-codec': 1.4.15
'@jridgewell/sourcemap-codec': 1.5.0
'@js-sdsl/ordered-map@4.4.2': {}
@@ -17103,6 +17104,8 @@ snapshots:
binaryen: 116.0.0-nightly.20240114
long: 5.2.3
assert-options@0.8.2: {}
assertion-error@2.0.1: {}
ast-module-types@6.0.0: {}
@@ -17347,7 +17350,7 @@ snapshots:
call-bind@1.0.2:
dependencies:
function-bind: 1.1.1
function-bind: 1.1.2
get-intrinsic: 1.2.0
call-bind@1.0.8:
@@ -17521,8 +17524,6 @@ snapshots:
dependencies:
restore-cursor: 5.1.0
cli-spinners@2.9.0: {}
cli-spinners@2.9.2: {}
cli-truncate@4.0.0:
@@ -18374,15 +18375,15 @@ snapshots:
eslint-import-resolver-node@0.3.7:
dependencies:
debug: 3.2.7
is-core-module: 2.12.1
resolve: 1.22.2
is-core-module: 2.16.1
resolve: 1.22.10
transitivePeerDependencies:
- supports-color
eslint-import-resolver-node@0.3.9:
dependencies:
debug: 3.2.7
is-core-module: 2.16.0
is-core-module: 2.16.1
resolve: 1.22.10
transitivePeerDependencies:
- supports-color
@@ -18394,9 +18395,9 @@ snapshots:
eslint: 9.16.0(jiti@2.4.2)
eslint-module-utils: 2.8.0(@typescript-eslint/parser@5.59.2(eslint@9.16.0(jiti@2.4.2))(typescript@5.7.2))(eslint-import-resolver-node@0.3.7)(eslint-import-resolver-typescript@3.5.5)(eslint@9.16.0(jiti@2.4.2))
eslint-plugin-import: 2.31.0(@typescript-eslint/parser@5.59.2(eslint@9.16.0(jiti@2.4.2))(typescript@5.7.2))(eslint-import-resolver-typescript@3.5.5)(eslint@9.16.0(jiti@2.4.2))
get-tsconfig: 4.5.0
get-tsconfig: 4.8.1
globby: 13.1.4
is-core-module: 2.12.1
is-core-module: 2.16.1
is-glob: 4.0.3
synckit: 0.8.5
transitivePeerDependencies:
@@ -18440,7 +18441,7 @@ snapshots:
eslint-import-resolver-node: 0.3.9
eslint-module-utils: 2.12.0(@typescript-eslint/parser@5.59.2(eslint@9.16.0(jiti@2.4.2))(typescript@5.7.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.5.5)(eslint@9.16.0(jiti@2.4.2))
hasown: 2.0.2
is-core-module: 2.16.0
is-core-module: 2.16.1
is-glob: 4.0.3
minimatch: 3.1.2
object.fromentries: 2.0.8
@@ -19088,8 +19089,6 @@ snapshots:
- algoliasearch
- supports-color
function-bind@1.1.1: {}
function-bind@1.1.2: {}
function.prototype.name@1.1.5:
@@ -19158,7 +19157,7 @@ snapshots:
get-intrinsic@1.2.0:
dependencies:
function-bind: 1.1.1
function-bind: 1.1.2
has: 1.0.3
has-symbols: 1.0.3
@@ -19205,8 +19204,6 @@ snapshots:
es-errors: 1.3.0
get-intrinsic: 1.2.6
get-tsconfig@4.5.0: {}
get-tsconfig@4.8.1:
dependencies:
resolve-pkg-maps: 1.0.0
@@ -19432,7 +19429,7 @@ snapshots:
has@1.0.3:
dependencies:
function-bind: 1.1.1
function-bind: 1.1.2
hasown@2.0.2:
dependencies:
@@ -19796,10 +19793,6 @@ snapshots:
is-callable@1.2.7: {}
is-core-module@2.12.1:
dependencies:
has: 1.0.3
is-core-module@2.16.0:
dependencies:
hasown: 2.0.2
@@ -21920,7 +21913,7 @@ snapshots:
bl: 4.1.0
chalk: 4.1.2
cli-cursor: 3.1.0
cli-spinners: 2.9.0
cli-spinners: 2.9.2
is-interactive: 1.0.0
is-unicode-supported: 0.1.0
log-symbols: 4.1.0
@@ -22012,7 +22005,7 @@ snapshots:
parse-json@5.2.0:
dependencies:
'@babel/code-frame': 7.22.5
'@babel/code-frame': 7.26.2
error-ex: 1.3.2
json-parse-even-better-errors: 2.3.1
lines-and-columns: 1.2.4
@@ -22082,8 +22075,14 @@ snapshots:
pg-connection-string@2.7.0: {}
pg-cursor@2.12.1(pg@8.13.1):
dependencies:
pg: 8.13.1
pg-int8@1.0.1: {}
pg-minify@1.6.5: {}
pg-numeric@1.0.2: {}
pg-pool@3.7.0(pg@8.12.0):
@@ -22094,8 +22093,23 @@ snapshots:
dependencies:
pg: 8.13.1
pg-promise@11.10.2(pg-query-stream@4.7.1(pg@8.13.1)):
dependencies:
assert-options: 0.8.2
pg: 8.13.1
pg-minify: 1.6.5
pg-query-stream: 4.7.1(pg@8.13.1)
spex: 3.4.0
transitivePeerDependencies:
- pg-native
pg-protocol@1.7.0: {}
pg-query-stream@4.7.1(pg@8.13.1):
dependencies:
pg: 8.13.1
pg-cursor: 2.12.1(pg@8.13.1)
pg-types@2.2.0:
dependencies:
pg-int8: 1.0.1
@@ -22960,12 +22974,6 @@ snapshots:
path-parse: 1.0.7
supports-preserve-symlinks-flag: 1.0.0
resolve@1.22.2:
dependencies:
is-core-module: 2.12.1
path-parse: 1.0.7
supports-preserve-symlinks-flag: 1.0.0
resolve@1.22.9:
dependencies:
is-core-module: 2.16.0
@@ -22974,7 +22982,7 @@ snapshots:
resolve@2.0.0-next.5:
dependencies:
is-core-module: 2.16.0
is-core-module: 2.16.1
path-parse: 1.0.7
supports-preserve-symlinks-flag: 1.0.0
@@ -23428,6 +23436,8 @@ snapshots:
spdx-license-ids@3.0.20: {}
spex@3.4.0: {}
split2@4.2.0: {}
sprintf-js@1.0.3: {}
@@ -24793,7 +24803,7 @@ snapshots:
miniflare: 3.20241106.0(bufferutil@4.0.8)
nanoid: 3.3.6
path-to-regexp: 6.3.0
resolve: 1.22.9
resolve: 1.22.10
resolve.exports: 2.0.2
selfsigned: 2.1.1
source-map: 0.6.1
+1
View File
@@ -5,6 +5,7 @@ packages:
- "e2e/examples/*"
- "packages/*"
- "packages/providers/*"
- "packages/providers/storage/*"
- "packages/core/tests"
- "packages/llamaindex/tests"
- "packages/autotool/examples/*"
+3
View File
@@ -124,6 +124,9 @@
},
{
"path": "./packages/experimental/tsconfig.json"
},
{
"path": "./packages/providers/storage/postgres/tsconfig.json"
}
]
}