diff --git a/.changeset/thirty-hats-act.md b/.changeset/thirty-hats-act.md new file mode 100644 index 0000000000000000000000000000000000000000..a1412267665aee6d39a210ee4507512fd09c0855 --- /dev/null +++ b/.changeset/thirty-hats-act.md @@ -0,0 +1,8 @@ +--- +"@llamaindex/cloud": patch +"@llamaindex/community": patch +"@llamaindex/core": patch +"@llamaindex/readers": patch +--- + +fix: add retry handling logic to parser reader and fix lint issues diff --git a/eslint.config.mjs b/eslint.config.mjs index 0e48c33f1407df2763a3e132b23a61dd338d8b82..e083d8d759c6d827168894427342ffafe168d017 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -50,6 +50,9 @@ export default tseslint.config( "**/lib/*", "**/deps/**", "**/.next/**", + "**/.source/**", // Ignore .source directories + "!.git", // Don't ignore .git directory + "**/.*", // Ignore all dot files and directories "**/node_modules/**", "**/build/**", "**/.docusaurus/**", diff --git a/package.json b/package.json index aac556342afb4a34a19a09bcb763ce030b8eeb00..4829195f5cca53f74f4fa6e4e02c9f666eed9205 100644 --- a/package.json +++ b/package.json @@ -46,5 +46,8 @@ "*.{json,md,yml}": [ "prettier --write" ] + }, + "dependencies": { + "p-retry": "^6.2.1" } } diff --git a/packages/cloud/src/reader.ts b/packages/cloud/src/reader.ts index 5a7af156a50566dc3aa5ab5c9b9568cb76f7eb51..529f748533cbdfc4963d480a2d6ae5f828167fa4 100644 --- a/packages/cloud/src/reader.ts +++ b/packages/cloud/src/reader.ts @@ -1,6 +1,8 @@ +/* eslint-disable @typescript-eslint/no-explicit-any */ import { type Client, createClient, createConfig } from "@hey-api/client-fetch"; import { Document, FileReader } from "@llamaindex/core/schema"; import { fs, getEnv, path } from "@llamaindex/env"; +import pRetry from "p-retry"; import { type Body_upload_file_api_v1_parsing_upload_post, type ParserLanguages, @@ -15,16 +17,18 @@ import { import { sleep } from "./utils"; export type Language = ParserLanguages; - export type ResultType = "text" | "markdown" | "json"; -//todo: should move into @llamaindex/env +// Export the backoff pattern type. +export type BackoffPattern = "constant" | "linear" | "exponential"; + +// TODO: should move into @llamaindex/env type WriteStream = { write: (text: string) => void; }; // Do not modify this variable or cause type errors -// eslint-disable-next-line @typescript-eslint/no-explicit-any, no-var +// eslint-disable-next-line no-var var process: any; /** @@ -41,48 +45,57 @@ export class LlamaParseReader extends FileReader { // The result type for the parser. resultType: ResultType = "text"; // The interval in seconds to check if the parsing is done. - checkInterval = 1; + checkInterval: number = 1; // The maximum timeout in seconds to wait for the parsing to finish. maxTimeout = 2000; // Whether to print the progress of the parsing. verbose = true; - // The language of the text to parse. + // The language to parse the file in. language: ParserLanguages[] = ["en"]; + + // New polling options: + // Controls the backoff mode: "constant", "linear", or "exponential". + backoffPattern: BackoffPattern = "linear"; + // Maximum interval in seconds between polls. + maxCheckInterval: number = 5; + // Maximum number of retryable errors before giving up. + maxErrorCount: number = 4; + // The parsing instruction for the parser. Backend default is an empty string. parsingInstruction?: string | undefined; - // Wether to ignore diagonal text (when the text rotation in degrees is not 0, 90, 180 or 270, so not a horizontal or vertical text). Backend default is false. + // Whether to ignore diagonal text (when the text rotation in degrees is not 0, 90, 180, or 270). Backend default is false. skipDiagonalText?: boolean | undefined; - // Wheter to ignore the cache and re-process the document. All documents are kept in cache for 48hours after the job was completed to avoid processing the same document twice. Backend default is false. + // Whether to ignore the cache and re-process the document. Documents are cached for 48 hours after job completion. Backend default is false. invalidateCache?: boolean | undefined; - // Wether the document should not be cached in the first place. Backend default is false. + // Whether the document should not be cached. Backend default is false. doNotCache?: boolean | undefined; - // Wether to use a faster mode to extract text from documents. This mode will skip OCR of images, and table/heading reconstruction. Note: Non-compatible with gpt4oMode. Backend default is false. + // Whether to use a faster mode to extract text (skipping OCR and table/heading reconstruction). Not compatible with gpt4oMode. Backend default is false. fastMode?: boolean | undefined; - // Wether to keep column in the text according to document layout. Reduce reconstruction accuracy, and LLM's/embedings performances in most cases. + // Whether to keep columns in the text according to document layout. May reduce reconstruction accuracy and LLM/embedings performance. doNotUnrollColumns?: boolean | undefined; - // A templated page separator to use to split the text. If the results contain `{page_number}` (e.g. JSON mode), it will be replaced by the next page number. If not set the default separator '\\n---\\n' will be used. + // A templated page separator for splitting text. If not set, default is "\n---\n". pageSeparator?: string | undefined; - //A templated prefix to add to the beginning of each page. If the results contain `{page_number}`, it will be replaced by the page number.> + // A templated prefix to add at the beginning of each page. pagePrefix?: string | undefined; - // A templated suffix to add to the end of each page. If the results contain `{page_number}`, it will be replaced by the page number. + // A templated suffix to add at the end of each page. pageSuffix?: string | undefined; - // Deprecated. Use vendorMultimodal params. Whether to use gpt-4o to extract text from documents. + // Deprecated. Use vendorMultimodal params. Whether to use gpt-4o to extract text. gpt4oMode: boolean = false; - // Deprecated. Use vendorMultimodal params. The API key for the GPT-4o API. Optional, lowers the cost of parsing. Can be set as an env variable: LLAMA_CLOUD_GPT4O_API_KEY. + // Deprecated. Use vendorMultimodal params. The API key for GPT-4o. Can be set via LLAMA_CLOUD_GPT4O_API_KEY. gpt4oApiKey?: string | undefined; - // The bounding box to use to extract text from documents. Describe as a string containing the bounding box margins. + // The bounding box margins as a string. boundingBox?: string | undefined; - // The target pages to extract text from documents. Describe as a comma separated list of page numbers. The first page of the document is page 0 + // The target pages (comma separated list, starting at 0). targetPages?: string | undefined; - // Whether or not to ignore and skip errors raised during parsing. + // Whether to ignore errors during parsing. ignoreErrors: boolean = true; - // Whether to split by page using the pageSeparator or '\n---\n' as default. + // Whether to split by page using the pageSeparator (or "\n---\n" as default). splitByPage: boolean = true; // Whether to use the vendor multimodal API. useVendorMultimodalModel: boolean = false; - // The model name for the vendor multimodal API + // The model name for the vendor multimodal API. vendorMultimodalModelName?: string | undefined; - // The API key for the multimodal API. Can also be set as an env variable: LLAMA_CLOUD_VENDOR_MULTIMODAL_API_KEY + // The API key for the multimodal API. Can be set via LLAMA_CLOUD_VENDOR_MULTIMODAL_API_KEY. vendorMultimodalApiKey?: string | undefined; webhookUrl?: string | undefined; @@ -173,7 +186,7 @@ export class LlamaParseReader extends FileReader { } this.apiKey = apiKey; if (this.baseUrl.endsWith("/")) { - this.baseUrl = this.baseUrl.slice(0, -"/".length); + this.baseUrl = this.baseUrl.slice(0, -1); } if (this.baseUrl.endsWith("/api/parsing")) { this.baseUrl = this.baseUrl.slice(0, -"/api/parsing".length); @@ -203,13 +216,19 @@ export class LlamaParseReader extends FileReader { ); } - // Create a job for the LlamaParse API + /** + * Creates a job for the LlamaParse API. + * + * @param data - The file data as a Uint8Array. + * @param filename - Optional filename for the file. + * @returns A Promise resolving to the job ID as a string. + */ async #createJob(data: Uint8Array, filename?: string): Promise<string> { if (this.verbose) { console.log("Started uploading the file"); } - // todo: remove Blob usage when we drop Node.js 18 support + // TODO: remove Blob usage when we drop Node.js 18 support const file: File | Blob = globalThis.File && filename ? new File([data], filename) @@ -320,87 +339,124 @@ export class LlamaParseReader extends FileReader { return response.data.id; } - // Get the result of the job + /** + * Retrieves the result of a parsing job. + * + * Uses a polling loop with retry logic. Each API call is retried + * up to maxErrorCount times if it fails with a 5XX or socket error. + * The delay between polls increases according to the specified backoffPattern ("constant", "linear", or "exponential"), + * capped by maxCheckInterval. + * + * @param jobId - The job ID. + * @param resultType - The type of result to fetch ("text", "json", or "markdown"). + * @returns A Promise resolving to the job result. + */ private async getJobResult( jobId: string, resultType: "text" | "json" | "markdown", - // eslint-disable-next-line @typescript-eslint/no-explicit-any ): Promise<any> { - const signal = AbortSignal.timeout(this.maxTimeout * 1000); let tries = 0; - while (true) { - await sleep(this.checkInterval * 1000); + let currentInterval = this.checkInterval; - // Check the job status. If unsuccessful response, checks if maximum timeout has been reached. If reached, throws an error - const result = await getJobApiV1ParsingJobJobIdGet({ - client: this.#client, - throwOnError: true, - path: { - job_id: jobId, - }, - query: { - project_id: this.project_id ?? null, - organization_id: this.organization_id ?? null, - }, - signal, - }); - const { data } = result; + while (true) { + await sleep(currentInterval * 1000); - const status = (data as Record<string, unknown>)["status"]; - // If job has completed, return the result - if (status === "SUCCESS") { - let result; - switch (resultType) { - case "json": { - result = await getJobJsonResultApiV1ParsingJobJobIdResultJsonGet({ + // Wraps the API call in a retry + let result; + try { + result = await pRetry( + () => + getJobApiV1ParsingJobJobIdGet({ client: this.#client, throwOnError: true, - path: { - job_id: jobId, - }, + path: { job_id: jobId }, query: { project_id: this.project_id ?? null, organization_id: this.organization_id ?? null, }, - signal, - }); + signal: AbortSignal.timeout(this.maxTimeout * 1000), + }), + { + retries: this.maxErrorCount, + onFailedAttempt: (error) => { + // Retry only on 5XX or socket errors. + const status = (error.cause as any)?.response?.status; + if ( + !( + (status && status >= 500 && status < 600) || + ((error.cause as any)?.code && + ((error.cause as any).code === "ECONNRESET" || + (error.cause as any).code === "ETIMEDOUT" || + (error.cause as any).code === "ECONNREFUSED")) + ) + ) { + throw error; + } + if (this.verbose) { + console.warn( + `Attempting to get job ${jobId} result (attempt ${error.attemptNumber}) failed. Retrying...`, + ); + } + }, + }, + ); + } catch (e: any) { + throw new Error( + `Max error count reached for job ${jobId}: ${e.message}`, + ); + } + + const { data } = result; + const status = (data as Record<string, unknown>)["status"]; + + if (status === "SUCCESS") { + let resultData; + switch (resultType) { + case "json": { + resultData = + await getJobJsonResultApiV1ParsingJobJobIdResultJsonGet({ + client: this.#client, + throwOnError: true, + path: { job_id: jobId }, + query: { + project_id: this.project_id ?? null, + organization_id: this.organization_id ?? null, + }, + signal: AbortSignal.timeout(this.maxTimeout * 1000), + }); break; } case "markdown": { - result = await getJobResultApiV1ParsingJobJobIdResultMarkdownGet({ - client: this.#client, - throwOnError: true, - path: { - job_id: jobId, - }, - query: { - project_id: this.project_id ?? null, - organization_id: this.organization_id ?? null, - }, - signal, - }); + resultData = + await getJobResultApiV1ParsingJobJobIdResultMarkdownGet({ + client: this.#client, + throwOnError: true, + path: { job_id: jobId }, + query: { + project_id: this.project_id ?? null, + organization_id: this.organization_id ?? null, + }, + signal: AbortSignal.timeout(this.maxTimeout * 1000), + }); break; } case "text": { - result = await getJobTextResultApiV1ParsingJobJobIdResultTextGet({ - client: this.#client, - throwOnError: true, - path: { - job_id: jobId, - }, - query: { - project_id: this.project_id ?? null, - organization_id: this.organization_id ?? null, - }, - signal, - }); + resultData = + await getJobTextResultApiV1ParsingJobJobIdResultTextGet({ + client: this.#client, + throwOnError: true, + path: { job_id: jobId }, + query: { + project_id: this.project_id ?? null, + organization_id: this.organization_id ?? null, + }, + signal: AbortSignal.timeout(this.maxTimeout * 1000), + }); break; } } - return result.data; - // If job is still pending, check if maximum timeout has been reached. If reached, throws an error + return resultData.data; } else if (status === "PENDING") { - signal.throwIfAborted(); if (this.verbose && tries % 10 === 0) { this.stdout?.write("."); } @@ -408,23 +464,35 @@ export class LlamaParseReader extends FileReader { } else { if (this.verbose) { console.error( - `Recieved Error response ${status} for job ${jobId}. Got Error Code: ${data.error_code} and Error Message: ${data.error_message}`, + `Received error response ${status} for job ${jobId}. Got Error Code: ${data.error_code} and Error Message: ${data.error_message}`, ); } throw new Error( `Failed to parse the file: ${jobId}, status: ${status}`, ); } + + // Adjust the polling interval based on the backoff pattern. + if (this.backoffPattern === "exponential") { + currentInterval = Math.min(currentInterval * 2, this.maxCheckInterval); + } else if (this.backoffPattern === "linear") { + currentInterval = Math.min( + currentInterval + this.checkInterval, + this.maxCheckInterval, + ); + } else if (this.backoffPattern === "constant") { + currentInterval = this.checkInterval; + } } } /** * Loads data from a file and returns an array of Document objects. - * To be used with resultType = "text" and "markdown" + * To be used with resultType "text" or "markdown". * - * @param {Uint8Array} fileContent - The content of the file to be loaded. - * @param {string} filename - The name of the file to be loaded. - * @return {Promise<Document[]>} A Promise object that resolves to an array of Document objects. + * @param fileContent - The content of the file as a Uint8Array. + * @param filename - Optional filename for the file. + * @returns A Promise that resolves to an array of Document objects. */ async loadDataAsContent( fileContent: Uint8Array, @@ -436,42 +504,38 @@ export class LlamaParseReader extends FileReader { console.log(`Started parsing the file under job id ${jobId}`); } - // Return results as Document objects + // Return results as Document objects. const jobResults = await this.getJobResult(jobId, this.resultType); const resultText = jobResults[this.resultType]; - // Split the text by separator if splitByPage is true + // Split the text by separator if splitByPage is true. if (this.splitByPage) { return this.splitTextBySeparator(resultText); } - return [ - new Document({ - text: resultText, - }), - ]; + return [new Document({ text: resultText })]; }) .catch((error) => { + console.warn( + `Error while parsing the file with: ${error.message ?? error.detail}`, + ); if (this.ignoreErrors) { - console.warn( - `Error while parsing the file: ${error.message ?? error.detail}`, - ); return []; } else { throw error; } }); } + /** * Loads data from a file and returns an array of JSON objects. - * To be used with resultType = "json" + * To be used with resultType "json". * - * @param {string} filePathOrContent - The file path to the file or the content of the file as a Buffer - * @return {Promise<Record<string, any>[]>} A Promise that resolves to an array of JSON objects. + * @param filePathOrContent - The file path or the file content as a Uint8Array. + * @returns A Promise that resolves to an array of JSON objects. */ async loadJson( filePathOrContent: string | Uint8Array, - // eslint-disable-next-line @typescript-eslint/no-explicit-any ): Promise<Record<string, any>[]> { let jobId; const isFilePath = typeof filePathOrContent === "string"; @@ -479,7 +543,7 @@ export class LlamaParseReader extends FileReader { const data = isFilePath ? await fs.readFile(filePathOrContent) : filePathOrContent; - // Creates a job for the file + // Create a job for the file. jobId = await this.#createJob( data, isFilePath ? path.basename(filePathOrContent) : undefined, @@ -488,14 +552,14 @@ export class LlamaParseReader extends FileReader { console.log(`Started parsing the file under job id ${jobId}`); } - // Return results as an array of JSON objects (same format as Python version of the reader) + // Return results as an array of JSON objects. const resultJson = await this.getJobResult(jobId, "json"); resultJson.job_id = jobId; resultJson.file_path = isFilePath ? filePathOrContent : undefined; return [resultJson]; } catch (e) { + console.error(`Error while parsing the file under job id ${jobId}`, e); if (this.ignoreErrors) { - console.error(`Error while parsing the file under job id ${jobId}`, e); return []; } else { throw e; @@ -505,27 +569,24 @@ export class LlamaParseReader extends FileReader { /** * Downloads and saves images from a given JSON result to a specified download path. - * Currently only supports resultType = "json" + * Currently only supports resultType "json". * - * @param {Record<string, any>[]} jsonResult - The JSON result containing image information. - * @param {string} downloadPath - The path to save the downloaded images. - * @return {Promise<Record<string, any>[]>} A Promise that resolves to an array of image objects. + * @param jsonResult - The JSON result containing image information. + * @param downloadPath - The path where the downloaded images will be saved. + * @returns A Promise that resolves to an array of image objects. */ async getImages( - // eslint-disable-next-line @typescript-eslint/no-explicit-any jsonResult: Record<string, any>[], downloadPath: string, - // eslint-disable-next-line @typescript-eslint/no-explicit-any ): Promise<Record<string, any>[]> { try { - // Create download directory if it doesn't exist (Actually check for write access, not existence, since fsPromises does not have a `existsSync` method) + // Create download directory if it doesn't exist (checks for write access). try { await fs.access(downloadPath); } catch { await fs.mkdir(downloadPath, { recursive: true }); } - // eslint-disable-next-line @typescript-eslint/no-explicit-any const images: Record<string, any>[] = []; for (const result of jsonResult) { const jobId = result.job_id; @@ -541,7 +602,7 @@ export class LlamaParseReader extends FileReader { imageName, ); await this.fetchAndSaveImage(imageName, imagePath, jobId); - // Assign metadata to the image + // Assign metadata to the image. image.path = imagePath; image.job_id = jobId; image.original_pdf_path = result.file_path; @@ -561,6 +622,14 @@ export class LlamaParseReader extends FileReader { } } + /** + * Constructs the file path for an image. + * + * @param downloadPath - The base download directory. + * @param jobId - The job ID. + * @param imageName - The image name. + * @returns A Promise that resolves to the full image path. + */ private async getImagePath( downloadPath: string, jobId: string, @@ -569,6 +638,13 @@ export class LlamaParseReader extends FileReader { return path.join(downloadPath, `${jobId}-${imageName}`); } + /** + * Fetches an image from the API and saves it to the specified path. + * + * @param imageName - The name of the image. + * @param imagePath - The local path to save the image. + * @param jobId - The associated job ID. + */ private async fetchAndSaveImage( imageName: string, imagePath: string, @@ -590,18 +666,21 @@ export class LlamaParseReader extends FileReader { throw new Error(`Failed to download image: ${response.error.detail}`); } const blob = (await response.data) as Blob; - // Write the image buffer to the specified imagePath + // Write the image buffer to the specified imagePath. await fs.writeFile(imagePath, new Uint8Array(await blob.arrayBuffer())); } - // Filters out invalid values (null, undefined, empty string) of specific params. + /** + * Filters out invalid values (null, undefined, empty string) for specific parameters. + * + * @param params - The parameters object. + * @param keysToCheck - The keys to check for valid values. + * @returns A new object with filtered parameters. + */ private filterSpecificParams( - // eslint-disable-next-line @typescript-eslint/no-explicit-any params: Record<string, any>, keysToCheck: string[], - // eslint-disable-next-line @typescript-eslint/no-explicit-any ): Record<string, any> { - // eslint-disable-next-line @typescript-eslint/no-explicit-any const filteredParams: Record<string, any> = {}; for (const [key, value] of Object.entries(params)) { if (keysToCheck.includes(key)) { @@ -615,6 +694,12 @@ export class LlamaParseReader extends FileReader { return filteredParams; } + /** + * Splits text into Document objects using the page separator. + * + * @param text - The text to be split. + * @returns An array of Document objects. + */ private splitTextBySeparator(text: string): Document[] { const separator = this.pageSeparator ?? "\n---\n"; const textChunks = text.split(separator); diff --git a/packages/community/src/llm/bedrock/amazon/provider.ts b/packages/community/src/llm/bedrock/amazon/provider.ts index e4f30919bd9d01a8bb45730caad4270878150c67..d3a8544a884a298e6a698897793885a2730826b9 100644 --- a/packages/community/src/llm/bedrock/amazon/provider.ts +++ b/packages/community/src/llm/bedrock/amazon/provider.ts @@ -24,6 +24,7 @@ import { } from "./utils"; export class AmazonProvider extends Provider<ConverseStreamOutput> { + // eslint-disable-next-line @typescript-eslint/no-explicit-any getResultFromResponse(response: Record<string, any>): ConverseResponse { return JSON.parse(toUtf8(response.body)); } @@ -52,7 +53,7 @@ export class AmazonProvider extends Provider<ConverseStreamOutput> { } getTextFromStreamResponse(response: ResponseStream): string { - let event: ConverseStreamOutput | undefined = + const event: ConverseStreamOutput | undefined = this.getStreamingEventResponse(response); if (!event || !event.contentBlockDelta) return ""; const delta: ContentBlockDelta | undefined = event.contentBlockDelta.delta; diff --git a/packages/community/src/llm/bedrock/amazon/utils.ts b/packages/community/src/llm/bedrock/amazon/utils.ts index 9c1fe5e0e1e7bd2264a9668f68784a5f624f0edf..51833c6ed0458c535ee3c8965df782f120e89362 100644 --- a/packages/community/src/llm/bedrock/amazon/utils.ts +++ b/packages/community/src/llm/bedrock/amazon/utils.ts @@ -56,7 +56,7 @@ export const mapImageContent = (imageUrl: string): ImageBlock => { mimeType as keyof typeof ACCEPTED_IMAGE_MIME_TYPE_FORMAT_MAP ], - // @ts-ignore: there's a mistake in the "@aws-sdk/client-bedrock-runtime" compared to the actual api + // @ts-expect-error: there's a mistake in the "@aws-sdk/client-bedrock-runtime" compared to the actual api source: { bytes: data }, }; }; diff --git a/packages/core/src/global/constants.ts b/packages/core/src/global/constants.ts index 442f5e684500df3a9dd3cb94eb65afdf1767aec7..f4d99fa6b18104942c551dc875eca471c8f013aa 100644 --- a/packages/core/src/global/constants.ts +++ b/packages/core/src/global/constants.ts @@ -20,4 +20,5 @@ export const DEFAULT_NAMESPACE = "docstore"; //#region llama cloud export const DEFAULT_PROJECT_NAME = "Default"; export const DEFAULT_BASE_URL = "https://api.cloud.llamaindex.ai"; +export const DEFAULT_EU_BASE_URL = "https://api.cloud.eu.llamaindex.ai"; //#endregion diff --git a/packages/readers/src/cosmosdb.ts b/packages/readers/src/cosmosdb.ts index 6a8e4f6c44b825a1d5fd9635de8161123cb09740..7e0e93a5c54a5f44e958b8f1e4dbe9499af6442e 100644 --- a/packages/readers/src/cosmosdb.ts +++ b/packages/readers/src/cosmosdb.ts @@ -60,7 +60,7 @@ export class SimpleCosmosDBReader implements BaseReader { const metadataFields = config.metadataFields; try { - let res = await container.items.query(query).fetchAll(); + const res = await container.items.query(query).fetchAll(); const documents: Document[] = []; for (const item of res.resources) { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d8cc67c66890f7c76f181738b3c38797ffced9bd..4f41f8482e443712bcf100dafb9f47a8e73c710d 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -7,6 +7,10 @@ settings: importers: .: + dependencies: + p-retry: + specifier: ^6.2.1 + version: 6.2.1 devDependencies: '@changesets/cli': specifier: ^2.27.5 @@ -1721,61 +1725,6 @@ importers: specifier: ^13.4.8 version: 13.4.8 - packages/server: - dependencies: - '@llamaindex/chat-ui': - specifier: 0.3.1 - version: 0.3.1(@types/react-dom@19.0.4(@types/react@19.0.10))(@types/react@19.0.10)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - ai: - specifier: ^4.0.3 - version: 4.1.34(react@19.0.0)(zod@3.24.2) - llamaindex: - specifier: workspace:* - version: link:../llamaindex - next: - specifier: 15.2.3 - version: 15.2.3(@opentelemetry/api@1.9.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - react: - specifier: ^19.0.0 - version: 19.0.0 - react-dom: - specifier: ^19.0.0 - version: 19.0.0(react@19.0.0) - devDependencies: - '@eslint/eslintrc': - specifier: ^3 - version: 3.3.0 - '@tailwindcss/postcss': - specifier: ^4 - version: 4.0.9 - '@types/node': - specifier: ^22.9.0 - version: 22.9.0 - '@types/react': - specifier: ^19 - version: 19.0.10 - '@types/react-dom': - specifier: ^19 - version: 19.0.4(@types/react@19.0.10) - bunchee: - specifier: 6.4.0 - version: 6.4.0(typescript@5.7.3) - eslint: - specifier: ^9 - version: 9.22.0(jiti@2.4.2) - eslint-config-next: - specifier: 15.2.3 - version: 15.2.3(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) - tailwindcss: - specifier: ^4 - version: 4.0.9 - tsx: - specifier: ^4.19.3 - version: 4.19.3 - vitest: - specifier: ^2.1.5 - version: 2.1.5(@edge-runtime/vm@4.0.4)(@types/node@22.9.0)(happy-dom@15.11.7)(lightningcss@1.29.1)(msw@2.7.0(@types/node@22.9.0)(typescript@5.7.3))(terser@5.38.2) - packages/tools: dependencies: '@apidevtools/swagger-parser': @@ -3630,11 +3579,6 @@ packages: peerDependencies: react: ^18.2.0 || ^19.0.0 || ^19.0.0-rc - '@llamaindex/chat-ui@0.3.1': - resolution: {integrity: sha512-sF6axN9LviewAxvBbqkF3u3K0yvIt74prio7uiVruFVT/AYkRlIk721QXTPBscf+ZvyzAqjh0Nx0BoGiZUzBCw==} - peerDependencies: - react: ^18.2.0 || ^19.0.0 || ^19.0.0-rc - '@llamaindex/pdf-viewer@1.3.0': resolution: {integrity: sha512-HJtjzmxn+erb3Vq89W5atPq0q6uyZMMCgzOnmstxudzaHW/Yj1dp1ojCuBh/wlP1tUnIRoe9RmvC0ahmqSwRUA==} peerDependencies: @@ -3785,15 +3729,9 @@ packages: '@next/env@15.2.1': resolution: {integrity: sha512-JmY0qvnPuS2NCWOz2bbby3Pe0VzdAQ7XpEB6uLIHmtXNfAsAO0KLQLkuAoc42Bxbo3/jMC3dcn9cdf+piCcG2Q==} - '@next/env@15.2.3': - resolution: {integrity: sha512-a26KnbW9DFEUsSxAxKBORR/uD9THoYoKbkpFywMN/AFvboTt94b8+g/07T8J6ACsdLag8/PDU60ov4rPxRAixw==} - '@next/eslint-plugin-next@15.1.0': resolution: {integrity: sha512-+jPT0h+nelBT6HC9ZCHGc7DgGVy04cv4shYdAe6tKlEbjQUtwU3LzQhzbDHQyY2m6g39m6B0kOFVuLGBrxxbGg==} - '@next/eslint-plugin-next@15.2.3': - resolution: {integrity: sha512-eNSOIMJtjs+dp4Ms1tB1PPPJUQHP3uZK+OQ7iFY9qXpGO6ojT6imCL+KcUOqE/GXGidWbBZJzYdgAdPHqeCEPA==} - '@next/swc-darwin-arm64@15.2.0': resolution: {integrity: sha512-rlp22GZwNJjFCyL7h5wz9vtpBVuCt3ZYjFWpEPBGzG712/uL1bbSkS675rVAUCRZ4hjoTJ26Q7IKhr5DfJrHDA==} engines: {node: '>= 10'} @@ -3806,12 +3744,6 @@ packages: cpu: [arm64] os: [darwin] - '@next/swc-darwin-arm64@15.2.3': - resolution: {integrity: sha512-uaBhA8aLbXLqwjnsHSkxs353WrRgQgiFjduDpc7YXEU0B54IKx3vU+cxQlYwPCyC8uYEEX7THhtQQsfHnvv8dw==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [darwin] - '@next/swc-darwin-x64@15.2.0': resolution: {integrity: sha512-DiU85EqSHogCz80+sgsx90/ecygfCSGl5P3b4XDRVZpgujBm5lp4ts7YaHru7eVTyZMjHInzKr+w0/7+qDrvMA==} engines: {node: '>= 10'} @@ -3824,12 +3756,6 @@ packages: cpu: [x64] os: [darwin] - '@next/swc-darwin-x64@15.2.3': - resolution: {integrity: sha512-pVwKvJ4Zk7h+4hwhqOUuMx7Ib02u3gDX3HXPKIShBi9JlYllI0nU6TWLbPT94dt7FSi6mSBhfc2JrHViwqbOdw==} - engines: {node: '>= 10'} - cpu: [x64] - os: [darwin] - '@next/swc-linux-arm64-gnu@15.2.0': resolution: {integrity: sha512-VnpoMaGukiNWVxeqKHwi8MN47yKGyki5q+7ql/7p/3ifuU2341i/gDwGK1rivk0pVYbdv5D8z63uu9yMw0QhpQ==} engines: {node: '>= 10'} @@ -3842,12 +3768,6 @@ packages: cpu: [arm64] os: [linux] - '@next/swc-linux-arm64-gnu@15.2.3': - resolution: {integrity: sha512-50ibWdn2RuFFkOEUmo9NCcQbbV9ViQOrUfG48zHBCONciHjaUKtHcYFiCwBVuzD08fzvzkWuuZkd4AqbvKO7UQ==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [linux] - '@next/swc-linux-arm64-musl@15.2.0': resolution: {integrity: sha512-ka97/ssYE5nPH4Qs+8bd8RlYeNeUVBhcnsNUmFM6VWEob4jfN9FTr0NBhXVi1XEJpj3cMfgSRW+LdE3SUZbPrw==} engines: {node: '>= 10'} @@ -3860,12 +3780,6 @@ packages: cpu: [arm64] os: [linux] - '@next/swc-linux-arm64-musl@15.2.3': - resolution: {integrity: sha512-2gAPA7P652D3HzR4cLyAuVYwYqjG0mt/3pHSWTCyKZq/N/dJcUAEoNQMyUmwTZWCJRKofB+JPuDVP2aD8w2J6Q==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [linux] - '@next/swc-linux-x64-gnu@15.2.0': resolution: {integrity: sha512-zY1JduE4B3q0k2ZCE+DAF/1efjTXUsKP+VXRtrt/rJCTgDlUyyryx7aOgYXNc1d8gobys/Lof9P9ze8IyRDn7Q==} engines: {node: '>= 10'} @@ -3878,12 +3792,6 @@ packages: cpu: [x64] os: [linux] - '@next/swc-linux-x64-gnu@15.2.3': - resolution: {integrity: sha512-ODSKvrdMgAJOVU4qElflYy1KSZRM3M45JVbeZu42TINCMG3anp7YCBn80RkISV6bhzKwcUqLBAmOiWkaGtBA9w==} - engines: {node: '>= 10'} - cpu: [x64] - os: [linux] - '@next/swc-linux-x64-musl@15.2.0': resolution: {integrity: sha512-QqvLZpurBD46RhaVaVBepkVQzh8xtlUN00RlG4Iq1sBheNugamUNPuZEH1r9X1YGQo1KqAe1iiShF0acva3jHQ==} engines: {node: '>= 10'} @@ -3896,12 +3804,6 @@ packages: cpu: [x64] os: [linux] - '@next/swc-linux-x64-musl@15.2.3': - resolution: {integrity: sha512-ZR9kLwCWrlYxwEoytqPi1jhPd1TlsSJWAc+H/CJHmHkf2nD92MQpSRIURR1iNgA/kuFSdxB8xIPt4p/T78kwsg==} - engines: {node: '>= 10'} - cpu: [x64] - os: [linux] - '@next/swc-win32-arm64-msvc@15.2.0': resolution: {integrity: sha512-ODZ0r9WMyylTHAN6pLtvUtQlGXBL9voljv6ujSlcsjOxhtXPI1Ag6AhZK0SE8hEpR1374WZZ5w33ChpJd5fsjw==} engines: {node: '>= 10'} @@ -3914,12 +3816,6 @@ packages: cpu: [arm64] os: [win32] - '@next/swc-win32-arm64-msvc@15.2.3': - resolution: {integrity: sha512-+G2FrDcfm2YDbhDiObDU/qPriWeiz/9cRR0yMWJeTLGGX6/x8oryO3tt7HhodA1vZ8r2ddJPCjtLcpaVl7TE2Q==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [win32] - '@next/swc-win32-x64-msvc@15.2.0': resolution: {integrity: sha512-8+4Z3Z7xa13NdUuUAcpVNA6o76lNPniBd9Xbo02bwXQXnZgFvEopwY2at5+z7yHl47X9qbZpvwatZ2BRo3EdZw==} engines: {node: '>= 10'} @@ -3932,12 +3828,6 @@ packages: cpu: [x64] os: [win32] - '@next/swc-win32-x64-msvc@15.2.3': - resolution: {integrity: sha512-gHYS9tc+G2W0ZC8rBL+H6RdtXIyk40uLiaos0yj5US85FNhbFEndMA2nW3z47nzOWiSvXTZ5kBClc3rD0zJg0w==} - engines: {node: '>= 10'} - cpu: [x64] - os: [win32] - '@nodelib/fs.scandir@2.1.5': resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} engines: {node: '>= 8'} @@ -5642,6 +5532,9 @@ packages: '@types/resolve@1.20.2': resolution: {integrity: sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==} + '@types/retry@0.12.2': + resolution: {integrity: sha512-XISRgDJ2Tc5q4TRqvgJtzsRkFYNJzZrhTdtMoGVBttwzzQJkPnS3WWTFc7kuDRoPtPakl+T+OfdEUjYJj7Jbow==} + '@types/statuses@2.0.5': resolution: {integrity: sha512-jmIUGWrAiwu3dZpxntxieC+1n/5c3mjrImkmOSQ2NC5uP6cYO4aAZDdSmRcI5C1oiTmqlZGHC+/NmJrKogbP5A==} @@ -7222,15 +7115,6 @@ packages: typescript: optional: true - eslint-config-next@15.2.3: - resolution: {integrity: sha512-VDQwbajhNMFmrhLWVyUXCqsGPN+zz5G8Ys/QwFubfsxTIrkqdx3N3x3QPW+pERz8bzGPP0IgEm8cNbZcd8PFRQ==} - peerDependencies: - eslint: ^7.23.0 || ^8.0.0 || ^9.0.0 - typescript: '>=3.3.1' - peerDependenciesMeta: - typescript: - optional: true - eslint-config-prettier@9.1.0: resolution: {integrity: sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==} hasBin: true @@ -8384,6 +8268,10 @@ packages: is-module@1.0.0: resolution: {integrity: sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==} + is-network-error@1.1.0: + resolution: {integrity: sha512-tUdRRAnhT+OtCZR/LxZelH/C7QtjtFrTu5tXCA8pl55eTUElUHT+GPYV8MBMBvea/j+NxQqVt3LbWMRir7Gx9g==} + engines: {node: '>=16'} + is-node-process@1.2.0: resolution: {integrity: sha512-Vg4o6/fqPxIjtxgUH5QLJhwZ7gW5diGCVlXpuUfELC62CuxM1iHcRe51f2W1FDy04Ai4KJkagKjx3XaqyfRKXw==} @@ -9640,27 +9528,6 @@ packages: sass: optional: true - next@15.2.3: - resolution: {integrity: sha512-x6eDkZxk2rPpu46E1ZVUWIBhYCLszmUY6fvHBFcbzJ9dD+qRX6vcHusaqqDlnY+VngKzKbAiG2iRCkPbmi8f7w==} - engines: {node: ^18.18.0 || ^19.8.0 || >= 20.0.0} - hasBin: true - peerDependencies: - '@opentelemetry/api': ^1.1.0 - '@playwright/test': ^1.41.2 - babel-plugin-react-compiler: '*' - react: ^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0 - react-dom: ^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0 - sass: ^1.3.0 - peerDependenciesMeta: - '@opentelemetry/api': - optional: true - '@playwright/test': - optional: true - babel-plugin-react-compiler: - optional: true - sass: - optional: true - nice-grpc-client-middleware-retry@3.1.9: resolution: {integrity: sha512-BgbsNjuppxD6hoeCfO5gkBA/G69Tq5d9QX35QLdA46NSjKllelC+FlcgSPMlO9VQKCAPDfp4zzzDJZTNtbvzVw==} @@ -9970,6 +9837,10 @@ packages: resolution: {integrity: sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==} engines: {node: '>=6'} + p-retry@6.2.1: + resolution: {integrity: sha512-hEt02O4hUct5wtwg4H4KcWgDdm+l1bOaEy/hWzd8xtXB9BqxTWBBhb+2ImAtH4Cv4rPjV76xN3Zumqk3k3AhhQ==} + engines: {node: '>=16.17'} + p-try@2.2.0: resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} engines: {node: '>=6'} @@ -10820,6 +10691,10 @@ packages: resolution: {integrity: sha512-dUOvLMJ0/JJYEn8NrpOaGNE7X3vpI5XlZS/u0ANjqtcZVKnIxP7IgCFwrKTxENw29emmwug53awKtaMm4i9g5w==} engines: {node: '>=14'} + retry@0.13.1: + resolution: {integrity: sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==} + engines: {node: '>= 4'} + reusify@1.0.4: resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} @@ -14542,36 +14417,6 @@ snapshots: - react-dom - supports-color - '@llamaindex/chat-ui@0.3.1(@types/react-dom@19.0.4(@types/react@19.0.10))(@types/react@19.0.10)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': - dependencies: - '@llamaindex/pdf-viewer': 1.3.0(@types/react@19.0.10)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - '@radix-ui/react-collapsible': 1.1.3(@types/react-dom@19.0.4(@types/react@19.0.10))(@types/react@19.0.10)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - '@radix-ui/react-hover-card': 1.1.6(@types/react-dom@19.0.4(@types/react@19.0.10))(@types/react@19.0.10)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - '@radix-ui/react-icons': 1.3.2(react@19.0.0) - '@radix-ui/react-progress': 1.1.2(@types/react-dom@19.0.4(@types/react@19.0.10))(@types/react@19.0.10)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - '@radix-ui/react-select': 2.1.6(@types/react-dom@19.0.4(@types/react@19.0.10))(@types/react@19.0.10)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - '@radix-ui/react-slot': 1.1.2(@types/react@19.0.10)(react@19.0.0) - '@radix-ui/react-tabs': 1.1.3(@types/react-dom@19.0.4(@types/react@19.0.10))(@types/react@19.0.10)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - class-variance-authority: 0.7.1 - clsx: 2.1.1 - highlight.js: 11.11.1 - katex: 0.16.21 - lucide-react: 0.453.0(react@19.0.0) - react: 19.0.0 - react-markdown: 8.0.7(@types/react@19.0.10)(react@19.0.0) - rehype-katex: 7.0.1 - remark: 14.0.3 - remark-code-import: 1.2.0 - remark-gfm: 3.0.1 - remark-math: 5.1.1 - tailwind-merge: 2.6.0 - vaul: 0.9.9(@types/react-dom@19.0.4(@types/react@19.0.10))(@types/react@19.0.10)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - transitivePeerDependencies: - - '@types/react' - - '@types/react-dom' - - react-dom - - supports-color - '@llamaindex/pdf-viewer@1.3.0(@types/react@19.0.10)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': dependencies: '@wojtekmaj/react-hooks': 1.17.2(react@19.0.0) @@ -14756,88 +14601,58 @@ snapshots: '@next/env@15.2.1': {} - '@next/env@15.2.3': {} - '@next/eslint-plugin-next@15.1.0': dependencies: fast-glob: 3.3.1 - '@next/eslint-plugin-next@15.2.3': - dependencies: - fast-glob: 3.3.1 - '@next/swc-darwin-arm64@15.2.0': optional: true '@next/swc-darwin-arm64@15.2.1': optional: true - '@next/swc-darwin-arm64@15.2.3': - optional: true - '@next/swc-darwin-x64@15.2.0': optional: true '@next/swc-darwin-x64@15.2.1': optional: true - '@next/swc-darwin-x64@15.2.3': - optional: true - '@next/swc-linux-arm64-gnu@15.2.0': optional: true '@next/swc-linux-arm64-gnu@15.2.1': optional: true - '@next/swc-linux-arm64-gnu@15.2.3': - optional: true - '@next/swc-linux-arm64-musl@15.2.0': optional: true '@next/swc-linux-arm64-musl@15.2.1': optional: true - '@next/swc-linux-arm64-musl@15.2.3': - optional: true - '@next/swc-linux-x64-gnu@15.2.0': optional: true '@next/swc-linux-x64-gnu@15.2.1': optional: true - '@next/swc-linux-x64-gnu@15.2.3': - optional: true - '@next/swc-linux-x64-musl@15.2.0': optional: true '@next/swc-linux-x64-musl@15.2.1': optional: true - '@next/swc-linux-x64-musl@15.2.3': - optional: true - '@next/swc-win32-arm64-msvc@15.2.0': optional: true '@next/swc-win32-arm64-msvc@15.2.1': optional: true - '@next/swc-win32-arm64-msvc@15.2.3': - optional: true - '@next/swc-win32-x64-msvc@15.2.0': optional: true '@next/swc-win32-x64-msvc@15.2.1': optional: true - '@next/swc-win32-x64-msvc@15.2.3': - optional: true - '@nodelib/fs.scandir@2.1.5': dependencies: '@nodelib/fs.stat': 2.0.5 @@ -16808,6 +16623,8 @@ snapshots: '@types/resolve@1.20.2': {} + '@types/retry@0.12.2': {} + '@types/statuses@2.0.5': {} '@types/tough-cookie@4.0.5': {} @@ -16833,10 +16650,10 @@ snapshots: '@types/node': 22.9.0 optional: true - '@typescript-eslint/eslint-plugin@8.24.0(@typescript-eslint/parser@8.24.0(eslint@9.16.0(jiti@2.4.2))(typescript@5.7.3))(eslint@9.16.0(jiti@2.4.2))(typescript@5.7.3)': + '@typescript-eslint/eslint-plugin@8.24.0(@typescript-eslint/parser@8.24.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3))(eslint@9.16.0(jiti@2.4.2))(typescript@5.7.3)': dependencies: '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 8.24.0(eslint@9.16.0(jiti@2.4.2))(typescript@5.7.3) + '@typescript-eslint/parser': 8.24.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) '@typescript-eslint/scope-manager': 8.24.0 '@typescript-eslint/type-utils': 8.24.0(eslint@9.16.0(jiti@2.4.2))(typescript@5.7.3) '@typescript-eslint/utils': 8.24.0(eslint@9.16.0(jiti@2.4.2))(typescript@5.7.3) @@ -18754,12 +18571,12 @@ snapshots: dependencies: '@next/eslint-plugin-next': 15.1.0 '@rushstack/eslint-patch': 1.10.5 - '@typescript-eslint/eslint-plugin': 8.24.0(@typescript-eslint/parser@8.24.0(eslint@9.16.0(jiti@2.4.2))(typescript@5.7.3))(eslint@9.16.0(jiti@2.4.2))(typescript@5.7.3) + '@typescript-eslint/eslint-plugin': 8.24.0(@typescript-eslint/parser@8.24.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3))(eslint@9.16.0(jiti@2.4.2))(typescript@5.7.3) '@typescript-eslint/parser': 8.24.0(eslint@9.16.0(jiti@2.4.2))(typescript@5.7.3) eslint: 9.16.0(jiti@2.4.2) eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.7.0(eslint-plugin-import@2.31.0)(eslint@9.16.0(jiti@2.4.2)) - eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.24.0(eslint@9.16.0(jiti@2.4.2))(typescript@5.7.3))(eslint-import-resolver-typescript@3.7.0)(eslint@9.16.0(jiti@2.4.2)) + eslint-import-resolver-typescript: 3.7.0(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.24.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3))(eslint@9.22.0(jiti@2.4.2)))(eslint@9.16.0(jiti@2.4.2)) + eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.24.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3))(eslint-import-resolver-typescript@3.7.0(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.24.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3))(eslint@9.22.0(jiti@2.4.2)))(eslint@9.16.0(jiti@2.4.2)))(eslint@9.16.0(jiti@2.4.2)) eslint-plugin-jsx-a11y: 6.10.2(eslint@9.16.0(jiti@2.4.2)) eslint-plugin-react: 7.37.2(eslint@9.16.0(jiti@2.4.2)) eslint-plugin-react-hooks: 5.1.0(eslint@9.16.0(jiti@2.4.2)) @@ -18779,27 +18596,7 @@ snapshots: eslint: 9.22.0(jiti@2.4.2) eslint-import-resolver-node: 0.3.9 eslint-import-resolver-typescript: 3.7.0(eslint-plugin-import@2.31.0)(eslint@9.22.0(jiti@2.4.2)) - eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.24.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3))(eslint-import-resolver-typescript@3.7.0)(eslint@9.22.0(jiti@2.4.2)) - eslint-plugin-jsx-a11y: 6.10.2(eslint@9.22.0(jiti@2.4.2)) - eslint-plugin-react: 7.37.2(eslint@9.22.0(jiti@2.4.2)) - eslint-plugin-react-hooks: 5.1.0(eslint@9.22.0(jiti@2.4.2)) - optionalDependencies: - typescript: 5.7.3 - transitivePeerDependencies: - - eslint-import-resolver-webpack - - eslint-plugin-import-x - - supports-color - - eslint-config-next@15.2.3(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3): - dependencies: - '@next/eslint-plugin-next': 15.2.3 - '@rushstack/eslint-patch': 1.10.5 - '@typescript-eslint/eslint-plugin': 8.24.0(@typescript-eslint/parser@8.24.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3))(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) - '@typescript-eslint/parser': 8.24.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) - eslint: 9.22.0(jiti@2.4.2) - eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.7.0(eslint-plugin-import@2.31.0)(eslint@9.22.0(jiti@2.4.2)) - eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.24.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3))(eslint-import-resolver-typescript@3.7.0)(eslint@9.22.0(jiti@2.4.2)) + eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.24.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3))(eslint@9.22.0(jiti@2.4.2)) eslint-plugin-jsx-a11y: 6.10.2(eslint@9.22.0(jiti@2.4.2)) eslint-plugin-react: 7.37.2(eslint@9.22.0(jiti@2.4.2)) eslint-plugin-react-hooks: 5.1.0(eslint@9.22.0(jiti@2.4.2)) @@ -18828,7 +18625,7 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-import-resolver-typescript@3.7.0(eslint-plugin-import@2.31.0)(eslint@9.16.0(jiti@2.4.2)): + eslint-import-resolver-typescript@3.7.0(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.24.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3))(eslint@9.22.0(jiti@2.4.2)))(eslint@9.16.0(jiti@2.4.2)): dependencies: '@nolyfill/is-core-module': 1.0.39 debug: 4.4.0 @@ -18840,7 +18637,7 @@ snapshots: is-glob: 4.0.3 stable-hash: 0.0.4 optionalDependencies: - eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.24.0(eslint@9.16.0(jiti@2.4.2))(typescript@5.7.3))(eslint-import-resolver-typescript@3.7.0)(eslint@9.16.0(jiti@2.4.2)) + eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.24.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3))(eslint@9.22.0(jiti@2.4.2)) transitivePeerDependencies: - supports-color @@ -18856,18 +18653,18 @@ snapshots: is-glob: 4.0.3 stable-hash: 0.0.4 optionalDependencies: - eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.24.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3))(eslint-import-resolver-typescript@3.7.0)(eslint@9.22.0(jiti@2.4.2)) + eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.24.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3))(eslint@9.22.0(jiti@2.4.2)) transitivePeerDependencies: - supports-color - eslint-module-utils@2.12.0(@typescript-eslint/parser@8.24.0(eslint@9.16.0(jiti@2.4.2))(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.7.0)(eslint@9.16.0(jiti@2.4.2)): + eslint-module-utils@2.12.0(@typescript-eslint/parser@8.24.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.7.0(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.24.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3))(eslint@9.22.0(jiti@2.4.2)))(eslint@9.16.0(jiti@2.4.2)))(eslint@9.16.0(jiti@2.4.2)): dependencies: debug: 3.2.7 optionalDependencies: - '@typescript-eslint/parser': 8.24.0(eslint@9.16.0(jiti@2.4.2))(typescript@5.7.3) + '@typescript-eslint/parser': 8.24.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) eslint: 9.16.0(jiti@2.4.2) eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.7.0(eslint-plugin-import@2.31.0)(eslint@9.16.0(jiti@2.4.2)) + eslint-import-resolver-typescript: 3.7.0(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.24.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3))(eslint@9.22.0(jiti@2.4.2)))(eslint@9.16.0(jiti@2.4.2)) transitivePeerDependencies: - supports-color @@ -18882,7 +18679,7 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.24.0(eslint@9.16.0(jiti@2.4.2))(typescript@5.7.3))(eslint-import-resolver-typescript@3.7.0)(eslint@9.16.0(jiti@2.4.2)): + eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.24.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3))(eslint-import-resolver-typescript@3.7.0(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.24.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3))(eslint@9.22.0(jiti@2.4.2)))(eslint@9.16.0(jiti@2.4.2)))(eslint@9.16.0(jiti@2.4.2)): dependencies: '@rtsao/scc': 1.1.0 array-includes: 3.1.8 @@ -18893,7 +18690,7 @@ snapshots: doctrine: 2.1.0 eslint: 9.16.0(jiti@2.4.2) eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.24.0(eslint@9.16.0(jiti@2.4.2))(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.7.0)(eslint@9.16.0(jiti@2.4.2)) + eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.24.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.7.0(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.24.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3))(eslint@9.22.0(jiti@2.4.2)))(eslint@9.16.0(jiti@2.4.2)))(eslint@9.16.0(jiti@2.4.2)) hasown: 2.0.2 is-core-module: 2.16.1 is-glob: 4.0.3 @@ -18905,13 +18702,13 @@ snapshots: string.prototype.trimend: 1.0.9 tsconfig-paths: 3.15.0 optionalDependencies: - '@typescript-eslint/parser': 8.24.0(eslint@9.16.0(jiti@2.4.2))(typescript@5.7.3) + '@typescript-eslint/parser': 8.24.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack - supports-color - eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.24.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3))(eslint-import-resolver-typescript@3.7.0)(eslint@9.22.0(jiti@2.4.2)): + eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.24.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3))(eslint@9.22.0(jiti@2.4.2)): dependencies: '@rtsao/scc': 1.1.0 array-includes: 3.1.8 @@ -20527,6 +20324,8 @@ snapshots: is-module@1.0.0: {} + is-network-error@1.1.0: {} + is-node-process@1.2.0: {} is-number-object@1.1.1: @@ -22255,32 +22054,6 @@ snapshots: - '@babel/core' - babel-plugin-macros - next@15.2.3(@opentelemetry/api@1.9.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0): - dependencies: - '@next/env': 15.2.3 - '@swc/counter': 0.1.3 - '@swc/helpers': 0.5.15 - busboy: 1.6.0 - caniuse-lite: 1.0.30001701 - postcss: 8.4.31 - react: 19.0.0 - react-dom: 19.0.0(react@19.0.0) - styled-jsx: 5.1.6(react@19.0.0) - optionalDependencies: - '@next/swc-darwin-arm64': 15.2.3 - '@next/swc-darwin-x64': 15.2.3 - '@next/swc-linux-arm64-gnu': 15.2.3 - '@next/swc-linux-arm64-musl': 15.2.3 - '@next/swc-linux-x64-gnu': 15.2.3 - '@next/swc-linux-x64-musl': 15.2.3 - '@next/swc-win32-arm64-msvc': 15.2.3 - '@next/swc-win32-x64-msvc': 15.2.3 - '@opentelemetry/api': 1.9.0 - sharp: 0.33.5 - transitivePeerDependencies: - - '@babel/core' - - babel-plugin-macros - nice-grpc-client-middleware-retry@3.1.9: dependencies: abort-controller-x: 0.4.3 @@ -22645,6 +22418,12 @@ snapshots: p-map@2.1.0: {} + p-retry@6.2.1: + dependencies: + '@types/retry': 0.12.2 + is-network-error: 1.1.0 + retry: 0.13.1 + p-try@2.2.0: {} pac-proxy-agent@7.1.0: @@ -23643,6 +23422,8 @@ snapshots: - encoding - supports-color + retry@0.13.1: {} + reusify@1.0.4: {} rfdc@1.4.1: {} @@ -25619,4 +25400,4 @@ snapshots: zod@3.24.2: {} - zwitch@2.0.4: {} + zwitch@2.0.4: {} \ No newline at end of file