diff --git a/.changeset/metal-cameras-argue.md b/.changeset/metal-cameras-argue.md new file mode 100644 index 0000000000000000000000000000000000000000..c58a38a0d0b1a64198e0e8394374532fb3c41c85 --- /dev/null +++ b/.changeset/metal-cameras-argue.md @@ -0,0 +1,6 @@ +--- +"llamaindex": patch +"@llamaindex/readers": patch +--- + +Feature/ Add AzureCosmosDBNoSqlVectorStore and SimpleCosmosDBReader diff --git a/examples/cosmosdb/addPlainData.ts b/examples/cosmosdb/addPlainData.ts new file mode 100644 index 0000000000000000000000000000000000000000..bc32359ce70f20d828114a0e42124f8e86e58a60 --- /dev/null +++ b/examples/cosmosdb/addPlainData.ts @@ -0,0 +1,60 @@ +import { CosmosClient } from "@azure/cosmos"; +import { DefaultAzureCredential } from "@azure/identity"; +import * as dotenv from "dotenv"; +import * as fs from "fs"; +// Load environment variables from local .env file +dotenv.config(); + +const jsonFile = "./data/shortStories.json"; +const cosmosEndpoint = process.env.AZURE_COSMOSDB_NOSQL_ENDPOINT!; +const cosmosConnectionString = + process.env.AZURE_COSMOSDB_NOSQL_CONNECTION_STRING!; +const databaseName = + process.env.AZURE_COSMOSDB_DATABASE_NAME || "shortStoriesDatabase"; +const containerName = + process.env.AZURE_COSMOSDB_CONTAINER_NAME || "shortStoriesContainer"; + +async function addDocumentsToCosmosDB() { + if (!cosmosConnectionString && !cosmosEndpoint) { + throw new Error( + "Azure CosmosDB connection string or endpoint must be set.", + ); + } + + let cosmosClient: CosmosClient; + + const stories = JSON.parse(fs.readFileSync(jsonFile, "utf-8")); + + // initialize the cosmos client + if (cosmosConnectionString) { + cosmosClient = new CosmosClient(cosmosConnectionString); + } else { + cosmosClient = new CosmosClient({ + endpoint: cosmosEndpoint, + aadCredentials: new DefaultAzureCredential(), + }); + } + + // Create a new database and container if they don't exist + const { database } = await cosmosClient.databases.createIfNotExists({ + id: databaseName, + }); + const { container } = await database.containers.createIfNotExists({ + id: containerName, + partitionKey: "/id", + }); + + console.log( + `Data import started to the CosmosDB container ${containerName}.`, + ); + // Insert the short stories into the CosmosDB container + for (const story of stories) { + await container.items.create(story); + } + + console.log( + `Successfully imported data to the CosmosDB container ${containerName}.`, + ); +} + +addDocumentsToCosmosDB().catch(console.error); diff --git a/examples/cosmosdb/loadVectorData.ts b/examples/cosmosdb/loadVectorData.ts new file mode 100644 index 0000000000000000000000000000000000000000..8c1653e9211f67d399d65d3e25c71cb87ad02b85 --- /dev/null +++ b/examples/cosmosdb/loadVectorData.ts @@ -0,0 +1,95 @@ +import { CosmosClient } from "@azure/cosmos"; +import { DefaultAzureCredential } from "@azure/identity"; +import { + SimpleCosmosDBReader, + SimpleCosmosDBReaderLoaderConfig, +} from "@llamaindex/readers/cosmosdb"; +import * as dotenv from "dotenv"; +import { + AzureCosmosDBNoSqlVectorStore, + OpenAI, + OpenAIEmbedding, + Settings, + storageContextFromDefaults, + VectorStoreIndex, +} from "llamaindex"; +// Load environment variables from local .env file +dotenv.config(); + +const cosmosEndpoint = process.env.AZURE_COSMOSDB_NOSQL_ENDPOINT!; +const cosmosConnectionString = + process.env.AZURE_COSMOSDB_NOSQL_CONNECTION_STRING!; +const databaseName = + process.env.AZURE_COSMOSDB_DATABASE_NAME || "shortStoriesDatabase"; +const collectionName = + process.env.AZURE_COSMOSDB_CONTAINER_NAME || "shortStoriesContainer"; +const vectorCollectionName = + process.env.AZURE_COSMOSDB_VECTOR_CONTAINER_NAME || "vectorContainer"; + +// This exampple uses Azure OpenAI llm and embedding models +const llmInit = { + azure: { + apiVersion: process.env.AZURE_OPENAI_LLM_API_VERSION, + endpoint: process.env.AZURE_OPENAI_LLM_ENDPOINT, + apiKey: process.env.AZURE_OPENAI_LLM_API_KEY, + }, +}; + +const embedModelInit = { + azure: { + apiVersion: process.env.AZURE_OPENAI_EMBEDDING_API_VERSION, + endpoint: process.env.AZURE_OPENAI_EMBEDDING_ENDPOINT, + apiKey: process.env.AZURE_OPENAI_EMBEDDING_API_KEY, + }, +}; + +Settings.llm = new OpenAI(llmInit); +Settings.embedModel = new OpenAIEmbedding(embedModelInit); + +async function loadVectorData() { + if (!cosmosConnectionString && !cosmosEndpoint) { + throw new Error( + "Azure CosmosDB connection string or endpoint must be set.", + ); + } + + let cosmosClient: CosmosClient; + // initialize the cosmos client + if (cosmosConnectionString) { + cosmosClient = new CosmosClient(cosmosConnectionString); + } else { + cosmosClient = new CosmosClient({ + endpoint: cosmosEndpoint, + aadCredentials: new DefaultAzureCredential(), + }); + } + + const reader = new SimpleCosmosDBReader(cosmosClient); + // create a configuration object for the reader + const simpleCosmosReaderConfig: SimpleCosmosDBReaderLoaderConfig = { + databaseName, + containerName: collectionName, + fields: ["text"], + query: "SELECT c.id, c.text as text, c.metadata as metadata FROM c", + metadataFields: ["metadata"], + }; + + // load objects from cosmos and convert them into LlamaIndex Document objects + const documents = await reader.loadData(simpleCosmosReaderConfig); + // create Azure CosmosDB as a vector store + const vectorStore = new AzureCosmosDBNoSqlVectorStore({ + client: cosmosClient, + databaseName, + containerName: vectorCollectionName, + flatMetadata: false, + }); + + // Store the embeddings in the CosmosDB container + const storageContext = await storageContextFromDefaults({ vectorStore }); + await VectorStoreIndex.fromDocuments(documents, { storageContext }); + console.log( + `Successfully created embeddings in the CosmosDB container ${vectorCollectionName}.`, + ); +} + +loadVectorData().catch(console.error); diff --git a/examples/cosmosdb/queryVectorData.ts b/examples/cosmosdb/queryVectorData.ts new file mode 100644 index 0000000000000000000000000000000000000000..47b5badfc8e5f131db42d4fd566b7efe04d9cc6e --- /dev/null +++ b/examples/cosmosdb/queryVectorData.ts @@ -0,0 +1,83 @@ +import { CosmosClient } from "@azure/cosmos"; +import { DefaultAzureCredential } from "@azure/identity"; +import * as dotenv from "dotenv"; +import { + AzureCosmosDBNoSQLConfig, + AzureCosmosDBNoSqlVectorStore, + OpenAI, + OpenAIEmbedding, + Settings, + VectorStoreIndex, +} from "llamaindex"; + +// Load environment variables from local .env file +dotenv.config(); + +const cosmosEndpoint = process.env.AZURE_COSMOSDB_NOSQL_ENDPOINT!; +const cosmosConnectionString = + process.env.AZURE_COSMOSDB_NOSQL_CONNECTION_STRING!; +const databaseName = + process.env.AZURE_COSMOSDB_DATABASE_NAME || "shortStoriesDatabase"; +const containerName = + process.env.AZURE_COSMOSDB_VECTOR_CONTAINER_NAME || "vectorContainer"; + +const llmInit = { + azure: { + apiVersion: process.env.AZURE_OPENAI_LLM_API_VERSION, + endpoint: process.env.AZURE_OPENAI_LLM_ENDPOINT, + apiKey: process.env.AZURE_OPENAI_LLM_API_KEY, + }, +}; + +const embedModelInit = { + azure: { + apiVersion: process.env.AZURE_OPENAI_EMBEDDING_API_VERSION, + endpoint: process.env.AZURE_OPENAI_EMBEDDING_ENDPOINT, + apiKey: process.env.AZURE_OPENAI_EMBEDDING_API_KEY, + }, +}; + +Settings.llm = new OpenAI(llmInit); +Settings.embedModel = new OpenAIEmbedding(embedModelInit); + +async function query() { + if (!cosmosConnectionString && !cosmosEndpoint) { + throw new Error( + "Azure CosmosDB connection string or endpoint must be set.", + ); + } + + let cosmosClient: CosmosClient; + // initialize the cosmos client + if (cosmosConnectionString) { + cosmosClient = new CosmosClient(cosmosConnectionString); + } else { + cosmosClient = new CosmosClient({ + endpoint: cosmosEndpoint, + aadCredentials: new DefaultAzureCredential(), + }); + } + + // configure the Azure CosmosDB NoSQL Vector Store + const dbConfig: AzureCosmosDBNoSQLConfig = { + client: cosmosClient, + databaseName, + containerName, + flatMetadata: false, + }; + const store = new AzureCosmosDBNoSqlVectorStore(dbConfig); + + // create an index from the Azure CosmosDB NoSQL Vector Store + const index = await VectorStoreIndex.fromVectorStore(store); + + // create a retriever and a query engine from the index + const retriever = index.asRetriever({ similarityTopK: 20 }); + const queryEngine = index.asQueryEngine({ retriever }); + + const result = await queryEngine.query({ + query: "Who all jog?", // Cosmo, Ludo, Maud, Hale, Constance, Garrison, Fergus, Rafe, Waverly, Rex, Loveday + }); + console.log(result.message); +} + +void query(); diff --git a/examples/data/shortStories.json b/examples/data/shortStories.json new file mode 100644 index 0000000000000000000000000000000000000000..ca385cf1973209d6fd61db71f43f18617cc751c2 Binary files /dev/null and b/examples/data/shortStories.json differ diff --git a/examples/package.json b/examples/package.json index 85ad47e0a7ac71d68263f7887613f4fd93b2173b..aeee05af3a501b0b76dcbdce33aa5c6e586ad1d2 100644 --- a/examples/package.json +++ b/examples/package.json @@ -4,6 +4,7 @@ "version": "0.0.12", "dependencies": { "@aws-crypto/sha256-js": "^5.2.0", + "@azure/cosmos": "^4.1.1", "@azure/identity": "^4.4.1", "@datastax/astra-db-ts": "^1.4.1", "@llamaindex/core": "^0.4.0", diff --git a/packages/llamaindex/package.json b/packages/llamaindex/package.json index 3155e54487488a7e18a2a02e41ce6a913aebe30b..19c08cdb01c2ea5154e188d018cc0ea0acdaacbd 100644 --- a/packages/llamaindex/package.json +++ b/packages/llamaindex/package.json @@ -23,6 +23,7 @@ "@anthropic-ai/sdk": "0.27.1", "@aws-crypto/sha256-js": "^5.2.0", "@aws-sdk/client-sso-oidc": "^3.679.0", + "@azure/cosmos": "^4.1.1", "@azure/identity": "^4.4.1", "@datastax/astra-db-ts": "^1.4.1", "@discoveryjs/json-ext": "^0.6.1", diff --git a/packages/llamaindex/src/readers/index.ts b/packages/llamaindex/src/readers/index.ts index 55b7a945adf5f6db904e7b99cc67469293f5f83b..9036070857655203557aa8f25fb546b9fd9dee8c 100644 --- a/packages/llamaindex/src/readers/index.ts +++ b/packages/llamaindex/src/readers/index.ts @@ -4,6 +4,7 @@ export { type ResultType, } from "@llamaindex/cloud/reader"; export * from "@llamaindex/readers/assembly-ai"; +export * from "@llamaindex/readers/cosmosdb"; export * from "@llamaindex/readers/csv"; export * from "@llamaindex/readers/directory"; export * from "@llamaindex/readers/discord"; diff --git a/packages/llamaindex/src/vector-store/AzureCosmosDBNoSqlVectorStore.ts b/packages/llamaindex/src/vector-store/AzureCosmosDBNoSqlVectorStore.ts new file mode 100644 index 0000000000000000000000000000000000000000..0493db13445d4a368d9e911d9d5f039c3e925131 --- /dev/null +++ b/packages/llamaindex/src/vector-store/AzureCosmosDBNoSqlVectorStore.ts @@ -0,0 +1,363 @@ +import { + Container, + CosmosClient, + VectorEmbeddingDataType, + VectorEmbeddingDistanceFunction, + VectorIndexType, + type ContainerRequest, + type CosmosClientOptions, + type DatabaseRequest, + type IndexingPolicy, + type VectorEmbeddingPolicy, + type VectorIndex, +} from "@azure/cosmos"; +import { DefaultAzureCredential, type TokenCredential } from "@azure/identity"; +import { BaseNode, MetadataMode } from "@llamaindex/core/schema"; +import { getEnv } from "@llamaindex/env"; +import { metadataDictToNode, nodeToMetadata } from "./utils.js"; + +import { + BaseVectorStore, + type VectorStoreBaseParams, + type VectorStoreQuery, + type VectorStoreQueryResult, +} from "./types.js"; + +/** Azure Cosmos DB for NoSQL database creation options. */ +export type AzureCosmosDBNoSqlCreateDatabaseOptions = Partial< + Omit<DatabaseRequest, "id"> +>; +/** Azure Cosmos DB for NoSQL container creation options. */ +export type AzureCosmosDBNoSqlCreateContainerOptions = Partial< + Omit<ContainerRequest, "id" | "vectorEmbeddingPolicy" | "indexingPolicy"> +>; + +export interface AzureCosmosDBNoSQLInitOptions { + readonly vectorEmbeddingPolicy?: VectorEmbeddingPolicy | undefined; + readonly indexingPolicy?: IndexingPolicy | undefined; + readonly createContainerOptions?: + | AzureCosmosDBNoSqlCreateContainerOptions + | undefined; + readonly createDatabaseOptions?: + | AzureCosmosDBNoSqlCreateDatabaseOptions + | undefined; +} + +/** + * Configuration options for the `AzureCosmosDBNoSQLVectorStore` constructor. + */ +export interface AzureCosmosDBNoSQLConfig + extends AzureCosmosDBNoSQLInitOptions { + readonly client?: CosmosClient; + readonly connectionString?: string; + readonly endpoint?: string; + readonly credentials?: TokenCredential; + readonly databaseName?: string; + readonly containerName?: string; + readonly textKey?: string; + readonly metadataKey?: string; + readonly flatMetadata?: boolean; + readonly idKey?: string; +} + +const USER_AGENT_PREFIX = "LlamaIndex-CDBNoSQL-VectorStore-JavaScript"; + +const DEFAULT_VECTOR_EMBEDDING_POLICY = { + vectorEmbeddings: [ + { + path: "/embedding", + dataType: VectorEmbeddingDataType.Float32, + distanceFunction: VectorEmbeddingDistanceFunction.Cosine, + dimensions: 1536, + }, + ], +}; + +const DEFAULT_VECTOR_INDEXING_POLICY: VectorIndex[] = [ + { path: "/embedding", type: VectorIndexType.QuantizedFlat }, +]; + +function parseConnectionString(connectionString: string): { + endpoint: string; + key: string; +} { + const parts = connectionString.split(";"); + let endpoint = ""; + let accountKey = ""; + + parts.forEach((part) => { + const [key, value] = part.split("="); + if (key && key.trim() === "AccountEndpoint") { + endpoint = value?.trim() ?? ""; + } else if ((key ?? "").trim() === "AccountKey") { + accountKey = value?.trim() ?? ""; + } + }); + + if (!endpoint || !accountKey) { + throw new Error( + "Invalid connection string: missing AccountEndpoint or AccountKey.", + ); + } + + return { endpoint, key: accountKey }; +} + +export class AzureCosmosDBNoSqlVectorStore extends BaseVectorStore { + storesText: boolean = true; + + private initPromise?: Promise<void>; + + private container!: Container; + + /** + * The CosmosDB client. This is either passed in or created. + */ + cosmosClient: CosmosClient; + /** + * The key to use for the text field in the CosmosDB container. + * Default: "text" + */ + textKey: string; + + flatMetadata: boolean = true; + + /** + * The key to use for the id field in the CosmosDB container. + * Default: "id" + */ + idKey: string; + + /** + * The key to use for the metadata field in the CosmosDB container. + * Default: "metadata" + */ + metadataKey: string; + + /** + * The key to use for the vector embedding field in the CosmosDB container. + * Default: "embedding" + */ + embeddingKey: string; + + private initialize: () => Promise<void>; + + client(): unknown { + return this.cosmosClient; + } + + constructor(dbConfig: AzureCosmosDBNoSQLConfig & VectorStoreBaseParams) { + super(dbConfig); + const connectionString = + dbConfig.connectionString ?? + getEnv("AZURE_COSMOSDB_NOSQL_CONNECTION_STRING"); + + const endpoint = + dbConfig.endpoint ?? getEnv("AZURE_COSMOSDB_NOSQL_ENDPOINT"); + + if (!dbConfig.client && !connectionString && !endpoint) { + throw new Error( + "CosmosDB client, connection string or endpoint must be set in the configuration.", + ); + } + + if (!dbConfig.client) { + if (connectionString) { + const { endpoint, key } = parseConnectionString(connectionString); + this.cosmosClient = new CosmosClient({ + endpoint, + key, + userAgentSuffix: USER_AGENT_PREFIX, + } as CosmosClientOptions); + } else { + // Use managed identity + this.cosmosClient = new CosmosClient({ + endpoint, + aadCredentials: dbConfig.credentials ?? new DefaultAzureCredential(), + userAgentSuffix: USER_AGENT_PREFIX, + } as CosmosClientOptions); + } + } else { + this.cosmosClient = dbConfig.client; + } + + const client = this.cosmosClient; + const databaseName = dbConfig.databaseName ?? "vectorSearchDB"; + const containerName = dbConfig.containerName ?? "vectorSearchContainer"; + this.idKey = dbConfig.idKey ?? "id"; + this.textKey = dbConfig.textKey ?? "text"; + this.flatMetadata = dbConfig.flatMetadata ?? true; + this.metadataKey = dbConfig.metadataKey ?? "metadata"; + const vectorEmbeddingPolicy = + dbConfig.vectorEmbeddingPolicy ?? DEFAULT_VECTOR_EMBEDDING_POLICY; + const indexingPolicy: IndexingPolicy = dbConfig.indexingPolicy ?? { + vectorIndexes: DEFAULT_VECTOR_INDEXING_POLICY, + }; + + this.embeddingKey = + vectorEmbeddingPolicy.vectorEmbeddings?.[0]?.path?.slice(1) ?? ""; + + if (!this.embeddingKey) { + throw new Error( + "AzureCosmosDBNoSQLVectorStore requires a valid vectorEmbeddings path", + ); + } + + // Deferring initialization to the first call to `initialize` + this.initialize = () => { + if (this.initPromise === undefined) { + this.initPromise = this.init(client, databaseName, containerName, { + vectorEmbeddingPolicy, + indexingPolicy, + createContainerOptions: dbConfig.createContainerOptions, + createDatabaseOptions: dbConfig.createDatabaseOptions, + }).catch((error) => { + console.error( + "Error during AzureCosmosDBNoSQLVectorStore initialization", + error, + ); + }); + } + return this.initPromise; + }; + } + + /** + * Adds document to the CosmosDB container. + * + * @returns an array of document ids which were added + */ + async add(nodes: BaseNode[]): Promise<string[]> { + await this.initialize(); + if (!nodes || nodes.length === 0) { + return []; + } + + const docs = nodes.map((node) => { + const metadata = nodeToMetadata( + node, + true, + this.textKey, + this.flatMetadata, + ); + + return { + [this.idKey]: node.id_, + [this.embeddingKey]: node.getEmbedding(), + [this.textKey]: node.getContent(MetadataMode.NONE) || "", + [this.metadataKey]: metadata, + }; + }); + + const ids: string[] = []; + const results = await Promise.allSettled( + docs.map((doc) => this.container.items.create(doc)), + ); + for (const result of results) { + if (result.status === "fulfilled") { + ids.push(result.value.resource?.id ?? ""); + } else { + ids.push("error: could not create item"); + } + } + return ids; + } + + /** + * Delete a document from the CosmosDB container. + * + * @param refDocId - The id of the document to delete + * @param deleteOptions - Any options to pass to the container.item.delete function + * @returns Promise that resolves if the delete query did not throw an error. + */ + async delete(refDocId: string, deleteOptions?: object): Promise<void> { + await this.initialize(); + await this.container.item(refDocId).delete(deleteOptions); + } + + /** + * Performs a vector similarity search query in the CosmosDB container. + * + * @param query VectorStoreQuery + * @returns List of nodes along with similarityScore + */ + async query( + query: VectorStoreQuery, + options?: object, + ): Promise<VectorStoreQueryResult> { + await this.initialize(); + const params = { + vector: query.queryEmbedding!, + k: query.similarityTopK, + }; + + const nodes: BaseNode[] = []; + const ids: string[] = []; + const similarities: number[] = []; + const queryResults = await this.container.items + .query({ + query: + "SELECT TOP @k c[@id] as id, c[@text] as text, c[@metadata] as metadata, VectorDistance(c[@embeddingKey],@embedding) AS SimilarityScore FROM c ORDER BY VectorDistance(c[@embeddingKey],@embedding)", + parameters: [ + { name: "@k", value: params.k }, + { name: "@id", value: this.idKey }, + { name: "@text", value: this.textKey }, + { name: "@metadata", value: this.metadataKey }, + { name: "@embedding", value: params.vector }, + { name: "@embeddingKey", value: this.embeddingKey }, + ], + }) + .fetchAll(); + + for (const item of queryResults.resources) { + const node = metadataDictToNode(item["metadata"], { + fallback: { + id_: item["id"], + text: item["text"], + ...item["metadata"], + }, + }); + node.setContent(item["text"]); + const nodeId = item["id"]; + const nodeScore = item["SimilarityScore"]; + nodes.push(node); + ids.push(nodeId); + similarities.push(nodeScore); + } + + const result = { + nodes, + similarities, + ids, + }; + return result; + } + + /** + * Initialize the CosmosDB container. + */ + private async init( + client: CosmosClient, + databaseName: string, + containerName: string, + initOptions: AzureCosmosDBNoSQLInitOptions, + ): Promise<void> { + const { database } = await client.databases.createIfNotExists({ + ...(initOptions?.createDatabaseOptions ?? {}), + id: databaseName, + }); + + const { container } = await database.containers.createIfNotExists({ + ...(initOptions?.createContainerOptions ?? { + partitionKey: { paths: ["/id"] }, + }), + indexingPolicy: initOptions.indexingPolicy || { + vectorIndexes: DEFAULT_VECTOR_INDEXING_POLICY, + }, + vectorEmbeddingPolicy: + initOptions?.vectorEmbeddingPolicy || DEFAULT_VECTOR_EMBEDDING_POLICY, + id: containerName, + }); + this.container = container; + } +} diff --git a/packages/llamaindex/src/vector-store/index.ts b/packages/llamaindex/src/vector-store/index.ts index f01bed7a5f6b23910571066fb2394466f855c739..90eac71d0816ce6bfeacc7c5c6f70f566b3750e9 100644 --- a/packages/llamaindex/src/vector-store/index.ts +++ b/packages/llamaindex/src/vector-store/index.ts @@ -1,4 +1,5 @@ export * from "./AstraDBVectorStore.js"; +export * from "./AzureCosmosDBNoSqlVectorStore.js"; export * from "./ChromaVectorStore.js"; export * from "./MilvusVectorStore.js"; export * from "./MongoDBAtlasVectorStore.js"; diff --git a/packages/llamaindex/tests/mocks/TestableAzureCosmosDBNoSqlVectorStore.ts b/packages/llamaindex/tests/mocks/TestableAzureCosmosDBNoSqlVectorStore.ts new file mode 100644 index 0000000000000000000000000000000000000000..cc028bcecefc08de0aaaf509378349c95540c1c9 --- /dev/null +++ b/packages/llamaindex/tests/mocks/TestableAzureCosmosDBNoSqlVectorStore.ts @@ -0,0 +1,39 @@ +import type { BaseNode } from "@llamaindex/core/schema"; +import type { Mocked } from "vitest"; +import { AzureCosmosDBNoSqlVectorStore } from "../../src/vector-store.js"; + +export class TestableAzureCosmosDBNoSqlVectorStore extends AzureCosmosDBNoSqlVectorStore { + public nodes: BaseNode[] = []; + public client; + + private fakeTimeout = (ms: number) => { + return new Promise((resolve) => setTimeout(resolve, ms)); + }; + + public async add(nodes: BaseNode[]): Promise<string[]> { + this.nodes.push(...nodes); + await this.fakeTimeout(100); + for (const node of nodes) { + await this.client.databases.containers.items.create(node); + } + return nodes.map((node) => node.id_); + } + + public async delete(nodeId: string): Promise<void> { + await this.client.databases.containers.item(nodeId).delete(); + } + + constructor(config: { + // eslint-disable-next-line @typescript-eslint/no-explicit-any + client: Mocked<any>; + endpoint: string; + idKey: string; + textKey: string; + metadataKey: string; + }) { + super(config); + this.client = config.client; + this.client.databases.createIfNotExists(); + this.client.databases.containers.createIfNotExists(); + } +} diff --git a/packages/llamaindex/tests/package.json b/packages/llamaindex/tests/package.json index 03798bd09410c409c2715e547d82ad643c3c5b2d..28c53e921cd53f9e806fff755ea3e307ff176d58 100644 --- a/packages/llamaindex/tests/package.json +++ b/packages/llamaindex/tests/package.json @@ -10,6 +10,7 @@ "@faker-js/faker": "^9.0.1", "llamaindex": "workspace:*", "msw": "^2.6.0", - "vitest": "^2.0.5" + "vitest": "^2.0.5", + "dotenv": "^16.4.5" } } diff --git a/packages/llamaindex/tests/utility/mockCosmosClient.ts b/packages/llamaindex/tests/utility/mockCosmosClient.ts new file mode 100644 index 0000000000000000000000000000000000000000..ce525a1348bf66d1e60b8a6f597b52abbf80e5ae --- /dev/null +++ b/packages/llamaindex/tests/utility/mockCosmosClient.ts @@ -0,0 +1,55 @@ +// mockCosmosClient.ts +import { vi } from "vitest"; + +export const createMockClient = (mockData?: unknown[]) => { + let id = 0; + const client = { + database: vi.fn().mockReturnValue({ + container: vi.fn().mockReturnValue({ + items: { + // eslint-disable-next-line @typescript-eslint/no-explicit-any + create: vi.fn().mockImplementation((doc: any) => ({ + resource: { id: doc.id ?? `${id++}` }, + })), + query: vi.fn().mockReturnThis(), + fetchAll: vi.fn().mockImplementation(() => ({ + resources: mockData + ? mockData + : Array(id) + .fill(0) + .map((_, i) => ({ id: i })), + })), + }, + item: vi.fn().mockReturnThis(), + delete: vi.fn(), + }), + }), + databases: { + createIfNotExists: vi.fn().mockReturnThis(), + get database() { + return this; + }, + containers: { + createIfNotExists: vi.fn().mockReturnThis(), + get container() { + return this; + }, + items: { + // eslint-disable-next-line @typescript-eslint/no-explicit-any + create: vi.fn().mockImplementation((doc: any) => ({ + resource: { id: doc.id ?? `${id++}` }, + })), + query: vi.fn().mockReturnThis(), + fetchAll: vi.fn().mockImplementation(() => ({ + resources: Array(id) + .fill(0) + .map((_, i) => ({ id: i })), + })), + }, + item: vi.fn().mockReturnThis(), + delete: vi.fn(), + }, + }, + }; + return client; +}; diff --git a/packages/llamaindex/tests/vector-stores/AzureCosmosDBNoSqlVectorStore.int.test.ts b/packages/llamaindex/tests/vector-stores/AzureCosmosDBNoSqlVectorStore.int.test.ts new file mode 100644 index 0000000000000000000000000000000000000000..c93433781a2b6d3b5461409614458ceffb6c2d1e --- /dev/null +++ b/packages/llamaindex/tests/vector-stores/AzureCosmosDBNoSqlVectorStore.int.test.ts @@ -0,0 +1,183 @@ +import { + CosmosClient, + VectorEmbeddingDataType, + VectorEmbeddingDistanceFunction, + VectorIndexType, +} from "@azure/cosmos"; +import { DefaultAzureCredential } from "@azure/identity"; +import * as dotenv from "dotenv"; +import { + AzureCosmosDBNoSqlVectorStore, + Document, + OpenAI, + OpenAIEmbedding, + Settings, + VectorStoreQueryMode, + type AzureCosmosDBNoSQLConfig, + type VectorStoreQueryResult, +} from "llamaindex"; +import { beforeEach, describe, expect, it } from "vitest"; +dotenv.config(); +/* + * To run this test, you need have an Azure Cosmos DB for NoSQL instance + * running. You can deploy a free version on Azure Portal without any cost, + * following this guide: + * https://learn.microsoft.com/azure/cosmos-db/nosql/vector-search + * + * You do not need to create a database or collection, it will be created + * automatically by the test. + * + * Once you have the instance running, you need to set the following environment + * variables before running the test: + * - AZURE_COSMOSDB_NOSQL_CONNECTION_STRING or AZURE_COSMOSDB_NOSQL_ENDPOINT + * - AZURE_OPENAI_LLM_API_VERSION + * - AZURE_OPENAI_LLM_ENDPOINT + * - AZURE_OPENAI_LLM_API_KEY + * - AZURE_OPENAI_EMBEDDING_API_VERSION + * - AZURE_OPENAI_EMBEDDING_ENDPOINT + * - AZURE_OPENAI_EMBEDDING_API_KEY + * + * To use regular OpenAI instead of Azure OpenAI, configure the Settings.llm and Settings.embedModel accordingly. + */ + +const DATABASE_NAME = "llamaIndexTestDatabase"; +const CONTAINER_NAME = "testContainer"; +let client: CosmosClient; + +const llmInit = { + azure: { + apiVersion: process.env.AZURE_OPENAI_LLM_API_VERSION, + endpoint: process.env.AZURE_OPENAI_LLM_ENDPOINT, + apiKey: process.env.AZURE_OPENAI_LLM_API_KEY, + }, +}; + +const embedModelInit = { + azure: { + apiVersion: process.env.AZURE_OPENAI_EMBEDDING_API_VERSION, + endpoint: process.env.AZURE_OPENAI_EMBEDDING_ENDPOINT, + apiKey: process.env.AZURE_OPENAI_EMBEDDING_API_KEY, + }, +}; + +Settings.llm = new OpenAI(llmInit); +Settings.embedModel = new OpenAIEmbedding(embedModelInit); +// This test is skipped because it requires an Azure Cosmos DB instance and OpenAI API keys +describe.skip("AzureCosmosDBNoSQLVectorStore", () => { + beforeEach(async () => { + if (process.env.AZURE_COSMOSDB_NOSQL_CONNECTION_STRING) { + client = new CosmosClient( + process.env.AZURE_COSMOSDB_NOSQL_CONNECTION_STRING, + ); + } else if (process.env.AZURE_COSMOSDB_NOSQL_ENDPOINT) { + client = new CosmosClient({ + endpoint: process.env.AZURE_COSMOSDB_NOSQL_ENDPOINT, + aadCredentials: new DefaultAzureCredential(), + }); + } else { + throw new Error( + "Please set the environment variable AZURE_COSMOSDB_NOSQL_CONNECTION_STRING or AZURE_COSMOSDB_NOSQL_ENDPOINT", + ); + } + + // Make sure the database does not exists + try { + await client.database(DATABASE_NAME).delete(); + } catch { + // Ignore error if the database does not exist + } + }); + it("perform query", async () => { + const config: AzureCosmosDBNoSQLConfig = { + idKey: "name", + textKey: "customText", + metadataKey: "customMetadata", + client: client, + databaseName: DATABASE_NAME, + containerName: CONTAINER_NAME, + createContainerOptions: { + throughput: 1000, + partitionKey: { paths: ["/key"] }, + }, + vectorEmbeddingPolicy: { + vectorEmbeddings: [ + { + path: "/vector", + dataType: VectorEmbeddingDataType.Float32, + distanceFunction: VectorEmbeddingDistanceFunction.Euclidean, + dimensions: 1000, + }, + ], + }, + indexingPolicy: { + indexingMode: "consistent", + automatic: true, + includedPaths: [ + { + path: "/*", + }, + ], + excludedPaths: [ + { + path: "/_etag/?", + }, + { + path: "/metadata/?", + }, + ], + vectorIndexes: [ + { + path: "/vector", + type: VectorIndexType.QuantizedFlat, + }, + ], + }, + }; + + const vectorStore = new AzureCosmosDBNoSqlVectorStore(config); + + const embeddings = await Settings.embedModel.getTextEmbeddings([ + "This book is about politics", + "Cats sleeps a lot.", + "Sandwiches taste good.", + "The house is open", + "Sandwich", + ]); + + expect(vectorStore).toBeDefined(); + await vectorStore.add([ + new Document({ + id_: "1", + text: "This book is about politics", + embedding: embeddings[0], + metadata: { key: "politics" }, + }), + new Document({ + id_: "2", + text: "Cats sleeps a lot.", + embedding: embeddings[1], + metadata: { key: "cats" }, + }), + new Document({ + id_: "3", + text: "Sandwiches taste good.", + embedding: embeddings[2], + metadata: { key: "sandwiches" }, + }), + new Document({ + id_: "4", + text: "The house is open", + embedding: embeddings[3], + metadata: { key: "house" }, + }), + ]); + + const results: VectorStoreQueryResult = await vectorStore.query({ + queryEmbedding: embeddings[4] || [], + similarityTopK: 1, + mode: VectorStoreQueryMode.DEFAULT, + }); + expect(results.ids.length).toEqual(1); + expect(results.ids[0]).toEqual("3"); + }, 1000000); +}); diff --git a/packages/llamaindex/tests/vector-stores/AzureCosmosDBNoSqlVectorStore.test.ts b/packages/llamaindex/tests/vector-stores/AzureCosmosDBNoSqlVectorStore.test.ts new file mode 100644 index 0000000000000000000000000000000000000000..88a90802e5537dd623a766dc6a947f149035072c --- /dev/null +++ b/packages/llamaindex/tests/vector-stores/AzureCosmosDBNoSqlVectorStore.test.ts @@ -0,0 +1,98 @@ +/* eslint-disable @typescript-eslint/no-explicit-any */ +import type { BaseNode } from "@llamaindex/core/schema"; +import { beforeEach, describe, expect, it, vi } from "vitest"; +import { TestableAzureCosmosDBNoSqlVectorStore } from "../mocks/TestableAzureCosmosDBNoSqlVectorStore.js"; +import { createMockClient } from "../utility/mockCosmosClient.js"; // Import the mock client + +const createNodes = (n: number) => { + const nodes: BaseNode[] = []; + for (let i = 0; i < n; i += 1) { + nodes.push({ + id_: `node-${i}`, + getEmbedding: () => [0.1, 0.2, 0.3, 0.4], + getContent: () => `content ${i}`, + } as unknown as BaseNode); + } + return nodes; +}; + +beforeEach(() => { + vi.clearAllMocks(); +}); + +describe("AzureCosmosDBNoSqlVectorStore Tests", () => { + it("should initialize correctly", async () => { + const client = createMockClient(); + const store = new TestableAzureCosmosDBNoSqlVectorStore({ + client: client as any, + endpoint: "https://example.com", + idKey: "id", + textKey: "text", + metadataKey: "metadata", + }); + + await store.add(createNodes(10)); + + expect(store).toBeDefined(); + + expect(client.databases.createIfNotExists).toHaveBeenCalledTimes(1); + expect(client.databases.containers.createIfNotExists).toHaveBeenCalledTimes( + 1, + ); + }); + + it("should add nodes", async () => { + const client = createMockClient(); + const store = new TestableAzureCosmosDBNoSqlVectorStore({ + client: client as any, + endpoint: "https://example.com", + idKey: "id", + textKey: "text", + metadataKey: "metadata", + }); + + expect(store).toBeDefined(); + + const nodes = createNodes(1500); + await store.add(nodes); + + expect(client.databases.containers.items.create).toHaveBeenCalledTimes( + 1500, + ); + }); + + it("should delete nodes", async () => { + const client = createMockClient(); + const store = new TestableAzureCosmosDBNoSqlVectorStore({ + client: client as any, + endpoint: "https://example.com", + idKey: "id", + textKey: "text", + metadataKey: "metadata", + }); + + const nodes = createNodes(10); + await store.add(nodes); + + await store.delete("node-0"); + + expect(client.databases.containers.item().delete).toHaveBeenCalledTimes(1); + }); + + it("should use specified IDs", async () => { + const client = createMockClient(); + const store = new TestableAzureCosmosDBNoSqlVectorStore({ + client: client as any, + endpoint: "https://example.com", + idKey: "id", + textKey: "text", + metadataKey: "metadata", + }); + + expect(store).toBeDefined(); + + const result = await store.add(createNodes(2)); + expect(client.databases.containers.items.create).toHaveBeenCalledTimes(2); + expect(result).toEqual(["node-0", "node-1"]); + }); +}); diff --git a/packages/readers/cosmosdb/package.json b/packages/readers/cosmosdb/package.json new file mode 100644 index 0000000000000000000000000000000000000000..10dbf8b62354f654c9d3021e5b82775f94b9f44c --- /dev/null +++ b/packages/readers/cosmosdb/package.json @@ -0,0 +1,14 @@ +{ + "type": "module", + "main": "./dist/index.cjs", + "module": "./dist/index.js", + "types": "./dist/index.d.ts", + "exports": { + ".": { + "edge-light": "./dist/index.edge-light.js", + "workerd": "./dist/index.workerd.js", + "default": "./dist/index.js" + } + }, + "private": true +} diff --git a/packages/readers/package.json b/packages/readers/package.json index c08ca7449783d65a0d51cdbdd6b6a120c6a8050a..98fbeb6e5df56b01e9601706dedb73fc69ff7252 100644 --- a/packages/readers/package.json +++ b/packages/readers/package.json @@ -24,6 +24,24 @@ "default": "./assembly-ai/dist/index.js" } }, + "./cosmosdb": { + "edge-light": { + "types": "./cosmosdb/dist/index.edge-light.d.ts", + "default": "./cosmosdb/dist/index.edge-light.js" + }, + "workerd": { + "types": "./cosmosdb/dist/index.workerd.d.ts", + "default": "./cosmosdb/dist/index.workerd.js" + }, + "require": { + "types": "./cosmosdb/dist/index.d.cts", + "default": "./cosmosdb/dist/index.cjs" + }, + "import": { + "types": "./cosmosdb/dist/index.d.ts", + "default": "./cosmosdb/dist/index.js" + } + }, "./csv": { "edge-light": { "types": "./csv/dist/index.edge-light.d.ts", @@ -243,6 +261,7 @@ }, "files": [ "assembly-ai", + "cosmosdb", "csv", "directory", "discord", @@ -279,6 +298,7 @@ "@llamaindex/env": "workspace:*" }, "dependencies": { + "@azure/cosmos": "^4.1.1", "@discordjs/rest": "^2.3.0", "@discoveryjs/json-ext": "^0.6.1", "assemblyai": "^4.7.0", diff --git a/packages/readers/src/cosmosdb.ts b/packages/readers/src/cosmosdb.ts new file mode 100644 index 0000000000000000000000000000000000000000..6a8e4f6c44b825a1d5fd9635de8161123cb09740 --- /dev/null +++ b/packages/readers/src/cosmosdb.ts @@ -0,0 +1,87 @@ +import type { CosmosClient, SqlQuerySpec } from "@azure/cosmos"; +import type { Metadata } from "@llamaindex/core/schema"; +import { type BaseReader, Document } from "@llamaindex/core/schema"; + +export type SimpleCosmosDBReaderLoaderConfig = { + /** + * The name of the database to read. + */ + databaseName: string; + /** + * The name of the container to read. + */ + containerName: string; + /** + * An array of field names to retrieve from each document. Defaults to ["text"]. + */ + fields?: string[]; + /** + * The separator to join multiple field values. Defaults to an empty string. + */ + fieldSeparator?: string; + /** + * A custom query to filter the documents. Defaults to `SELECT * FROM c`. + */ + query?: string | SqlQuerySpec; + /** + * An optional array of metadata field names. If specified extracts this information as metadata. + */ + metadataFields?: string[]; +}; + +/** + * Read data from CosmosDB. + */ +export class SimpleCosmosDBReader implements BaseReader { + /** + * The CosmosDB client. + */ + private client: CosmosClient; + + constructor(client: CosmosClient) { + this.client = client; + } + + /** + * Loads data from a Cosmos DB container + * @returns {Promise<Document[]>} + */ + public async loadData( + config: SimpleCosmosDBReaderLoaderConfig, + ): Promise<Document[]> { + if (!config.databaseName || !config.containerName) { + throw new Error("databaseName and containerName are required"); + } + const database = this.client.database(config.databaseName); + const container = database.container(config.containerName); + const query = config.query || "SELECT * FROM c"; + const fields = config.fields || ["text"]; + const fieldSeparator = config.fieldSeparator || ""; + const metadataFields = config.metadataFields; + + try { + let res = await container.items.query(query).fetchAll(); + const documents: Document[] = []; + + for (const item of res.resources) { + const texts: Array<string | string[]> = fields.map( + (name) => item[name], + ); + const flattenedTexts = texts.flat(); + const text = flattenedTexts.join(fieldSeparator); + + let metadata: Metadata = {}; + if (metadataFields) { + metadata = Object.fromEntries( + metadataFields.map((name) => [name, item[name]]), + ); + } + documents.push(new Document({ id_: item.id, text, metadata })); + } + + return documents; + } catch (error) { + throw new Error(`Error loading data from Cosmos DB: ${error}`); + } + } +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index c70e033978942e0072d54ee2439bbb881c1633ec..7b9098d8886d12f96fb46fcb9abe6ba52852390c 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -62,7 +62,7 @@ importers: dependencies: '@docusaurus/core': specifier: 3.5.2 - version: 3.5.2(@docusaurus/types@3.5.2(acorn@8.13.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.3.1))(acorn@8.13.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@2.4.0))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) + version: 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.3.1))(bufferutil@4.0.8)(eslint@9.13.0(jiti@2.4.0))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) '@docusaurus/remark-plugin-npm2yarn': specifier: 3.5.2 version: 3.5.2 @@ -96,16 +96,16 @@ importers: devDependencies: '@docusaurus/module-type-aliases': specifier: 3.5.2 - version: 3.5.2(acorn@8.13.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@docusaurus/preset-classic': specifier: 3.5.2 - version: 3.5.2(@algolia/client-search@5.12.0)(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.3.1))(@types/react@18.3.12)(acorn@8.13.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@2.4.0))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.17.2)(typescript@5.6.3) + version: 3.5.2(@algolia/client-search@5.12.0)(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.3.1))(@types/react@18.3.12)(bufferutil@4.0.8)(eslint@9.13.0(jiti@2.4.0))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.17.2)(typescript@5.6.3) '@docusaurus/theme-classic': specifier: 3.5.2 - version: 3.5.2(@types/react@18.3.12)(acorn@8.13.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@2.4.0))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) + version: 3.5.2(@types/react@18.3.12)(bufferutil@4.0.8)(eslint@9.13.0(jiti@2.4.0))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) '@docusaurus/types': specifier: 3.5.2 - version: 3.5.2(acorn@8.13.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@tsconfig/docusaurus': specifier: 2.0.3 version: 2.0.3 @@ -174,10 +174,10 @@ importers: version: 1.1.3(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@vercel/functions': specifier: ^1.5.0 - version: 1.5.0(@aws-sdk/credential-provider-web-identity@3.679.0) + version: 1.5.0(@aws-sdk/credential-provider-web-identity@3.679.0(@aws-sdk/client-sts@3.682.0)) ai: specifier: ^3.4.31 - version: 3.4.31(openai@4.69.0(zod@3.23.8))(react@18.3.1)(sswr@2.1.0(svelte@5.1.9))(svelte@5.1.9)(vue@3.5.12(typescript@5.6.3))(zod@3.23.8) + version: 3.4.31(openai@4.69.0(encoding@0.1.13)(zod@3.23.8))(react@18.3.1)(sswr@2.1.0(svelte@5.1.9))(svelte@5.1.9)(vue@3.5.12(typescript@5.6.3))(zod@3.23.8) class-variance-authority: specifier: ^0.7.0 version: 0.7.0 @@ -258,7 +258,7 @@ importers: version: 1.22.2 shiki-magic-move: specifier: ^0.5.0 - version: 0.5.0(react@18.3.1)(shiki@1.22.2)(vue@3.5.12(typescript@5.6.3)) + version: 0.5.0(react@18.3.1)(shiki@1.22.2)(svelte@5.1.9)(vue@3.5.12(typescript@5.6.3)) swr: specifier: ^2.2.5 version: 2.2.5(react@18.3.1) @@ -341,6 +341,9 @@ importers: '@aws-crypto/sha256-js': specifier: ^5.2.0 version: 5.2.0 + '@azure/cosmos': + specifier: ^4.1.1 + version: 4.1.1 '@azure/identity': specifier: ^4.4.1 version: 4.5.0 @@ -370,7 +373,7 @@ importers: version: 2.4.9 chromadb: specifier: ^1.8.1 - version: 1.9.2(cohere-ai@7.14.0(encoding@0.1.13))(encoding@0.1.13)(openai@4.69.0(encoding@0.1.13)) + version: 1.9.2(cohere-ai@7.14.0(encoding@0.1.13))(encoding@0.1.13)(openai@4.69.0(encoding@0.1.13)(zod@3.23.8)) commander: specifier: ^12.1.0 version: 12.1.0 @@ -385,7 +388,7 @@ importers: version: link:../packages/llamaindex mongodb: specifier: ^6.7.0 - version: 6.10.0(@aws-sdk/credential-providers@3.682.0) + version: 6.10.0(@aws-sdk/credential-providers@3.682.0(@aws-sdk/client-sso-oidc@3.682.0(@aws-sdk/client-sts@3.682.0))) pathe: specifier: ^1.1.2 version: 1.1.2 @@ -502,7 +505,7 @@ importers: version: 1.1.0(@types/react@18.3.12)(react@18.3.1) ai: specifier: ^3.3.21 - version: 3.4.31(openai@4.69.0(zod@3.23.8))(react@18.3.1)(sswr@2.1.0(svelte@5.1.9))(svelte@5.1.9)(vue@3.5.12(typescript@5.6.3))(zod@3.23.8) + version: 3.4.31(openai@4.69.0(encoding@0.1.13)(zod@3.23.8))(react@18.3.1)(sswr@2.1.0(svelte@5.1.9))(svelte@5.1.9)(vue@3.5.12(typescript@5.6.3))(zod@3.23.8) class-variance-authority: specifier: ^0.7.0 version: 0.7.0 @@ -726,7 +729,10 @@ importers: version: 5.2.0 '@aws-sdk/client-sso-oidc': specifier: ^3.679.0 - version: 3.682.0(@aws-sdk/client-sts@3.678.0) + version: 3.682.0(@aws-sdk/client-sts@3.682.0) + '@azure/cosmos': + specifier: ^4.1.1 + version: 4.1.1 '@azure/identity': specifier: ^4.4.1 version: 4.5.0 @@ -822,13 +828,13 @@ importers: version: 4.7.1(bufferutil@4.0.8) chromadb: specifier: 1.9.2 - version: 1.9.2(@google/generative-ai@0.12.0)(cohere-ai@7.13.0(@aws-sdk/client-sso-oidc@3.682.0(@aws-sdk/client-sts@3.678.0))(encoding@0.1.13))(encoding@0.1.13)(openai@4.69.0(encoding@0.1.13)(zod@3.23.8)) + version: 1.9.2(@google/generative-ai@0.12.0)(cohere-ai@7.13.0(@aws-sdk/client-sso-oidc@3.682.0(@aws-sdk/client-sts@3.682.0))(encoding@0.1.13))(encoding@0.1.13)(openai@4.69.0(encoding@0.1.13)(zod@3.23.8)) chromadb-default-embed: specifier: ^2.13.2 version: 2.13.2 cohere-ai: specifier: 7.13.0 - version: 7.13.0(@aws-sdk/client-sso-oidc@3.682.0(@aws-sdk/client-sts@3.678.0))(encoding@0.1.13) + version: 7.13.0(@aws-sdk/client-sso-oidc@3.682.0(@aws-sdk/client-sts@3.682.0))(encoding@0.1.13) gpt-tokenizer: specifier: ^2.5.0 version: 2.5.1 @@ -846,7 +852,7 @@ importers: version: 1.10.0 mongodb: specifier: ^6.7.0 - version: 6.10.0(@aws-sdk/credential-providers@3.682.0(@aws-sdk/client-sso-oidc@3.682.0(@aws-sdk/client-sts@3.678.0))) + version: 6.10.0(@aws-sdk/credential-providers@3.682.0(@aws-sdk/client-sso-oidc@3.682.0(@aws-sdk/client-sts@3.682.0))) openai: specifier: ^4.60.0 version: 4.69.0(encoding@0.1.13)(zod@3.23.8) @@ -969,7 +975,7 @@ importers: dependencies: ai: specifier: ^3.3.21 - version: 3.4.31(openai@4.69.0(zod@3.23.8))(react@18.3.1)(sswr@2.1.0(svelte@5.1.9))(svelte@5.1.9)(vue@3.5.12(typescript@5.6.3))(zod@3.23.8) + version: 3.4.31(openai@4.69.0(encoding@0.1.13)(zod@3.23.8))(react@18.3.1)(sswr@2.1.0(svelte@5.1.9))(svelte@5.1.9)(vue@3.5.12(typescript@5.6.3))(zod@3.23.8) llamaindex: specifier: workspace:* version: link:../../.. @@ -1115,6 +1121,9 @@ importers: '@faker-js/faker': specifier: ^9.0.1 version: 9.1.0 + dotenv: + specifier: ^16.4.5 + version: 16.4.5 llamaindex: specifier: workspace:* version: link:.. @@ -1320,6 +1329,9 @@ importers: packages/readers: dependencies: + '@azure/cosmos': + specifier: ^4.1.1 + version: 4.1.1 '@discordjs/rest': specifier: ^2.3.0 version: 2.4.0 @@ -1340,7 +1352,7 @@ importers: version: 1.8.0 mongodb: specifier: ^6.7.0 - version: 6.10.0(@aws-sdk/credential-providers@3.682.0) + version: 6.10.0(@aws-sdk/credential-providers@3.682.0(@aws-sdk/client-sso-oidc@3.682.0(@aws-sdk/client-sts@3.682.0))) notion-md-crawler: specifier: ^1.0.0 version: 1.0.0(encoding@0.1.13) @@ -1440,6 +1452,9 @@ importers: specifier: ^0.23.0 version: 0.23.0(tree-sitter@0.22.0) devDependencies: + '@azure/cosmos': + specifier: ^4.1.1 + version: 4.1.1 '@faker-js/faker': specifier: ^9.0.1 version: 9.1.0 @@ -1905,6 +1920,10 @@ packages: resolution: {integrity: sha512-DxOSLua+NdpWoSqULhjDyAZTXFdP/LKkqtYuxxz1SCN289zk3OG8UOpnCQAz/tygyACBtWp/BoO72ptK7msY8g==} engines: {node: '>=18.0.0'} + '@azure/cosmos@4.1.1': + resolution: {integrity: sha512-EKcRHZy3enhz7hU/qlwW2urcoF7haFkQRbLhR+rUaAtzDaN6+F/rH4xJtNc94NjOEoeHUI+bkze63ZA55Gca0A==} + engines: {node: '>=18.0.0'} + '@azure/identity@4.5.0': resolution: {integrity: sha512-EknvVmtBuSIic47xkOqyNabAme0RYTw52BTMz8eBgU1ysTyMrD1uOoM+JdS0J/4Yfp98IBT3osqq3BfwSaNaGQ==} engines: {node: '>=18.0.0'} @@ -9068,6 +9087,9 @@ packages: resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} hasBin: true + jsbi@4.3.0: + resolution: {integrity: sha512-SnZNcinB4RIcnEyZqFPdGPVgrg2AcnykiBy0sHVJQKHYeaLUvi3Exj+iaPpLnFVkDPZIV4U0yvgC9/R4uEAZ9g==} + jsesc@0.5.0: resolution: {integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==} hasBin: true @@ -10966,6 +10988,9 @@ packages: printable-characters@1.0.42: resolution: {integrity: sha512-dKp+C4iXWK4vVYZmYSd0KBH5F/h1HoZRsbJ82AVKRO3PEo8L4lBS/vLwhVtpwwuYcoIsVY+1JYKR268yn480uQ==} + priorityqueuejs@2.0.0: + resolution: {integrity: sha512-19BMarhgpq3x4ccvVi8k2QpJZcymo/iFUcrhPd4V96kYGovOdTsWwy7fxChYi4QY+m2EnGBWSX9Buakz+tWNQQ==} + prism-react-renderer@2.4.0: resolution: {integrity: sha512-327BsVCD/unU4CNLZTWVHyUHKnsqcvj2qbPlQ8MiBE2eq2rgctjigPA1Gp9HLF83kZ20zNN6jgizHJeEsyFYOw==} peerDependencies: @@ -11654,6 +11679,10 @@ packages: resolution: {integrity: sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==} engines: {node: '>=10'} + semaphore@1.1.0: + resolution: {integrity: sha512-O4OZEaNtkMd/K0i6js9SL+gqy0ZCBMgUvlSqHKi4IBdjhe7wB8pwztUk1BbZ1fmrvpwFrPbHzqd2w5pTcJH6LA==} + engines: {node: '>=0.8.0'} + semver-diff@4.0.0: resolution: {integrity: sha512-0Ju4+6A8iOnpL/Thra7dZsSlOHYAHIeMxfhWQRI1/VLcT3WDBZKKtQt/QkBOsiIN9ZpuvHE6cGZ0x4glCMmfiA==} engines: {node: '>=12'} @@ -13736,51 +13765,6 @@ snapshots: transitivePeerDependencies: - aws-crt - '@aws-sdk/client-sso-oidc@3.682.0(@aws-sdk/client-sts@3.678.0)': - dependencies: - '@aws-crypto/sha256-browser': 5.2.0 - '@aws-crypto/sha256-js': 5.2.0 - '@aws-sdk/client-sts': 3.678.0 - '@aws-sdk/core': 3.679.0 - '@aws-sdk/credential-provider-node': 3.682.0(@aws-sdk/client-sso-oidc@3.682.0(@aws-sdk/client-sts@3.678.0))(@aws-sdk/client-sts@3.678.0) - '@aws-sdk/middleware-host-header': 3.679.0 - '@aws-sdk/middleware-logger': 3.679.0 - '@aws-sdk/middleware-recursion-detection': 3.679.0 - '@aws-sdk/middleware-user-agent': 3.682.0 - '@aws-sdk/region-config-resolver': 3.679.0 - '@aws-sdk/types': 3.679.0 - '@aws-sdk/util-endpoints': 3.679.0 - '@aws-sdk/util-user-agent-browser': 3.679.0 - '@aws-sdk/util-user-agent-node': 3.682.0 - '@smithy/config-resolver': 3.0.10 - '@smithy/core': 2.5.1 - '@smithy/fetch-http-handler': 3.2.9 - '@smithy/hash-node': 3.0.8 - '@smithy/invalid-dependency': 3.0.8 - '@smithy/middleware-content-length': 3.0.10 - '@smithy/middleware-endpoint': 3.2.1 - '@smithy/middleware-retry': 3.0.25 - '@smithy/middleware-serde': 3.0.8 - '@smithy/middleware-stack': 3.0.8 - '@smithy/node-config-provider': 3.1.9 - '@smithy/node-http-handler': 3.2.5 - '@smithy/protocol-http': 4.1.5 - '@smithy/smithy-client': 3.4.2 - '@smithy/types': 3.6.0 - '@smithy/url-parser': 3.0.8 - '@smithy/util-base64': 3.0.0 - '@smithy/util-body-length-browser': 3.0.0 - '@smithy/util-body-length-node': 3.0.0 - '@smithy/util-defaults-mode-browser': 3.0.25 - '@smithy/util-defaults-mode-node': 3.0.25 - '@smithy/util-endpoints': 2.1.4 - '@smithy/util-middleware': 3.0.8 - '@smithy/util-retry': 3.0.8 - '@smithy/util-utf8': 3.0.0 - tslib: 2.8.0 - transitivePeerDependencies: - - aws-crt - '@aws-sdk/client-sso-oidc@3.682.0(@aws-sdk/client-sts@3.682.0)': dependencies: '@aws-crypto/sha256-browser': 5.2.0 @@ -14101,44 +14085,6 @@ snapshots: - '@aws-sdk/client-sso-oidc' - aws-crt - '@aws-sdk/credential-provider-ini@3.682.0(@aws-sdk/client-sso-oidc@3.682.0(@aws-sdk/client-sts@3.678.0))(@aws-sdk/client-sts@3.678.0)': - dependencies: - '@aws-sdk/client-sts': 3.678.0 - '@aws-sdk/core': 3.679.0 - '@aws-sdk/credential-provider-env': 3.679.0 - '@aws-sdk/credential-provider-http': 3.679.0 - '@aws-sdk/credential-provider-process': 3.679.0 - '@aws-sdk/credential-provider-sso': 3.682.0(@aws-sdk/client-sso-oidc@3.682.0(@aws-sdk/client-sts@3.678.0)) - '@aws-sdk/credential-provider-web-identity': 3.679.0(@aws-sdk/client-sts@3.678.0) - '@aws-sdk/types': 3.679.0 - '@smithy/credential-provider-imds': 3.2.5 - '@smithy/property-provider': 3.1.8 - '@smithy/shared-ini-file-loader': 3.1.9 - '@smithy/types': 3.6.0 - tslib: 2.8.1 - transitivePeerDependencies: - - '@aws-sdk/client-sso-oidc' - - aws-crt - - '@aws-sdk/credential-provider-ini@3.682.0(@aws-sdk/client-sso-oidc@3.682.0(@aws-sdk/client-sts@3.678.0))(@aws-sdk/client-sts@3.682.0)': - dependencies: - '@aws-sdk/client-sts': 3.682.0 - '@aws-sdk/core': 3.679.0 - '@aws-sdk/credential-provider-env': 3.679.0 - '@aws-sdk/credential-provider-http': 3.679.0 - '@aws-sdk/credential-provider-process': 3.679.0 - '@aws-sdk/credential-provider-sso': 3.682.0(@aws-sdk/client-sso-oidc@3.682.0(@aws-sdk/client-sts@3.678.0)) - '@aws-sdk/credential-provider-web-identity': 3.679.0(@aws-sdk/client-sts@3.682.0) - '@aws-sdk/types': 3.679.0 - '@smithy/credential-provider-imds': 3.2.5 - '@smithy/property-provider': 3.1.8 - '@smithy/shared-ini-file-loader': 3.1.9 - '@smithy/types': 3.6.0 - tslib: 2.8.1 - transitivePeerDependencies: - - '@aws-sdk/client-sso-oidc' - - aws-crt - '@aws-sdk/credential-provider-ini@3.682.0(@aws-sdk/client-sso-oidc@3.682.0(@aws-sdk/client-sts@3.682.0))(@aws-sdk/client-sts@3.682.0)': dependencies: '@aws-sdk/client-sts': 3.682.0 @@ -14177,44 +14123,6 @@ snapshots: - '@aws-sdk/client-sts' - aws-crt - '@aws-sdk/credential-provider-node@3.682.0(@aws-sdk/client-sso-oidc@3.682.0(@aws-sdk/client-sts@3.678.0))(@aws-sdk/client-sts@3.678.0)': - dependencies: - '@aws-sdk/credential-provider-env': 3.679.0 - '@aws-sdk/credential-provider-http': 3.679.0 - '@aws-sdk/credential-provider-ini': 3.682.0(@aws-sdk/client-sso-oidc@3.682.0(@aws-sdk/client-sts@3.678.0))(@aws-sdk/client-sts@3.678.0) - '@aws-sdk/credential-provider-process': 3.679.0 - '@aws-sdk/credential-provider-sso': 3.682.0(@aws-sdk/client-sso-oidc@3.682.0(@aws-sdk/client-sts@3.678.0)) - '@aws-sdk/credential-provider-web-identity': 3.679.0(@aws-sdk/client-sts@3.678.0) - '@aws-sdk/types': 3.679.0 - '@smithy/credential-provider-imds': 3.2.5 - '@smithy/property-provider': 3.1.8 - '@smithy/shared-ini-file-loader': 3.1.9 - '@smithy/types': 3.6.0 - tslib: 2.8.0 - transitivePeerDependencies: - - '@aws-sdk/client-sso-oidc' - - '@aws-sdk/client-sts' - - aws-crt - - '@aws-sdk/credential-provider-node@3.682.0(@aws-sdk/client-sso-oidc@3.682.0(@aws-sdk/client-sts@3.678.0))(@aws-sdk/client-sts@3.682.0)': - dependencies: - '@aws-sdk/credential-provider-env': 3.679.0 - '@aws-sdk/credential-provider-http': 3.679.0 - '@aws-sdk/credential-provider-ini': 3.682.0(@aws-sdk/client-sso-oidc@3.682.0(@aws-sdk/client-sts@3.678.0))(@aws-sdk/client-sts@3.682.0) - '@aws-sdk/credential-provider-process': 3.679.0 - '@aws-sdk/credential-provider-sso': 3.682.0(@aws-sdk/client-sso-oidc@3.682.0(@aws-sdk/client-sts@3.678.0)) - '@aws-sdk/credential-provider-web-identity': 3.679.0(@aws-sdk/client-sts@3.682.0) - '@aws-sdk/types': 3.679.0 - '@smithy/credential-provider-imds': 3.2.5 - '@smithy/property-provider': 3.1.8 - '@smithy/shared-ini-file-loader': 3.1.9 - '@smithy/types': 3.6.0 - tslib: 2.8.0 - transitivePeerDependencies: - - '@aws-sdk/client-sso-oidc' - - '@aws-sdk/client-sts' - - aws-crt - '@aws-sdk/credential-provider-node@3.682.0(@aws-sdk/client-sso-oidc@3.682.0(@aws-sdk/client-sts@3.682.0))(@aws-sdk/client-sts@3.682.0)': dependencies: '@aws-sdk/credential-provider-env': 3.679.0 @@ -14234,26 +14142,6 @@ snapshots: - '@aws-sdk/client-sts' - aws-crt - '@aws-sdk/credential-provider-node@3.682.0(@aws-sdk/client-sts@3.682.0)': - dependencies: - '@aws-sdk/credential-provider-env': 3.679.0 - '@aws-sdk/credential-provider-http': 3.679.0 - '@aws-sdk/credential-provider-ini': 3.682.0(@aws-sdk/client-sso-oidc@3.682.0(@aws-sdk/client-sts@3.678.0))(@aws-sdk/client-sts@3.682.0) - '@aws-sdk/credential-provider-process': 3.679.0 - '@aws-sdk/credential-provider-sso': 3.682.0(@aws-sdk/client-sso-oidc@3.682.0(@aws-sdk/client-sts@3.678.0)) - '@aws-sdk/credential-provider-web-identity': 3.679.0(@aws-sdk/client-sts@3.682.0) - '@aws-sdk/types': 3.679.0 - '@smithy/credential-provider-imds': 3.2.5 - '@smithy/property-provider': 3.1.8 - '@smithy/shared-ini-file-loader': 3.1.9 - '@smithy/types': 3.6.0 - tslib: 2.8.0 - transitivePeerDependencies: - - '@aws-sdk/client-sso-oidc' - - '@aws-sdk/client-sts' - - aws-crt - optional: true - '@aws-sdk/credential-provider-process@3.678.0': dependencies: '@aws-sdk/core': 3.678.0 @@ -14286,20 +14174,6 @@ snapshots: - '@aws-sdk/client-sso-oidc' - aws-crt - '@aws-sdk/credential-provider-sso@3.682.0(@aws-sdk/client-sso-oidc@3.682.0(@aws-sdk/client-sts@3.678.0))': - dependencies: - '@aws-sdk/client-sso': 3.682.0 - '@aws-sdk/core': 3.679.0 - '@aws-sdk/token-providers': 3.679.0(@aws-sdk/client-sso-oidc@3.682.0(@aws-sdk/client-sts@3.678.0)) - '@aws-sdk/types': 3.679.0 - '@smithy/property-provider': 3.1.8 - '@smithy/shared-ini-file-loader': 3.1.9 - '@smithy/types': 3.6.0 - tslib: 2.8.1 - transitivePeerDependencies: - - '@aws-sdk/client-sso-oidc' - - aws-crt - '@aws-sdk/credential-provider-sso@3.682.0(@aws-sdk/client-sso-oidc@3.682.0(@aws-sdk/client-sts@3.682.0))': dependencies: '@aws-sdk/client-sso': 3.682.0 @@ -14323,15 +14197,6 @@ snapshots: '@smithy/types': 3.6.0 tslib: 2.8.1 - '@aws-sdk/credential-provider-web-identity@3.679.0(@aws-sdk/client-sts@3.678.0)': - dependencies: - '@aws-sdk/client-sts': 3.678.0 - '@aws-sdk/core': 3.679.0 - '@aws-sdk/types': 3.679.0 - '@smithy/property-provider': 3.1.8 - '@smithy/types': 3.6.0 - tslib: 2.8.1 - '@aws-sdk/credential-provider-web-identity@3.679.0(@aws-sdk/client-sts@3.682.0)': dependencies: '@aws-sdk/client-sts': 3.682.0 @@ -14341,7 +14206,7 @@ snapshots: '@smithy/types': 3.6.0 tslib: 2.8.1 - '@aws-sdk/credential-providers@3.682.0': + '@aws-sdk/credential-providers@3.682.0(@aws-sdk/client-sso-oidc@3.682.0(@aws-sdk/client-sts@3.682.0))': dependencies: '@aws-sdk/client-cognito-identity': 3.682.0 '@aws-sdk/client-sso': 3.682.0 @@ -14350,34 +14215,10 @@ snapshots: '@aws-sdk/credential-provider-cognito-identity': 3.682.0 '@aws-sdk/credential-provider-env': 3.679.0 '@aws-sdk/credential-provider-http': 3.679.0 - '@aws-sdk/credential-provider-ini': 3.682.0(@aws-sdk/client-sso-oidc@3.682.0(@aws-sdk/client-sts@3.678.0))(@aws-sdk/client-sts@3.682.0) - '@aws-sdk/credential-provider-node': 3.682.0(@aws-sdk/client-sts@3.682.0) - '@aws-sdk/credential-provider-process': 3.679.0 - '@aws-sdk/credential-provider-sso': 3.682.0(@aws-sdk/client-sso-oidc@3.682.0(@aws-sdk/client-sts@3.678.0)) - '@aws-sdk/credential-provider-web-identity': 3.679.0(@aws-sdk/client-sts@3.682.0) - '@aws-sdk/types': 3.679.0 - '@smithy/credential-provider-imds': 3.2.5 - '@smithy/property-provider': 3.1.8 - '@smithy/types': 3.6.0 - tslib: 2.8.1 - transitivePeerDependencies: - - '@aws-sdk/client-sso-oidc' - - aws-crt - optional: true - - '@aws-sdk/credential-providers@3.682.0(@aws-sdk/client-sso-oidc@3.682.0(@aws-sdk/client-sts@3.678.0))': - dependencies: - '@aws-sdk/client-cognito-identity': 3.682.0 - '@aws-sdk/client-sso': 3.682.0 - '@aws-sdk/client-sts': 3.682.0 - '@aws-sdk/core': 3.679.0 - '@aws-sdk/credential-provider-cognito-identity': 3.682.0 - '@aws-sdk/credential-provider-env': 3.679.0 - '@aws-sdk/credential-provider-http': 3.679.0 - '@aws-sdk/credential-provider-ini': 3.682.0(@aws-sdk/client-sso-oidc@3.682.0(@aws-sdk/client-sts@3.678.0))(@aws-sdk/client-sts@3.682.0) - '@aws-sdk/credential-provider-node': 3.682.0(@aws-sdk/client-sso-oidc@3.682.0(@aws-sdk/client-sts@3.678.0))(@aws-sdk/client-sts@3.682.0) + '@aws-sdk/credential-provider-ini': 3.682.0(@aws-sdk/client-sso-oidc@3.682.0(@aws-sdk/client-sts@3.682.0))(@aws-sdk/client-sts@3.682.0) + '@aws-sdk/credential-provider-node': 3.682.0(@aws-sdk/client-sso-oidc@3.682.0(@aws-sdk/client-sts@3.682.0))(@aws-sdk/client-sts@3.682.0) '@aws-sdk/credential-provider-process': 3.679.0 - '@aws-sdk/credential-provider-sso': 3.682.0(@aws-sdk/client-sso-oidc@3.682.0(@aws-sdk/client-sts@3.678.0)) + '@aws-sdk/credential-provider-sso': 3.682.0(@aws-sdk/client-sso-oidc@3.682.0(@aws-sdk/client-sts@3.682.0)) '@aws-sdk/credential-provider-web-identity': 3.679.0(@aws-sdk/client-sts@3.682.0) '@aws-sdk/types': 3.679.0 '@smithy/credential-provider-imds': 3.2.5 @@ -14485,15 +14326,6 @@ snapshots: '@smithy/types': 3.6.0 tslib: 2.8.1 - '@aws-sdk/token-providers@3.679.0(@aws-sdk/client-sso-oidc@3.682.0(@aws-sdk/client-sts@3.678.0))': - dependencies: - '@aws-sdk/client-sso-oidc': 3.682.0(@aws-sdk/client-sts@3.678.0) - '@aws-sdk/types': 3.679.0 - '@smithy/property-provider': 3.1.8 - '@smithy/shared-ini-file-loader': 3.1.9 - '@smithy/types': 3.6.0 - tslib: 2.8.1 - '@aws-sdk/token-providers@3.679.0(@aws-sdk/client-sso-oidc@3.682.0(@aws-sdk/client-sts@3.682.0))': dependencies: '@aws-sdk/client-sso-oidc': 3.682.0(@aws-sdk/client-sts@3.682.0) @@ -14609,6 +14441,21 @@ snapshots: '@azure/abort-controller': 2.1.2 tslib: 2.8.0 + '@azure/cosmos@4.1.1': + dependencies: + '@azure/abort-controller': 2.1.2 + '@azure/core-auth': 1.9.0 + '@azure/core-rest-pipeline': 1.17.0 + '@azure/core-tracing': 1.1.2 + '@azure/core-util': 1.11.0 + fast-json-stable-stringify: 2.1.0 + jsbi: 4.3.0 + priorityqueuejs: 2.0.0 + semaphore: 1.1.0 + tslib: 2.8.1 + transitivePeerDependencies: + - supports-color + '@azure/identity@4.5.0': dependencies: '@azure/abort-controller': 2.1.2 @@ -15772,7 +15619,7 @@ snapshots: transitivePeerDependencies: - '@algolia/client-search' - '@docusaurus/core@3.5.2(@docusaurus/types@3.5.2(acorn@8.13.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.3.1))(acorn@8.13.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@2.4.0))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3)': + '@docusaurus/core@3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.3.1))(bufferutil@4.0.8)(eslint@9.13.0(jiti@2.4.0))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3)': dependencies: '@babel/core': 7.25.2 '@babel/generator': 7.25.6 @@ -15786,10 +15633,10 @@ snapshots: '@babel/traverse': 7.25.6 '@docusaurus/cssnano-preset': 3.5.2 '@docusaurus/logger': 3.5.2 - '@docusaurus/mdx-loader': 3.5.2(@docusaurus/types@3.5.2(acorn@8.13.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(acorn@8.13.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) - '@docusaurus/utils': 3.5.2(@docusaurus/types@3.5.2(acorn@8.13.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.6.3) - '@docusaurus/utils-common': 3.5.2(@docusaurus/types@3.5.2(acorn@8.13.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) - '@docusaurus/utils-validation': 3.5.2(@docusaurus/types@3.5.2(acorn@8.13.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.6.3) + '@docusaurus/mdx-loader': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) + '@docusaurus/utils': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.6.3) + '@docusaurus/utils-common': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) + '@docusaurus/utils-validation': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.6.3) '@mdx-js/react': 3.0.1(@types/react@18.3.12)(react@18.3.1) autoprefixer: 10.4.20(postcss@8.4.47) babel-loader: 9.1.3(@babel/core@7.25.2)(webpack@5.96.1) @@ -15877,11 +15724,11 @@ snapshots: chalk: 4.1.2 tslib: 2.8.1 - '@docusaurus/mdx-loader@3.5.2(@docusaurus/types@3.5.2(acorn@8.13.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(acorn@8.13.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3)': + '@docusaurus/mdx-loader@3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3)': dependencies: '@docusaurus/logger': 3.5.2 - '@docusaurus/utils': 3.5.2(@docusaurus/types@3.5.2(acorn@8.13.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.6.3) - '@docusaurus/utils-validation': 3.5.2(@docusaurus/types@3.5.2(acorn@8.13.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.6.3) + '@docusaurus/utils': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.6.3) + '@docusaurus/utils-validation': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.6.3) '@mdx-js/mdx': 3.1.0(acorn@8.13.0) '@slorber/remark-comment': 1.0.0 escape-html: 1.0.3 @@ -15915,9 +15762,9 @@ snapshots: - uglify-js - webpack-cli - '@docusaurus/module-type-aliases@3.5.2(acorn@8.13.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@docusaurus/module-type-aliases@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@docusaurus/types': 3.5.2(acorn@8.13.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/types': 3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@types/history': 4.7.11 '@types/react': 18.3.12 '@types/react-router-config': 5.0.11 @@ -15934,17 +15781,17 @@ snapshots: - uglify-js - webpack-cli - '@docusaurus/plugin-content-blog@3.5.2(@docusaurus/plugin-content-docs@3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.3.1))(acorn@8.13.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@2.4.0))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3))(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.3.1))(acorn@8.13.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@2.4.0))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3)': + '@docusaurus/plugin-content-blog@3.5.2(@docusaurus/plugin-content-docs@3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.3.1))(bufferutil@4.0.8)(eslint@9.13.0(jiti@2.4.0))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3))(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.3.1))(bufferutil@4.0.8)(eslint@9.13.0(jiti@2.4.0))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3)': dependencies: - '@docusaurus/core': 3.5.2(@docusaurus/types@3.5.2(acorn@8.13.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.3.1))(acorn@8.13.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@2.4.0))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) + '@docusaurus/core': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.3.1))(bufferutil@4.0.8)(eslint@9.13.0(jiti@2.4.0))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) '@docusaurus/logger': 3.5.2 - '@docusaurus/mdx-loader': 3.5.2(@docusaurus/types@3.5.2(acorn@8.13.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(acorn@8.13.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) - '@docusaurus/plugin-content-docs': 3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.3.1))(acorn@8.13.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@2.4.0))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) - '@docusaurus/theme-common': 3.5.2(@docusaurus/plugin-content-docs@3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.3.1))(acorn@8.13.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@2.4.0))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3))(@docusaurus/types@3.5.2(acorn@8.13.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(acorn@8.13.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) - '@docusaurus/types': 3.5.2(acorn@8.13.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils': 3.5.2(@docusaurus/types@3.5.2(acorn@8.13.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.6.3) - '@docusaurus/utils-common': 3.5.2(@docusaurus/types@3.5.2(acorn@8.13.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) - '@docusaurus/utils-validation': 3.5.2(@docusaurus/types@3.5.2(acorn@8.13.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.6.3) + '@docusaurus/mdx-loader': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) + '@docusaurus/plugin-content-docs': 3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.3.1))(bufferutil@4.0.8)(eslint@9.13.0(jiti@2.4.0))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) + '@docusaurus/theme-common': 3.5.2(@docusaurus/plugin-content-docs@3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.3.1))(bufferutil@4.0.8)(eslint@9.13.0(jiti@2.4.0))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3))(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) + '@docusaurus/types': 3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/utils': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.6.3) + '@docusaurus/utils-common': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) + '@docusaurus/utils-validation': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.6.3) cheerio: 1.0.0-rc.12 feed: 4.2.2 fs-extra: 11.2.0 @@ -15977,17 +15824,17 @@ snapshots: - vue-template-compiler - webpack-cli - '@docusaurus/plugin-content-docs@3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.3.1))(acorn@8.13.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@2.4.0))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3)': + '@docusaurus/plugin-content-docs@3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.3.1))(bufferutil@4.0.8)(eslint@9.13.0(jiti@2.4.0))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3)': dependencies: - '@docusaurus/core': 3.5.2(@docusaurus/types@3.5.2(acorn@8.13.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.3.1))(acorn@8.13.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@2.4.0))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) + '@docusaurus/core': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.3.1))(bufferutil@4.0.8)(eslint@9.13.0(jiti@2.4.0))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) '@docusaurus/logger': 3.5.2 - '@docusaurus/mdx-loader': 3.5.2(@docusaurus/types@3.5.2(acorn@8.13.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(acorn@8.13.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) - '@docusaurus/module-type-aliases': 3.5.2(acorn@8.13.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/theme-common': 3.5.2(@docusaurus/plugin-content-docs@3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.3.1))(acorn@8.13.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@2.4.0))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3))(@docusaurus/types@3.5.2(acorn@8.13.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(acorn@8.13.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) - '@docusaurus/types': 3.5.2(acorn@8.13.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils': 3.5.2(@docusaurus/types@3.5.2(acorn@8.13.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.6.3) - '@docusaurus/utils-common': 3.5.2(@docusaurus/types@3.5.2(acorn@8.13.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) - '@docusaurus/utils-validation': 3.5.2(@docusaurus/types@3.5.2(acorn@8.13.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.6.3) + '@docusaurus/mdx-loader': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) + '@docusaurus/module-type-aliases': 3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/theme-common': 3.5.2(@docusaurus/plugin-content-docs@3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.3.1))(bufferutil@4.0.8)(eslint@9.13.0(jiti@2.4.0))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3))(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) + '@docusaurus/types': 3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/utils': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.6.3) + '@docusaurus/utils-common': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) + '@docusaurus/utils-validation': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.6.3) '@types/react-router-config': 5.0.11 combine-promises: 1.2.0 fs-extra: 11.2.0 @@ -16018,13 +15865,13 @@ snapshots: - vue-template-compiler - webpack-cli - '@docusaurus/plugin-content-pages@3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.3.1))(acorn@8.13.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@2.4.0))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3)': + '@docusaurus/plugin-content-pages@3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.3.1))(bufferutil@4.0.8)(eslint@9.13.0(jiti@2.4.0))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3)': dependencies: - '@docusaurus/core': 3.5.2(@docusaurus/types@3.5.2(acorn@8.13.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.3.1))(acorn@8.13.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@2.4.0))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) - '@docusaurus/mdx-loader': 3.5.2(@docusaurus/types@3.5.2(acorn@8.13.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(acorn@8.13.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) - '@docusaurus/types': 3.5.2(acorn@8.13.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils': 3.5.2(@docusaurus/types@3.5.2(acorn@8.13.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.6.3) - '@docusaurus/utils-validation': 3.5.2(@docusaurus/types@3.5.2(acorn@8.13.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.6.3) + '@docusaurus/core': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.3.1))(bufferutil@4.0.8)(eslint@9.13.0(jiti@2.4.0))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) + '@docusaurus/mdx-loader': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) + '@docusaurus/types': 3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/utils': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.6.3) + '@docusaurus/utils-validation': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.6.3) fs-extra: 11.2.0 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) @@ -16050,11 +15897,11 @@ snapshots: - vue-template-compiler - webpack-cli - '@docusaurus/plugin-debug@3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.3.1))(acorn@8.13.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@2.4.0))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3)': + '@docusaurus/plugin-debug@3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.3.1))(bufferutil@4.0.8)(eslint@9.13.0(jiti@2.4.0))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3)': dependencies: - '@docusaurus/core': 3.5.2(@docusaurus/types@3.5.2(acorn@8.13.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.3.1))(acorn@8.13.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@2.4.0))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) - '@docusaurus/types': 3.5.2(acorn@8.13.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils': 3.5.2(@docusaurus/types@3.5.2(acorn@8.13.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.6.3) + '@docusaurus/core': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.3.1))(bufferutil@4.0.8)(eslint@9.13.0(jiti@2.4.0))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) + '@docusaurus/types': 3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/utils': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.6.3) fs-extra: 11.2.0 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) @@ -16080,11 +15927,11 @@ snapshots: - vue-template-compiler - webpack-cli - '@docusaurus/plugin-google-analytics@3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.3.1))(acorn@8.13.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@2.4.0))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3)': + '@docusaurus/plugin-google-analytics@3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.3.1))(bufferutil@4.0.8)(eslint@9.13.0(jiti@2.4.0))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3)': dependencies: - '@docusaurus/core': 3.5.2(@docusaurus/types@3.5.2(acorn@8.13.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.3.1))(acorn@8.13.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@2.4.0))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) - '@docusaurus/types': 3.5.2(acorn@8.13.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils-validation': 3.5.2(@docusaurus/types@3.5.2(acorn@8.13.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.6.3) + '@docusaurus/core': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.3.1))(bufferutil@4.0.8)(eslint@9.13.0(jiti@2.4.0))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) + '@docusaurus/types': 3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/utils-validation': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.6.3) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) tslib: 2.8.1 @@ -16108,11 +15955,11 @@ snapshots: - vue-template-compiler - webpack-cli - '@docusaurus/plugin-google-gtag@3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.3.1))(acorn@8.13.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@2.4.0))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3)': + '@docusaurus/plugin-google-gtag@3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.3.1))(bufferutil@4.0.8)(eslint@9.13.0(jiti@2.4.0))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3)': dependencies: - '@docusaurus/core': 3.5.2(@docusaurus/types@3.5.2(acorn@8.13.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.3.1))(acorn@8.13.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@2.4.0))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) - '@docusaurus/types': 3.5.2(acorn@8.13.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils-validation': 3.5.2(@docusaurus/types@3.5.2(acorn@8.13.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.6.3) + '@docusaurus/core': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.3.1))(bufferutil@4.0.8)(eslint@9.13.0(jiti@2.4.0))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) + '@docusaurus/types': 3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/utils-validation': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.6.3) '@types/gtag.js': 0.0.12 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) @@ -16137,11 +15984,11 @@ snapshots: - vue-template-compiler - webpack-cli - '@docusaurus/plugin-google-tag-manager@3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.3.1))(acorn@8.13.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@2.4.0))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3)': + '@docusaurus/plugin-google-tag-manager@3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.3.1))(bufferutil@4.0.8)(eslint@9.13.0(jiti@2.4.0))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3)': dependencies: - '@docusaurus/core': 3.5.2(@docusaurus/types@3.5.2(acorn@8.13.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.3.1))(acorn@8.13.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@2.4.0))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) - '@docusaurus/types': 3.5.2(acorn@8.13.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils-validation': 3.5.2(@docusaurus/types@3.5.2(acorn@8.13.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.6.3) + '@docusaurus/core': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.3.1))(bufferutil@4.0.8)(eslint@9.13.0(jiti@2.4.0))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) + '@docusaurus/types': 3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/utils-validation': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.6.3) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) tslib: 2.8.1 @@ -16165,14 +16012,14 @@ snapshots: - vue-template-compiler - webpack-cli - '@docusaurus/plugin-sitemap@3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.3.1))(acorn@8.13.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@2.4.0))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3)': + '@docusaurus/plugin-sitemap@3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.3.1))(bufferutil@4.0.8)(eslint@9.13.0(jiti@2.4.0))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3)': dependencies: - '@docusaurus/core': 3.5.2(@docusaurus/types@3.5.2(acorn@8.13.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.3.1))(acorn@8.13.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@2.4.0))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) + '@docusaurus/core': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.3.1))(bufferutil@4.0.8)(eslint@9.13.0(jiti@2.4.0))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) '@docusaurus/logger': 3.5.2 - '@docusaurus/types': 3.5.2(acorn@8.13.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils': 3.5.2(@docusaurus/types@3.5.2(acorn@8.13.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.6.3) - '@docusaurus/utils-common': 3.5.2(@docusaurus/types@3.5.2(acorn@8.13.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) - '@docusaurus/utils-validation': 3.5.2(@docusaurus/types@3.5.2(acorn@8.13.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.6.3) + '@docusaurus/types': 3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/utils': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.6.3) + '@docusaurus/utils-common': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) + '@docusaurus/utils-validation': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.6.3) fs-extra: 11.2.0 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) @@ -16198,21 +16045,21 @@ snapshots: - vue-template-compiler - webpack-cli - '@docusaurus/preset-classic@3.5.2(@algolia/client-search@5.12.0)(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.3.1))(@types/react@18.3.12)(acorn@8.13.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@2.4.0))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.17.2)(typescript@5.6.3)': - dependencies: - '@docusaurus/core': 3.5.2(@docusaurus/types@3.5.2(acorn@8.13.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.3.1))(acorn@8.13.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@2.4.0))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) - '@docusaurus/plugin-content-blog': 3.5.2(@docusaurus/plugin-content-docs@3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.3.1))(acorn@8.13.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@2.4.0))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3))(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.3.1))(acorn@8.13.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@2.4.0))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) - '@docusaurus/plugin-content-docs': 3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.3.1))(acorn@8.13.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@2.4.0))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) - '@docusaurus/plugin-content-pages': 3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.3.1))(acorn@8.13.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@2.4.0))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) - '@docusaurus/plugin-debug': 3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.3.1))(acorn@8.13.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@2.4.0))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) - '@docusaurus/plugin-google-analytics': 3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.3.1))(acorn@8.13.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@2.4.0))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) - '@docusaurus/plugin-google-gtag': 3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.3.1))(acorn@8.13.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@2.4.0))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) - '@docusaurus/plugin-google-tag-manager': 3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.3.1))(acorn@8.13.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@2.4.0))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) - '@docusaurus/plugin-sitemap': 3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.3.1))(acorn@8.13.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@2.4.0))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) - '@docusaurus/theme-classic': 3.5.2(@types/react@18.3.12)(acorn@8.13.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@2.4.0))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) - '@docusaurus/theme-common': 3.5.2(@docusaurus/plugin-content-docs@3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.3.1))(acorn@8.13.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@2.4.0))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3))(@docusaurus/types@3.5.2(acorn@8.13.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(acorn@8.13.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) - '@docusaurus/theme-search-algolia': 3.5.2(@algolia/client-search@5.12.0)(@docusaurus/types@3.5.2(acorn@8.13.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.3.1))(@types/react@18.3.12)(acorn@8.13.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@2.4.0))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.17.2)(typescript@5.6.3) - '@docusaurus/types': 3.5.2(acorn@8.13.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/preset-classic@3.5.2(@algolia/client-search@5.12.0)(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.3.1))(@types/react@18.3.12)(bufferutil@4.0.8)(eslint@9.13.0(jiti@2.4.0))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.17.2)(typescript@5.6.3)': + dependencies: + '@docusaurus/core': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.3.1))(bufferutil@4.0.8)(eslint@9.13.0(jiti@2.4.0))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) + '@docusaurus/plugin-content-blog': 3.5.2(@docusaurus/plugin-content-docs@3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.3.1))(bufferutil@4.0.8)(eslint@9.13.0(jiti@2.4.0))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3))(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.3.1))(bufferutil@4.0.8)(eslint@9.13.0(jiti@2.4.0))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) + '@docusaurus/plugin-content-docs': 3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.3.1))(bufferutil@4.0.8)(eslint@9.13.0(jiti@2.4.0))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) + '@docusaurus/plugin-content-pages': 3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.3.1))(bufferutil@4.0.8)(eslint@9.13.0(jiti@2.4.0))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) + '@docusaurus/plugin-debug': 3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.3.1))(bufferutil@4.0.8)(eslint@9.13.0(jiti@2.4.0))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) + '@docusaurus/plugin-google-analytics': 3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.3.1))(bufferutil@4.0.8)(eslint@9.13.0(jiti@2.4.0))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) + '@docusaurus/plugin-google-gtag': 3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.3.1))(bufferutil@4.0.8)(eslint@9.13.0(jiti@2.4.0))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) + '@docusaurus/plugin-google-tag-manager': 3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.3.1))(bufferutil@4.0.8)(eslint@9.13.0(jiti@2.4.0))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) + '@docusaurus/plugin-sitemap': 3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.3.1))(bufferutil@4.0.8)(eslint@9.13.0(jiti@2.4.0))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) + '@docusaurus/theme-classic': 3.5.2(@types/react@18.3.12)(bufferutil@4.0.8)(eslint@9.13.0(jiti@2.4.0))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) + '@docusaurus/theme-common': 3.5.2(@docusaurus/plugin-content-docs@3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.3.1))(bufferutil@4.0.8)(eslint@9.13.0(jiti@2.4.0))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3))(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) + '@docusaurus/theme-search-algolia': 3.5.2(@algolia/client-search@5.12.0)(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.3.1))(@types/react@18.3.12)(bufferutil@4.0.8)(eslint@9.13.0(jiti@2.4.0))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.17.2)(typescript@5.6.3) + '@docusaurus/types': 3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) transitivePeerDependencies: @@ -16253,20 +16100,20 @@ snapshots: transitivePeerDependencies: - supports-color - '@docusaurus/theme-classic@3.5.2(@types/react@18.3.12)(acorn@8.13.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@2.4.0))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3)': + '@docusaurus/theme-classic@3.5.2(@types/react@18.3.12)(bufferutil@4.0.8)(eslint@9.13.0(jiti@2.4.0))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3)': dependencies: - '@docusaurus/core': 3.5.2(@docusaurus/types@3.5.2(acorn@8.13.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.3.1))(acorn@8.13.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@2.4.0))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) - '@docusaurus/mdx-loader': 3.5.2(@docusaurus/types@3.5.2(acorn@8.13.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(acorn@8.13.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) - '@docusaurus/module-type-aliases': 3.5.2(acorn@8.13.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/plugin-content-blog': 3.5.2(@docusaurus/plugin-content-docs@3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.3.1))(acorn@8.13.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@2.4.0))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3))(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.3.1))(acorn@8.13.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@2.4.0))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) - '@docusaurus/plugin-content-docs': 3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.3.1))(acorn@8.13.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@2.4.0))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) - '@docusaurus/plugin-content-pages': 3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.3.1))(acorn@8.13.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@2.4.0))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) - '@docusaurus/theme-common': 3.5.2(@docusaurus/plugin-content-docs@3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.3.1))(acorn@8.13.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@2.4.0))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3))(@docusaurus/types@3.5.2(acorn@8.13.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(acorn@8.13.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) + '@docusaurus/core': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.3.1))(bufferutil@4.0.8)(eslint@9.13.0(jiti@2.4.0))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) + '@docusaurus/mdx-loader': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) + '@docusaurus/module-type-aliases': 3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/plugin-content-blog': 3.5.2(@docusaurus/plugin-content-docs@3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.3.1))(bufferutil@4.0.8)(eslint@9.13.0(jiti@2.4.0))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3))(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.3.1))(bufferutil@4.0.8)(eslint@9.13.0(jiti@2.4.0))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) + '@docusaurus/plugin-content-docs': 3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.3.1))(bufferutil@4.0.8)(eslint@9.13.0(jiti@2.4.0))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) + '@docusaurus/plugin-content-pages': 3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.3.1))(bufferutil@4.0.8)(eslint@9.13.0(jiti@2.4.0))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) + '@docusaurus/theme-common': 3.5.2(@docusaurus/plugin-content-docs@3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.3.1))(bufferutil@4.0.8)(eslint@9.13.0(jiti@2.4.0))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3))(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) '@docusaurus/theme-translations': 3.5.2 - '@docusaurus/types': 3.5.2(acorn@8.13.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils': 3.5.2(@docusaurus/types@3.5.2(acorn@8.13.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.6.3) - '@docusaurus/utils-common': 3.5.2(@docusaurus/types@3.5.2(acorn@8.13.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) - '@docusaurus/utils-validation': 3.5.2(@docusaurus/types@3.5.2(acorn@8.13.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.6.3) + '@docusaurus/types': 3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/utils': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.6.3) + '@docusaurus/utils-common': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) + '@docusaurus/utils-validation': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.6.3) '@mdx-js/react': 3.0.1(@types/react@18.3.12)(react@18.3.1) clsx: 2.1.1 copy-text-to-clipboard: 3.2.0 @@ -16302,13 +16149,13 @@ snapshots: - vue-template-compiler - webpack-cli - '@docusaurus/theme-common@3.5.2(@docusaurus/plugin-content-docs@3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.3.1))(acorn@8.13.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@2.4.0))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3))(@docusaurus/types@3.5.2(acorn@8.13.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(acorn@8.13.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3)': + '@docusaurus/theme-common@3.5.2(@docusaurus/plugin-content-docs@3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.3.1))(bufferutil@4.0.8)(eslint@9.13.0(jiti@2.4.0))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3))(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3)': dependencies: - '@docusaurus/mdx-loader': 3.5.2(@docusaurus/types@3.5.2(acorn@8.13.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(acorn@8.13.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) - '@docusaurus/module-type-aliases': 3.5.2(acorn@8.13.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/plugin-content-docs': 3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.3.1))(acorn@8.13.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@2.4.0))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) - '@docusaurus/utils': 3.5.2(@docusaurus/types@3.5.2(acorn@8.13.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.6.3) - '@docusaurus/utils-common': 3.5.2(@docusaurus/types@3.5.2(acorn@8.13.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) + '@docusaurus/mdx-loader': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) + '@docusaurus/module-type-aliases': 3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/plugin-content-docs': 3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.3.1))(bufferutil@4.0.8)(eslint@9.13.0(jiti@2.4.0))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) + '@docusaurus/utils': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.6.3) + '@docusaurus/utils-common': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) '@types/history': 4.7.11 '@types/react': 18.3.12 '@types/react-router-config': 5.0.11 @@ -16329,16 +16176,16 @@ snapshots: - uglify-js - webpack-cli - '@docusaurus/theme-search-algolia@3.5.2(@algolia/client-search@5.12.0)(@docusaurus/types@3.5.2(acorn@8.13.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.3.1))(@types/react@18.3.12)(acorn@8.13.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@2.4.0))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.17.2)(typescript@5.6.3)': + '@docusaurus/theme-search-algolia@3.5.2(@algolia/client-search@5.12.0)(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.3.1))(@types/react@18.3.12)(bufferutil@4.0.8)(eslint@9.13.0(jiti@2.4.0))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.17.2)(typescript@5.6.3)': dependencies: '@docsearch/react': 3.6.1(@algolia/client-search@5.12.0)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.17.2) - '@docusaurus/core': 3.5.2(@docusaurus/types@3.5.2(acorn@8.13.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.3.1))(acorn@8.13.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@2.4.0))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) + '@docusaurus/core': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.3.1))(bufferutil@4.0.8)(eslint@9.13.0(jiti@2.4.0))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) '@docusaurus/logger': 3.5.2 - '@docusaurus/plugin-content-docs': 3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.3.1))(acorn@8.13.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@2.4.0))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) - '@docusaurus/theme-common': 3.5.2(@docusaurus/plugin-content-docs@3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.3.1))(acorn@8.13.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@2.4.0))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3))(@docusaurus/types@3.5.2(acorn@8.13.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(acorn@8.13.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) + '@docusaurus/plugin-content-docs': 3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.3.1))(bufferutil@4.0.8)(eslint@9.13.0(jiti@2.4.0))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) + '@docusaurus/theme-common': 3.5.2(@docusaurus/plugin-content-docs@3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.3.1))(bufferutil@4.0.8)(eslint@9.13.0(jiti@2.4.0))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3))(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) '@docusaurus/theme-translations': 3.5.2 - '@docusaurus/utils': 3.5.2(@docusaurus/types@3.5.2(acorn@8.13.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.6.3) - '@docusaurus/utils-validation': 3.5.2(@docusaurus/types@3.5.2(acorn@8.13.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.6.3) + '@docusaurus/utils': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.6.3) + '@docusaurus/utils-validation': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.6.3) algoliasearch: 4.24.0 algoliasearch-helper: 3.22.4(algoliasearch@4.24.0) clsx: 2.1.1 @@ -16378,7 +16225,7 @@ snapshots: fs-extra: 11.2.0 tslib: 2.8.1 - '@docusaurus/types@3.5.2(acorn@8.13.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@mdx-js/mdx': 3.1.0(acorn@8.13.0) '@types/history': 4.7.11 @@ -16399,17 +16246,17 @@ snapshots: - uglify-js - webpack-cli - '@docusaurus/utils-common@3.5.2(@docusaurus/types@3.5.2(acorn@8.13.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))': + '@docusaurus/utils-common@3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))': dependencies: tslib: 2.8.1 optionalDependencies: - '@docusaurus/types': 3.5.2(acorn@8.13.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/types': 3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils-validation@3.5.2(@docusaurus/types@3.5.2(acorn@8.13.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.6.3)': + '@docusaurus/utils-validation@3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.6.3)': dependencies: '@docusaurus/logger': 3.5.2 - '@docusaurus/utils': 3.5.2(@docusaurus/types@3.5.2(acorn@8.13.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.6.3) - '@docusaurus/utils-common': 3.5.2(@docusaurus/types@3.5.2(acorn@8.13.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) + '@docusaurus/utils': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.6.3) + '@docusaurus/utils-common': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) fs-extra: 11.2.0 joi: 17.13.3 js-yaml: 4.1.0 @@ -16424,10 +16271,10 @@ snapshots: - uglify-js - webpack-cli - '@docusaurus/utils@3.5.2(@docusaurus/types@3.5.2(acorn@8.13.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.6.3)': + '@docusaurus/utils@3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.6.3)': dependencies: '@docusaurus/logger': 3.5.2 - '@docusaurus/utils-common': 3.5.2(@docusaurus/types@3.5.2(acorn@8.13.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) + '@docusaurus/utils-common': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) '@svgr/webpack': 8.1.0(typescript@5.6.3) escape-string-regexp: 4.0.0 file-loader: 6.2.0(webpack@5.96.1) @@ -16447,7 +16294,7 @@ snapshots: utility-types: 3.11.0 webpack: 5.96.1 optionalDependencies: - '@docusaurus/types': 3.5.2(acorn@8.13.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/types': 3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) transitivePeerDependencies: - '@swc/core' - esbuild @@ -19221,9 +19068,9 @@ snapshots: '@upstash/vector@1.1.7': {} - '@vercel/functions@1.5.0(@aws-sdk/credential-provider-web-identity@3.679.0)': + '@vercel/functions@1.5.0(@aws-sdk/credential-provider-web-identity@3.679.0(@aws-sdk/client-sts@3.682.0))': optionalDependencies: - '@aws-sdk/credential-provider-web-identity': 3.679.0(@aws-sdk/client-sts@3.678.0) + '@aws-sdk/credential-provider-web-identity': 3.679.0(@aws-sdk/client-sts@3.682.0) '@vercel/postgres@0.10.0': dependencies: @@ -19549,7 +19396,7 @@ snapshots: clean-stack: 2.2.0 indent-string: 4.0.0 - ai@3.4.31(openai@4.69.0(zod@3.23.8))(react@18.3.1)(sswr@2.1.0(svelte@5.1.9))(svelte@5.1.9)(vue@3.5.12(typescript@5.6.3))(zod@3.23.8): + ai@3.4.31(openai@4.69.0(encoding@0.1.13)(zod@3.23.8))(react@18.3.1)(sswr@2.1.0(svelte@5.1.9))(svelte@5.1.9)(vue@3.5.12(typescript@5.6.3))(zod@3.23.8): dependencies: '@ai-sdk/provider': 0.0.26 '@ai-sdk/provider-utils': 1.0.22(zod@3.23.8) @@ -19565,7 +19412,7 @@ snapshots: secure-json-parse: 2.7.0 zod-to-json-schema: 3.23.5(zod@3.23.8) optionalDependencies: - openai: 4.69.0(zod@3.23.8) + openai: 4.69.0(encoding@0.1.13)(zod@3.23.8) react: 18.3.1 sswr: 2.1.0(svelte@5.1.9) svelte: 5.1.9 @@ -20238,18 +20085,18 @@ snapshots: optionalDependencies: onnxruntime-node: 1.14.0 - chromadb@1.9.2(@google/generative-ai@0.12.0)(cohere-ai@7.13.0(@aws-sdk/client-sso-oidc@3.682.0(@aws-sdk/client-sts@3.678.0))(encoding@0.1.13))(encoding@0.1.13)(openai@4.69.0(encoding@0.1.13)(zod@3.23.8)): + chromadb@1.9.2(@google/generative-ai@0.12.0)(cohere-ai@7.13.0(@aws-sdk/client-sso-oidc@3.682.0(@aws-sdk/client-sts@3.682.0))(encoding@0.1.13))(encoding@0.1.13)(openai@4.69.0(encoding@0.1.13)(zod@3.23.8)): dependencies: cliui: 8.0.1 isomorphic-fetch: 3.0.0(encoding@0.1.13) optionalDependencies: '@google/generative-ai': 0.12.0 - cohere-ai: 7.13.0(@aws-sdk/client-sso-oidc@3.682.0(@aws-sdk/client-sts@3.678.0))(encoding@0.1.13) + cohere-ai: 7.13.0(@aws-sdk/client-sso-oidc@3.682.0(@aws-sdk/client-sts@3.682.0))(encoding@0.1.13) openai: 4.69.0(encoding@0.1.13)(zod@3.23.8) transitivePeerDependencies: - encoding - chromadb@1.9.2(cohere-ai@7.14.0(encoding@0.1.13))(encoding@0.1.13)(openai@4.69.0(encoding@0.1.13)): + chromadb@1.9.2(cohere-ai@7.14.0(encoding@0.1.13))(encoding@0.1.13)(openai@4.69.0(encoding@0.1.13)(zod@3.23.8)): dependencies: cliui: 8.0.1 isomorphic-fetch: 3.0.0(encoding@0.1.13) @@ -20336,10 +20183,10 @@ snapshots: dependencies: rfdc: 1.4.1 - cohere-ai@7.13.0(@aws-sdk/client-sso-oidc@3.682.0(@aws-sdk/client-sts@3.678.0))(encoding@0.1.13): + cohere-ai@7.13.0(@aws-sdk/client-sso-oidc@3.682.0(@aws-sdk/client-sts@3.682.0))(encoding@0.1.13): dependencies: '@aws-sdk/client-sagemaker': 3.678.0 - '@aws-sdk/credential-providers': 3.682.0(@aws-sdk/client-sso-oidc@3.682.0(@aws-sdk/client-sts@3.678.0)) + '@aws-sdk/credential-providers': 3.682.0(@aws-sdk/client-sso-oidc@3.682.0(@aws-sdk/client-sts@3.682.0)) '@aws-sdk/protocol-http': 3.374.0 '@aws-sdk/signature-v4': 3.374.0 form-data: 4.0.1 @@ -20358,7 +20205,7 @@ snapshots: cohere-ai@7.14.0(encoding@0.1.13): dependencies: '@aws-sdk/client-sagemaker': 3.678.0 - '@aws-sdk/credential-providers': 3.682.0 + '@aws-sdk/credential-providers': 3.682.0(@aws-sdk/client-sso-oidc@3.682.0(@aws-sdk/client-sts@3.682.0)) '@aws-sdk/protocol-http': 3.374.0 '@aws-sdk/signature-v4': 3.374.0 form-data: 4.0.1 @@ -21307,8 +21154,8 @@ snapshots: '@typescript-eslint/parser': 7.2.0(eslint@9.13.0(jiti@2.4.0))(typescript@5.6.3) eslint: 9.13.0(jiti@2.4.0) eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@7.2.0(eslint@9.13.0(jiti@2.4.0))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0)(eslint@9.13.0(jiti@2.4.0)) - eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.12.2(eslint@9.13.0(jiti@2.4.0))(typescript@5.6.3))(eslint@9.13.0(jiti@2.4.0)) + eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@7.2.0(eslint@9.13.0(jiti@2.4.0))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0(@typescript-eslint/parser@7.2.0(eslint@9.13.0(jiti@2.4.0))(typescript@5.6.3))(eslint@9.13.0(jiti@2.4.0)))(eslint@9.13.0(jiti@2.4.0)) + eslint-plugin-import: 2.31.0(@typescript-eslint/parser@7.2.0(eslint@9.13.0(jiti@2.4.0))(typescript@5.6.3))(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@7.2.0(eslint@9.13.0(jiti@2.4.0))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0(@typescript-eslint/parser@7.2.0(eslint@9.13.0(jiti@2.4.0))(typescript@5.6.3))(eslint@9.13.0(jiti@2.4.0)))(eslint@9.13.0(jiti@2.4.0)))(eslint@9.13.0(jiti@2.4.0)) eslint-plugin-jsx-a11y: 6.10.2(eslint@9.13.0(jiti@2.4.0)) eslint-plugin-react: 7.37.2(eslint@9.13.0(jiti@2.4.0)) eslint-plugin-react-hooks: 5.0.0(eslint@9.13.0(jiti@2.4.0)) @@ -21336,48 +21183,48 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@7.2.0(eslint@9.13.0(jiti@2.4.0))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0)(eslint@9.13.0(jiti@2.4.0)): + eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@7.2.0(eslint@9.13.0(jiti@2.4.0))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0(@typescript-eslint/parser@7.2.0(eslint@9.13.0(jiti@2.4.0))(typescript@5.6.3))(eslint@9.13.0(jiti@2.4.0)))(eslint@9.13.0(jiti@2.4.0)): dependencies: '@nolyfill/is-core-module': 1.0.39 debug: 4.3.7 enhanced-resolve: 5.17.1 eslint: 9.13.0(jiti@2.4.0) - eslint-module-utils: 2.8.2(@typescript-eslint/parser@7.2.0(eslint@9.13.0(jiti@2.4.0))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@7.2.0(eslint@9.13.0(jiti@2.4.0))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0)(eslint@9.13.0(jiti@2.4.0)))(eslint@9.13.0(jiti@2.4.0)) + eslint-module-utils: 2.8.2(@typescript-eslint/parser@7.2.0(eslint@9.13.0(jiti@2.4.0))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@7.2.0(eslint@9.13.0(jiti@2.4.0))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0(@typescript-eslint/parser@7.2.0(eslint@9.13.0(jiti@2.4.0))(typescript@5.6.3))(eslint@9.13.0(jiti@2.4.0)))(eslint@9.13.0(jiti@2.4.0)))(eslint@9.13.0(jiti@2.4.0)) fast-glob: 3.3.2 get-tsconfig: 4.8.1 is-bun-module: 1.1.0 is-glob: 4.0.3 optionalDependencies: - eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.12.2(eslint@9.13.0(jiti@2.4.0))(typescript@5.6.3))(eslint@9.13.0(jiti@2.4.0)) + eslint-plugin-import: 2.31.0(@typescript-eslint/parser@7.2.0(eslint@9.13.0(jiti@2.4.0))(typescript@5.6.3))(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@7.2.0(eslint@9.13.0(jiti@2.4.0))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0(@typescript-eslint/parser@7.2.0(eslint@9.13.0(jiti@2.4.0))(typescript@5.6.3))(eslint@9.13.0(jiti@2.4.0)))(eslint@9.13.0(jiti@2.4.0)))(eslint@9.13.0(jiti@2.4.0)) transitivePeerDependencies: - '@typescript-eslint/parser' - eslint-import-resolver-node - eslint-import-resolver-webpack - supports-color - eslint-module-utils@2.12.0(@typescript-eslint/parser@7.2.0(eslint@9.13.0(jiti@2.4.0))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@7.2.0(eslint@9.13.0(jiti@2.4.0))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0)(eslint@9.13.0(jiti@2.4.0)))(eslint@9.13.0(jiti@2.4.0)): + eslint-module-utils@2.12.0(@typescript-eslint/parser@7.2.0(eslint@9.13.0(jiti@2.4.0))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@7.2.0(eslint@9.13.0(jiti@2.4.0))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0(@typescript-eslint/parser@7.2.0(eslint@9.13.0(jiti@2.4.0))(typescript@5.6.3))(eslint@9.13.0(jiti@2.4.0)))(eslint@9.13.0(jiti@2.4.0)))(eslint@9.13.0(jiti@2.4.0)): dependencies: debug: 3.2.7 optionalDependencies: '@typescript-eslint/parser': 7.2.0(eslint@9.13.0(jiti@2.4.0))(typescript@5.6.3) eslint: 9.13.0(jiti@2.4.0) eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@7.2.0(eslint@9.13.0(jiti@2.4.0))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0)(eslint@9.13.0(jiti@2.4.0)) + eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@7.2.0(eslint@9.13.0(jiti@2.4.0))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0(@typescript-eslint/parser@7.2.0(eslint@9.13.0(jiti@2.4.0))(typescript@5.6.3))(eslint@9.13.0(jiti@2.4.0)))(eslint@9.13.0(jiti@2.4.0)) transitivePeerDependencies: - supports-color - eslint-module-utils@2.8.2(@typescript-eslint/parser@7.2.0(eslint@9.13.0(jiti@2.4.0))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@7.2.0(eslint@9.13.0(jiti@2.4.0))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0)(eslint@9.13.0(jiti@2.4.0)))(eslint@9.13.0(jiti@2.4.0)): + eslint-module-utils@2.8.2(@typescript-eslint/parser@7.2.0(eslint@9.13.0(jiti@2.4.0))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@7.2.0(eslint@9.13.0(jiti@2.4.0))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0(@typescript-eslint/parser@7.2.0(eslint@9.13.0(jiti@2.4.0))(typescript@5.6.3))(eslint@9.13.0(jiti@2.4.0)))(eslint@9.13.0(jiti@2.4.0)))(eslint@9.13.0(jiti@2.4.0)): dependencies: debug: 3.2.7 optionalDependencies: '@typescript-eslint/parser': 7.2.0(eslint@9.13.0(jiti@2.4.0))(typescript@5.6.3) eslint: 9.13.0(jiti@2.4.0) eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@7.2.0(eslint@9.13.0(jiti@2.4.0))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0)(eslint@9.13.0(jiti@2.4.0)) + eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@7.2.0(eslint@9.13.0(jiti@2.4.0))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0(@typescript-eslint/parser@7.2.0(eslint@9.13.0(jiti@2.4.0))(typescript@5.6.3))(eslint@9.13.0(jiti@2.4.0)))(eslint@9.13.0(jiti@2.4.0)) transitivePeerDependencies: - supports-color - eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.12.2(eslint@9.13.0(jiti@2.4.0))(typescript@5.6.3))(eslint@9.13.0(jiti@2.4.0)): + eslint-plugin-import@2.31.0(@typescript-eslint/parser@7.2.0(eslint@9.13.0(jiti@2.4.0))(typescript@5.6.3))(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@7.2.0(eslint@9.13.0(jiti@2.4.0))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0(@typescript-eslint/parser@7.2.0(eslint@9.13.0(jiti@2.4.0))(typescript@5.6.3))(eslint@9.13.0(jiti@2.4.0)))(eslint@9.13.0(jiti@2.4.0)))(eslint@9.13.0(jiti@2.4.0)): dependencies: '@rtsao/scc': 1.1.0 array-includes: 3.1.8 @@ -21388,7 +21235,7 @@ snapshots: doctrine: 2.1.0 eslint: 9.13.0(jiti@2.4.0) eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.12.0(@typescript-eslint/parser@7.2.0(eslint@9.13.0(jiti@2.4.0))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@7.2.0(eslint@9.13.0(jiti@2.4.0))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0)(eslint@9.13.0(jiti@2.4.0)))(eslint@9.13.0(jiti@2.4.0)) + eslint-module-utils: 2.12.0(@typescript-eslint/parser@7.2.0(eslint@9.13.0(jiti@2.4.0))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@7.2.0(eslint@9.13.0(jiti@2.4.0))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0(@typescript-eslint/parser@7.2.0(eslint@9.13.0(jiti@2.4.0))(typescript@5.6.3))(eslint@9.13.0(jiti@2.4.0)))(eslint@9.13.0(jiti@2.4.0)))(eslint@9.13.0(jiti@2.4.0)) hasown: 2.0.2 is-core-module: 2.15.1 is-glob: 4.0.3 @@ -21400,7 +21247,7 @@ snapshots: string.prototype.trimend: 1.0.8 tsconfig-paths: 3.15.0 optionalDependencies: - '@typescript-eslint/parser': 8.12.2(eslint@9.13.0(jiti@2.4.0))(typescript@5.6.3) + '@typescript-eslint/parser': 7.2.0(eslint@9.13.0(jiti@2.4.0))(typescript@5.6.3) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack @@ -23219,6 +23066,8 @@ snapshots: dependencies: argparse: 2.0.1 + jsbi@4.3.0: {} + jsesc@0.5.0: {} jsesc@2.5.2: {} @@ -24299,21 +24148,13 @@ snapshots: '@types/whatwg-url': 11.0.5 whatwg-url: 13.0.0 - mongodb@6.10.0(@aws-sdk/credential-providers@3.682.0(@aws-sdk/client-sso-oidc@3.682.0(@aws-sdk/client-sts@3.678.0))): - dependencies: - '@mongodb-js/saslprep': 1.1.7 - bson: 6.8.0 - mongodb-connection-string-url: 3.0.1 - optionalDependencies: - '@aws-sdk/credential-providers': 3.682.0(@aws-sdk/client-sso-oidc@3.682.0(@aws-sdk/client-sts@3.678.0)) - - mongodb@6.10.0(@aws-sdk/credential-providers@3.682.0): + mongodb@6.10.0(@aws-sdk/credential-providers@3.682.0(@aws-sdk/client-sso-oidc@3.682.0(@aws-sdk/client-sts@3.682.0))): dependencies: '@mongodb-js/saslprep': 1.1.7 bson: 6.8.0 mongodb-connection-string-url: 3.0.1 optionalDependencies: - '@aws-sdk/credential-providers': 3.682.0 + '@aws-sdk/credential-providers': 3.682.0(@aws-sdk/client-sso-oidc@3.682.0(@aws-sdk/client-sts@3.682.0)) mongodb@6.7.0(@aws-sdk/credential-providers@3.682.0): dependencies: @@ -24321,7 +24162,7 @@ snapshots: bson: 6.8.0 mongodb-connection-string-url: 3.0.1 optionalDependencies: - '@aws-sdk/credential-providers': 3.682.0 + '@aws-sdk/credential-providers': 3.682.0(@aws-sdk/client-sso-oidc@3.682.0(@aws-sdk/client-sts@3.682.0)) mongoose@8.5.1(@aws-sdk/credential-providers@3.682.0): dependencies: @@ -24795,21 +24636,6 @@ snapshots: transitivePeerDependencies: - encoding - openai@4.69.0(zod@3.23.8): - dependencies: - '@types/node': 18.19.63 - '@types/node-fetch': 2.6.11 - abort-controller: 3.0.0 - agentkeepalive: 4.5.0 - form-data-encoder: 1.7.2 - formdata-node: 4.4.1 - node-fetch: 2.7.0(encoding@0.1.13) - optionalDependencies: - zod: 3.23.8 - transitivePeerDependencies: - - encoding - optional: true - openapi-sampler@1.5.1: dependencies: '@types/json-schema': 7.0.15 @@ -25522,6 +25348,8 @@ snapshots: printable-characters@1.0.42: {} + priorityqueuejs@2.0.0: {} + prism-react-renderer@2.4.0(react@18.3.1): dependencies: '@types/prismjs': 1.26.4 @@ -26424,6 +26252,8 @@ snapshots: '@types/node-forge': 1.3.11 node-forge: 1.3.1 + semaphore@1.1.0: {} + semver-diff@4.0.0: dependencies: semver: 7.6.3 @@ -26583,13 +26413,14 @@ snapshots: interpret: 1.4.0 rechoir: 0.6.2 - shiki-magic-move@0.5.0(react@18.3.1)(shiki@1.22.2)(vue@3.5.12(typescript@5.6.3)): + shiki-magic-move@0.5.0(react@18.3.1)(shiki@1.22.2)(svelte@5.1.9)(vue@3.5.12(typescript@5.6.3)): dependencies: diff-match-patch-es: 0.1.1 ohash: 1.1.4 optionalDependencies: react: 18.3.1 shiki: 1.22.2 + svelte: 5.1.9 vue: 3.5.12(typescript@5.6.3) shiki@1.22.2: diff --git a/unit/package.json b/unit/package.json index 81b7702c461bb83a1c451696a6c54aa559ec9b80..ebd5f428a54da391c4c88bcc5ab767530a0a6508 100644 --- a/unit/package.json +++ b/unit/package.json @@ -11,7 +11,8 @@ "@types/react": "^18.3.12", "@types/react-dom": "^18.3.1", "msw": "^2.6.0", - "vitest": "^2.0.5" + "vitest": "^2.0.5", + "@azure/cosmos": "^4.1.1" }, "dependencies": { "@llamaindex/cloud": "workspace:*", diff --git a/unit/readers/SimpleCosmosDBReader.test.ts b/unit/readers/SimpleCosmosDBReader.test.ts new file mode 100644 index 0000000000000000000000000000000000000000..c7370a223ff0def8b315a18560485d8430290d8a --- /dev/null +++ b/unit/readers/SimpleCosmosDBReader.test.ts @@ -0,0 +1,154 @@ +import { CosmosClient } from "@azure/cosmos"; +import { Document } from "@llamaindex/core/schema"; +import { + SimpleCosmosDBReader, + type SimpleCosmosDBReaderLoaderConfig, +} from "llamaindex"; +import { describe, expect, it, vi } from "vitest"; + +const createMockClient = (mockData?: unknown[]) => { + const client = { + database: vi.fn().mockReturnValue({ + container: vi.fn().mockReturnValue({ + items: { + query: vi.fn().mockReturnValue({ + fetchAll: vi.fn().mockResolvedValue({ + resources: mockData || [], + }), + }), + }, + }), + }), + }; + return client; +}; + +describe("SimpleCosmosDBReader", () => { + let reader: SimpleCosmosDBReader; + it("should throw an error if databaseName is missing", async () => { + const client = createMockClient() as unknown as CosmosClient; + const reader = new SimpleCosmosDBReader(client); + + await expect( + reader.loadData({ databaseName: "", containerName: "test" }), + ).rejects.toThrow("databaseName and containerName are required"); + }); + + it("should throw an error if containerName is missing", async () => { + const client = createMockClient() as unknown as CosmosClient; + const reader = new SimpleCosmosDBReader(client); + + await expect( + reader.loadData({ databaseName: "test", containerName: "" }), + ).rejects.toThrow("databaseName and containerName are required"); + }); + + it("should load data from Cosmos DB container", async () => { + const mockData = [ + { + id: "1", + text1: ["Sample text 1", "Sample text 2"], + text2: "Sample text 3", + metadataField1: "Metadata 1", + metadaField2: { field3: 1, field4: 2 }, + }, + { + id: "2", + text1: "Sample text 4", + text2: "Sample text 5", + metadataField1: ["prop1", "prop2"], + metadaField2: { field3: 3, field4: 4 }, + }, + ]; + + const mockCosmosClient = createMockClient( + mockData, + ) as unknown as CosmosClient; + reader = new SimpleCosmosDBReader(mockCosmosClient); + + const simpleCosmosReaderConfig: SimpleCosmosDBReaderLoaderConfig = { + databaseName: "testDatabase", + containerName: "testContainer", + fields: ["text1", "text2"], + fieldSeparator: "\n", + query: "SELECT * FROM c", + metadataFields: ["metadataField1", "metadaField2"], + }; + + const res = await reader.loadData(simpleCosmosReaderConfig); + + expect(res).toEqual([ + new Document({ + id_: "1", + text: "Sample text 1\nSample text 2\nSample text 3", + metadata: { + metadataField1: "Metadata 1", + metadaField2: { field3: 1, field4: 2 }, + }, + }), + new Document({ + id_: "2", + text: "Sample text 4\nSample text 5", + metadata: { + metadataField1: ["prop1", "prop2"], + metadaField2: { field3: 3, field4: 4 }, + }, + }), + ]); + }); + + it("undefined fields should be empty", async () => { + const mockData = [ + { + id: "1", + text: ["Sample text 1", "Sample text 2"], + metadataField1: "Metadata 1", + }, + ]; + + const mockCosmosClient = createMockClient( + mockData, + ) as unknown as CosmosClient; + reader = new SimpleCosmosDBReader(mockCosmosClient); + + const simpleCosmosReaderConfig: SimpleCosmosDBReaderLoaderConfig = { + databaseName: "testDatabase", + containerName: "testContainer", + fields: ["text", "text1"], + fieldSeparator: "\n", + query: "SELECT * FROM c", + metadataFields: ["metadataField1", "metadaField2"], + }; + + const res = await reader.loadData(simpleCosmosReaderConfig); + expect(res).toEqual([ + new Document({ + id_: "1", + text: "Sample text 1\nSample text 2\n", + metadata: { metadataField1: "Metadata 1", metadaField2: undefined }, + }), + ]); + }); + + it("should handle errors when loading data from Cosmos DB", async () => { + const client = createMockClient() as unknown as CosmosClient; + const reader = new SimpleCosmosDBReader(client); + + vi.spyOn( + client + .database("testDB") + .container("testContainer") + .items.query("Select * from c"), + "fetchAll", + ).mockRejectedValue("Fetch error"); + + const config: SimpleCosmosDBReaderLoaderConfig = { + databaseName: "testDB", + containerName: "testContainer", + }; + + await expect(reader.loadData(config)).rejects.toThrow( + "Error loading data from Cosmos DB: Fetch error", + ); + }); +});