diff --git a/.tmuxinator.yml b/.tmuxinator.yml index 860eeb7aa..d859f1e83 100644 --- a/.tmuxinator.yml +++ b/.tmuxinator.yml @@ -1,6 +1,7 @@ name: latitude-llm windows: - - web: cd apps/web - - apps: pnpm dev --filter='./apps/*' --filter='./packages/sdks/typescript' --filter='./packages/compiler' + - web: cd . + - apps: pnpm dev --filter='./apps/*' + - packages: pnpm dev --filter='./packages/*' - docker: docker compose up --menu=false - studio: cd packages/core && pnpm db:studio diff --git a/apps/gateway/src/routes/api/v2/otlp/traces/handlers/otlp.test.ts b/apps/gateway/src/routes/api/v2/otlp/traces/handlers/otlp.test.ts new file mode 100644 index 000000000..4010b4faf --- /dev/null +++ b/apps/gateway/src/routes/api/v2/otlp/traces/handlers/otlp.test.ts @@ -0,0 +1,300 @@ +import { Project, Workspace } from '@latitude-data/core/browser' +import { unsafelyGetFirstApiKeyByWorkspaceId } from '@latitude-data/core/data-access' +import { createProject } from '@latitude-data/core/factories' +import app from '$/routes/app' +import { beforeEach, describe, expect, it, vi } from 'vitest' +import { otlpTraceHandler } from './otlp' +import { setupJobs } from '@latitude-data/core/jobs' + +// Mock the jobs setup +vi.mock('@latitude-data/core/jobs', () => ({ + setupJobs: vi.fn(), +})) + +describe('POST /api/v2/otlp/v1/traces', () => { + let workspace: Workspace + let project: Project + let route: string + let headers: Record + + beforeEach(async () => { + const setup = await createProject() + workspace = setup.workspace + project = setup.project + + const apikey = await unsafelyGetFirstApiKeyByWorkspaceId({ + workspaceId: workspace.id, + }).then((r) => r.unwrap()) + + route = '/api/v2/otlp/v1/traces' + headers = { + Authorization: `Bearer ${apikey.token}`, + 'Content-Type': 'application/json', + } + }) + + const createBasicSpan = (traceId: string, spanId: string) => ({ + traceId, + spanId, + name: 'test-span', + kind: 1, + startTimeUnixNano: (Date.now() * 1_000_000).toString(), + endTimeUnixNano: (Date.now() * 1_000_000 + 1_000_000_000).toString(), + attributes: [{ key: 'test.attribute', value: { stringValue: 'test' } }], + status: { code: 1, message: 'Success' }, + }) + + const createOtlpRequest = (spans: any[]) => ({ + projectId: project.id, + resourceSpans: [ + { + resource: { + attributes: [ + { + key: 'service.name', + value: { stringValue: 'test-service' }, + }, + ], + }, + scopeSpans: [{ spans }], + }, + ], + }) + + describe('when authorized', () => { + it('processes single span', async () => { + const span = createBasicSpan( + '12345678901234567890123456789012', + '1234567890123456', + ) + + const response = await app.request(route, { + method: 'POST', + headers, + body: JSON.stringify(createOtlpRequest([span])), + }) + + expect(response.status).toBe(200) + expect(await response.json()).toEqual({ status: 'ok' }) + }) + + it('handles batch of spans', async () => { + const spans = Array.from({ length: 10 }, (_, i) => + createBasicSpan( + '12345678901234567890123456789012', + i.toString(16).padStart(16, '0'), + ), + ) + + const response = await app.request(route, { + method: 'POST', + headers, + body: JSON.stringify(createOtlpRequest(spans)), + }) + + expect(response.status).toBe(200) + expect(await response.json()).toEqual({ status: 'ok' }) + }) + + it('processes multiple traces', async () => { + const spans = Array.from({ length: 3 }, (_, i) => + createBasicSpan( + `${'0'.repeat(29)}${(i + 1).toString().padStart(3, '0')}`, + i.toString(16).padStart(16, '0'), + ), + ) + + const response = await app.request(route, { + method: 'POST', + headers, + body: JSON.stringify(createOtlpRequest(spans)), + }) + + expect(response.status).toBe(200) + expect(await response.json()).toEqual({ status: 'ok' }) + }) + }) + + describe('when unauthorized', () => { + it('returns 401 without auth token', async () => { + const response = await app.request(route, { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ resourceSpans: [] }), + }) + + expect(response.status).toBe(401) + }) + }) +}) + +describe('otlpTraceHandler', () => { + const mockQueue = { + jobs: { + enqueueProcessOtlpTracesJob: vi.fn(), + }, + } + + beforeEach(() => { + vi.clearAllMocks() + ;(setupJobs as any).mockResolvedValue({ + defaultQueue: mockQueue, + }) + }) + + it('should process and enqueue spans in batches', async () => { + // Create test data with multiple spans + const testData = { + resourceSpans: [ + { + resource: { + attributes: [ + { + key: 'service.name', + value: { stringValue: 'test-service' }, + }, + ], + }, + scopeSpans: [ + { + spans: Array.from({ length: 75 }, (_, i) => ({ + traceId: `trace-${i}`, + spanId: `span-${i}`, + name: `span-${i}`, + kind: 1, + startTimeUnixNano: '1234567890', + })), + }, + ], + }, + ], + } + + const mockContext = { + req: { + valid: () => testData, + }, + get: () => ({ id: 'test-workspace' }), + json: vi.fn(), + } + + await otlpTraceHandler(mockContext as any) + + // With BATCH_SIZE = 50, we expect 2 batches (50 + 25 spans) + expect(mockQueue.jobs.enqueueProcessOtlpTracesJob).toHaveBeenCalledTimes(2) + + // Check first batch + expect(mockQueue.jobs.enqueueProcessOtlpTracesJob).toHaveBeenCalledWith({ + spans: expect.arrayContaining([ + expect.objectContaining({ + span: expect.objectContaining({ spanId: 'span-0' }), + resourceAttributes: expect.arrayContaining([ + expect.objectContaining({ + key: 'service.name', + value: { stringValue: 'test-service' }, + }), + ]), + }), + ]), + workspace: { id: 'test-workspace' }, + }) + + // Verify response + expect(mockContext.json).toHaveBeenCalledWith({ status: 'ok' }) + }) + + it('should handle empty spans array', async () => { + const testData = { + resourceSpans: [ + { + resource: { + attributes: [], + }, + scopeSpans: [ + { + spans: [], + }, + ], + }, + ], + } + + const mockContext = { + req: { + valid: () => testData, + }, + get: () => ({ id: 'test-workspace' }), + json: vi.fn(), + } + + await otlpTraceHandler(mockContext as any) + + expect(mockQueue.jobs.enqueueProcessOtlpTracesJob).not.toHaveBeenCalled() + expect(mockContext.json).toHaveBeenCalledWith({ status: 'ok' }) + }) + + it('should preserve resource attributes for each span', async () => { + const testData = { + resourceSpans: [ + { + resource: { + attributes: [ + { + key: 'service.name', + value: { stringValue: 'test-service' }, + }, + { + key: 'deployment.environment', + value: { stringValue: 'production' }, + }, + ], + }, + scopeSpans: [ + { + spans: [ + { + traceId: 'trace-1', + spanId: 'span-1', + name: 'test-span', + kind: 1, + startTimeUnixNano: '1234567890', + }, + ], + }, + ], + }, + ], + } + + const mockContext = { + req: { + valid: () => testData, + }, + get: () => ({ id: 'test-workspace' }), + json: vi.fn(), + } + + await otlpTraceHandler(mockContext as any) + + expect(mockQueue.jobs.enqueueProcessOtlpTracesJob).toHaveBeenCalledWith({ + spans: [ + { + span: expect.objectContaining({ + spanId: 'span-1', + }), + resourceAttributes: expect.arrayContaining([ + expect.objectContaining({ + key: 'service.name', + value: { stringValue: 'test-service' }, + }), + expect.objectContaining({ + key: 'deployment.environment', + value: { stringValue: 'production' }, + }), + ]), + }, + ], + workspace: { id: 'test-workspace' }, + }) + }) +}) diff --git a/apps/gateway/src/routes/api/v2/otlp/traces/handlers/otlp.ts b/apps/gateway/src/routes/api/v2/otlp/traces/handlers/otlp.ts new file mode 100644 index 000000000..8c8cd4c0e --- /dev/null +++ b/apps/gateway/src/routes/api/v2/otlp/traces/handlers/otlp.ts @@ -0,0 +1,136 @@ +import { chunk } from 'lodash-es' + +import { zValidator } from '@hono/zod-validator' +import { setupJobs } from '@latitude-data/core/jobs' +import { Factory } from 'hono/factory' +import { z } from 'zod' + +const factory = new Factory() + +// OTLP schema based on OpenTelemetry specification +const otlpTraceSchema = z.object({ + resourceSpans: z.array( + z.object({ + resource: z.object({ + attributes: z.array( + z.object({ + key: z.string(), + value: z.object({ + stringValue: z.string().optional(), + intValue: z.number().optional(), + boolValue: z.boolean().optional(), + }), + }), + ), + }), + scopeSpans: z.array( + z.object({ + spans: z.array( + z.object({ + traceId: z.string(), + spanId: z.string(), + parentSpanId: z.string().optional(), + name: z.string(), + kind: z.number(), // SpanKind enum in OTLP + startTimeUnixNano: z.string(), + endTimeUnixNano: z.string().optional(), + attributes: z + .array( + z.object({ + key: z.string(), + value: z.object({ + stringValue: z.string().optional(), + intValue: z.number().optional(), + boolValue: z.boolean().optional(), + }), + }), + ) + .optional(), + status: z + .object({ + code: z.number(), + message: z.string().optional(), + }) + .optional(), + events: z + .array( + z.object({ + timeUnixNano: z.string(), + name: z.string(), + attributes: z + .array( + z.object({ + key: z.string(), + value: z.object({ + stringValue: z.string().optional(), + intValue: z.number().optional(), + boolValue: z.boolean().optional(), + }), + }), + ) + .optional(), + }), + ) + .optional(), + links: z + .array( + z.object({ + traceId: z.string(), + spanId: z.string(), + attributes: z + .array( + z.object({ + key: z.string(), + value: z.object({ + stringValue: z.string().optional(), + intValue: z.number().optional(), + boolValue: z.boolean().optional(), + }), + }), + ) + .optional(), + }), + ) + .optional(), + }), + ), + }), + ), + }), + ), +}) + +const BATCH_SIZE = 50 // Adjust based on your needs + +export const otlpTraceHandler = factory.createHandlers( + zValidator('json', otlpTraceSchema), + async (c) => { + const body = c.req.valid('json') + const workspace = c.get('workspace') + + // Flatten the spans array and include resource attributes + const allSpans = body.resourceSpans.flatMap((resourceSpan) => + resourceSpan.scopeSpans.flatMap((scopeSpan) => + scopeSpan.spans.map((span) => ({ + span, + resourceAttributes: resourceSpan.resource.attributes, + })), + ), + ) + + // Process spans in batches + const batches = chunk(allSpans, BATCH_SIZE) + const queues = await setupJobs() + + await Promise.all( + batches.map((batch) => + queues.defaultQueue.jobs.enqueueProcessOtlpTracesJob({ + spans: batch, + workspace, + }), + ), + ) + + return c.json({ status: 'ok' }) + }, +) diff --git a/apps/gateway/src/routes/api/v2/otlp/traces/index.ts b/apps/gateway/src/routes/api/v2/otlp/traces/index.ts new file mode 100644 index 000000000..abd5c7003 --- /dev/null +++ b/apps/gateway/src/routes/api/v2/otlp/traces/index.ts @@ -0,0 +1,9 @@ +import { Hono } from 'hono' + +import { otlpTraceHandler } from './handlers/otlp' + +const router = new Hono() + +router.post('/v1/traces', ...otlpTraceHandler) + +export { router as otlpTracesRouter } diff --git a/apps/gateway/src/routes/app.ts b/apps/gateway/src/routes/app.ts index f42db62d5..a960a7f3e 100644 --- a/apps/gateway/src/routes/app.ts +++ b/apps/gateway/src/routes/app.ts @@ -7,6 +7,7 @@ import { logger } from 'hono/logger' import { chatsRouter as conversationsRouterV1 } from './api/v1/conversations/[conversationUuid]' import { documentsRouter as documentsRouterV1 } from './api/v1/projects/[projectId]/versions/[versionUuid]/documents' import { conversationsRouter as conversationsRouterV2 } from './api/v2/conversations/[conversationUuid]' +import { otlpTracesRouter } from './api/v2/otlp/traces' import { documentsRouter as documentsRouterV2 } from './api/v2/projects/[projectId]/versions/[versionUuid]/documents' const app = new Hono() @@ -37,6 +38,7 @@ app.route( documentsRouterV2, ) app.route('/api/v2/conversations', conversationsRouterV2) +app.route('/api/v2/otlp', otlpTracesRouter) app.onError(errorHandlerMiddleware) diff --git a/apps/web/next.config.mjs b/apps/web/next.config.mjs index 71e1eec9e..2e664a3be 100644 --- a/apps/web/next.config.mjs +++ b/apps/web/next.config.mjs @@ -12,10 +12,13 @@ const nextConfig = { output: 'standalone', transpilePackages: INTERNAL_PACKAGES, serverExternalPackages: [ + '@latitude-data/sdk', + '@latitude-data/promptl', + '@latitude-data/compiler', + '@sentry/nextjs', 'bullmq', 'jose', 'nodemailer-mailgun-transport', - '@sentry/nextjs', '@napi-rs/canvas', 'pdfjs-dist', ], diff --git a/apps/web/src/actions/documents/createFromTrace.ts b/apps/web/src/actions/documents/createFromTrace.ts new file mode 100644 index 000000000..fa3190ff0 --- /dev/null +++ b/apps/web/src/actions/documents/createFromTrace.ts @@ -0,0 +1,115 @@ +'use server' + +import { ChainStepObjectResponse } from '@latitude-data/core/browser' +import { BadRequestError, NotFoundError } from '@latitude-data/core/lib/errors' +import { + CommitsRepository, + ProviderApiKeysRepository, +} from '@latitude-data/core/repositories' +import { createNewDocument } from '@latitude-data/core/services/documents/create' +import { env } from '@latitude-data/env' +import { z } from 'zod' + +import { authProcedure } from '../procedures' +import { captureException, captureMessage } from '$/helpers/captureException' +import { createSdk } from '$/app/(private)/_lib/createSdk' +import SpanRepository from '@latitude-data/core/repositories/spanRepository' +import { unsafelyFindProject } from '@latitude-data/core/data-access' + +export const createDocumentVersionFromTraceAction = authProcedure + .createServerAction() + .input( + z.object({ + projectId: z.coerce.number(), + commitUuid: z.string(), + spanId: z.string(), + }), + { type: 'json' }, + ) + .handler(async ({ input, ctx }) => { + const { workspace } = ctx + const { commitUuid, projectId, spanId } = input + const commitsRepo = new CommitsRepository(workspace.id) + const commit = await commitsRepo + .getCommitByUuid({ projectId, uuid: commitUuid }) + .then((r) => r.unwrap()) + + if (commit.mergedAt) { + throw new BadRequestError( + 'This project version has already been published so we cannot create new prompts in it. Please create a new draft version and try again.', + ) + } + + const project = await unsafelyFindProject(projectId) + if (!project) { + throw new BadRequestError( + 'Cannot find a project associated with this commit. Please contact support.', + ) + } + + const repo = new SpanRepository(workspace.id) + const span = await repo.findBySpanId(spanId) + if (!span) throw new NotFoundError(`Span with id ${spanId} not found`) + + if (!env.COPILOT_PROJECT_ID) { + throw new BadRequestError('DATASET_GENERATOR_PROJECT_ID is not set') + } + if (!env.COPILOT_WORKSPACE_API_KEY) { + throw new BadRequestError('DATASET_GENERATOR_WORKSPACE_APIKEY is not set') + } + + const providersScope = new ProviderApiKeysRepository(workspace.id) + const providerApiKeys = await providersScope.findAll() + + const sdk = await createSdk({ + workspace, + apiKey: env.COPILOT_WORKSPACE_API_KEY, + projectId: env.COPILOT_PROJECT_ID, + }).then((r) => r.unwrap()) + + const badRequestError = new BadRequestError( + 'The LLM agent did not succeed at creating a valid prompt from the provided trace', + ) + + if (!span.input || !span.output) throw badRequestError + + const parameters = { + input: span.input, + output: span.output, + functions: span.tools || [], + model: span.model, + modelParameters: span.modelParameters ?? {}, + providers: providerApiKeys.unwrap(), + } + const result = await sdk.prompts.run('prompt-from-trace', { + parameters, + }) + + if (!result) throw badRequestError + + const response = result.response as ChainStepObjectResponse + if (!response.object.success) { + throw new BadRequestError( + response.object.noSuccessReason || + 'The LLM agent did not succeed at creating a valid prompt from the provided trace', + ) + } + + const fresult = await createNewDocument({ + workspace, + commit, + path: response.object.name, + content: response.object.prompt, + }) + + if (fresult.error) { + captureMessage( + `Failed to create document from trace. This was the generated content: ${response.object.prompt}`, + ) + captureException(fresult.error) + + throw badRequestError + } + + return fresult.value + }) diff --git a/apps/web/src/app/(private)/_lib/constants.ts b/apps/web/src/app/(private)/_lib/constants.ts index 75cc6eb93..918df8e84 100644 --- a/apps/web/src/app/(private)/_lib/constants.ts +++ b/apps/web/src/app/(private)/_lib/constants.ts @@ -3,7 +3,7 @@ import { LATITUDE_HELP_URL, } from '@latitude-data/core/browser' import { envClient } from '$/envClient' -import { DocumentRoutes, ROUTES } from '$/services/routes' +import { ROUTES } from '$/services/routes' export const NAV_LINKS = [ { label: 'Docs', href: LATITUDE_DOCS_URL }, @@ -11,10 +11,11 @@ export const NAV_LINKS = [ ] export const MAIN_NAV_LINKS = [ - { label: 'Projects', value: ROUTES.dashboard.root as DocumentRoutes }, - { label: 'Evaluations', value: ROUTES.evaluations.root as DocumentRoutes }, - { label: 'Datasets', value: ROUTES.datasets.root as DocumentRoutes }, - { label: 'Settings', value: ROUTES.settings.root as DocumentRoutes }, + { label: 'Projects', value: ROUTES.dashboard.root as string }, + { label: 'Evaluations', value: ROUTES.evaluations.root as string }, + { label: 'Datasets', value: ROUTES.datasets.root as string }, + { label: 'Traces', value: ROUTES.traces.root as string }, + { label: 'Settings', value: ROUTES.settings.root as string }, ] export const APP_DOMAIN = envClient.NEXT_PUBLIC_APP_DOMAIN diff --git a/apps/web/src/app/(private)/_lib/createSdk.ts b/apps/web/src/app/(private)/_lib/createSdk.ts index 9f2e2db74..6f91313ea 100644 --- a/apps/web/src/app/(private)/_lib/createSdk.ts +++ b/apps/web/src/app/(private)/_lib/createSdk.ts @@ -44,6 +44,16 @@ export async function createSdk({ ssl: env.GATEWAY_SSL, } return Result.ok( - new Latitude(apiKey, compactObject({ gateway, projectId, __internal })), + new Latitude( + apiKey, + compactObject({ + gateway, + projectId, + __internal: { + ...__internal, + gateway, + }, + }), + ), ) } diff --git a/apps/web/src/app/(private)/evaluations/(evaluation)/[evaluationUuid]/editor/_components/Playground/Chat/index.tsx b/apps/web/src/app/(private)/evaluations/(evaluation)/[evaluationUuid]/editor/_components/Playground/Chat/index.tsx index 828c694a3..b36c0e75d 100644 --- a/apps/web/src/app/(private)/evaluations/(evaluation)/[evaluationUuid]/editor/_components/Playground/Chat/index.tsx +++ b/apps/web/src/app/(private)/evaluations/(evaluation)/[evaluationUuid]/editor/_components/Playground/Chat/index.tsx @@ -18,14 +18,14 @@ import { useAutoScroll, } from '@latitude-data/web-ui' import { runPromptAction } from '$/actions/prompts/run' +import useEvaluationPrompt from '$/stores/evaluationPrompt' +import { LanguageModelUsage } from 'ai' +import { readStreamableValue } from 'ai/rsc' import { StreamMessage, Timer, TokenUsage, -} from '$/app/(private)/projects/[projectId]/versions/[commitUuid]/documents/[documentUuid]/_components/DocumentEditor/Editor/Playground/Chat' -import useEvaluationPrompt from '$/stores/evaluationPrompt' -import { LanguageModelUsage } from 'ai' -import { readStreamableValue } from 'ai/rsc' +} from '$/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/documents/[documentUuid]/_components/DocumentEditor/Editor/Playground/Chat' export default function Chat({ clearChat, diff --git a/apps/web/src/app/(private)/projects/[projectId]/utils.ts b/apps/web/src/app/(private)/projects/[projectId]/utils.ts index 63cf11a81..b892f516d 100644 --- a/apps/web/src/app/(private)/projects/[projectId]/utils.ts +++ b/apps/web/src/app/(private)/projects/[projectId]/utils.ts @@ -24,9 +24,9 @@ export function getRedirectUrl({ }) if (!lastSeenDocumentUuid) { - return url.root + return url.overview.root } else { - return url.detail({ uuid: lastSeenDocumentUuid }).root + return url.documents.detail({ uuid: lastSeenDocumentUuid }).root } } @@ -47,7 +47,7 @@ function getCommitUrl({ ) { return PROJECT_ROUTE({ id: projectId }).commits.detail({ uuid: HEAD_COMMIT, - }).documents + }) } if (lastSeenCommitUuid) { @@ -55,20 +55,20 @@ function getCommitUrl({ if (commit) { return PROJECT_ROUTE({ id: projectId }).commits.detail({ uuid: commit.uuid, - }).documents + }) } } if (headCommit) { return PROJECT_ROUTE({ id: projectId }).commits.detail({ uuid: HEAD_COMMIT, - }).documents + }) } if (firstCommit) { return PROJECT_ROUTE({ id: projectId }).commits.detail({ uuid: firstCommit.uuid, - }).documents + }) } throw new NotFoundError('No commits found') diff --git a/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/_components/BreadcrumbInput/index.tsx b/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/_components/BreadcrumbInput/index.tsx similarity index 100% rename from apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/_components/BreadcrumbInput/index.tsx rename to apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/_components/BreadcrumbInput/index.tsx diff --git a/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/_components/DocumentsLayout/index.tsx b/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/_components/DocumentsLayout/index.tsx similarity index 81% rename from apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/_components/DocumentsLayout/index.tsx rename to apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/_components/DocumentsLayout/index.tsx index 5e3c9f085..fe41f104f 100644 --- a/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/_components/DocumentsLayout/index.tsx +++ b/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/_components/DocumentsLayout/index.tsx @@ -1,6 +1,6 @@ import { ReactNode } from 'react' -import type { DocumentVersion } from '@latitude-data/core/browser' +import { DocumentVersion } from '@latitude-data/core/browser' import { NotFoundError } from '@latitude-data/core/lib/errors' import { DocumentDetailWrapper } from '@latitude-data/web-ui' import { @@ -16,7 +16,6 @@ import { getCurrentUser } from '$/services/auth/getCurrentUser' import { ROUTES } from '$/services/routes' import { redirect } from 'next/navigation' -import { LastSeenCommitCookie } from '../LastSeenCommitCookie' import Sidebar from '../Sidebar' export default async function DocumentsLayout({ @@ -62,14 +61,9 @@ export default async function DocumentsLayout({ sidebarWidth={sidebarWidth} minSidebarWidth={MIN_SIDEBAR_WIDTH_PX} sidebar={ - + } > - {children} ) diff --git a/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/_components/LastSeenCommitCookie.tsx b/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/_components/LastSeenCommitCookie.tsx similarity index 100% rename from apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/_components/LastSeenCommitCookie.tsx rename to apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/_components/LastSeenCommitCookie.tsx diff --git a/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/_components/RunErrorMessage/index.tsx b/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/_components/RunErrorMessage/index.tsx similarity index 100% rename from apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/_components/RunErrorMessage/index.tsx rename to apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/_components/RunErrorMessage/index.tsx diff --git a/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/_components/Sidebar/ClientFilesTree/index.tsx b/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/_components/Sidebar/ClientFilesTree/index.tsx similarity index 100% rename from apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/_components/Sidebar/ClientFilesTree/index.tsx rename to apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/_components/Sidebar/ClientFilesTree/index.tsx diff --git a/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/_components/Sidebar/CommitSelector/ArchivedCommitsList.tsx b/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/_components/Sidebar/CommitSelector/ArchivedCommitsList.tsx similarity index 100% rename from apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/_components/Sidebar/CommitSelector/ArchivedCommitsList.tsx rename to apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/_components/Sidebar/CommitSelector/ArchivedCommitsList.tsx diff --git a/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/_components/Sidebar/CommitSelector/CommitItem/Skeleton.tsx b/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/_components/Sidebar/CommitSelector/CommitItem/Skeleton.tsx similarity index 100% rename from apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/_components/Sidebar/CommitSelector/CommitItem/Skeleton.tsx rename to apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/_components/Sidebar/CommitSelector/CommitItem/Skeleton.tsx diff --git a/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/_components/Sidebar/CommitSelector/CommitItem/index.tsx b/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/_components/Sidebar/CommitSelector/CommitItem/index.tsx similarity index 100% rename from apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/_components/Sidebar/CommitSelector/CommitItem/index.tsx rename to apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/_components/Sidebar/CommitSelector/CommitItem/index.tsx diff --git a/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/_components/Sidebar/CommitSelector/CommitItemsWrapper.tsx b/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/_components/Sidebar/CommitSelector/CommitItemsWrapper.tsx similarity index 100% rename from apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/_components/Sidebar/CommitSelector/CommitItemsWrapper.tsx rename to apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/_components/Sidebar/CommitSelector/CommitItemsWrapper.tsx diff --git a/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/_components/Sidebar/CommitSelector/CurrentCommitsList.tsx b/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/_components/Sidebar/CommitSelector/CurrentCommitsList.tsx similarity index 100% rename from apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/_components/Sidebar/CommitSelector/CurrentCommitsList.tsx rename to apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/_components/Sidebar/CommitSelector/CurrentCommitsList.tsx diff --git a/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/_components/Sidebar/CommitSelector/DeleteDraftCommitModal/index.tsx b/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/_components/Sidebar/CommitSelector/DeleteDraftCommitModal/index.tsx similarity index 100% rename from apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/_components/Sidebar/CommitSelector/DeleteDraftCommitModal/index.tsx rename to apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/_components/Sidebar/CommitSelector/DeleteDraftCommitModal/index.tsx diff --git a/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/_components/Sidebar/CommitSelector/index.tsx b/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/_components/Sidebar/CommitSelector/index.tsx similarity index 100% rename from apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/_components/Sidebar/CommitSelector/index.tsx rename to apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/_components/Sidebar/CommitSelector/index.tsx diff --git a/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/_components/Sidebar/CreateDraftCommitModal/index.tsx b/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/_components/Sidebar/CreateDraftCommitModal/index.tsx similarity index 100% rename from apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/_components/Sidebar/CreateDraftCommitModal/index.tsx rename to apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/_components/Sidebar/CreateDraftCommitModal/index.tsx diff --git a/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/_components/Sidebar/MergedCommitWarningModal/index.tsx b/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/_components/Sidebar/MergedCommitWarningModal/index.tsx similarity index 100% rename from apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/_components/Sidebar/MergedCommitWarningModal/index.tsx rename to apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/_components/Sidebar/MergedCommitWarningModal/index.tsx diff --git a/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/_components/Sidebar/PublishDraftCommitModal/index.tsx b/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/_components/Sidebar/PublishDraftCommitModal/index.tsx similarity index 100% rename from apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/_components/Sidebar/PublishDraftCommitModal/index.tsx rename to apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/_components/Sidebar/PublishDraftCommitModal/index.tsx diff --git a/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/_components/Sidebar/index.tsx b/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/_components/Sidebar/index.tsx similarity index 92% rename from apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/_components/Sidebar/index.tsx rename to apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/_components/Sidebar/index.tsx index ce8904f5e..0711b3ff6 100644 --- a/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/_components/Sidebar/index.tsx +++ b/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/_components/Sidebar/index.tsx @@ -16,7 +16,7 @@ import { getCurrentUser } from '$/services/auth/getCurrentUser' import ClientFilesTree from './ClientFilesTree' import CommitSelector from './CommitSelector' -import ProjectSection from './ProjectSection' +import ProjectSidebar from './ProjectSidebar' export default async function Sidebar({ project, @@ -25,7 +25,7 @@ export default async function Sidebar({ }: { project: Project commit: Commit - currentDocument?: DocumentVersion + currentDocument?: DocumentVersion | undefined }) { const { workspace } = await getCurrentUser() const documents = await getDocumentsAtCommitCached({ commit }) @@ -59,7 +59,7 @@ export default async function Sidebar({ } tree={
- + + + + + {label} + + +
+ ) +} diff --git a/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/_components/Sidebar/projectSidebar/index.tsx b/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/_components/Sidebar/projectSidebar/index.tsx new file mode 100644 index 000000000..4e1b2f18d --- /dev/null +++ b/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/_components/Sidebar/projectSidebar/index.tsx @@ -0,0 +1,34 @@ +'use client' + +import { + Text, + useCurrentCommit, + useCurrentProject, +} from '@latitude-data/web-ui' +import { ROUTES } from '$/services/routes' +import { usePathname } from 'next/navigation' +import { SidebarLink } from './SidebarLink' + +export default function ProjectSidebar() { + const { commit } = useCurrentCommit() + const { project } = useCurrentProject() + const pathname = usePathname() + + const overviewPath = ROUTES.projects + .detail({ id: project.id }) + .commits.detail({ uuid: commit.uuid }).overview.root + + return ( +
+
+ Project +
+ +
+ ) +} diff --git a/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/documents/[documentUuid]/_components/DocumentEditor/Editor/Header.tsx b/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/documents/[documentUuid]/_components/DocumentEditor/Editor/Header.tsx similarity index 100% rename from apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/documents/[documentUuid]/_components/DocumentEditor/Editor/Header.tsx rename to apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/documents/[documentUuid]/_components/DocumentEditor/Editor/Header.tsx diff --git a/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/documents/[documentUuid]/_components/DocumentEditor/Editor/Playground/Actions.tsx b/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/documents/[documentUuid]/_components/DocumentEditor/Editor/Playground/Actions.tsx similarity index 100% rename from apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/documents/[documentUuid]/_components/DocumentEditor/Editor/Playground/Actions.tsx rename to apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/documents/[documentUuid]/_components/DocumentEditor/Editor/Playground/Actions.tsx diff --git a/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/documents/[documentUuid]/_components/DocumentEditor/Editor/Playground/Chat.tsx b/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/documents/[documentUuid]/_components/DocumentEditor/Editor/Playground/Chat.tsx similarity index 100% rename from apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/documents/[documentUuid]/_components/DocumentEditor/Editor/Playground/Chat.tsx rename to apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/documents/[documentUuid]/_components/DocumentEditor/Editor/Playground/Chat.tsx diff --git a/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/documents/[documentUuid]/_components/DocumentEditor/Editor/Playground/DocumentParams/DatasetParams/InputsMapper.tsx b/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/documents/[documentUuid]/_components/DocumentEditor/Editor/Playground/DocumentParams/DatasetParams/InputsMapper.tsx similarity index 100% rename from apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/documents/[documentUuid]/_components/DocumentEditor/Editor/Playground/DocumentParams/DatasetParams/InputsMapper.tsx rename to apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/documents/[documentUuid]/_components/DocumentEditor/Editor/Playground/DocumentParams/DatasetParams/InputsMapper.tsx diff --git a/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/documents/[documentUuid]/_components/DocumentEditor/Editor/Playground/DocumentParams/DatasetParams/index.tsx b/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/documents/[documentUuid]/_components/DocumentEditor/Editor/Playground/DocumentParams/DatasetParams/index.tsx similarity index 100% rename from apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/documents/[documentUuid]/_components/DocumentEditor/Editor/Playground/DocumentParams/DatasetParams/index.tsx rename to apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/documents/[documentUuid]/_components/DocumentEditor/Editor/Playground/DocumentParams/DatasetParams/index.tsx diff --git a/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/documents/[documentUuid]/_components/DocumentEditor/Editor/Playground/DocumentParams/DatasetParams/useSelectDataset.ts b/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/documents/[documentUuid]/_components/DocumentEditor/Editor/Playground/DocumentParams/DatasetParams/useSelectDataset.ts similarity index 100% rename from apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/documents/[documentUuid]/_components/DocumentEditor/Editor/Playground/DocumentParams/DatasetParams/useSelectDataset.ts rename to apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/documents/[documentUuid]/_components/DocumentEditor/Editor/Playground/DocumentParams/DatasetParams/useSelectDataset.ts diff --git a/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/documents/[documentUuid]/_components/DocumentEditor/Editor/Playground/DocumentParams/HistoryLogParams/index.tsx b/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/documents/[documentUuid]/_components/DocumentEditor/Editor/Playground/DocumentParams/HistoryLogParams/index.tsx similarity index 100% rename from apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/documents/[documentUuid]/_components/DocumentEditor/Editor/Playground/DocumentParams/HistoryLogParams/index.tsx rename to apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/documents/[documentUuid]/_components/DocumentEditor/Editor/Playground/DocumentParams/HistoryLogParams/index.tsx diff --git a/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/documents/[documentUuid]/_components/DocumentEditor/Editor/Playground/DocumentParams/HistoryLogParams/useLogHistoryParams.ts b/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/documents/[documentUuid]/_components/DocumentEditor/Editor/Playground/DocumentParams/HistoryLogParams/useLogHistoryParams.ts similarity index 100% rename from apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/documents/[documentUuid]/_components/DocumentEditor/Editor/Playground/DocumentParams/HistoryLogParams/useLogHistoryParams.ts rename to apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/documents/[documentUuid]/_components/DocumentEditor/Editor/Playground/DocumentParams/HistoryLogParams/useLogHistoryParams.ts diff --git a/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/documents/[documentUuid]/_components/DocumentEditor/Editor/Playground/DocumentParams/Input/index.tsx b/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/documents/[documentUuid]/_components/DocumentEditor/Editor/Playground/DocumentParams/Input/index.tsx similarity index 100% rename from apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/documents/[documentUuid]/_components/DocumentEditor/Editor/Playground/DocumentParams/Input/index.tsx rename to apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/documents/[documentUuid]/_components/DocumentEditor/Editor/Playground/DocumentParams/Input/index.tsx diff --git a/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/documents/[documentUuid]/_components/DocumentEditor/Editor/Playground/DocumentParams/ManualParams/index.tsx b/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/documents/[documentUuid]/_components/DocumentEditor/Editor/Playground/DocumentParams/ManualParams/index.tsx similarity index 100% rename from apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/documents/[documentUuid]/_components/DocumentEditor/Editor/Playground/DocumentParams/ManualParams/index.tsx rename to apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/documents/[documentUuid]/_components/DocumentEditor/Editor/Playground/DocumentParams/ManualParams/index.tsx diff --git a/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/documents/[documentUuid]/_components/DocumentEditor/Editor/Playground/DocumentParams/PaginationNav/index.tsx b/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/documents/[documentUuid]/_components/DocumentEditor/Editor/Playground/DocumentParams/PaginationNav/index.tsx similarity index 100% rename from apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/documents/[documentUuid]/_components/DocumentEditor/Editor/Playground/DocumentParams/PaginationNav/index.tsx rename to apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/documents/[documentUuid]/_components/DocumentEditor/Editor/Playground/DocumentParams/PaginationNav/index.tsx diff --git a/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/documents/[documentUuid]/_components/DocumentEditor/Editor/Playground/DocumentParams/index.tsx b/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/documents/[documentUuid]/_components/DocumentEditor/Editor/Playground/DocumentParams/index.tsx similarity index 100% rename from apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/documents/[documentUuid]/_components/DocumentEditor/Editor/Playground/DocumentParams/index.tsx rename to apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/documents/[documentUuid]/_components/DocumentEditor/Editor/Playground/DocumentParams/index.tsx diff --git a/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/documents/[documentUuid]/_components/DocumentEditor/Editor/Playground/Preview.tsx b/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/documents/[documentUuid]/_components/DocumentEditor/Editor/Playground/Preview.tsx similarity index 100% rename from apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/documents/[documentUuid]/_components/DocumentEditor/Editor/Playground/Preview.tsx rename to apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/documents/[documentUuid]/_components/DocumentEditor/Editor/Playground/Preview.tsx index 06f7dfa44..c554805ef 100644 --- a/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/documents/[documentUuid]/_components/DocumentEditor/Editor/Playground/Preview.tsx +++ b/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/documents/[documentUuid]/_components/DocumentEditor/Editor/Playground/Preview.tsx @@ -9,9 +9,9 @@ import { Chain as LegacyChain, } from '@latitude-data/compiler' import { - AppliedRules, applyProviderRules, LATITUDE_DOCS_URL, + AppliedRules, ProviderRules, } from '@latitude-data/core/browser' import { diff --git a/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/documents/[documentUuid]/_components/DocumentEditor/Editor/Playground/index.tsx b/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/documents/[documentUuid]/_components/DocumentEditor/Editor/Playground/index.tsx similarity index 100% rename from apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/documents/[documentUuid]/_components/DocumentEditor/Editor/Playground/index.tsx rename to apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/documents/[documentUuid]/_components/DocumentEditor/Editor/Playground/index.tsx diff --git a/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/documents/[documentUuid]/_components/DocumentEditor/Editor/RefineModal/index.tsx b/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/documents/[documentUuid]/_components/DocumentEditor/Editor/RefineModal/index.tsx similarity index 100% rename from apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/documents/[documentUuid]/_components/DocumentEditor/Editor/RefineModal/index.tsx rename to apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/documents/[documentUuid]/_components/DocumentEditor/Editor/RefineModal/index.tsx diff --git a/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/documents/[documentUuid]/_components/DocumentEditor/Editor/RefineModal/steps/1_SelectEvaluation/EvaluationsTable.tsx b/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/documents/[documentUuid]/_components/DocumentEditor/Editor/RefineModal/steps/1_SelectEvaluation/EvaluationsTable.tsx similarity index 100% rename from apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/documents/[documentUuid]/_components/DocumentEditor/Editor/RefineModal/steps/1_SelectEvaluation/EvaluationsTable.tsx rename to apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/documents/[documentUuid]/_components/DocumentEditor/Editor/RefineModal/steps/1_SelectEvaluation/EvaluationsTable.tsx diff --git a/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/documents/[documentUuid]/_components/DocumentEditor/Editor/RefineModal/steps/1_SelectEvaluation/index.tsx b/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/documents/[documentUuid]/_components/DocumentEditor/Editor/RefineModal/steps/1_SelectEvaluation/index.tsx similarity index 100% rename from apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/documents/[documentUuid]/_components/DocumentEditor/Editor/RefineModal/steps/1_SelectEvaluation/index.tsx rename to apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/documents/[documentUuid]/_components/DocumentEditor/Editor/RefineModal/steps/1_SelectEvaluation/index.tsx diff --git a/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/documents/[documentUuid]/_components/DocumentEditor/Editor/RefineModal/steps/2_SelectEvaluationResults/SelectableEvaluationResultsTable.tsx b/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/documents/[documentUuid]/_components/DocumentEditor/Editor/RefineModal/steps/2_SelectEvaluationResults/SelectableEvaluationResultsTable.tsx similarity index 100% rename from apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/documents/[documentUuid]/_components/DocumentEditor/Editor/RefineModal/steps/2_SelectEvaluationResults/SelectableEvaluationResultsTable.tsx rename to apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/documents/[documentUuid]/_components/DocumentEditor/Editor/RefineModal/steps/2_SelectEvaluationResults/SelectableEvaluationResultsTable.tsx diff --git a/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/documents/[documentUuid]/_components/DocumentEditor/Editor/RefineModal/steps/2_SelectEvaluationResults/index.tsx b/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/documents/[documentUuid]/_components/DocumentEditor/Editor/RefineModal/steps/2_SelectEvaluationResults/index.tsx similarity index 100% rename from apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/documents/[documentUuid]/_components/DocumentEditor/Editor/RefineModal/steps/2_SelectEvaluationResults/index.tsx rename to apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/documents/[documentUuid]/_components/DocumentEditor/Editor/RefineModal/steps/2_SelectEvaluationResults/index.tsx diff --git a/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/documents/[documentUuid]/_components/DocumentEditor/Editor/RefineModal/steps/3_GenerateSuggestion/index.tsx b/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/documents/[documentUuid]/_components/DocumentEditor/Editor/RefineModal/steps/3_GenerateSuggestion/index.tsx similarity index 100% rename from apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/documents/[documentUuid]/_components/DocumentEditor/Editor/RefineModal/steps/3_GenerateSuggestion/index.tsx rename to apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/documents/[documentUuid]/_components/DocumentEditor/Editor/RefineModal/steps/3_GenerateSuggestion/index.tsx diff --git a/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/documents/[documentUuid]/_components/DocumentEditor/Editor/UpdateToPromptl/index.tsx b/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/documents/[documentUuid]/_components/DocumentEditor/Editor/UpdateToPromptl/index.tsx similarity index 100% rename from apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/documents/[documentUuid]/_components/DocumentEditor/Editor/UpdateToPromptl/index.tsx rename to apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/documents/[documentUuid]/_components/DocumentEditor/Editor/UpdateToPromptl/index.tsx diff --git a/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/documents/[documentUuid]/_components/DocumentEditor/Editor/index.tsx b/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/documents/[documentUuid]/_components/DocumentEditor/Editor/index.tsx similarity index 96% rename from apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/documents/[documentUuid]/_components/DocumentEditor/Editor/index.tsx rename to apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/documents/[documentUuid]/_components/DocumentEditor/Editor/index.tsx index 0eae6ac57..61697fdd9 100644 --- a/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/documents/[documentUuid]/_components/DocumentEditor/Editor/index.tsx +++ b/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/documents/[documentUuid]/_components/DocumentEditor/Editor/index.tsx @@ -18,6 +18,7 @@ import { } from '@latitude-data/core/browser' import { Button, + ClickToCopyUuid, DocumentTextEditor, DocumentTextEditorFallback, SplitPane, @@ -305,15 +306,23 @@ export default function DocumentEditor({
} + freeRunsCount={freeRunsCount} metadata={metadata} - prompt={value} onChangePrompt={onChange} - freeRunsCount={freeRunsCount} - showCopilotSetting + prompt={value} + providers={providers} + leftActions={ + <> + + + } + rightActions={} + title={document.path.split('/').pop() ?? document.path} /> }> ( ref, ) { const [selectedTab, setSelectedTab] = useState('metadata') + + useEffect(() => { + if (tabs.length > 0) { + setSelectedTab(tabs[0]!.value) + } + }, [tabs]) + return (
{trigger} + } + return ( { diff --git a/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/documents/[documentUuid]/evaluations/[evaluationId]/_components/Actions/LiveEvaluationToggle/index.tsx b/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/documents/[documentUuid]/evaluations/[evaluationId]/_components/Actions/LiveEvaluationToggle/index.tsx similarity index 100% rename from apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/documents/[documentUuid]/evaluations/[evaluationId]/_components/Actions/LiveEvaluationToggle/index.tsx rename to apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/documents/[documentUuid]/evaluations/[evaluationId]/_components/Actions/LiveEvaluationToggle/index.tsx diff --git a/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/documents/[documentUuid]/evaluations/[evaluationId]/_components/Actions/index.tsx b/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/documents/[documentUuid]/evaluations/[evaluationId]/_components/Actions/index.tsx similarity index 100% rename from apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/documents/[documentUuid]/evaluations/[evaluationId]/_components/Actions/index.tsx rename to apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/documents/[documentUuid]/evaluations/[evaluationId]/_components/Actions/index.tsx diff --git a/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/documents/[documentUuid]/evaluations/[evaluationId]/_components/DefaulProviderBanner/index.tsx b/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/documents/[documentUuid]/evaluations/[evaluationId]/_components/DefaulProviderBanner/index.tsx similarity index 100% rename from apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/documents/[documentUuid]/evaluations/[evaluationId]/_components/DefaulProviderBanner/index.tsx rename to apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/documents/[documentUuid]/evaluations/[evaluationId]/_components/DefaulProviderBanner/index.tsx diff --git a/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/documents/[documentUuid]/evaluations/[evaluationId]/_components/EvaluationResults/EvaluationBlankSlate.tsx b/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/documents/[documentUuid]/evaluations/[evaluationId]/_components/EvaluationResults/EvaluationBlankSlate.tsx similarity index 100% rename from apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/documents/[documentUuid]/evaluations/[evaluationId]/_components/EvaluationResults/EvaluationBlankSlate.tsx rename to apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/documents/[documentUuid]/evaluations/[evaluationId]/_components/EvaluationResults/EvaluationBlankSlate.tsx diff --git a/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/documents/[documentUuid]/evaluations/[evaluationId]/_components/EvaluationResults/EvaluationResultInfo/Messages.tsx b/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/documents/[documentUuid]/evaluations/[evaluationId]/_components/EvaluationResults/EvaluationResultInfo/Messages.tsx similarity index 100% rename from apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/documents/[documentUuid]/evaluations/[evaluationId]/_components/EvaluationResults/EvaluationResultInfo/Messages.tsx rename to apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/documents/[documentUuid]/evaluations/[evaluationId]/_components/EvaluationResults/EvaluationResultInfo/Messages.tsx diff --git a/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/documents/[documentUuid]/evaluations/[evaluationId]/_components/EvaluationResults/EvaluationResultInfo/Metadata.tsx b/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/documents/[documentUuid]/evaluations/[evaluationId]/_components/EvaluationResults/EvaluationResultInfo/Metadata.tsx similarity index 96% rename from apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/documents/[documentUuid]/evaluations/[evaluationId]/_components/EvaluationResults/EvaluationResultInfo/Metadata.tsx rename to apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/documents/[documentUuid]/evaluations/[evaluationId]/_components/EvaluationResults/EvaluationResultInfo/Metadata.tsx index 9871d5f51..e0fcd3b7f 100644 --- a/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/documents/[documentUuid]/evaluations/[evaluationId]/_components/EvaluationResults/EvaluationResultInfo/Metadata.tsx +++ b/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/documents/[documentUuid]/evaluations/[evaluationId]/_components/EvaluationResults/EvaluationResultInfo/Metadata.tsx @@ -1,6 +1,5 @@ import { useMemo } from 'react' -import { RunErrorMessage } from '$/app/(private)/projects/[projectId]/versions/[commitUuid]/_components/RunErrorMessage' import { formatCostInMillicents } from '$/app/_lib/formatUtils' import useProviderApiKeys from '$/stores/providerApiKeys' import { EvaluationDto, ProviderLogDto } from '@latitude-data/core/browser' @@ -14,6 +13,7 @@ import { MetadataItemTooltip, } from '../../../../../../[documentUuid]/_components/MetadataItem' import { ResultCellContent } from '../EvaluationResultsTable' +import { RunErrorMessage } from '../../../../../../../_components/RunErrorMessage' function ProviderLogItems({ providerLog, diff --git a/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/documents/[documentUuid]/evaluations/[evaluationId]/_components/EvaluationResults/EvaluationResultInfo/index.tsx b/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/documents/[documentUuid]/evaluations/[evaluationId]/_components/EvaluationResults/EvaluationResultInfo/index.tsx similarity index 100% rename from apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/documents/[documentUuid]/evaluations/[evaluationId]/_components/EvaluationResults/EvaluationResultInfo/index.tsx rename to apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/documents/[documentUuid]/evaluations/[evaluationId]/_components/EvaluationResults/EvaluationResultInfo/index.tsx diff --git a/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/documents/[documentUuid]/evaluations/[evaluationId]/_components/EvaluationResults/EvaluationResultsTable.tsx b/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/documents/[documentUuid]/evaluations/[evaluationId]/_components/EvaluationResults/EvaluationResultsTable.tsx similarity index 100% rename from apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/documents/[documentUuid]/evaluations/[evaluationId]/_components/EvaluationResults/EvaluationResultsTable.tsx rename to apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/documents/[documentUuid]/evaluations/[evaluationId]/_components/EvaluationResults/EvaluationResultsTable.tsx diff --git a/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/documents/[documentUuid]/evaluations/[evaluationId]/_components/EvaluationResults/EvaluationStatusBanner/index.tsx b/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/documents/[documentUuid]/evaluations/[evaluationId]/_components/EvaluationResults/EvaluationStatusBanner/index.tsx similarity index 100% rename from apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/documents/[documentUuid]/evaluations/[evaluationId]/_components/EvaluationResults/EvaluationStatusBanner/index.tsx rename to apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/documents/[documentUuid]/evaluations/[evaluationId]/_components/EvaluationResults/EvaluationStatusBanner/index.tsx diff --git a/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/documents/[documentUuid]/evaluations/[evaluationId]/_components/EvaluationResults/index.tsx b/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/documents/[documentUuid]/evaluations/[evaluationId]/_components/EvaluationResults/index.tsx similarity index 100% rename from apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/documents/[documentUuid]/evaluations/[evaluationId]/_components/EvaluationResults/index.tsx rename to apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/documents/[documentUuid]/evaluations/[evaluationId]/_components/EvaluationResults/index.tsx diff --git a/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/documents/[documentUuid]/evaluations/[evaluationId]/_components/ManualEvaluationResults/DocumentLogInfo/BaseEvaluationResult/index.tsx b/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/documents/[documentUuid]/evaluations/[evaluationId]/_components/ManualEvaluationResults/DocumentLogInfo/BaseEvaluationResult/index.tsx similarity index 100% rename from apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/documents/[documentUuid]/evaluations/[evaluationId]/_components/ManualEvaluationResults/DocumentLogInfo/BaseEvaluationResult/index.tsx rename to apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/documents/[documentUuid]/evaluations/[evaluationId]/_components/ManualEvaluationResults/DocumentLogInfo/BaseEvaluationResult/index.tsx diff --git a/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/documents/[documentUuid]/evaluations/[evaluationId]/_components/ManualEvaluationResults/DocumentLogInfo/SubmitEvaluationResultBoolean/index.tsx b/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/documents/[documentUuid]/evaluations/[evaluationId]/_components/ManualEvaluationResults/DocumentLogInfo/SubmitEvaluationResultBoolean/index.tsx similarity index 100% rename from apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/documents/[documentUuid]/evaluations/[evaluationId]/_components/ManualEvaluationResults/DocumentLogInfo/SubmitEvaluationResultBoolean/index.tsx rename to apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/documents/[documentUuid]/evaluations/[evaluationId]/_components/ManualEvaluationResults/DocumentLogInfo/SubmitEvaluationResultBoolean/index.tsx diff --git a/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/documents/[documentUuid]/evaluations/[evaluationId]/_components/ManualEvaluationResults/DocumentLogInfo/SubmitEvaluationResultNumber/index.tsx b/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/documents/[documentUuid]/evaluations/[evaluationId]/_components/ManualEvaluationResults/DocumentLogInfo/SubmitEvaluationResultNumber/index.tsx similarity index 100% rename from apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/documents/[documentUuid]/evaluations/[evaluationId]/_components/ManualEvaluationResults/DocumentLogInfo/SubmitEvaluationResultNumber/index.tsx rename to apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/documents/[documentUuid]/evaluations/[evaluationId]/_components/ManualEvaluationResults/DocumentLogInfo/SubmitEvaluationResultNumber/index.tsx diff --git a/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/documents/[documentUuid]/evaluations/[evaluationId]/_components/ManualEvaluationResults/DocumentLogInfo/SubmitEvaluationResultText/index.tsx b/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/documents/[documentUuid]/evaluations/[evaluationId]/_components/ManualEvaluationResults/DocumentLogInfo/SubmitEvaluationResultText/index.tsx similarity index 100% rename from apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/documents/[documentUuid]/evaluations/[evaluationId]/_components/ManualEvaluationResults/DocumentLogInfo/SubmitEvaluationResultText/index.tsx rename to apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/documents/[documentUuid]/evaluations/[evaluationId]/_components/ManualEvaluationResults/DocumentLogInfo/SubmitEvaluationResultText/index.tsx diff --git a/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/documents/[documentUuid]/evaluations/[evaluationId]/_components/ManualEvaluationResults/DocumentLogInfo/index.tsx b/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/documents/[documentUuid]/evaluations/[evaluationId]/_components/ManualEvaluationResults/DocumentLogInfo/index.tsx similarity index 100% rename from apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/documents/[documentUuid]/evaluations/[evaluationId]/_components/ManualEvaluationResults/DocumentLogInfo/index.tsx rename to apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/documents/[documentUuid]/evaluations/[evaluationId]/_components/ManualEvaluationResults/DocumentLogInfo/index.tsx diff --git a/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/documents/[documentUuid]/evaluations/[evaluationId]/_components/ManualEvaluationResults/DocumentLogsTable/index.tsx b/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/documents/[documentUuid]/evaluations/[evaluationId]/_components/ManualEvaluationResults/DocumentLogsTable/index.tsx similarity index 100% rename from apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/documents/[documentUuid]/evaluations/[evaluationId]/_components/ManualEvaluationResults/DocumentLogsTable/index.tsx rename to apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/documents/[documentUuid]/evaluations/[evaluationId]/_components/ManualEvaluationResults/DocumentLogsTable/index.tsx diff --git a/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/documents/[documentUuid]/evaluations/[evaluationId]/_components/ManualEvaluationResults/index.tsx b/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/documents/[documentUuid]/evaluations/[evaluationId]/_components/ManualEvaluationResults/index.tsx similarity index 100% rename from apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/documents/[documentUuid]/evaluations/[evaluationId]/_components/ManualEvaluationResults/index.tsx rename to apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/documents/[documentUuid]/evaluations/[evaluationId]/_components/ManualEvaluationResults/index.tsx diff --git a/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/documents/[documentUuid]/evaluations/[evaluationId]/_components/MetricsSummary/BigNumberPanels/MeanValuePanel/index.tsx b/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/documents/[documentUuid]/evaluations/[evaluationId]/_components/MetricsSummary/BigNumberPanels/MeanValuePanel/index.tsx similarity index 100% rename from apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/documents/[documentUuid]/evaluations/[evaluationId]/_components/MetricsSummary/BigNumberPanels/MeanValuePanel/index.tsx rename to apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/documents/[documentUuid]/evaluations/[evaluationId]/_components/MetricsSummary/BigNumberPanels/MeanValuePanel/index.tsx diff --git a/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/documents/[documentUuid]/evaluations/[evaluationId]/_components/MetricsSummary/BigNumberPanels/ModalValuePanel/index.tsx b/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/documents/[documentUuid]/evaluations/[evaluationId]/_components/MetricsSummary/BigNumberPanels/ModalValuePanel/index.tsx similarity index 100% rename from apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/documents/[documentUuid]/evaluations/[evaluationId]/_components/MetricsSummary/BigNumberPanels/ModalValuePanel/index.tsx rename to apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/documents/[documentUuid]/evaluations/[evaluationId]/_components/MetricsSummary/BigNumberPanels/ModalValuePanel/index.tsx diff --git a/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/documents/[documentUuid]/evaluations/[evaluationId]/_components/MetricsSummary/BigNumberPanels/Panel/index.tsx b/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/documents/[documentUuid]/evaluations/[evaluationId]/_components/MetricsSummary/BigNumberPanels/Panel/index.tsx similarity index 100% rename from apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/documents/[documentUuid]/evaluations/[evaluationId]/_components/MetricsSummary/BigNumberPanels/Panel/index.tsx rename to apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/documents/[documentUuid]/evaluations/[evaluationId]/_components/MetricsSummary/BigNumberPanels/Panel/index.tsx diff --git a/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/documents/[documentUuid]/evaluations/[evaluationId]/_components/MetricsSummary/BigNumberPanels/TotalsPanels/index.tsx b/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/documents/[documentUuid]/evaluations/[evaluationId]/_components/MetricsSummary/BigNumberPanels/TotalsPanels/index.tsx similarity index 100% rename from apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/documents/[documentUuid]/evaluations/[evaluationId]/_components/MetricsSummary/BigNumberPanels/TotalsPanels/index.tsx rename to apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/documents/[documentUuid]/evaluations/[evaluationId]/_components/MetricsSummary/BigNumberPanels/TotalsPanels/index.tsx diff --git a/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/documents/[documentUuid]/evaluations/[evaluationId]/_components/MetricsSummary/BigNumberPanels/index.tsx b/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/documents/[documentUuid]/evaluations/[evaluationId]/_components/MetricsSummary/BigNumberPanels/index.tsx similarity index 100% rename from apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/documents/[documentUuid]/evaluations/[evaluationId]/_components/MetricsSummary/BigNumberPanels/index.tsx rename to apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/documents/[documentUuid]/evaluations/[evaluationId]/_components/MetricsSummary/BigNumberPanels/index.tsx diff --git a/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/documents/[documentUuid]/evaluations/[evaluationId]/_components/MetricsSummary/Charts/ChartContainer.tsx b/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/documents/[documentUuid]/evaluations/[evaluationId]/_components/MetricsSummary/Charts/ChartContainer.tsx similarity index 100% rename from apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/documents/[documentUuid]/evaluations/[evaluationId]/_components/MetricsSummary/Charts/ChartContainer.tsx rename to apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/documents/[documentUuid]/evaluations/[evaluationId]/_components/MetricsSummary/Charts/ChartContainer.tsx diff --git a/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/documents/[documentUuid]/evaluations/[evaluationId]/_components/MetricsSummary/Charts/Numerical/CostOverResults.tsx b/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/documents/[documentUuid]/evaluations/[evaluationId]/_components/MetricsSummary/Charts/Numerical/CostOverResults.tsx similarity index 100% rename from apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/documents/[documentUuid]/evaluations/[evaluationId]/_components/MetricsSummary/Charts/Numerical/CostOverResults.tsx rename to apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/documents/[documentUuid]/evaluations/[evaluationId]/_components/MetricsSummary/Charts/Numerical/CostOverResults.tsx diff --git a/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/documents/[documentUuid]/evaluations/[evaluationId]/_components/MetricsSummary/Charts/Numerical/ResultsOverTime.tsx b/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/documents/[documentUuid]/evaluations/[evaluationId]/_components/MetricsSummary/Charts/Numerical/ResultsOverTime.tsx similarity index 100% rename from apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/documents/[documentUuid]/evaluations/[evaluationId]/_components/MetricsSummary/Charts/Numerical/ResultsOverTime.tsx rename to apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/documents/[documentUuid]/evaluations/[evaluationId]/_components/MetricsSummary/Charts/Numerical/ResultsOverTime.tsx diff --git a/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/documents/[documentUuid]/evaluations/[evaluationId]/_components/MetricsSummary/Charts/Numerical/index.tsx b/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/documents/[documentUuid]/evaluations/[evaluationId]/_components/MetricsSummary/Charts/Numerical/index.tsx similarity index 100% rename from apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/documents/[documentUuid]/evaluations/[evaluationId]/_components/MetricsSummary/Charts/Numerical/index.tsx rename to apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/documents/[documentUuid]/evaluations/[evaluationId]/_components/MetricsSummary/Charts/Numerical/index.tsx diff --git a/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/documents/[documentUuid]/evaluations/[evaluationId]/_components/MetricsSummary/Charts/index.tsx b/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/documents/[documentUuid]/evaluations/[evaluationId]/_components/MetricsSummary/Charts/index.tsx similarity index 100% rename from apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/documents/[documentUuid]/evaluations/[evaluationId]/_components/MetricsSummary/Charts/index.tsx rename to apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/documents/[documentUuid]/evaluations/[evaluationId]/_components/MetricsSummary/Charts/index.tsx diff --git a/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/documents/[documentUuid]/evaluations/[evaluationId]/_components/MetricsSummary/index.tsx b/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/documents/[documentUuid]/evaluations/[evaluationId]/_components/MetricsSummary/index.tsx similarity index 100% rename from apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/documents/[documentUuid]/evaluations/[evaluationId]/_components/MetricsSummary/index.tsx rename to apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/documents/[documentUuid]/evaluations/[evaluationId]/_components/MetricsSummary/index.tsx diff --git a/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/documents/[documentUuid]/evaluations/[evaluationId]/_lib/fetchEvaluationCached.ts b/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/documents/[documentUuid]/evaluations/[evaluationId]/_lib/fetchEvaluationCached.ts similarity index 100% rename from apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/documents/[documentUuid]/evaluations/[evaluationId]/_lib/fetchEvaluationCached.ts rename to apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/documents/[documentUuid]/evaluations/[evaluationId]/_lib/fetchEvaluationCached.ts diff --git a/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/documents/[documentUuid]/evaluations/[evaluationId]/_lib/isEvaluationRunDone.ts b/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/documents/[documentUuid]/evaluations/[evaluationId]/_lib/isEvaluationRunDone.ts similarity index 100% rename from apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/documents/[documentUuid]/evaluations/[evaluationId]/_lib/isEvaluationRunDone.ts rename to apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/documents/[documentUuid]/evaluations/[evaluationId]/_lib/isEvaluationRunDone.ts diff --git a/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/documents/[documentUuid]/evaluations/[evaluationId]/_lib/useEvaluationStatusEvent.ts b/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/documents/[documentUuid]/evaluations/[evaluationId]/_lib/useEvaluationStatusEvent.ts similarity index 100% rename from apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/documents/[documentUuid]/evaluations/[evaluationId]/_lib/useEvaluationStatusEvent.ts rename to apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/documents/[documentUuid]/evaluations/[evaluationId]/_lib/useEvaluationStatusEvent.ts diff --git a/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/documents/[documentUuid]/evaluations/[evaluationId]/layout.tsx b/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/documents/[documentUuid]/evaluations/[evaluationId]/layout.tsx similarity index 100% rename from apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/documents/[documentUuid]/evaluations/[evaluationId]/layout.tsx rename to apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/documents/[documentUuid]/evaluations/[evaluationId]/layout.tsx diff --git a/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/documents/[documentUuid]/evaluations/[evaluationId]/page.tsx b/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/documents/[documentUuid]/evaluations/[evaluationId]/page.tsx similarity index 100% rename from apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/documents/[documentUuid]/evaluations/[evaluationId]/page.tsx rename to apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/documents/[documentUuid]/evaluations/[evaluationId]/page.tsx diff --git a/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/documents/[documentUuid]/evaluations/dashboard/_components/Actions.tsx b/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/documents/[documentUuid]/evaluations/dashboard/_components/Actions.tsx similarity index 100% rename from apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/documents/[documentUuid]/evaluations/dashboard/_components/Actions.tsx rename to apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/documents/[documentUuid]/evaluations/dashboard/_components/Actions.tsx diff --git a/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/documents/[documentUuid]/evaluations/dashboard/_components/ConnectedEvaluationsTable.tsx b/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/documents/[documentUuid]/evaluations/dashboard/_components/ConnectedEvaluationsTable.tsx similarity index 100% rename from apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/documents/[documentUuid]/evaluations/dashboard/_components/ConnectedEvaluationsTable.tsx rename to apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/documents/[documentUuid]/evaluations/dashboard/_components/ConnectedEvaluationsTable.tsx diff --git a/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/documents/[documentUuid]/evaluations/dashboard/_components/Layout.tsx b/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/documents/[documentUuid]/evaluations/dashboard/_components/Layout.tsx similarity index 100% rename from apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/documents/[documentUuid]/evaluations/dashboard/_components/Layout.tsx rename to apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/documents/[documentUuid]/evaluations/dashboard/_components/Layout.tsx diff --git a/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/documents/[documentUuid]/evaluations/dashboard/connect/_components/ConnectEvaluationModal/Editor/index.tsx b/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/documents/[documentUuid]/evaluations/dashboard/connect/_components/ConnectEvaluationModal/Editor/index.tsx similarity index 100% rename from apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/documents/[documentUuid]/evaluations/dashboard/connect/_components/ConnectEvaluationModal/Editor/index.tsx rename to apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/documents/[documentUuid]/evaluations/dashboard/connect/_components/ConnectEvaluationModal/Editor/index.tsx diff --git a/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/documents/[documentUuid]/evaluations/dashboard/connect/_components/ConnectEvaluationModal/List/index.tsx b/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/documents/[documentUuid]/evaluations/dashboard/connect/_components/ConnectEvaluationModal/List/index.tsx similarity index 100% rename from apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/documents/[documentUuid]/evaluations/dashboard/connect/_components/ConnectEvaluationModal/List/index.tsx rename to apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/documents/[documentUuid]/evaluations/dashboard/connect/_components/ConnectEvaluationModal/List/index.tsx diff --git a/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/documents/[documentUuid]/evaluations/dashboard/connect/_components/ConnectEvaluationModal/index.tsx b/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/documents/[documentUuid]/evaluations/dashboard/connect/_components/ConnectEvaluationModal/index.tsx similarity index 100% rename from apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/documents/[documentUuid]/evaluations/dashboard/connect/_components/ConnectEvaluationModal/index.tsx rename to apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/documents/[documentUuid]/evaluations/dashboard/connect/_components/ConnectEvaluationModal/index.tsx diff --git a/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/documents/[documentUuid]/evaluations/dashboard/connect/page.tsx b/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/documents/[documentUuid]/evaluations/dashboard/connect/page.tsx similarity index 100% rename from apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/documents/[documentUuid]/evaluations/dashboard/connect/page.tsx rename to apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/documents/[documentUuid]/evaluations/dashboard/connect/page.tsx diff --git a/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/documents/[documentUuid]/evaluations/dashboard/generate/page.tsx b/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/documents/[documentUuid]/evaluations/dashboard/generate/page.tsx similarity index 100% rename from apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/documents/[documentUuid]/evaluations/dashboard/generate/page.tsx rename to apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/documents/[documentUuid]/evaluations/dashboard/generate/page.tsx diff --git a/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/documents/[documentUuid]/evaluations/dashboard/layout.tsx b/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/documents/[documentUuid]/evaluations/dashboard/layout.tsx similarity index 100% rename from apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/documents/[documentUuid]/evaluations/dashboard/layout.tsx rename to apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/documents/[documentUuid]/evaluations/dashboard/layout.tsx diff --git a/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/documents/[documentUuid]/evaluations/dashboard/page.tsx b/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/documents/[documentUuid]/evaluations/dashboard/page.tsx similarity index 100% rename from apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/documents/[documentUuid]/evaluations/dashboard/page.tsx rename to apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/documents/[documentUuid]/evaluations/dashboard/page.tsx diff --git a/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/documents/[documentUuid]/evaluations/page.tsx b/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/documents/[documentUuid]/evaluations/page.tsx similarity index 100% rename from apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/documents/[documentUuid]/evaluations/page.tsx rename to apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/documents/[documentUuid]/evaluations/page.tsx diff --git a/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/documents/[documentUuid]/layout.tsx b/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/documents/[documentUuid]/layout.tsx similarity index 78% rename from apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/documents/[documentUuid]/layout.tsx rename to apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/documents/[documentUuid]/layout.tsx index f71ceb786..7efb8a4e8 100644 --- a/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/documents/[documentUuid]/layout.tsx +++ b/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/documents/[documentUuid]/layout.tsx @@ -9,6 +9,7 @@ import { ROUTES } from '$/services/routes' import { redirect } from 'next/navigation' import DocumentsLayout from '../../_components/DocumentsLayout' +import { LastSeenCommitCookie } from '../../_components/LastSeenCommitCookie' import DocumentationModal, { DocumentationModalProvider, } from './_components/DocumentationModal' @@ -38,16 +39,16 @@ export default async function DocumentPage({ }) return ( - - - + + {children} - - + + ) } catch (error) { return redirect( diff --git a/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/documents/[documentUuid]/logs/_components/DocumentLogs/AggregationPanels.tsx b/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/documents/[documentUuid]/logs/_components/DocumentLogs/AggregationPanels.tsx similarity index 100% rename from apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/documents/[documentUuid]/logs/_components/DocumentLogs/AggregationPanels.tsx rename to apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/documents/[documentUuid]/logs/_components/DocumentLogs/AggregationPanels.tsx diff --git a/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/documents/[documentUuid]/logs/_components/DocumentLogs/DocumentLogBlankSlate/index.tsx b/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/documents/[documentUuid]/logs/_components/DocumentLogs/DocumentLogBlankSlate/index.tsx new file mode 100644 index 000000000..39190a4cc --- /dev/null +++ b/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/documents/[documentUuid]/logs/_components/DocumentLogs/DocumentLogBlankSlate/index.tsx @@ -0,0 +1,98 @@ +import { Commit, DocumentVersion, Project } from '@latitude-data/core/browser' +import { Button, CodeBlock, Text } from '@latitude-data/web-ui' +import { ROUTES } from '$/services/routes' +import Link from 'next/link' + +import { DocumentBlankSlateLayout } from '../../../../../_components/DocumentBlankSlateLayout' +import { getApiKeysCached } from '$/app/(private)/_data-access' + +export async function DocumentLogBlankSlate({ + commit, + project, + document, +}: { + commit: Commit + project: Project + document: DocumentVersion +}) { + const apiKeys = await getApiKeysCached() + return ( + +
+ Getting started + + There are no logs for this prompt yet. To start follow one of these + steps: + +
+ + + + Or +
+ Import logs from code + + Wrap your generation requests with the following code snippet. Once + done, come back to this page, and you'll be able to evaluate both + existing and incoming logs. + + +
+
+ ) +} + +function JavascriptUsage({ + apiKey, + project, + commit, + document, +}: { + apiKey: string | undefined + project: Project + commit: Commit + document: DocumentVersion +}) { + const sdkCode = `import { Latitude } from "@latitude-data/sdk"; + +// Latitude's API Key is a secret, do not expose it in client-side code +const latitude = new Latitude('${apiKey ?? 'YOUR_API_KEY'}', { + projectId: ${project.id}, + telemetry: { + modules: { + openAI: OpenAI, // Check the documentation to get a list of supported modules + } + } +}) + +// Any LLM generation within the span will generate a log for this prompt +latiude.telemetry.span({ + prompt: { + path: '${document.path}', + versionUuid: '${commit.uuid}' + } +}, async () => await openai.chat.completions.create({ ... })) +` + + return {sdkCode} +} diff --git a/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/documents/[documentUuid]/logs/_components/DocumentLogs/DocumentLogInfo/Evaluations.tsx b/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/documents/[documentUuid]/logs/_components/DocumentLogs/DocumentLogInfo/Evaluations.tsx similarity index 100% rename from apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/documents/[documentUuid]/logs/_components/DocumentLogs/DocumentLogInfo/Evaluations.tsx rename to apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/documents/[documentUuid]/logs/_components/DocumentLogs/DocumentLogInfo/Evaluations.tsx diff --git a/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/documents/[documentUuid]/logs/_components/DocumentLogs/DocumentLogInfo/Messages.tsx b/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/documents/[documentUuid]/logs/_components/DocumentLogs/DocumentLogInfo/Messages.tsx similarity index 100% rename from apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/documents/[documentUuid]/logs/_components/DocumentLogs/DocumentLogInfo/Messages.tsx rename to apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/documents/[documentUuid]/logs/_components/DocumentLogs/DocumentLogInfo/Messages.tsx diff --git a/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/documents/[documentUuid]/logs/_components/DocumentLogs/DocumentLogInfo/Metadata.tsx b/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/documents/[documentUuid]/logs/_components/DocumentLogs/DocumentLogInfo/Metadata.tsx similarity index 70% rename from apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/documents/[documentUuid]/logs/_components/DocumentLogs/DocumentLogInfo/Metadata.tsx rename to apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/documents/[documentUuid]/logs/_components/DocumentLogs/DocumentLogInfo/Metadata.tsx index cc0243e39..b9fa6895a 100644 --- a/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/documents/[documentUuid]/logs/_components/DocumentLogs/DocumentLogInfo/Metadata.tsx +++ b/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/documents/[documentUuid]/logs/_components/DocumentLogs/DocumentLogInfo/Metadata.tsx @@ -1,6 +1,5 @@ import { useMemo } from 'react' -import { RunErrorMessage } from '$/app/(private)/projects/[projectId]/versions/[commitUuid]/_components/RunErrorMessage' import { formatCostInMillicents, formatDuration } from '$/app/_lib/formatUtils' import { Inputs } from '$/hooks/useDocumentParameters' import useProviderApiKeys from '$/stores/providerApiKeys' @@ -16,6 +15,8 @@ import { MetadataItemTooltip, } from '../../../../../[documentUuid]/_components/MetadataItem' import { InputParams } from '../../../../_components/DocumentEditor/Editor/Playground/DocumentParams/Input/index' +import { RunErrorMessage } from '../../../../../../_components/RunErrorMessage' +import { isEmpty } from 'lodash-es' function ProviderLogsMetadata({ providerLog, @@ -45,6 +46,8 @@ function ProviderLogsMetadata({ () => providerLogs?.reduce( (acc, log) => { + if (!log.providerId) return acc + const key = String(log.providerId) acc[key] = (acc[key] ?? 0) + log.costInMillicents return acc @@ -60,6 +63,39 @@ function ProviderLogsMetadata({ return formatDuration(timeInMs) }, [documentLog.duration, providerLog.duration]) + const tokensTooltipContent = useMemo(() => { + if (isEmpty(tokensByModel)) return undefined + + const modelLines = Object.entries(tokensByModel) + .map(([model, tokens]) => `${model}: ${tokens}`) + .join('\n') + + const zeroTokensNote = Object.values(tokensByModel).some((t) => t === 0) + ? '\n\nNote: Number of tokens is provided by your LLM Provider. Some providers may return 0 tokens.' + : '' + + return modelLines + zeroTokensNote + }, [tokensByModel]) + + const costTooltipContent = useMemo(() => { + if (isEmpty(costByModel)) return undefined + + const costLines = Object.entries(costByModel) + .map( + ([providerId, cost]) => + `${ + providers?.find((p) => p.id === Number(providerId))?.name ?? + 'Unknown' + }: ${formatCostInMillicents(cost)}`, + ) + .join('\n') + + return ( + costLines + + "\n\nNote: This is just an estimate based on the token usage and your provider's pricing. Actual cost may vary." + ) + }, [costByModel, providers]) + return ( <> } - tooltipContent={ -
- {Object.entries(tokensByModel).map(([model, tokens]) => ( -
- {model && ( - {model} - )} - {tokens && ( - {tokens} - )} -
- ))} - {Object.values(tokensByModel).some((t) => t === 0) && ( -
- - Note: Number of tokens is provided by your LLM Provider. - Some providers may return 0 tokens. - -
- )} -
- } + tooltipContent={tokensTooltipContent} /> ) : ( } - tooltipContent={ -
- {Object.entries(costByModel).map( - ([providerId, cost_in_millicents]) => ( -
- - {providers?.find((p) => p.id === Number(providerId)) - ?.name ?? 'Unknown'} - - - {formatCostInMillicents(cost_in_millicents)} - -
- ), - )} -
- - Note: This is just an estimate based on the token usage and - your provider's pricing. Actual cost may vary. - -
-
- } + tooltipContent={costTooltipContent} /> ) : ( diff --git a/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/documents/[documentUuid]/logs/_components/DocumentLogs/DocumentLogInfo/index.tsx b/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/documents/[documentUuid]/logs/_components/DocumentLogs/DocumentLogInfo/index.tsx similarity index 100% rename from apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/documents/[documentUuid]/logs/_components/DocumentLogs/DocumentLogInfo/index.tsx rename to apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/documents/[documentUuid]/logs/_components/DocumentLogs/DocumentLogInfo/index.tsx diff --git a/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/documents/[documentUuid]/logs/_components/DocumentLogs/DocumentLogsTable.tsx b/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/documents/[documentUuid]/logs/_components/DocumentLogs/DocumentLogsTable.tsx similarity index 100% rename from apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/documents/[documentUuid]/logs/_components/DocumentLogs/DocumentLogsTable.tsx rename to apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/documents/[documentUuid]/logs/_components/DocumentLogs/DocumentLogsTable.tsx diff --git a/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/documents/[documentUuid]/logs/_components/DocumentLogs/LogsOverTime.tsx b/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/documents/[documentUuid]/logs/_components/DocumentLogs/LogsOverTime.tsx new file mode 100644 index 000000000..ac4d31b77 --- /dev/null +++ b/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/documents/[documentUuid]/logs/_components/DocumentLogs/LogsOverTime.tsx @@ -0,0 +1,23 @@ +'use client' + +import useDocumentLogsDailyCount from '$/stores/documentLogsDailyCount' + +import { LogsOverTime } from '../../../../../../(overview)/overview/_components/Overview/LogsOverTime' + +export function LogsOverTimeChart({ + documentUuid, + commitUuid, + projectId, +}: { + documentUuid: string + commitUuid: string + projectId: number +}) { + const { data, isLoading, error } = useDocumentLogsDailyCount({ + documentUuid, + commitUuid, + projectId, + }) + + return +} diff --git a/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/documents/[documentUuid]/logs/_components/DocumentLogs/index.tsx b/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/documents/[documentUuid]/logs/_components/DocumentLogs/index.tsx similarity index 100% rename from apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/documents/[documentUuid]/logs/_components/DocumentLogs/index.tsx rename to apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/documents/[documentUuid]/logs/_components/DocumentLogs/index.tsx diff --git a/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/documents/[documentUuid]/logs/page.tsx b/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/documents/[documentUuid]/logs/page.tsx similarity index 100% rename from apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/documents/[documentUuid]/logs/page.tsx rename to apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/documents/[documentUuid]/logs/page.tsx diff --git a/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/documents/[documentUuid]/logs/upload/UploadLogModal.tsx b/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/documents/[documentUuid]/logs/upload/UploadLogModal.tsx similarity index 100% rename from apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/documents/[documentUuid]/logs/upload/UploadLogModal.tsx rename to apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/documents/[documentUuid]/logs/upload/UploadLogModal.tsx diff --git a/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/documents/[documentUuid]/logs/upload/page.tsx b/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/documents/[documentUuid]/logs/upload/page.tsx similarity index 100% rename from apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/documents/[documentUuid]/logs/upload/page.tsx rename to apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/documents/[documentUuid]/logs/upload/page.tsx diff --git a/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/documents/[documentUuid]/page.tsx b/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/documents/[documentUuid]/page.tsx similarity index 100% rename from apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/documents/[documentUuid]/page.tsx rename to apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/documents/[documentUuid]/page.tsx diff --git a/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/documents/_components/AddFileButton.tsx b/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/documents/_components/AddFileButton.tsx similarity index 100% rename from apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/documents/_components/AddFileButton.tsx rename to apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/documents/_components/AddFileButton.tsx diff --git a/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/documents/_components/DocumentBlankSlateLayout.tsx b/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/documents/_components/DocumentBlankSlateLayout.tsx similarity index 100% rename from apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/documents/_components/DocumentBlankSlateLayout.tsx rename to apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/documents/_components/DocumentBlankSlateLayout.tsx diff --git a/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/documents/_components/DocumentsClient.tsx b/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/documents/_components/DocumentsClient.tsx similarity index 74% rename from apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/documents/_components/DocumentsClient.tsx rename to apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/documents/_components/DocumentsClient.tsx index 78218832c..4ee10258b 100644 --- a/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/documents/_components/DocumentsClient.tsx +++ b/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/documents/_components/DocumentsClient.tsx @@ -2,7 +2,6 @@ import { useState } from 'react' -import { DocumentVersion } from '@latitude-data/core/browser' import { CodeBlock, Tabs, @@ -17,7 +16,7 @@ const tabs = [ { id: 'api', label: 'HTTP API' }, ] -export function DocumentsClient({ document }: { document?: DocumentVersion }) { +export function DocumentsClient() { const [activeTab, setActiveTab] = useState('sdk') const { commit } = useCurrentCommit() const { project } = useCurrentProject() @@ -31,7 +30,6 @@ export function DocumentsClient({ document }: { document?: DocumentVersion }) { )} {activeTab === 'api' && ( @@ -50,33 +48,22 @@ export function DocumentsClient({ document }: { document?: DocumentVersion }) { function JavascriptUsage({ apiKey, projectId, - document, }: { apiKey: string | undefined projectId: number - document?: DocumentVersion }) { const sdkCode = `import { Latitude } from "@latitude-data/sdk"; - -// Initialize the SDK -const sdk = new Latitude('${apiKey ?? 'YOUR_API_KEY'}', { projectId: ${projectId} }) -// Call the LLM provider, replace with a real implementation -const completion = await openai.chat.completions.create({ - model: "gpt-4o-mini", - messages: [{ - role: "user", - content: "Write a haiku about recursion in programming.", - }] -}); - -// Log the response to Latitude -${ - document - ? `sdk.logs.create('${document.path}', [...messages, ...completion.choices])` - : `const prompt = await sdk.prompts.getOrCreate('my-prompt-path') -sdk.logs.create(prompt.path, [...messages, ...completion.choices])` -}` +// Latitude's API Key is a secret, do not expose it in client-side code +const latitude = new Latitude('${apiKey ?? 'YOUR_API_KEY'}', { + projectId: ${projectId}, + telemetry: { + modules: { + openAI: OpenAI, // Check the documentation to get a list of supported modules + } + } +}) +` return {sdkCode} } diff --git a/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/documents/page.tsx b/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/documents/page.tsx similarity index 100% rename from apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/documents/page.tsx rename to apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/documents/page.tsx diff --git a/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/layout.tsx b/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/layout.tsx similarity index 93% rename from apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/layout.tsx rename to apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/layout.tsx index 1f3bbd781..68f6651b3 100644 --- a/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/layout.tsx +++ b/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/layout.tsx @@ -21,7 +21,12 @@ import { notFound, redirect } from 'next/navigation' export type CommitPageParams = { children: ReactNode - params: Promise & { commitUuid: string }> + params: Promise< + Awaited & { + commitUuid: string + documentUuid?: string + } + > } export default async function CommitLayout({ @@ -33,6 +38,7 @@ export default async function CommitLayout({ let commit: Commit | undefined let isHead = false const { projectId, commitUuid } = await params + try { session = await getCurrentUser() if (!session.workspace) return redirect(ROUTES.root) @@ -66,6 +72,7 @@ export default async function CommitLayout({ throw error } + return ( diff --git a/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/page.tsx b/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/page.tsx similarity index 100% rename from apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/page.tsx rename to apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/page.tsx diff --git a/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(overview)/layout.tsx b/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(overview)/layout.tsx new file mode 100644 index 000000000..4a8f9c2a6 --- /dev/null +++ b/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(overview)/layout.tsx @@ -0,0 +1,33 @@ +'use server' + +import { ReactNode } from 'react' + +import { ProjectPageParams } from '$/app/(private)/projects/[projectId]/page' + +import DocumentsLayout from '../(commit)/_components/DocumentsLayout' +import CommitLayout from '../(commit)/layout' + +export type CommitPageParams = { + children: ReactNode + params: Promise< + Awaited & { + commitUuid: string + documentUuid?: string + } + > +} + +export default async function TracesLayout({ + children, + params, +}: CommitPageParams) { + const { projectId, commitUuid } = await params + + return ( + + + {children} + + + ) +} diff --git a/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/overview/_components/Overview/EvaluationStats.tsx b/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(overview)/overview/_components/Overview/EvaluationStats.tsx similarity index 89% rename from apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/overview/_components/Overview/EvaluationStats.tsx rename to apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(overview)/overview/_components/Overview/EvaluationStats.tsx index 83816a0e8..627bed50f 100644 --- a/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/overview/_components/Overview/EvaluationStats.tsx +++ b/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(overview)/overview/_components/Overview/EvaluationStats.tsx @@ -2,8 +2,8 @@ import { ProjectStats } from '@latitude-data/core/browser' import { BarChart, ChartBlankSlate, Text } from '@latitude-data/web-ui' import { formatCostInMillicents } from '$/app/_lib/formatUtils' -import Panel from '../../../documents/[documentUuid]/evaluations/[evaluationId]/_components/MetricsSummary/BigNumberPanels/Panel' -import { ChartWrapper } from '../../../documents/[documentUuid]/evaluations/[evaluationId]/_components/MetricsSummary/Charts/ChartContainer' +import Panel from '../../../../(commit)/documents/[documentUuid]/evaluations/[evaluationId]/_components/MetricsSummary/BigNumberPanels/Panel' +import { ChartWrapper } from '../../../../(commit)/documents/[documentUuid]/evaluations/[evaluationId]/_components/MetricsSummary/Charts/ChartContainer' export function EvaluationStats({ stats, diff --git a/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/overview/_components/Overview/LogsOverTime.tsx b/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(overview)/overview/_components/Overview/LogsOverTime.tsx similarity index 94% rename from apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/overview/_components/Overview/LogsOverTime.tsx rename to apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(overview)/overview/_components/Overview/LogsOverTime.tsx index 297ca8a38..3d4c06bd7 100644 --- a/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/overview/_components/Overview/LogsOverTime.tsx +++ b/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(overview)/overview/_components/Overview/LogsOverTime.tsx @@ -4,7 +4,7 @@ import { useMemo } from 'react' import { BarChart, ChartBlankSlate, Text } from '@latitude-data/web-ui' -import { ChartWrapper } from '../../../documents/[documentUuid]/evaluations/[evaluationId]/_components/MetricsSummary/Charts/ChartContainer' +import { ChartWrapper } from '../../../../(commit)/documents/[documentUuid]/evaluations/[evaluationId]/_components/MetricsSummary/Charts/ChartContainer' const formatDate = (date: number) => { return new Date(date).toLocaleDateString('en-US', { diff --git a/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/overview/_components/Overview/ModelCharts.tsx b/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(overview)/overview/_components/Overview/ModelCharts.tsx similarity index 95% rename from apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/overview/_components/Overview/ModelCharts.tsx rename to apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(overview)/overview/_components/Overview/ModelCharts.tsx index 4ee93d8c2..2762cef51 100644 --- a/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/overview/_components/Overview/ModelCharts.tsx +++ b/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(overview)/overview/_components/Overview/ModelCharts.tsx @@ -3,7 +3,7 @@ import { useMemo } from 'react' import { BarChart, ChartBlankSlate, Text } from '@latitude-data/web-ui' import { formatCostInMillicents } from '$/app/_lib/formatUtils' -import { ChartWrapper } from '../../../documents/[documentUuid]/evaluations/[evaluationId]/_components/MetricsSummary/Charts/ChartContainer' +import { ChartWrapper } from '../../../../(commit)/documents/[documentUuid]/evaluations/[evaluationId]/_components/MetricsSummary/Charts/ChartContainer' type ModelStats = { runsPerModel: Record diff --git a/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/overview/_components/Overview/StatsPanels.tsx b/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(overview)/overview/_components/Overview/StatsPanels.tsx similarity index 94% rename from apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/overview/_components/Overview/StatsPanels.tsx rename to apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(overview)/overview/_components/Overview/StatsPanels.tsx index 553b809c5..fcb0a5f9a 100644 --- a/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/overview/_components/Overview/StatsPanels.tsx +++ b/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(overview)/overview/_components/Overview/StatsPanels.tsx @@ -2,7 +2,7 @@ import { ProjectStats } from '@latitude-data/core/browser' import { Text } from '@latitude-data/web-ui' import { formatCostInMillicents } from '$/app/_lib/formatUtils' -import Panel from '../../../documents/[documentUuid]/evaluations/[evaluationId]/_components/MetricsSummary/BigNumberPanels/Panel' +import Panel from '../../../../(commit)/documents/[documentUuid]/evaluations/[evaluationId]/_components/MetricsSummary/BigNumberPanels/Panel' import { EvaluationStats } from './EvaluationStats' import { LogsOverTime } from './LogsOverTime' import { ModelCharts } from './ModelCharts' diff --git a/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/overview/_components/Overview/index.tsx b/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(overview)/overview/_components/Overview/index.tsx similarity index 100% rename from apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/overview/_components/Overview/index.tsx rename to apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(overview)/overview/_components/Overview/index.tsx diff --git a/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(overview)/overview/page.tsx b/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(overview)/overview/page.tsx new file mode 100644 index 000000000..534ca7ae0 --- /dev/null +++ b/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/(overview)/overview/page.tsx @@ -0,0 +1,39 @@ +import { computeProjectStats } from '@latitude-data/core/services/projects/computeProjectStats' +import { TableWithHeader } from '@latitude-data/web-ui' +import { + findProjectCached, + getApiKeysCached, +} from '$/app/(private)/_data-access' +import { getCurrentUser } from '$/services/auth/getCurrentUser' + +import Overview from './_components/Overview' +import { TracesBlankSlate } from '../traces/_components/TracesBlankSlate' + +export default async function OverviewPage({ + params, +}: { + params: Promise<{ projectId: string; commitUuid: string }> +}) { + const { projectId } = await params + const session = await getCurrentUser() + const project = await findProjectCached({ + projectId: Number(projectId), + workspaceId: session.workspace.id, + }) + + const apiKeys = await getApiKeysCached() + const projectStats = await computeProjectStats({ + project, + }).then((result) => result.unwrap()) + + return projectStats.totalRuns > 0 ? ( +
+ } + /> +
+ ) : ( + + ) +} diff --git a/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/overview/page.tsx b/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/overview/page.tsx deleted file mode 100644 index 077fcae72..000000000 --- a/apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/overview/page.tsx +++ /dev/null @@ -1,76 +0,0 @@ -import { computeProjectStats } from '@latitude-data/core/services/projects/computeProjectStats' -import { TableWithHeader, Text } from '@latitude-data/web-ui' -import { findProjectCached } from '$/app/(private)/_data-access' -import { getCurrentUser } from '$/services/auth/getCurrentUser' - -import DocumentsLayout from '../_components/DocumentsLayout' -import { AddFileButton } from '../documents/_components/AddFileButton' -import { DocumentBlankSlateLayout } from '../documents/_components/DocumentBlankSlateLayout' -import { DocumentsClient } from '../documents/_components/DocumentsClient' -import Overview from './_components/Overview' - -export default async function OverviewPage({ - params, -}: { - params: Promise<{ projectId: string; commitUuid: string }> -}) { - const { projectId, commitUuid } = await params - const session = await getCurrentUser() - const project = await findProjectCached({ - projectId: Number(projectId), - workspaceId: session.workspace.id, - }) - - const projectStats = await computeProjectStats({ - project, - }).then((result) => result.unwrap()) - - return ( - - {projectStats.totalRuns > 0 ? ( -
- } - /> -
- ) : projectStats.totalDocuments > 0 ? ( - -
- {project.name} - There are no logs for this project yet. -
-
- Upload logs to Latitude - - Run this code snippet to start uploading logs to Latitude. Once - done, come back to this page, and you'll be able to evaluate both - existing and incoming logs. - - -
-
- ) : ( - -
- {project.name} - - To get started, please choose one of the following options: - -
- - Or -
- Import your logs - - Run this code snippet to start importing logs into Latitude. Once - done, come back to this page, and you'll be able to evaluate both - existing and incoming logs. - - -
-
- )} -
- ) -} diff --git a/apps/web/src/app/(private)/traces/_components/TracesBlankSlate.tsx b/apps/web/src/app/(private)/traces/_components/TracesBlankSlate.tsx new file mode 100644 index 000000000..58ce495d2 --- /dev/null +++ b/apps/web/src/app/(private)/traces/_components/TracesBlankSlate.tsx @@ -0,0 +1,36 @@ +import { CodeBlock, Text } from '@latitude-data/web-ui' +import { DocumentBlankSlateLayout } from '../../projects/[projectId]/versions/[commitUuid]/(commit)/documents/_components/DocumentBlankSlateLayout' + +export function TracesBlankSlate({ apiKey }: { apiKey: string | undefined }) { + return ( + + Instrument your application with Latitude + + Add this code snippet to start streaming traces to Latitude. + +
+ +
+
+ ) +} + +export function TracesJavascriptUsage({ + apiKey, +}: { + apiKey: string | undefined +}) { + const sdkCode = `import { Latitude } from "@latitude-data/sdk"; + +// Latitude's API Key is a secret, do not expose it in client-side code +const latitude = new Latitude('${apiKey ?? 'YOUR_API_KEY'}', { + telemetry: { + modules: { + openAI: OpenAI, // Check the documentation to get a list of supported modules + } + } +}) +` + + return {sdkCode} +} diff --git a/apps/web/src/app/(private)/traces/_components/TracesTable/SearchBox.tsx b/apps/web/src/app/(private)/traces/_components/TracesTable/SearchBox.tsx new file mode 100644 index 000000000..35db2c705 --- /dev/null +++ b/apps/web/src/app/(private)/traces/_components/TracesTable/SearchBox.tsx @@ -0,0 +1,307 @@ +'use client' + +import { useState, useRef, KeyboardEvent } from 'react' +import { Badge, Button, Icon, Input } from '@latitude-data/web-ui' + +type SearchColumn = { + label: string + field: string + operators: Operator[] +} + +type Operator = { + label: string + value: string +} + +const SEARCH_COLUMNS: SearchColumn[] = [ + { + label: 'Start Time', + field: 'startTime', + operators: [ + { label: 'is', value: 'eq' }, + { label: 'before', value: 'lt' }, + { label: 'after', value: 'gt' }, + ], + }, + { + label: 'End Time', + field: 'endTime', + operators: [ + { label: 'is', value: 'eq' }, + { label: 'before', value: 'lt' }, + { label: 'after', value: 'gt' }, + ], + }, + { + label: 'Status', + field: 'status', + operators: [ + { label: 'is', value: 'eq' }, + { label: 'is not', value: 'neq' }, + ], + }, + { + label: 'Name', + field: 'name', + operators: [ + { label: 'is', value: 'eq' }, + { label: 'contains', value: 'contains' }, + { label: 'is not', value: 'neq' }, + { label: 'not contains', value: 'not_contains' }, + ], + }, + { + label: 'Model', + field: 'spans.model', + operators: [ + { label: 'is', value: 'eq' }, + { label: 'contains', value: 'contains' }, + { label: 'is not', value: 'neq' }, + { label: 'not contains', value: 'not_contains' }, + ], + }, + { + label: 'Cost', + field: 'spans.totalCostInMillicents', + operators: [ + { label: 'is', value: 'eq' }, + { label: 'greater than', value: 'gt' }, + { label: 'less than', value: 'lt' }, + ], + }, + { + label: 'Distinct ID', + field: 'spans.distinctId', + operators: [ + { label: 'is', value: 'eq' }, + { label: 'contains', value: 'contains' }, + { label: 'is not', value: 'neq' }, + { label: 'not contains', value: 'not_contains' }, + ], + }, + { + label: 'Commit UUID', + field: 'spans.commitUuid', + operators: [ + { label: 'is', value: 'eq' }, + { label: 'contains', value: 'contains' }, + { label: 'is not', value: 'neq' }, + { label: 'not contains', value: 'not_contains' }, + ], + }, + { + label: 'Prompt Path', + field: 'spans.promptPath', + operators: [ + { label: 'is', value: 'eq' }, + { label: 'contains', value: 'contains' }, + { label: 'is not', value: 'neq' }, + { label: 'not contains', value: 'not_contains' }, + ], + }, +] + +type ActiveSearch = { + column?: SearchColumn + operator?: Operator +} + +export type CompletedSearch = { + column: SearchColumn + operator: Operator + value: string +} + +type SearchBoxProps = { + onSearch: (queries: CompletedSearch[]) => void +} + +export function SearchBox({ onSearch }: SearchBoxProps) { + const [inputValue, setInputValue] = useState('') + const [activeSearch, setActiveSearch] = useState({}) + const [completedSearches, setCompletedSearches] = useState( + [], + ) + const [showSuggestions, setShowSuggestions] = useState(false) + const inputRef = useRef(null) + + const handleInputChange = (value: string) => { + setInputValue(value) + setShowSuggestions(true) + // Filter suggestions based on input + if (!activeSearch.column) { + // Show filtered column suggestions + const searchTerm = value.toLowerCase() + const filteredColumns = SEARCH_COLUMNS.filter((col) => + col.label.toLowerCase().includes(searchTerm), + ) + if ( + filteredColumns.length === 1 && + filteredColumns[0]?.label.toLowerCase() === searchTerm + ) { + handleColumnSelect(filteredColumns[0]) + } + } + } + + const handleColumnSelect = (column: SearchColumn) => { + setActiveSearch({ column }) + setInputValue('') + setShowSuggestions(true) + inputRef.current?.focus() + } + + const handleOperatorSelect = (operator: Operator) => { + setActiveSearch((prev) => ({ ...prev, operator })) + setInputValue('') + setShowSuggestions(false) + inputRef.current?.focus() + } + + const handleKeyDown = (e: KeyboardEvent) => { + if (e.key === 'Backspace' && inputValue === '') { + if (activeSearch.operator) { + setActiveSearch((prev) => ({ column: prev.column })) + setShowSuggestions(true) + } else if (activeSearch.column) { + setActiveSearch({}) + setShowSuggestions(false) + } else if (completedSearches.length > 0) { + // Remove the last completed search when backspace is pressed + const newSearches = completedSearches.slice(0, -1) + setCompletedSearches(newSearches) + onSearch(newSearches) + } + return + } + + if (e.key === 'Enter' && inputValue.trim()) { + if (!activeSearch.column) { + const matchingColumns = SEARCH_COLUMNS.filter((col) => + col.label.toLowerCase().includes(inputValue.toLowerCase()), + ) + if (matchingColumns.length > 0) { + handleColumnSelect(matchingColumns[0]!) + } + } else if (!activeSearch.operator) { + // Find all matching operators + const matchingOperators = activeSearch.column.operators.filter((op) => + op.label.toLowerCase().includes(inputValue.toLowerCase()), + ) + // Select the first matching operator if available + if (matchingOperators.length > 0) { + handleOperatorSelect(matchingOperators[0]!) + } + } else { + // We have column and operator, this must be the value + const newSearch = { + column: activeSearch.column, + operator: activeSearch.operator, + value: inputValue.trim(), + } + + const newSearches = [...completedSearches, newSearch] + setCompletedSearches(newSearches) + onSearch(newSearches) + + // Reset the active search state but keep completed searches + setActiveSearch({}) + setInputValue('') + setShowSuggestions(false) + } + } + } + + const removeSearch = (index: number) => { + const newSearches = completedSearches.filter((_, i) => i !== index) + setCompletedSearches(newSearches) + onSearch(newSearches) + } + + return ( +
+
+
+ {completedSearches.map((search, index) => ( + + {search.column.label} {search.operator.label} {search.value} + + + ))} +
+ {activeSearch.column && ( + + {activeSearch.column.label} + + )} + {activeSearch.operator && ( + + {activeSearch.operator.label} + + )} + handleInputChange(e.target.value)} + onKeyDown={handleKeyDown} + className='border-none shadow-none focus-visible:ring-0 bg-transparent p-0 h-auto outline-none' + placeholder={ + !activeSearch.column + ? 'Search traces...' + : !activeSearch.operator + ? 'is, contains, ...' + : 'Type value...' + } + /> +
+
+
+ + {showSuggestions && ( +
+ {!activeSearch.column && inputValue && ( +
+ {SEARCH_COLUMNS.filter((col) => + col.label.toLowerCase().includes(inputValue.toLowerCase()), + ).map((column) => ( +
handleColumnSelect(column)} + > + {column.label} +
+ ))} +
+ )} + {activeSearch.column && !activeSearch.operator && ( +
+ {activeSearch.column.operators + .filter((operator) => + operator.label + .toLowerCase() + .includes(inputValue.toLowerCase()), + ) + .map((operator) => ( +
handleOperatorSelect(operator)} + > + {operator.label} +
+ ))} +
+ )} +
+ )} +
+ ) +} diff --git a/apps/web/src/app/(private)/traces/_components/TracesTable/SpanTimeline.tsx b/apps/web/src/app/(private)/traces/_components/TracesTable/SpanTimeline.tsx new file mode 100644 index 000000000..0ad3c2bce --- /dev/null +++ b/apps/web/src/app/(private)/traces/_components/TracesTable/SpanTimeline.tsx @@ -0,0 +1,126 @@ +'use client' + +import { useMemo } from 'react' + +import { TraceWithSpans } from '@latitude-data/core/browser' +import { Text } from '@latitude-data/web-ui' +import { formatDuration } from '$/app/_lib/formatUtils' + +type SpanNode = { + span: TraceWithSpans['spans'][0] + children: SpanNode[] + level: number +} + +export function SpanTimeline({ trace }: { trace: TraceWithSpans }) { + const timeRange = useMemo(() => { + let earliestTime = new Date(trace.startTime).getTime() + let latestTime = new Date(trace.endTime || trace.startTime).getTime() + + trace.spans.forEach((span) => { + const startTime = new Date(span.startTime).getTime() + const endTime = new Date(span.endTime || span.startTime).getTime() + + earliestTime = Math.min(earliestTime, startTime) + latestTime = Math.max(latestTime, endTime) + }) + + return { + start: earliestTime, + end: latestTime, + duration: latestTime - earliestTime, + } + }, [trace]) + + const spanHierarchy = useMemo(() => { + const hierarchyMap = new Map() + + trace.spans.forEach((span) => { + hierarchyMap.set(span.spanId, { + span, + children: [], + level: 0, + }) + }) + + const rootNodes: SpanNode[] = [] + trace.spans.forEach((span) => { + const node = hierarchyMap.get(span.spanId)! + if (span.parentSpanId && hierarchyMap.has(span.parentSpanId)) { + const parentNode = hierarchyMap.get(span.parentSpanId)! + parentNode.children.push(node) + node.level = parentNode.level + 1 + } else { + rootNodes.push(node) + } + }) + + const sortNodes = (nodes: SpanNode[]) => { + nodes.sort( + (a, b) => + new Date(a.span.startTime).getTime() - + new Date(b.span.startTime).getTime(), + ) + nodes.forEach((node) => sortNodes(node.children)) + } + sortNodes(rootNodes) + + const flattenHierarchy = (nodes: SpanNode[]): SpanNode[] => { + return nodes.reduce((acc, node) => { + return [...acc, node, ...flattenHierarchy(node.children)] + }, [] as SpanNode[]) + } + + return flattenHierarchy(rootNodes) + }, [trace.spans]) + + return ( +
+ {spanHierarchy.map((node) => { + const { span } = node + const spanStart = new Date(span.startTime).getTime() + const spanEnd = new Date(span.endTime || span.startTime).getTime() + const spanDuration = spanEnd - spanStart + + const leftPosition = + ((spanStart - timeRange.start) / timeRange.duration) * 100 + const width = (spanDuration / timeRange.duration) * 100 + + return ( +
+
+ + + {node.level > 0 && ( + └─ + )} + {span.name} + + + + {formatDuration(spanDuration)} + +
+
+
+
+
+ ) + })} +
+ ) +} diff --git a/apps/web/src/app/(private)/traces/_components/TracesTable/TraceInfo.tsx b/apps/web/src/app/(private)/traces/_components/TracesTable/TraceInfo.tsx new file mode 100644 index 000000000..798d4ef11 --- /dev/null +++ b/apps/web/src/app/(private)/traces/_components/TracesTable/TraceInfo.tsx @@ -0,0 +1,187 @@ +'use client' + +import { useMemo, useState } from 'react' +import { HEAD_COMMIT, TraceWithSpans } from '@latitude-data/core/browser' +import { + Button, + CloseTrigger, + FakeProgress, + FormWrapper, + Modal, + Select, + Text, + Tooltip, +} from '@latitude-data/web-ui' +import { SpanTimeline } from './SpanTimeline' +import { TraceMessages } from './TraceMessages' +import { TraceMetadata } from './TraceMetadata' +import { MetadataInfoTabs } from '$/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/documents/[documentUuid]/_components/MetadataInfoTabs' +import useProjects from '$/stores/projects' +import { useCommitsFromProject } from '$/stores/commitsStore' +import useDocumentVersions from '$/stores/documentVersions' +import { useNavigate } from '$/hooks/useNavigate' +import { ROUTES } from '$/services/routes' + +type Props = { + trace: TraceWithSpans +} + +export function TraceInfo({ trace }: Props) { + const navigate = useNavigate() + const [openModal, setOpenModal] = useState(false) + const [isCreating, setIsCreating] = useState(false) + const [selectedProjectId, setSelectedProjectId] = useState< + string | undefined + >(undefined) + const [selectedCommitUuid, setSelecteCommitUuid] = useState< + string | undefined + >(undefined) + const hasGenerationSpan = useMemo(() => { + return trace.spans.some((span) => span.internalType === 'generation') + }, [trace.spans]) + + const { createFromTrace } = useDocumentVersions() + const { data: projects } = useProjects() + const { data: commits } = useCommitsFromProject( + selectedProjectId ? Number(selectedProjectId) : undefined, + ) + const handleCreateDocument = async () => { + if (!selectedProjectId || !selectedCommitUuid) return + + const span = trace.spans.find((span) => span.internalType === 'generation') + if (!span) return + + setIsCreating(true) + + const [documentVersion] = await createFromTrace({ + spanId: span.spanId, + projectId: Number(selectedProjectId), + commitUuid: selectedCommitUuid, + }) + + if (documentVersion) { + navigate.push( + ROUTES.projects + .detail({ id: Number(selectedProjectId) }) + .commits.detail({ uuid: selectedCommitUuid }) + .documents.detail({ uuid: documentVersion.documentUuid }).root, + ) + } + } + + return ( + <> +
+ 1 + ? [{ label: 'Timeline', value: 'timeline' }] + : []), + ]} + tabsActions={ + setOpenModal(true)} + fancy + iconProps={{ name: 'filePlus', color: 'foregroundMuted' }} + variant='outline' + size='icon' + containerClassName='rounded-xl pointer-events-auto' + className='rounded-xl' + /> + } + > + Create a prompt from this trace + + } + > + {({ selectedTab }) => ( + <> + {selectedTab === 'metadata' && } + {selectedTab === 'messages' && } + {selectedTab === 'timeline' && trace.spans.length > 1 && ( + + )} + + )} + +
+ + { + setOpenModal(open) + + if (!open) { + setSelectedProjectId(undefined) + setSelecteCommitUuid(undefined) + setIsCreating(false) + } + }} + title='Create a prompt from this trace' + description="Our LLM agents will create a prompt from this trace's messages in the project an version you selected." + footer={ + <> + + + + } + > + {!isCreating && ( +
+ + !c.version && !c.deletedAt) + .map((commit) => ({ + label: commit.title, + value: commit.uuid, + }))} + name='commitUuid' + value={selectedCommitUuid} + onChange={(commitUuid) => setSelecteCommitUuid(commitUuid)} + /> + +
+ )} + {isCreating && ( +
+ Creating document... + + This may take a few seconds + +
+ +
+
+ )} +
+ + ) +} diff --git a/packages/core/src/services/ai/providers/rules/types.d.ts b/apps/web/src/app/(private)/traces/_components/TracesTable/TraceMessages.test.tsx similarity index 100% rename from packages/core/src/services/ai/providers/rules/types.d.ts rename to apps/web/src/app/(private)/traces/_components/TracesTable/TraceMessages.test.tsx diff --git a/apps/web/src/app/(private)/traces/_components/TracesTable/TraceMessages.tsx b/apps/web/src/app/(private)/traces/_components/TracesTable/TraceMessages.tsx new file mode 100644 index 000000000..7c601672c --- /dev/null +++ b/apps/web/src/app/(private)/traces/_components/TracesTable/TraceMessages.tsx @@ -0,0 +1,106 @@ +'use client' + +import { useMemo } from 'react' + +import { Message as ConversationMessage } from '@latitude-data/compiler' +import { TraceWithSpans } from '@latitude-data/core/browser' +import { Badge, MessageList, Text } from '@latitude-data/web-ui' + +function getUniqueSpanAttributes( + span: TraceWithSpans['spans'][0], + attribute: string, +) { + if (!span.attributes) return [] + const value = span.attributes[attribute] + if (Array.isArray(value)) return value + return value ? [value] : [] +} + +export function TraceMessages({ trace }: { trace: TraceWithSpans }) { + const messageGroups = useMemo(() => { + const generationSpans = trace.spans.filter( + (span) => span.internalType === 'generation', + ) + + return generationSpans + .map((span) => { + const spanMessages: ConversationMessage[] = [] + + try { + if (span.input) { + const inputMessages = span.input as ConversationMessage[] + spanMessages.push(...inputMessages) + } + + if (span.output) { + const outputMessages = span.output as ConversationMessage[] + spanMessages.push(...outputMessages) + } + } catch (error) { + console.error('Error parsing messages for span:', span.spanId, error) + } + + const providers = getUniqueSpanAttributes(span, 'gen_ai.system') + + return { + spanId: span.spanId, + name: span.name, + providers, + models: [span.model], + tools: span.tools, + messages: spanMessages, + } + }) + .filter((group) => group.messages.length > 0) + }, [trace.spans]) + + if (messageGroups.length === 0) return null + + return ( +
+ {messageGroups.map((group, index) => ( +
+ {index > 0 &&
} +
+ + {group.name || 'Generation'} + + · +
+ {group.providers.map((provider) => ( + + {provider} + + ))} +
+ {group.models.length > 0 && ( + <> + · +
+ {group.models.map((model) => ( + + {model} + + ))} +
+ + )} + {group.tools && group.tools.length > 0 && ( + <> + · +
+ {group.tools.map((tool) => ( + + {tool.name} + + ))} +
+ + )} +
+ +
+ ))} +
+ ) +} diff --git a/apps/web/src/app/(private)/traces/_components/TracesTable/TraceMetadata.tsx b/apps/web/src/app/(private)/traces/_components/TracesTable/TraceMetadata.tsx new file mode 100644 index 000000000..687512e6e --- /dev/null +++ b/apps/web/src/app/(private)/traces/_components/TracesTable/TraceMetadata.tsx @@ -0,0 +1,95 @@ +import { HEAD_COMMIT, TraceWithSpans } from '@latitude-data/core/browser' +import { Badge, ClickToCopyUuid, Text, CodeBlock } from '@latitude-data/web-ui' +import { formatCostInMillicents, formatDuration } from '$/app/_lib/formatUtils' +import { format } from 'date-fns' +import { calculateTraceMetrics } from './utils' +import { MetadataItem } from '$/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/documents/[documentUuid]/_components/MetadataItem' +import Link from 'next/link' +import { ROUTES } from '$/services/routes' +import useDocumentVersion from '$/stores/useDocumentVersion' + +type Props = { + trace: TraceWithSpans +} + +export function TraceMetadata({ trace }: Props) { + const { totalDuration, totalCost, totalTokens, models } = + calculateTraceMetrics(trace) + + // Find the first span with Latitude-specific attributes + const latitudeSpan = trace.spans.find( + (span) => span.documentUuid || span.distinctId || span.metadata, + ) + const { data: documentVersion } = useDocumentVersion( + latitudeSpan?.documentUuid, + { commitUuid: latitudeSpan?.commitUuid ?? undefined }, + ) + + console.log( + documentVersion, + latitudeSpan?.documentUuid, + latitudeSpan?.commitUuid, + ) + + return ( +
+ + + + + + +
+ {models.length > 0 ? ( + models.map((model: string) => ( + + {model} + + )) + ) : ( + - + )} +
+
+ + + + {documentVersion && ( + + + {documentVersion.path} + + + )} + {latitudeSpan?.distinctId && ( + + )} + {latitudeSpan?.metadata && ( + + + {JSON.stringify(latitudeSpan.metadata, null, 2)} + + + )} +
+ ) +} diff --git a/apps/web/src/app/(private)/traces/_components/TracesTable/index.tsx b/apps/web/src/app/(private)/traces/_components/TracesTable/index.tsx new file mode 100644 index 000000000..9b58732c2 --- /dev/null +++ b/apps/web/src/app/(private)/traces/_components/TracesTable/index.tsx @@ -0,0 +1,249 @@ +'use client' + +import { Key, useMemo, useState } from 'react' + +import { TraceWithSpans, Workspace } from '@latitude-data/core/browser' +import { buildPagination } from '@latitude-data/core/lib/pagination/buildPagination' +import { ListTracesResponse } from '@latitude-data/core/services/traces/list' +import { + Badge, + cn, + Table, + TableBody, + TableCell, + TableHead, + TableHeader, + TableRow, + TableSkeleton, + Text, +} from '@latitude-data/web-ui' +import { formatCostInMillicents, formatDuration } from '$/app/_lib/formatUtils' +import { LinkableTablePaginationFooter } from '$/components/TablePaginationFooter' +import { relativeTime } from '$/lib/relativeTime' +import { ROUTES } from '$/services/routes' +import useTracesPagination from '$/stores/useTracesPagination' +import { useSearchParams, usePathname } from 'next/navigation' +import { useNavigate } from '$/hooks/useNavigate' + +import { TraceInfo } from './TraceInfo' +import { useRealtimeTraces } from './useRealtimeTraces' +import { CompletedSearch, SearchBox } from './SearchBox' + +type Props = { + workspace: Workspace + traces: ListTracesResponse +} + +export function TracesTable({ traces: serverTraces, workspace }: Props) { + const navigate = useNavigate() + const pathname = usePathname() + const searchParams = useSearchParams() + const filtersParam = searchParams.get('filters') + const filters = filtersParam ? JSON.parse(filtersParam) : [] + const page = searchParams.get('page') ?? '1' + const pageSize = searchParams.get('pageSize') ?? '25' + const [selectedTrace, setSelectedTrace] = useState() + + const { data: traces, isLoading } = useTracesPagination( + { + page: Number(page), + pageSize: Number(pageSize), + filters, + }, + { + fallbackData: serverTraces, + }, + ) + + useRealtimeTraces({ + page: Number(page), + pageSize: Number(pageSize), + filters, + fallbackData: serverTraces, + }) + + const handleSearch = (completedSearches: CompletedSearch[]) => { + const params = new URLSearchParams(searchParams) + const newFilters = completedSearches.map((search) => ({ + field: search.column.field, + operator: search.operator.value, + value: search.value, + })) + + params.set('page', '1') + params.set('pageSize', '25') + params.set('filters', JSON.stringify(newFilters)) + navigate.push(`${pathname}?${params.toString()}`) + } + + const selectedTraceData = useMemo(() => { + if (!selectedTrace) return undefined + return traces?.items?.find( + (t: TraceWithSpans) => t.traceId === selectedTrace, + ) + }, [selectedTrace, traces?.items]) + + const pagination = traces?.items + ? buildPagination({ + baseUrl: ROUTES.traces.root, + count: traces.count, + page: Number(page), + pageSize: Number(pageSize), + }) + : undefined + + return ( +
+
+ + {!traces?.items?.length && isLoading ? ( + + ) : ( + <> + + + + Time + Model + Duration + Tokens + Cost ($) + + + + {traces?.items?.map((trace: TraceWithSpans) => { + const { totalDuration, totalCost, totalTokens, models } = + calculateTraceMetrics(trace) + + return ( + + setSelectedTrace( + selectedTrace === trace.traceId + ? undefined + : trace.traceId, + ) + } + className={cn( + 'cursor-pointer border-b-[0.5px] h-12 max-h-12 border-border', + { + 'bg-secondary': selectedTrace === trace.traceId, + 'animate-flash': !!trace.realtimeAdded, + }, + )} + > + + + {relativeTime(trace.startTime)} + + + +
+ {models.length > 0 ? ( + models.map((model) => ( + + {model} + + )) + ) : ( + - + )} +
+
+ + + {totalDuration ? formatDuration(totalDuration) : '-'} + + + + + {totalTokens ? totalTokens : '-'} + + + + + {totalCost ? formatCostInMillicents(totalCost) : '-'} + + +
+ ) + })} +
+
+ + + )} +
+ {selectedTrace && selectedTraceData && ( +
+ +
+ )} +
+ ) +} + +function countLabel(count: number) { + return `${count} traces` +} + +function calculateGenerationMetrics(spans?: TraceWithSpans['spans']) { + if (!spans) return { totalTokens: 0, totalCost: 0 } + + return spans.reduce( + (acc, span) => { + if (span.internalType === 'generation') { + const cost = span.totalCostInMillicents ?? 0 + const tokens = span.totalTokens ?? 0 + + return { + totalCost: acc.totalCost + cost, + totalTokens: acc.totalTokens + tokens, + } + } + return acc + }, + { totalTokens: 0, totalCost: 0 }, + ) +} + +function getUniqueSpanAttributes( + spans: TraceWithSpans['spans'], + attribute: string, +) { + if (!spans) return [] + + const uniqueValues = new Set( + spans.map((span) => span.attributes?.[attribute]).filter(Boolean), + ) + + return Array.from(uniqueValues) +} + +function calculateTraceMetrics(trace: TraceWithSpans) { + const totalDuration = trace.spans?.length + ? Math.max( + ...trace.spans.map((s) => + s.endTime ? new Date(s.endTime).getTime() : 0, + ), + ) - Math.min(...trace.spans.map((s) => new Date(s.startTime).getTime())) + : undefined + + const { totalCost, totalTokens } = calculateGenerationMetrics(trace.spans) + + const providers = getUniqueSpanAttributes(trace.spans, 'gen_ai.system') + const models = getUniqueSpanAttributes(trace.spans, 'gen_ai.request.model') + + return { + totalDuration, + totalCost, + totalTokens, + providers, + models, + } +} diff --git a/apps/web/src/app/(private)/traces/_components/TracesTable/useRealtimeTraces.ts b/apps/web/src/app/(private)/traces/_components/TracesTable/useRealtimeTraces.ts new file mode 100644 index 000000000..2d131d830 --- /dev/null +++ b/apps/web/src/app/(private)/traces/_components/TracesTable/useRealtimeTraces.ts @@ -0,0 +1,98 @@ +import useTracesPagination, { + serializeTrace, +} from '$/stores/useTracesPagination' +import { useCallback } from 'react' +import { + EventArgs, + useSockets, +} from '$/components/Providers/WebsocketsProvider/useSockets' +import { + SearchFilter, + Span, + Trace, + TraceWithSpans, +} from '@latitude-data/core/browser' +import { reverse, sortBy } from 'lodash-es' +import { ListTracesResponse } from '@latitude-data/core/services/traces/list' + +export function useRealtimeTraces({ + page, + pageSize, + filters, + fallbackData, +}: { + page: number + pageSize: number + filters: SearchFilter[] + fallbackData: ListTracesResponse +}) { + const { mutate } = useTracesPagination( + { + page: Number(page), + pageSize: Number(pageSize), + filters, + }, + { + fallbackData, + }, + ) + + const onMessage = useCallback( + (args: EventArgs<'tracesAndSpansCreated'>) => { + const { traces, spans } = args + + // group spans by trace + const spansByTrace = traces.map((t: Trace) => { + const sps = spans.filter((s: Span) => s.traceId === t.traceId) + return { ...t, spans: sps } as TraceWithSpans + }) + + mutate( + (data: ListTracesResponse) => { + let newData = [...(data?.items || [])] + + spansByTrace.forEach((trace: TraceWithSpans) => { + const i = newData.findIndex((t) => t.traceId === trace.traceId) + + if (i > -1) { + const existing = newData[i]! + spans.forEach((span) => { + const index = existing.spans.findIndex( + (s) => s.spanId === span.spanId, + ) + if (index !== -1) { + existing.spans[index] = span + } else { + existing.spans.push(span) + } + }) + existing.realtimeAdded = true + } else { + newData.push(serializeTrace({ ...trace, realtimeAdded: true })) + } + }) + + newData = reverse(sortBy(newData, (t) => t.startTime)) + + if (!data) { + return { + items: newData, + count: newData.length, + page, + pageSize, + } + } else { + return { + ...data, + items: newData, + } + } + }, + { revalidate: false }, + ) + }, + [mutate], + ) + + useSockets({ event: 'tracesAndSpansCreated', onMessage }) +} diff --git a/apps/web/src/app/(private)/traces/_components/TracesTable/utils.ts b/apps/web/src/app/(private)/traces/_components/TracesTable/utils.ts new file mode 100644 index 000000000..a0e33ebf6 --- /dev/null +++ b/apps/web/src/app/(private)/traces/_components/TracesTable/utils.ts @@ -0,0 +1,47 @@ +import { TraceWithSpans } from '@latitude-data/core/browser' + +export function calculateTraceMetrics(trace: TraceWithSpans) { + let totalCost = 0 + let totalTokens = 0 + const models = new Set() + + let minStartTime: number | null = null + let maxEndTime: number | null = null + + trace.spans.forEach((span) => { + if (span.startTime && span.endTime) { + try { + const startTimeMs = new Date(span.startTime).getTime() + const endTimeMs = new Date(span.endTime).getTime() + + if (minStartTime === null || startTimeMs < minStartTime) { + minStartTime = startTimeMs + } + if (maxEndTime === null || endTimeMs > maxEndTime) { + maxEndTime = endTimeMs + } + } catch (e) { + // do nothing, invalid timestamps encountered + } + } + if (span.totalCostInMillicents) { + totalCost += Number(span.totalCostInMillicents) + } + if (span.totalTokens) { + totalTokens += Number(span.totalTokens) + } + if (span.model) { + models.add(String(span.model)) + } + }) + + const totalDuration = + minStartTime && maxEndTime ? maxEndTime - minStartTime : 0 + + return { + totalDuration, + totalCost, + totalTokens, + models: Array.from(models), + } +} diff --git a/apps/web/src/app/(private)/traces/layout.tsx b/apps/web/src/app/(private)/traces/layout.tsx new file mode 100644 index 000000000..1f277d55a --- /dev/null +++ b/apps/web/src/app/(private)/traces/layout.tsx @@ -0,0 +1,22 @@ +import { ReactNode } from 'react' + +import { Container } from '@latitude-data/web-ui' +import buildMetatags from '$/app/_lib/buildMetatags' +import { AppTabs } from '$/app/(private)/AppTabs' + +export const metadata = buildMetatags({ + title: 'Settings', +}) + +export default async function SettingsLayout({ + children, +}: Readonly<{ + children: ReactNode +}>) { + return ( + + + {children} + + ) +} diff --git a/apps/web/src/app/(private)/traces/page.tsx b/apps/web/src/app/(private)/traces/page.tsx new file mode 100644 index 000000000..f4abed1cc --- /dev/null +++ b/apps/web/src/app/(private)/traces/page.tsx @@ -0,0 +1,37 @@ +import { listTraces } from '@latitude-data/core/services/traces/list' +import { TableWithHeader } from '@latitude-data/web-ui' +import { getApiKeysCached } from '$/app/(private)/_data-access' +import { getCurrentUser } from '$/services/auth/getCurrentUser' +import { TracesTable } from './_components/TracesTable' +import { TracesBlankSlate } from './_components/TracesBlankSlate' + +export default async function TracesPage({ + searchParams, +}: { + searchParams: Promise<{ + page: string + pageSize: string + }> +}) { + const { workspace } = await getCurrentUser() + const { page, pageSize } = await searchParams + const apiKeys = await getApiKeysCached() + const traces = await listTraces({ + workspace, + page: Number(page ?? '1'), + pageSize: Number(pageSize ?? '25'), + }).then((r) => r.unwrap()) + + if (!traces?.items.length) { + return + } + + return ( +
+ } + /> +
+ ) +} diff --git a/apps/web/src/app/(public)/share/d/[publishedDocumentUuid]/_components/Messages/AllMessages/index.tsx b/apps/web/src/app/(public)/share/d/[publishedDocumentUuid]/_components/Messages/AllMessages/index.tsx index a95ec0933..c14bc1033 100644 --- a/apps/web/src/app/(public)/share/d/[publishedDocumentUuid]/_components/Messages/AllMessages/index.tsx +++ b/apps/web/src/app/(public)/share/d/[publishedDocumentUuid]/_components/Messages/AllMessages/index.tsx @@ -8,8 +8,8 @@ import { Conversation, Message as ConversationMessage, } from '@latitude-data/compiler' -import { StreamMessage } from '$/app/(private)/projects/[projectId]/versions/[commitUuid]/documents/[documentUuid]/_components/DocumentEditor/Editor/Playground/Chat' import { ExpandMessages } from '../ExpandMessages' +import { StreamMessage } from '$/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/documents/[documentUuid]/_components/DocumentEditor/Editor/Playground/Chat' export function AllMessages({ messages, diff --git a/apps/web/src/app/(public)/share/d/[publishedDocumentUuid]/_components/Messages/ChatMessages/index.tsx b/apps/web/src/app/(public)/share/d/[publishedDocumentUuid]/_components/Messages/ChatMessages/index.tsx index aa688f330..9ee0330ae 100644 --- a/apps/web/src/app/(public)/share/d/[publishedDocumentUuid]/_components/Messages/ChatMessages/index.tsx +++ b/apps/web/src/app/(public)/share/d/[publishedDocumentUuid]/_components/Messages/ChatMessages/index.tsx @@ -1,6 +1,6 @@ +import { StreamMessage } from '$/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/documents/[documentUuid]/_components/DocumentEditor/Editor/Playground/Chat' import { Conversation } from '@latitude-data/compiler' import { ErrorMessage, MessageList, Text } from '@latitude-data/web-ui' -import { StreamMessage } from '$/app/(private)/projects/[projectId]/versions/[commitUuid]/documents/[documentUuid]/_components/DocumentEditor/Editor/Playground/Chat' export function ChatMessages({ conversation, responseStream, diff --git a/apps/web/src/app/api/documents/[documentUuid]/route.test.ts b/apps/web/src/app/api/documents/[documentUuid]/route.test.ts new file mode 100644 index 000000000..7a21a6bc4 --- /dev/null +++ b/apps/web/src/app/api/documents/[documentUuid]/route.test.ts @@ -0,0 +1,84 @@ +import { Providers } from '@latitude-data/core/browser' +import { createProject, helpers } from '@latitude-data/core/factories' +import { NextRequest } from 'next/server' +import { beforeEach, describe, expect, it, vi } from 'vitest' + +import { GET } from './route' + +const mocks = vi.hoisted(() => { + return { + getSession: vi.fn(), + } +}) +vi.mock('$/services/auth/getSession', () => ({ + getSession: mocks.getSession, +})) + +describe('GET handler for documents/[documentUuid]', () => { + let mockRequest: NextRequest + let mockParams: { commitUuid: string; documentUuid: string } + let mockWorkspace: any + + beforeEach(async () => { + mockRequest = new NextRequest('http://localhost:3000') + const { workspace, documents } = await createProject({ + providers: [{ type: Providers.OpenAI, name: 'openai' }], + documents: { + foo: { + content: helpers.createPrompt({ provider: 'openai', content: 'foo' }), + }, + }, + }) + + mockParams = { + commitUuid: documents[0]!.commitId.toString(), + documentUuid: documents[0]!.documentUuid, + } + mockWorkspace = workspace + }) + + describe('unauthorized', () => { + it('should return 401 if user is not authenticated', async () => { + const response = await GET(mockRequest, { + params: mockParams, + workspace: mockWorkspace, + } as any) + + expect(response.status).toBe(401) + expect(await response.json()).toEqual({ + message: 'Unauthorized', + }) + }) + }) + + describe('authorized', () => { + beforeEach(async () => { + mocks.getSession.mockReturnValue({ user: { id: 1 } }) + }) + + it('should return 400 if required params are missing', async () => { + const response = await GET(mockRequest, { + params: {}, + workspace: mockWorkspace, + } as any) + + expect(response.status).toBe(400) + expect(await response.json()).toEqual({ + message: 'Commit UUID and Document UUID are required', + }) + }) + + it('should return document version when valid params are provided', async () => { + const response = await GET(mockRequest, { + params: mockParams, + workspace: mockWorkspace, + }) + + expect(response.status).toBe(200) + const data = await response.json() + expect(data).toMatchObject({ + documentUuid: mockParams.documentUuid, + }) + }) + }) +}) diff --git a/apps/web/src/app/api/documents/[documentUuid]/route.ts b/apps/web/src/app/api/documents/[documentUuid]/route.ts new file mode 100644 index 000000000..8224ad9b4 --- /dev/null +++ b/apps/web/src/app/api/documents/[documentUuid]/route.ts @@ -0,0 +1,63 @@ +import { Commit, Workspace } from '@latitude-data/core/browser' +import { + CommitsRepository, + DocumentVersionsRepository, +} from '@latitude-data/core/repositories' +import { authHandler } from '$/middlewares/authHandler' +import { errorHandler } from '$/middlewares/errorHandler' +import { NextRequest, NextResponse } from 'next/server' +import { documentVersionPresenter } from '@latitude-data/core/services/providerLogs/documentVersionPresenter' +import { findCommitById } from '@latitude-data/core/data-access/commits' +import { NotFoundError } from '@latitude-data/core/lib/errors' + +export const GET = errorHandler( + authHandler( + async ( + req: NextRequest, + { + params, + workspace, + }: { + params: { + documentUuid: string + } + workspace: Workspace + }, + ) => { + const { documentUuid } = params + const commitUuid = req.nextUrl.searchParams.get('commitUuid') + + let commit: Commit | null = null + if (commitUuid) { + const commitsScope = new CommitsRepository(workspace.id) + commit = await commitsScope + .getCommitByUuid({ uuid: commitUuid }) + .then((r) => r.unwrap()) + } + + const docsScope = new DocumentVersionsRepository(workspace.id) + const documentVersion = await docsScope + .getDocumentByUuid({ + documentUuid, + commit: commit ?? undefined, + }) + .then((r) => r.unwrap()) + + commit = + commit || + (await findCommitById({ id: documentVersion.commitId }).then((r) => + r.unwrap(), + )) + if (!commit) { + throw new NotFoundError('Commit not found') + } + + return NextResponse.json( + documentVersionPresenter({ + documentVersion, + commit, + }), + ) + }, + ), +) diff --git a/apps/web/src/app/api/traces/route.ts b/apps/web/src/app/api/traces/route.ts new file mode 100644 index 000000000..1042833b0 --- /dev/null +++ b/apps/web/src/app/api/traces/route.ts @@ -0,0 +1,26 @@ +import { Workspace } from '@latitude-data/core/browser' +import { listTraces } from '@latitude-data/core/services/traces/list' +import { authHandler } from '$/middlewares/authHandler' +import { errorHandler } from '$/middlewares/errorHandler' +import { NextRequest } from 'next/server' + +export const GET = errorHandler( + authHandler( + async (request: NextRequest, { workspace }: { workspace: Workspace }) => { + const { searchParams } = request.nextUrl + const page = Number(searchParams.get('page') || '1') + const pageSize = Number(searchParams.get('pageSize') || '25') + const filtersParam = searchParams.get('filters') + const filters = filtersParam ? JSON.parse(filtersParam) : [] + + const traces = await listTraces({ + workspace, + page, + pageSize, + filters, + }).then((r) => r.unwrap()) + + return Response.json(traces) + }, + ), +) diff --git a/apps/web/src/app/layout.tsx b/apps/web/src/app/layout.tsx index fadc82180..cabf28219 100644 --- a/apps/web/src/app/layout.tsx +++ b/apps/web/src/app/layout.tsx @@ -40,7 +40,7 @@ export default function RootLayout({ > {children} - + ) diff --git a/apps/web/src/components/EditorHeader/index.tsx b/apps/web/src/components/EditorHeader/index.tsx index ccb4bd09f..d53a65923 100644 --- a/apps/web/src/components/EditorHeader/index.tsx +++ b/apps/web/src/components/EditorHeader/index.tsx @@ -78,6 +78,7 @@ export default function EditorHeader({ metadata, onChangePrompt, rightActions, + leftActions, disabledMetadataSelectors = false, providers, freeRunsCount, @@ -89,6 +90,7 @@ export default function EditorHeader({ prompt: string onChangePrompt: (prompt: string) => void rightActions?: ReactNode + leftActions?: ReactNode disabledMetadataSelectors?: boolean providers?: ProviderApiKey[] freeRunsCount?: number @@ -216,8 +218,11 @@ export default function EditorHeader({ return (
- {title} -
+
+ {title} + {leftActions} +
+
{rightActions} {currentCommit?.title ?? commitUuid} - + { console.error(error) } } + +export const captureMessage = (message: string) => { + if (env.NODE_ENV === 'production') { + Sentry.captureMessage(message) + } else { + console.log(message) + } +} diff --git a/apps/web/src/hooks/useFetcher.ts b/apps/web/src/hooks/useFetcher.ts index 51b891028..35e5ff3a0 100644 --- a/apps/web/src/hooks/useFetcher.ts +++ b/apps/web/src/hooks/useFetcher.ts @@ -46,7 +46,7 @@ export default function useFetcher( description: 'Something went wrong on the server', variant: 'destructive', }) - } else { + } else if (response.status !== 404) { const error = await response.json() toast({ diff --git a/apps/web/src/services/routes.ts b/apps/web/src/services/routes.ts index 794f9575c..7888b9bd9 100644 --- a/apps/web/src/services/routes.ts +++ b/apps/web/src/services/routes.ts @@ -43,6 +43,9 @@ const BACKOFFICE_ROOT = '/backoffice' export const ROUTES = { root: '/', api: _API_ROUTES, + traces: { + root: '/traces', + }, backoffice: { root: BACKOFFICE_ROOT, [BackofficeRoutes.templates]: { diff --git a/apps/web/src/services/routes/api.ts b/apps/web/src/services/routes/api.ts index 8652f0f2e..46a702093 100644 --- a/apps/web/src/services/routes/api.ts +++ b/apps/web/src/services/routes/api.ts @@ -24,6 +24,14 @@ export const _API_ROUTES = { users: { root: '/api/users', }, + traces: { + root: '/api/traces', + }, + documents: { + detail: (documentUuid: string) => ({ + root: `/api/documents/${documentUuid}`, + }), + }, projects: { root: '/api/projects', detail: (id: number) => { diff --git a/apps/web/src/stores/commitsStore.ts b/apps/web/src/stores/commitsStore.ts index 254967871..10b8dbd9a 100644 --- a/apps/web/src/stores/commitsStore.ts +++ b/apps/web/src/stores/commitsStore.ts @@ -21,15 +21,32 @@ export function useCommits(opts: CommitOptions = {}) { } export function useCommitsFromProject( - projectId: number, + projectId?: number, opts: CommitOptions = {}, ) { const { onSuccessCreate, onSuccessDestroy, onSuccessPublish, commitStatus } = opts const { toast } = useToast() - const route = ROUTES.api.projects.detail(projectId).commits.root + const route = projectId + ? ROUTES.api.projects.detail(projectId).commits.root + : undefined const fetcher = useFetcher( - commitStatus ? `${route}?status=${commitStatus}` : route, + route + ? commitStatus + ? `${route}?status=${commitStatus}` + : route + : undefined, + { + // Sort by latest version first + serializer: (data) => + data.sort((a: Commit, b: Commit) => { + if (a.version === null && b.version === null) return 0 + if (a.version === null) return 1 + if (b.version === null) return -1 + + return b.version - a.version + }), + }, ) const { diff --git a/apps/web/src/stores/documentLogsWithEvaluationResults.ts b/apps/web/src/stores/documentLogsWithEvaluationResults.ts index 4290ad3e5..e95feba26 100644 --- a/apps/web/src/stores/documentLogsWithEvaluationResults.ts +++ b/apps/web/src/stores/documentLogsWithEvaluationResults.ts @@ -1,10 +1,10 @@ import { compactObject } from '@latitude-data/core/lib/compactObject' -import { DocumentLogWithMetadataAndErrorAndEvaluationResult } from '$/app/(private)/projects/[projectId]/versions/[commitUuid]/documents/[documentUuid]/evaluations/[evaluationId]/_components/ManualEvaluationResults' import useFetcher from '$/hooks/useFetcher' import { ROUTES } from '$/services/routes' import useSWR, { SWRConfiguration } from 'swr' import { documentLogPresenter } from './documentLogs' +import { DocumentLogWithMetadataAndErrorAndEvaluationResult } from '$/app/(private)/projects/[projectId]/versions/[commitUuid]/(commit)/documents/[documentUuid]/evaluations/[evaluationId]/_components/ManualEvaluationResults' const EMPTY_LIST: DocumentLogWithMetadataAndErrorAndEvaluationResult[] = [] export function useDocumentLogsWithEvaluationResults( diff --git a/apps/web/src/stores/documentVersions.ts b/apps/web/src/stores/documentVersions.ts index 083caa249..21e006519 100644 --- a/apps/web/src/stores/documentVersions.ts +++ b/apps/web/src/stores/documentVersions.ts @@ -4,6 +4,7 @@ import { useCallback } from 'react' import { assignDatasetAction } from '$/actions/documents/assignDatasetAction' import { createDocumentVersionAction } from '$/actions/documents/create' +import { createDocumentVersionFromTraceAction } from '$/actions/documents/createFromTrace' import { destroyDocumentAction } from '$/actions/documents/destroyDocumentAction' import { destroyFolderAction } from '$/actions/documents/destroyFolderAction' import { renameDocumentPathsAction } from '$/actions/documents/renamePathsAction' @@ -286,6 +287,26 @@ export default function useDocumentVersions( }, }) + const { execute: createFromTrace } = useLatitudeAction( + createDocumentVersionFromTraceAction, + { + onSuccess: ({ data: documentVersion }) => { + toast({ + title: 'Success', + description: 'Document successfully created', + }) + mutate([...data, documentVersion]) + }, + onError: (error) => { + toast({ + title: 'Error creating document', + description: error.err.formErrors?.[0] || error.err.message, + variant: 'destructive', + }) + }, + }, + ) + return { data, isValidating: isValidating, @@ -293,6 +314,7 @@ export default function useDocumentVersions( error: swrError, createFile, uploadFile, + createFromTrace, renamePaths, destroyFile, destroyFolder, diff --git a/apps/web/src/stores/useDocumentVersion.ts b/apps/web/src/stores/useDocumentVersion.ts new file mode 100644 index 000000000..ce418f255 --- /dev/null +++ b/apps/web/src/stores/useDocumentVersion.ts @@ -0,0 +1,29 @@ +'use client' + +import { DocumentVersionDto } from '@latitude-data/core/browser' +import useFetcher from '$/hooks/useFetcher' +import { ROUTES } from '$/services/routes' +import useSWR, { SWRConfiguration } from 'swr' + +export default function useDocumentVersion( + documentUuid?: string | null, + { commitUuid }: { commitUuid?: string } = {}, + opts?: SWRConfiguration, +) { + const fetcher = useFetcher( + documentUuid + ? `${ROUTES.api.documents.detail(documentUuid).root}${ + commitUuid ? `?commitUuid=${commitUuid}` : '' + }` + : undefined, + { + fallback: null, + }, + ) + + return useSWR( + ['commits', commitUuid, 'documents', documentUuid], + fetcher, + opts, + ) +} diff --git a/apps/web/src/stores/useTracesPagination.ts b/apps/web/src/stores/useTracesPagination.ts new file mode 100644 index 000000000..3d8f38b27 --- /dev/null +++ b/apps/web/src/stores/useTracesPagination.ts @@ -0,0 +1,48 @@ +import { SearchFilter } from '@latitude-data/core/browser' +import useSWR, { SWRConfiguration } from 'swr' +import useFetcher from '$/hooks/useFetcher' +import { ROUTES } from '$/services/routes' + +type TracesQueryParams = { + page: number + pageSize: number + filters?: SearchFilter[] +} + +export default function useTracesPagination( + { page, pageSize, filters }: TracesQueryParams, + options?: SWRConfiguration, +) { + const searchParams = new URLSearchParams({ + page: page.toString(), + pageSize: pageSize.toString(), + }) + + if (filters?.length) { + searchParams.append('filters', JSON.stringify(filters)) + } + + const fetcher = useFetcher( + `${ROUTES.api.traces.root}?${searchParams.toString()}`, + { + serializer, + fallback: options?.fallbackData, + }, + ) + + return useSWR(['traces', page, pageSize, filters], fetcher, options) +} + +function serializer(data: any) { + return { + ...data, + items: data.items.map(serializeTrace), + } +} + +export function serializeTrace(trace: any) { + return { + ...trace, + startTime: new Date(trace.startTime), + } +} diff --git a/apps/websockets/src/server.ts b/apps/websockets/src/server.ts index 7958a70a6..7e8ccffef 100644 --- a/apps/websockets/src/server.ts +++ b/apps/websockets/src/server.ts @@ -145,6 +145,12 @@ workers.on('connection', (socket) => { const workspace = buildWorkspaceRoom({ workspaceId }) web.to(workspace).emit('documentLogCreated', data) }) + + socket.on('tracesAndSpansCreated', (args) => { + const { workspaceId, data } = args + const workspace = buildWorkspaceRoom({ workspaceId }) + web.to(workspace).emit('tracesAndSpansCreated', data) + }) }) const PORT = process.env.WEBSOCKETS_SERVER_PORT || 4002 diff --git a/examples/chat-app/.env.example b/examples/chat-app/.env.example new file mode 100644 index 000000000..fc0a68249 --- /dev/null +++ b/examples/chat-app/.env.example @@ -0,0 +1,11 @@ +# OpenAI API Key +OPENAI_API_KEY=your-openai-api-key + +# Latitude API Key +LATITUDE_API_KEY=your-latitude-api-key + +# OpenWeather API Key +OPENWEATHER_API_KEY=your-openweather-api-key + +# Server Configuration +PORT=3000 \ No newline at end of file diff --git a/examples/chat-app/README.md b/examples/chat-app/README.md new file mode 100644 index 000000000..ffb5a78cc --- /dev/null +++ b/examples/chat-app/README.md @@ -0,0 +1,45 @@ +# Simple Chat Application with GPT-4 + +This is a simple web application that allows users to chat with OpenAI's GPT-4 model through a clean and intuitive interface. + +## Setup + +1. Install dependencies: + +```bash +npm install +``` + +2. Create a `.env` file in the root directory and add your configuration: + +``` +# Required +OPENAI_API_KEY=your_api_key_here + +# Optional (defaults to 3000) +PORT=3000 +``` + +3. Start the development server: + +```bash +npm run dev +``` + +The application will be available at http://localhost:3000 (or your configured PORT) + +## Features + +- Clean and responsive chat interface +- Real-time communication with GPT-4 +- Simple error handling +- Support for Enter key to send messages +- Configurable server port + +## Technologies Used + +- Express.js +- TypeScript +- OpenAI API +- HTML/CSS +- Fetch API for frontend communication diff --git a/examples/chat-app/config.ts b/examples/chat-app/config.ts new file mode 100644 index 000000000..b4d751808 --- /dev/null +++ b/examples/chat-app/config.ts @@ -0,0 +1,25 @@ +import path from 'path' +import { fileURLToPath } from 'url' + +import { Latitude } from '@latitude-data/sdk' +import OpenAI from 'openai' + +// @ts-expect-error - tsconfig shenanigans +const __filename = fileURLToPath(import.meta.url) +export const __dirname = path.dirname(__filename) + +export const PORT = process.env.PORT ? parseInt(process.env.PORT) : 3005 + +// Initialize Latitude client +export const latitude = new Latitude(process.env.LATITUDE_API_KEY!, { + projectId: 15, +}) + +// Add conversation history storage (in memory) +export const conversations = new Map< + string, + Array +>() + +export const SYSTEM_PROMPT = + 'You are a professional meteorologist and weather forecaster with years of experience. Provide detailed, accurate weather information and forecasts in a clear, professional manner. When discussing weather patterns, include relevant meteorological terms and explanations while keeping the information accessible. If asked about weather in specific locations, you should always use the getWeather function to get current data before providing your analysis.' diff --git a/examples/chat-app/handlers/anthropic.ts b/examples/chat-app/handlers/anthropic.ts new file mode 100644 index 000000000..0649e0030 --- /dev/null +++ b/examples/chat-app/handlers/anthropic.ts @@ -0,0 +1,150 @@ +import { Request, Response } from 'express' +import Anthropic from '@anthropic-ai/sdk' + +import { getWeather } from '../services/weather' +import { Adapters, Latitude } from '@latitude-data/sdk' + +const latitude = new Latitude('9d5a427b-f4db-42c4-ac03-41e30675bac2', { + __internal: { + gateway: { + host: 'localhost', + port: 8787, + ssl: false, + }, + }, + telemetry: { + modules: { + // @ts-ignore + anthropic: Anthropic, + }, + }, +}) +const anthropic = new Anthropic({ + apiKey: process.env.ANTHROPIC_API_KEY, +}) + +export async function handleAnthropicChat(req: Request, res: Response) { + try { + const { messages: incoming, conversationId = 'default' } = req.body + const prompt = await latitude.prompts.get('weather-prompt', { + projectId: 21, + }) + const { config, messages } = await latitude.prompts.render({ + prompt, + parameters: { + user_message: incoming[incoming.length - 1].text, + }, + adapter: Adapters.anthropic, + }) + + const responseMessage = await latitude.telemetry.span( + { + prompt: { + uuid: 'c65dafaf-78d4-49f5-a2df-c991c9683300', + parameters: { user_message: incoming[incoming.length - 1].text }, + }, + }, + async () => + await anthropic.messages.create({ + model: 'claude-3-5-sonnet-20240620', + system: config.system as string, + max_tokens: 1000, + messages, + tools: [ + { + name: 'getWeather', + description: 'Get the weather for a given location', + input_schema: { + type: 'object', + properties: { + location: { type: 'string' }, + }, + }, + }, + ], + }), + ) + + const toolCalls = responseMessage.content.filter( + (content) => content.type === 'tool_use', + ) + + // Handle tool calls + if (toolCalls?.length > 0) { + const toolResults = await Promise.all( + toolCalls.map(async (toolCall) => { + if (toolCall.type === 'tool_use' && toolCall.name === 'getWeather') { + const args = toolCall.input as { location: string } + const weatherData = await getWeather(args.location) + return { + type: 'tool_result' as const, + tool_use_id: toolCall.id, + content: JSON.stringify(weatherData), + } + } + return null + }), + ) + + const validToolResults = toolResults.filter( + (result): result is NonNullable => result !== null, + ) + + // Create conversation with tool results in a user message + const convo = [ + ...messages, + { + role: 'assistant' as const, + content: responseMessage.content, + }, + { + role: 'user' as const, + content: validToolResults, + }, + ] + + // Get final response with tool results + const secondResponse = await anthropic.messages.create({ + model: 'claude-3-5-sonnet-20240620', + max_tokens: 1000, + messages: convo, + tools: [ + { + name: 'getWeather', + description: 'Get the weather for a given location', + input_schema: { + type: 'object', + properties: { + location: { type: 'string' }, + }, + }, + }, + ], + }) + + // Extract text from the response + const assistantResponse = + secondResponse.content.find((block) => block.type === 'text')?.text || + 'No response generated' + + res.json({ + response: assistantResponse, + conversationId, + }) + } else { + // Handle regular response without tool calls + const assistantResponse = + responseMessage.content[0].text || 'No response generated' + + res.json({ + response: assistantResponse, + conversationId, + }) + } + } catch (error) { + console.error('Error:', error) + res + .status(500) + .json({ error: 'An error occurred while processing your request' }) + } +} diff --git a/examples/chat-app/handlers/openai.ts b/examples/chat-app/handlers/openai.ts new file mode 100644 index 000000000..1e9c47fdf --- /dev/null +++ b/examples/chat-app/handlers/openai.ts @@ -0,0 +1,135 @@ +import { Request, Response } from 'express' +import OpenAI from 'openai' +import { zodResponseFormat } from 'openai/helpers/zod' +import z from 'zod' + +import { getWeather } from '../services/weather' +import { Latitude } from '@latitude-data/sdk' + +const latitude = new Latitude('9d5a427b-f4db-42c4-ac03-41e30675bac2', { + __internal: { + gateway: { + host: 'localhost', + port: 8787, + ssl: false, + }, + }, + telemetry: { + modules: { + // @ts-ignore + openAI: OpenAI, + }, + }, +}) + +// Initialize OpenAI client +export const openai = new OpenAI({ + apiKey: process.env.OPENAI_API_KEY, +}) + +export async function handleChat(req: Request, res: Response) { + try { + const { messages: incoming, conversationId = 'default' } = req.body + const prompt = await latitude.prompts.get('weather-prompt', { + projectId: 21, + }) + const { config, messages } = await latitude.prompts.render({ + prompt, + parameters: { + user_message: incoming[incoming.length - 1].text, + }, + }) + + const completion = await latitude.telemetry.span( + { + prompt: { + uuid: 'c65dafaf-78d4-49f5-a2df-c991c9683300', + parameters: { user_message: incoming[incoming.length - 1].text }, + }, + }, + async () => + await openai.chat.completions.create({ + model: 'gpt-4o-mini', + max_tokens: 1000, + // @ts-ignore + messages, + // @ts-ignore + tools: config.tools.map((tool: any) => ({ + type: 'function', + function: tool, + })), + }), + ) + + const responseMessage = completion.choices[0].message + + // Handle tool calls + if (responseMessage.tool_calls?.length > 0) { + const toolResults = await Promise.all( + responseMessage.tool_calls.map(async (toolCall) => { + if (toolCall.function.name === 'getWeather') { + const args = JSON.parse(toolCall.function.arguments) + const weatherData = await getWeather(args.location) + return { + tool_call_id: toolCall.id, + role: 'tool' as const, + content: JSON.stringify(weatherData), + } + } + return null + }), + ) + + // Filter out null results and add tool responses to conversation + const validToolResults = toolResults.filter( + (result): result is NonNullable => result !== null, + ) + + const convo = [ + ...messages, + responseMessage, + ...validToolResults.map((result) => result), + ] + + // Get final response with tool results + const secondResponse = await openai.chat.completions.create({ + model: 'gpt-4o-mini', + // @ts-ignore + messages: convo, + }) + + const assistantResponse = + secondResponse.choices[0]?.message?.content || 'No response generated' + + res.json({ + response: assistantResponse, + conversationId, + }) + } else { + // Handle regular response without tool calls + const assistantResponse = + responseMessage.content || 'No response generated' + + res.json({ + response: assistantResponse, + conversationId, + }) + } + } catch (error) { + console.error('Error:', error) + res + .status(500) + .json({ error: 'An error occurred while processing your request' }) + } +} + +export function handleClearChat(res: Response) { + try { + res.json({ success: true }) + } catch (error) { + console.error('Error:', error) + res + .status(500) + .json({ error: 'An error occurred while clearing the conversation' }) + } +} diff --git a/examples/chat-app/handlers/vercel.ts b/examples/chat-app/handlers/vercel.ts new file mode 100644 index 000000000..5fb9a2e23 --- /dev/null +++ b/examples/chat-app/handlers/vercel.ts @@ -0,0 +1,141 @@ +import { Request, Response } from 'express' +import { generateText, jsonSchema } from 'ai' +import { openai } from '@ai-sdk/openai' + +import { getWeather } from '../services/weather' +import { latitude } from '../instrumentation' +import { generateObject } from 'ai' + +export async function handleVercelChat(req: Request, res: Response) { + try { + const { messages: incoming, conversationId = 'default' } = req.body + const prompt = await latitude.prompts.get('weather-prompt') + const { config, messages } = await latitude.prompts.render({ + prompt, + parameters: { + user_message: incoming[incoming.length - 1].text, + }, + }) + + const completion = await latitude.telemetry.span( + { + prompt: { + path: 'weather-prompt', + parameters: { + user_message: incoming[incoming.length - 1].text, + }, + }, + }, + () => + generateObject({ + model: openai('gpt-3.5-turbo'), + max_tokens: 1000, + messages, + tools: config.tools.map((tool: any) => ({ + ...tool, + parameters: jsonSchema(tool.parameters), + })), + experimental_telemetry: { + isEnabled: true, + }, + schema: jsonSchema({ + type: 'object', + properties: { + response: { type: 'string' }, + }, + required: ['response'], + }), + }), + ) + + const responseMessage = await completion.object + return res.json({ + response: responseMessage.response, + conversationId, + }) + + const toolcalls = Array.isArray(responseMessage.content) + ? responseMessage.content.filter((c) => c.type === 'tool-call') + : [] + + // Handle tool calls + if (toolcalls.length > 0) { + const toolResults = await Promise.all( + toolcalls.map(async (toolCall) => { + const args = toolCall.args as { location: string } + const weatherData = await getWeather(args.location) + return { + role: 'tool', + content: [ + { + type: 'tool-result', + toolCallId: toolCall.toolCallId, + toolName: toolCall.toolName, + result: JSON.stringify(weatherData), + }, + ], + } + }), + ) + + // Filter out null results and add tool responses to conversation + const validToolResults = toolResults.filter( + (result): result is NonNullable => result !== null, + ) + + const convo = [ + ...messages, + responseMessage, + ...validToolResults.map((result) => result), + ] + + // Get final response with tool results + const secondResponse = await generateText({ + model: openai('gpt-3.5-turbo'), + // @ts-ignore + messages: convo, + experimental_telemetry: { + isEnabled: true, + }, + }) + + const assistantResponse = (await secondResponse.response).messages[0] + const finalResponse = + typeof assistantResponse.content === 'string' + ? assistantResponse.content + : assistantResponse.content[0].text || 'No response generated' + + res.json({ + response: finalResponse, + conversationId, + }) + } else { + // Handle regular response without tool calls + const assistantResponse = + typeof responseMessage.content === 'string' + ? responseMessage.content + : responseMessage.content[0].text || 'No response generated' + + res.json({ + response: assistantResponse, + conversationId, + }) + } + } catch (error) { + console.error('Error:', error) + res + .status(500) + .json({ error: 'An error occurred while processing your request' }) + } +} + +export function handleVercelClearChat(res: Response) { + try { + res.json({ success: true }) + } catch (error) { + console.error('Error:', error) + res + .status(500) + .json({ error: 'An error occurred while clearing the conversation' }) + } +} diff --git a/examples/chat-app/instrumentation.ts b/examples/chat-app/instrumentation.ts new file mode 100644 index 000000000..d5299e4d0 --- /dev/null +++ b/examples/chat-app/instrumentation.ts @@ -0,0 +1,33 @@ +import dotenv from 'dotenv' +import { Latitude } from '@latitude-data/sdk' +import { Anthropic } from '@anthropic-ai/sdk' +import OpenAI from 'openai' + +// Load environment variables first +dotenv.config() + +export const latitude = new Latitude(process.env.LATITUDE_API_KEY, { + projectId: 21, + telemetry: { + disableBatch: true, + //processors: [VercelSpanProcessor], + modules: { + // @ts-ignore + openAI: OpenAI, + // @ts-ignore + anthropic: Anthropic, + }, + }, +}) + +const secondLatitudeProject = new Latitude( + '9d5a427b-f4db-42c4-ac03-41e30675bac2', + { + projectId: 23, + telemetry: { + modules: { + openAI: OpenAI, // Check the documentation to get a list of supported modules + }, + }, + }, +) diff --git a/examples/chat-app/package-lock.json b/examples/chat-app/package-lock.json new file mode 100644 index 000000000..6064121e0 --- /dev/null +++ b/examples/chat-app/package-lock.json @@ -0,0 +1,1557 @@ +{ + "name": "chat-app", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "chat-app", + "version": "1.0.0", + "dependencies": { + "dotenv": "^16.3.1", + "express": "^4.18.2", + "openai": "^4.0.0" + }, + "devDependencies": { + "@types/express": "^4.17.21", + "@types/node": "^20.10.0", + "nodemon": "^3.0.1", + "ts-node": "^10.9.1", + "typescript": "^5.3.2" + } + }, + "node_modules/@cspotcode/source-map-support": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "0.3.9" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "dev": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "node_modules/@tsconfig/node10": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz", + "integrity": "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==", + "dev": true + }, + "node_modules/@tsconfig/node12": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", + "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", + "dev": true + }, + "node_modules/@tsconfig/node14": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", + "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", + "dev": true + }, + "node_modules/@tsconfig/node16": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", + "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", + "dev": true + }, + "node_modules/@types/body-parser": { + "version": "1.19.5", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz", + "integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==", + "dev": true, + "dependencies": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "node_modules/@types/connect": { + "version": "3.4.38", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", + "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/express": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz", + "integrity": "sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==", + "dev": true, + "dependencies": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.33", + "@types/qs": "*", + "@types/serve-static": "*" + } + }, + "node_modules/@types/express-serve-static-core": { + "version": "4.19.6", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.6.tgz", + "integrity": "sha512-N4LZ2xG7DatVqhCZzOGb1Yi5lMbXSZcmdLDe9EzSndPV2HpWYWzRbaerl2n27irrm94EPpprqa8KpskPT085+A==", + "dev": true, + "dependencies": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*", + "@types/send": "*" + } + }, + "node_modules/@types/http-errors": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz", + "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==", + "dev": true + }, + "node_modules/@types/mime": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", + "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", + "dev": true + }, + "node_modules/@types/node": { + "version": "20.17.8", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.17.8.tgz", + "integrity": "sha512-ahz2g6/oqbKalW9sPv6L2iRbhLnojxjYWspAqhjvqSWBgGebEJT5GvRmk0QXPj3sbC6rU0GTQjPLQkmR8CObvA==", + "dependencies": { + "undici-types": "~6.19.2" + } + }, + "node_modules/@types/node-fetch": { + "version": "2.6.12", + "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.12.tgz", + "integrity": "sha512-8nneRWKCg3rMtF69nLQJnOYUcbafYeFSjqkw3jCRLsqkWFlHaoQrr5mXmofFGOx3DKn7UfmBMyov8ySvLRVldA==", + "dependencies": { + "@types/node": "*", + "form-data": "^4.0.0" + } + }, + "node_modules/@types/qs": { + "version": "6.9.17", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.17.tgz", + "integrity": "sha512-rX4/bPcfmvxHDv0XjfJELTTr+iB+tn032nPILqHm5wbthUUUuVtNGGqzhya9XUxjTP8Fpr0qYgSZZKxGY++svQ==", + "dev": true + }, + "node_modules/@types/range-parser": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", + "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", + "dev": true + }, + "node_modules/@types/send": { + "version": "0.17.4", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz", + "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==", + "dev": true, + "dependencies": { + "@types/mime": "^1", + "@types/node": "*" + } + }, + "node_modules/@types/serve-static": { + "version": "1.15.7", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.7.tgz", + "integrity": "sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==", + "dev": true, + "dependencies": { + "@types/http-errors": "*", + "@types/node": "*", + "@types/send": "*" + } + }, + "node_modules/abort-controller": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", + "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "dependencies": { + "event-target-shim": "^5.0.0" + }, + "engines": { + "node": ">=6.5" + } + }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/acorn": { + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", + "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-walk": { + "version": "8.3.4", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz", + "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==", + "dev": true, + "dependencies": { + "acorn": "^8.11.0" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/agentkeepalive": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.5.0.tgz", + "integrity": "sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==", + "dependencies": { + "humanize-ms": "^1.2.1" + }, + "engines": { + "node": ">= 8.0.0" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true + }, + "node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/body-parser": { + "version": "1.20.3", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", + "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.5", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.13.0", + "raw-body": "2.5.2", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/call-bind": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dev": true, + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz", + "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" + }, + "node_modules/create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "dev": true + }, + "node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true, + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/dotenv": { + "version": "16.4.5", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz", + "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" + }, + "node_modules/encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/es-define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "dependencies": { + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/event-target-shim": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", + "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/express": { + "version": "4.21.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.21.1.tgz", + "integrity": "sha512-YSFlK1Ee0/GC8QaO91tHcDxJiE/X4FbpAyQWkxAvG6AXCuR65YzK8ua6D9hvi/TzUfZMpc+BwuM1IPw8fmQBiQ==", + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.3", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.7.1", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.3.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.3", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.10", + "proxy-addr": "~2.0.7", + "qs": "6.13.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.19.0", + "serve-static": "1.16.2", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/finalhandler": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", + "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/form-data": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.1.tgz", + "integrity": "sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/form-data-encoder": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-1.7.2.tgz", + "integrity": "sha512-qfqtYan3rxrnCk1VYaA4H+Ms9xdpPqvLZa6xmMgFvhO32x7/3J/ExcTd6qpxM0vH2GdMI+poehyBZvqfMTto8A==" + }, + "node_modules/formdata-node": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/formdata-node/-/formdata-node-4.4.1.tgz", + "integrity": "sha512-0iirZp3uVDjVGt9p49aTaqjk84TrglENEDuqfdlZQ1roC9CWlPk6Avf8EEnZNcAqPonwkG35x4n3ww/1THYAeQ==", + "dependencies": { + "node-domexception": "1.0.0", + "web-streams-polyfill": "4.0.0-beta.3" + }, + "engines": { + "node": ">= 12.20" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", + "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/humanize-ms": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", + "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", + "dependencies": { + "ms": "^2.0.0" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ignore-by-default": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", + "integrity": "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==", + "dev": true + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/merge-descriptors": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", + "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/node-domexception": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", + "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/jimmywarting" + }, + { + "type": "github", + "url": "https://paypal.me/jimmywarting" + } + ], + "engines": { + "node": ">=10.5.0" + } + }, + "node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/nodemon": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-3.1.7.tgz", + "integrity": "sha512-hLj7fuMow6f0lbB0cD14Lz2xNjwsyruH251Pk4t/yIitCFJbmY1myuLlHm/q06aST4jg6EgAh74PIBBrRqpVAQ==", + "dev": true, + "dependencies": { + "chokidar": "^3.5.2", + "debug": "^4", + "ignore-by-default": "^1.0.1", + "minimatch": "^3.1.2", + "pstree.remy": "^1.1.8", + "semver": "^7.5.3", + "simple-update-notifier": "^2.0.0", + "supports-color": "^5.5.0", + "touch": "^3.1.0", + "undefsafe": "^2.0.5" + }, + "bin": { + "nodemon": "bin/nodemon.js" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/nodemon" + } + }, + "node_modules/nodemon/node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/nodemon/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.13.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.3.tgz", + "integrity": "sha512-kDCGIbxkDSXE3euJZZXzc6to7fCrKHNI/hSRQnRuQ+BWjFNzZwiFF8fj/6o2t2G9/jTj8PSIYTfCLelLZEeRpA==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/openai": { + "version": "4.73.1", + "resolved": "https://registry.npmjs.org/openai/-/openai-4.73.1.tgz", + "integrity": "sha512-nWImDJBcUsqrhy7yJScXB4+iqjzbUEgzfA3un/6UnHFdwWhjX24oztj69Ped/njABfOdLcO/F7CeWTI5dt8Xmg==", + "dependencies": { + "@types/node": "^18.11.18", + "@types/node-fetch": "^2.6.4", + "abort-controller": "^3.0.0", + "agentkeepalive": "^4.2.1", + "form-data-encoder": "1.7.2", + "formdata-node": "^4.3.2", + "node-fetch": "^2.6.7" + }, + "bin": { + "openai": "bin/cli" + }, + "peerDependencies": { + "zod": "^3.23.8" + }, + "peerDependenciesMeta": { + "zod": { + "optional": true + } + } + }, + "node_modules/openai/node_modules/@types/node": { + "version": "18.19.66", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.66.tgz", + "integrity": "sha512-14HmtUdGxFUalGRfLLn9Gc1oNWvWh5zNbsyOLo5JV6WARSeN1QcEBKRnZm9QqNfrutgsl/hY4eJW63aZ44aBCg==", + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/openai/node_modules/undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==" + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/path-to-regexp": { + "version": "0.1.10", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.10.tgz", + "integrity": "sha512-7lf7qcQidTku0Gu3YDPc8DJ1q7OOucfa/BSsIwjuh56VU7katFvuM8hULfkwB3Fns/rsVF7PwPKVw1sl5KQS9w==" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/pstree.remy": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", + "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==", + "dev": true + }, + "node_modules/qs": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", + "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", + "dependencies": { + "side-channel": "^1.0.6" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/send": { + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", + "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/send/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/serve-static": { + "version": "1.16.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", + "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", + "dependencies": { + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.19.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + }, + "node_modules/side-channel": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", + "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/simple-update-notifier": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz", + "integrity": "sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==", + "dev": true, + "dependencies": { + "semver": "^7.5.3" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/touch": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.1.tgz", + "integrity": "sha512-r0eojU4bI8MnHr8c5bNo7lJDdI2qXlWWJk6a9EAFG7vbhTjElYhBVS3/miuE0uOuoLdb8Mc/rVfsmm6eo5o9GA==", + "dev": true, + "bin": { + "nodetouch": "bin/nodetouch.js" + } + }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + }, + "node_modules/ts-node": { + "version": "10.9.2", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", + "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", + "dev": true, + "dependencies": { + "@cspotcode/source-map-support": "^0.8.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "v8-compile-cache-lib": "^3.0.1", + "yn": "3.1.1" + }, + "bin": { + "ts-node": "dist/bin.js", + "ts-node-cwd": "dist/bin-cwd.js", + "ts-node-esm": "dist/bin-esm.js", + "ts-node-script": "dist/bin-script.js", + "ts-node-transpile-only": "dist/bin-transpile.js", + "ts-script": "dist/bin-script-deprecated.js" + }, + "peerDependencies": { + "@swc/core": ">=1.2.50", + "@swc/wasm": ">=1.2.50", + "@types/node": "*", + "typescript": ">=2.7" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "@swc/wasm": { + "optional": true + } + } + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/typescript": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.2.tgz", + "integrity": "sha512-i5t66RHxDvVN40HfDd1PsEThGNnlMCMT3jMUuoh9/0TaqWevNontacunWyN02LA9/fIbEWlcHZcgTKb9QoaLfg==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/undefsafe": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", + "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==", + "dev": true + }, + "node_modules/undici-types": { + "version": "6.19.8", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", + "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==" + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/v8-compile-cache-lib": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", + "dev": true + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/web-streams-polyfill": { + "version": "4.0.0-beta.3", + "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-4.0.0-beta.3.tgz", + "integrity": "sha512-QW95TCTaHmsYfHDybGMwO5IJIM93I/6vTRk+daHTWFPhwh+C8Cg7j7XyKrwrj8Ib6vYXe0ocYNrmzY4xAAN6ug==", + "engines": { + "node": ">= 14" + } + }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "dev": true, + "engines": { + "node": ">=6" + } + } + } +} diff --git a/examples/chat-app/package.json b/examples/chat-app/package.json new file mode 100644 index 000000000..422af9b59 --- /dev/null +++ b/examples/chat-app/package.json @@ -0,0 +1,31 @@ +{ + "name": "chat-app", + "version": "1.0.0", + "description": "Simple chat application using OpenAI GPT-4", + "main": "server.ts", + "type": "module", + "scripts": { + "start": "tsx server.ts", + "dev": "tsx watch server.ts" + }, + "dependencies": { + "@ai-sdk/openai": "^0.0.54", + "@anthropic-ai/sdk": "^0.32.1", + "@latitude-data/sdk": "workspace:^", + "@latitude-data/telemetry-js": "workspace:^", + "@types/morgan": "^1.9.9", + "@vercel/otel": "^1.10.0", + "ai": "^4.0.9", + "axios": "^1.7.8", + "dotenv": "^16.4.5", + "express": "^4.21.1", + "morgan": "^1.10.0", + "openai": "^4.73.1" + }, + "devDependencies": { + "@types/express": "^4.17.21", + "@types/node": "^20.17.9", + "tsx": "^4.19.2", + "typescript": "^5.7.2" + } +} diff --git a/examples/chat-app/public/anthropic.html b/examples/chat-app/public/anthropic.html new file mode 100644 index 000000000..90cf9ce79 --- /dev/null +++ b/examples/chat-app/public/anthropic.html @@ -0,0 +1,133 @@ + + + + + + Chat with Anthropic + + + +

Chat with Anthropic

+
+
+ + + +
+ + + + diff --git a/examples/chat-app/public/index.html b/examples/chat-app/public/index.html new file mode 100644 index 000000000..74663215a --- /dev/null +++ b/examples/chat-app/public/index.html @@ -0,0 +1,133 @@ + + + + + + Chat with GPT-4 + + + +

Chat with GPT-4

+
+
+ + + +
+ + + + diff --git a/examples/chat-app/public/vercel.html b/examples/chat-app/public/vercel.html new file mode 100644 index 000000000..49db369bc --- /dev/null +++ b/examples/chat-app/public/vercel.html @@ -0,0 +1,133 @@ + + + + + + Chat with Vercel + + + +

Chat with Vercel AI

+
+
+ + + +
+ + + + diff --git a/examples/chat-app/server.ts b/examples/chat-app/server.ts new file mode 100644 index 000000000..cefa42b2b --- /dev/null +++ b/examples/chat-app/server.ts @@ -0,0 +1,39 @@ +import './instrumentation' + +import path from 'path' + +import express from 'express' +import morgan from 'morgan' + +import { __dirname, PORT } from './config' +import { handleChat, handleClearChat } from './handlers/openai' +import { handleVercelChat, handleVercelClearChat } from './handlers/vercel' +import { handleAnthropicChat } from './handlers/anthropic' + +const app = express() + +// Middleware +app.use(morgan(':method :url :status :res[content-length] - :response-time ms')) +app.use(express.json()) +app.use(express.static(path.join(__dirname, 'public'))) + +// OpenAI routes +app.post('/chat', handleChat) + +// Vercel AI routes +app.get('/vercel', (_, res) => { + res.sendFile(path.join(__dirname, 'public', 'vercel.html')) +}) +app.post('/vercel/chat', handleVercelChat) + +// Anthropic routes +app.post('/anthropic/chat', handleAnthropicChat) + +app.get('/anthropic', (_, res) => { + res.sendFile(path.join(__dirname, 'public', 'anthropic.html')) +}) + +// Start server +app.listen(PORT, () => { + console.log(`Server is running at http://localhost:${PORT}`) +}) diff --git a/examples/chat-app/services/weather.ts b/examples/chat-app/services/weather.ts new file mode 100644 index 000000000..d36930851 --- /dev/null +++ b/examples/chat-app/services/weather.ts @@ -0,0 +1,32 @@ +import axios from 'axios' + +interface WeatherResponse { + temperature: number + description: string + location: string +} + +export async function getWeather(location: string): Promise { + try { + // Using OpenWeatherMap API - you'll need to sign up for a free API key + const response = await axios.get( + `https://api.openweathermap.org/data/2.5/weather?q=${encodeURIComponent( + location, + )}&units=metric&appid=${process.env.OPENWEATHER_API_KEY}`, + { + headers: { + Authorization: `Bearer ${process.env.OPENWEATHER_API_KEY}`, + }, + }, + ) + + return { + temperature: response.data.main.temp, + description: response.data.weather[0].description, + location: response.data.name, + } + } catch (error) { + console.log(error) + throw new Error(`Failed to get weather for ${location}`) + } +} diff --git a/examples/chat-app/tsconfig.json b/examples/chat-app/tsconfig.json new file mode 100644 index 000000000..41d9426bc --- /dev/null +++ b/examples/chat-app/tsconfig.json @@ -0,0 +1,6 @@ +{ + "compilerOptions": { + "moduleResolution": "bundler", + "esModuleInterop": true + } +} diff --git a/examples/sdks/typescript/package.json b/examples/sdks/typescript/package.json index 56e7486e7..dbe062782 100644 --- a/examples/sdks/typescript/package.json +++ b/examples/sdks/typescript/package.json @@ -8,8 +8,13 @@ "author": "", "license": "ISC", "dependencies": { + "@ai-sdk/openai": "^0.0.54", + "@anthropic-ai/sdk": "^0.32.1", "@latitude-data/sdk": "workspace:^", - "@pinecone-database/pinecone": "^4.0.0", - "openai": "^4.68.4" + "@latitude-data/telemetry-js": "workspace:^", + "@vercel/otel": "^1.10.0", + "ai": "^4.0.3", + "openai": "^4.68.4", + "zod": "^3.23.8" } } diff --git a/examples/sdks/typescript/telemetry/anthropic.ts b/examples/sdks/typescript/telemetry/anthropic.ts new file mode 100644 index 000000000..218c44e2b --- /dev/null +++ b/examples/sdks/typescript/telemetry/anthropic.ts @@ -0,0 +1,35 @@ +import Anthropic from '@anthropic-ai/sdk' +import { Latitude } from '@latitude-data/sdk' + +import { LLMClient, runSequentialRequests } from './shared' + +const anthropic = new Anthropic({ + apiKey: process.env.ANTHROPIC_API_KEY, +}) + +new Latitude(process.env.LATITUDE_API_KEY, { + projectId: 6, + telemetry: { + modules: { + // @ts-ignore + anthropic: Anthropic, + }, + }, +}) + +class AnthropicClient implements LLMClient { + async makeCompletion(message: string): Promise { + await anthropic.messages.create({ + system: 'You are a helpful assistant that makes great jokes.', + messages: [ + { role: 'user', content: 'I will ask you for a joke ok?' }, + { role: 'user', content: message }, + ], + model: 'claude-3-5-sonnet-latest', + max_tokens: 1024, + }) + } +} + +// Start the sequence +runSequentialRequests(new AnthropicClient()).catch(console.error) diff --git a/examples/sdks/typescript/telemetry/openai.ts b/examples/sdks/typescript/telemetry/openai.ts new file mode 100644 index 000000000..89db6b131 --- /dev/null +++ b/examples/sdks/typescript/telemetry/openai.ts @@ -0,0 +1,34 @@ +import { Latitude } from '@latitude-data/sdk' +import OpenAI from 'openai' + +import { LLMClient, runSequentialRequests } from './shared' + +const openai = new OpenAI({ + apiKey: process.env.OPENAI_API_KEY, +}) + +new Latitude(process.env.LATITUDE_API_KEY, { + projectId: 6, + telemetry: { + modules: { + // @ts-ignore + openAI: OpenAI, + }, + }, +}) + +class OpenAIClient implements LLMClient { + async makeCompletion(message: string): Promise { + await openai.chat.completions.create({ + temperature: 0.7, + messages: [ + { role: 'system', content: 'You are a helpful assistant.' }, + { role: 'user', content: message }, + ], + model: 'gpt-4-turbo-preview', + }) + } +} + +// Start the sequence +runSequentialRequests(new OpenAIClient()).catch(console.error) diff --git a/examples/sdks/typescript/telemetry/openai_chained_calls.ts b/examples/sdks/typescript/telemetry/openai_chained_calls.ts new file mode 100644 index 000000000..68287608d --- /dev/null +++ b/examples/sdks/typescript/telemetry/openai_chained_calls.ts @@ -0,0 +1,92 @@ +import Anthropic from '@anthropic-ai/sdk' +import { Latitude } from '@latitude-data/sdk' +import OpenAI from 'openai' + +const sdk = new Latitude(process.env.LATITUDE_API_KEY, { + projectId: 6, + telemetry: { + modules: { + // @ts-ignore + openAI: OpenAI, + // @ts-ignore + anthropic: Anthropic, + }, + }, +}) + +const openai = new OpenAI({ + apiKey: process.env.OPENAI_API_KEY, +}) +const anthropic = new Anthropic({ + apiKey: process.env.ANTHROPIC_API_KEY, +}) + +async function chainedJokes() { + try { + // First call - ask for an initial joke + const firstResponse = await openai.chat.completions.create({ + temperature: 0.7, + messages: [ + { role: 'system', content: 'You are a funny comedian.' }, + { role: 'user', content: 'Tell me a short, family-friendly joke.' }, + ], + model: 'gpt-4o-mini', + }) + + const firstJoke = firstResponse.choices[0].message.content + + console.log('First joke:', firstJoke) + + // Second call - use the first joke to ask for a related joke + const secondResponse = await sdk.telemetry.span( + { name: 'second-openai-call' }, + async () => { + return await openai.chat.completions.create({ + temperature: 0.7, + messages: [ + { role: 'system', content: 'You are a funny comedian.' }, + { role: 'assistant', content: firstJoke }, + { + role: 'user', + content: + "That was funny! Now tell me another joke that's somehow related to the theme of your first joke.", + }, + ], + model: 'gpt-4o', + }) + }, + ) + + const secondJoke = secondResponse.choices[0].message.content + sdk.telemetry.span({ name: 'anthropic-evaluates' }, async () => { + const anthropicResponse = await anthropic.messages.create({ + messages: [ + { role: 'user', content: 'You are a funny comedian.' }, + { role: 'assistant', content: firstJoke }, + { + role: 'user', + content: + "That was funny! Now tell me another joke that's somehow related to the theme of your first joke.", + }, + { + role: 'assistant', + content: secondJoke, + }, + { + role: 'user', + content: + 'Evaluate the jokes made by the assistant and give a score from 0 to 100 in terms of how funny they are.', + }, + ], + model: 'claude-3-5-sonnet-latest', + max_tokens: 1024, + }) + + console.log('Anthropic evaluation:', anthropicResponse) + }) + } catch (error) { + console.error('Error:', error) + } +} + +await chainedJokes() diff --git a/examples/sdks/typescript/telemetry/shared.ts b/examples/sdks/typescript/telemetry/shared.ts new file mode 100644 index 000000000..f4c0ea8d8 --- /dev/null +++ b/examples/sdks/typescript/telemetry/shared.ts @@ -0,0 +1,178 @@ +import { ContentType, MessageRole } from '@latitude-data/sdk' + +// Array of 120 diverse topics for jokes +export const topics = [ + 'doctors', + 'programmers', + 'teachers', + 'chefs', + 'musicians', + 'artists', + 'athletes', + 'scientists', + 'lawyers', + 'accountants', + 'architects', + 'pilots', + 'firefighters', + 'police officers', + 'librarians', + 'dentists', + 'veterinarians', + 'photographers', + 'journalists', + 'actors', + 'dancers', + 'comedians', + 'magicians', + 'gardeners', + 'mechanics', + 'plumbers', + 'electricians', + 'carpenters', + 'painters', + 'sculptors', + 'writers', + 'poets', + 'philosophers', + 'psychologists', + 'sociologists', + 'historians', + 'archaeologists', + 'astronomers', + 'physicists', + 'chemists', + 'biologists', + 'mathematicians', + 'engineers', + 'designers', + 'fashion designers', + 'interior designers', + 'web developers', + 'data scientists', + 'AI researchers', + 'cybersecurity experts', + 'system administrators', + 'database administrators', + 'project managers', + 'business analysts', + 'marketing managers', + 'sales representatives', + 'real estate agents', + 'travel agents', + 'tour guides', + 'flight attendants', + 'hotel managers', + 'chefs', + 'bartenders', + 'waiters', + 'baristas', + 'bakers', + 'butchers', + 'farmers', + 'ranchers', + 'fishermen', + 'miners', + 'construction workers', + 'truck drivers', + 'taxi drivers', + 'delivery drivers', + 'postal workers', + 'couriers', + 'warehouse workers', + 'factory workers', + 'assembly line workers', + 'quality control inspectors', + 'safety inspectors', + 'environmental scientists', + 'meteorologists', + 'geologists', + 'oceanographers', + 'zoologists', + 'botanists', + 'marine biologists', + 'paleontologists', + 'anthropologists', + 'economists', + 'financial analysts', + 'investment bankers', + 'stockbrokers', + 'insurance agents', + 'tax advisors', + 'wedding planners', + 'event coordinators', + 'florists', + 'jewelers', + 'watchmakers', + 'opticians', + 'pharmacists', + 'nurses', + 'paramedics', + 'physical therapists', + 'occupational therapists', + 'speech therapists', + 'nutritionists', + 'personal trainers', + 'yoga instructors', + 'dance instructors', + 'music teachers', + 'art teachers', + 'language teachers', + 'driving instructors', + 'sports coaches', + 'fitness trainers', + 'life coaches', + 'career counselors', + 'social workers', + 'clergy', + 'politicians', + 'diplomats', + 'judges', + 'court reporters', + 'translators', + 'interpreters', + 'voice actors', + 'radio hosts', + 'TV presenters', + 'news anchors', + 'YouTubers', + 'influencers', + 'bloggers', + 'podcasters', +] + +export interface LLMClient { + makeCompletion(message: string): Promise +} + +export async function makeJokeRequest(topic: string, client: LLMClient) { + const messages = [ + { + role: 'user' as MessageRole.user, + content: [ + { + type: 'text' as ContentType.text, + text: `Please tell me a joke about ${topic}`, + }, + ], + }, + ] + + try { + await client.makeCompletion(messages[0].content[0].text) + console.log(`Made request for joke about ${topic}`) + } catch (error) { + console.error(`Error making request for ${topic}:`, error) + } +} + +export async function runSequentialRequests(client: LLMClient) { + const shuffledTopics = [...topics].sort(() => Math.random() - 0.5) + + for (let i = 0; i < shuffledTopics.length; i++) { + await new Promise((resolve) => setTimeout(resolve, 250)) // Wait 250ms + await makeJokeRequest(shuffledTopics[i], client) + } + + console.log('All requests completed') +} diff --git a/examples/sdks/typescript/telemetry/vercel_ai_chained_calls.ts b/examples/sdks/typescript/telemetry/vercel_ai_chained_calls.ts new file mode 100644 index 000000000..fe8dedca5 --- /dev/null +++ b/examples/sdks/typescript/telemetry/vercel_ai_chained_calls.ts @@ -0,0 +1,110 @@ +import { openai } from '@ai-sdk/openai' +import { VercelSpanProcessor } from '@latitude-data/telemetry-js' +import { registerOTel } from '@vercel/otel' +import { generateText } from 'ai' +import { z } from 'zod' + +registerOTel({ + serviceName: 'ai-sdk-example', + spanProcessors: [ + // @ts-ignore + new VercelSpanProcessor({ + apiKey: process.env.LATITUDE_API_KEY, + projectId: 15, + }), + ], +}) + +async function chainedJokesWithVercel() { + try { + // Convert the response to a readable stream + const response = await generateText({ + messages: [ + { role: 'system', content: 'You are a funny comedian.' }, + { role: 'user', content: 'Tell me a short, family-friendly joke.' }, + ], + model: openai('gpt-4o-mini'), + experimental_telemetry: { + isEnabled: true, + }, + }) + + console.log('First joke:', response.text) + + // Second call - use the first joke to ask for a related joke + const secondResponse = await generateText({ + messages: [ + { role: 'system', content: 'You are a funny comedian.' }, + { role: 'assistant', content: response.text }, + { + role: 'user', + content: + "That was funny! Now tell me another joke that's somehow related to the theme of your first joke.", + }, + ], + model: openai('gpt-4o'), + experimental_telemetry: { + isEnabled: true, + }, + }) + + console.log('Second joke:', secondResponse.text) + } catch (error) { + console.error('Error:', error) + } +} + +async function generateTextWithTool() { + try { + const response = await generateText({ + messages: [ + { + role: 'system', + content: + 'You are a helpful assistant that can get the current weather.', + }, + { + role: 'user', + content: "What's the weather like in London right now?", + }, + ], + model: openai('gpt-4'), + experimental_telemetry: { + isEnabled: true, + }, + tools: { + getCurrentWeather: { + description: 'Get the current weather in a given location', + parameters: z.object({ + location: z + .string() + .describe('The city and state, e.g. San Francisco, CA'), + unit: z + .enum(['celsius', 'fahrenheit']) + .optional() + .describe('The unit of temperature to use'), + }), + execute: async (args) => { + // Mock weather data + return { + temperature: 18, + unit: 'celsius', + condition: 'partly cloudy', + } + }, + }, + }, + }) + + console.log('Response:', response.text) + + if (response.toolResults) { + console.log('Tool results:', response.toolResults) + } + } catch (error) { + console.error('Error:', error) + } +} + +chainedJokesWithVercel() +// generateTextWithTool() diff --git a/examples/sdks/typescript/tsconfig.json b/examples/sdks/typescript/tsconfig.json index 2115c5f6f..e10e78f4f 100644 --- a/examples/sdks/typescript/tsconfig.json +++ b/examples/sdks/typescript/tsconfig.json @@ -1,6 +1,6 @@ { "compilerOptions": { - "module": "node16", - "moduleResolution": "node16" + "module": "nodenext", + "moduleResolution": "bundler" } } \ No newline at end of file diff --git a/packages/core/package.json b/packages/core/package.json index 083c42b5b..d87ce4ac9 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -46,6 +46,7 @@ "@ai-sdk/google": "^0.0.51", "@ai-sdk/mistral": "^0.0.38", "@ai-sdk/openai": "^0.0.54", + "@anthropic-ai/sdk": "^0.32.1", "@aws-sdk/client-s3": "^3.645.0", "@aws-sdk/s3-request-presigner": "^3.645.0", "@faker-js/faker": "^8.4.1", diff --git a/packages/core/src/constants.ts b/packages/core/src/constants.ts index 986e18dd9..f5254dab6 100644 --- a/packages/core/src/constants.ts +++ b/packages/core/src/constants.ts @@ -13,7 +13,7 @@ import { } from 'ai' import { z } from 'zod' -import { ProviderLog } from './browser' +import { DocumentVersion, ProviderLog, Span, Trace } from './browser' import { Config } from './services/ai' export const LATITUDE_EVENT = 'latitudeEventsChannel' @@ -432,6 +432,35 @@ export interface ProjectStats { }> } +export enum SpanKind { + // Default type. Represents operations that happen within a service + // Example: Database queries, file I/O, or business logic processing + Internal = 'internal', + + // Represents the handling of an incoming request from a client + // Example: HTTP server handling a request, gRPC service receiving a call + Server = 'server', + + // Represents outgoing requests to a remote service + // Example: HTTP client making an API call, gRPC client initiating a call + Client = 'client', + + // Represents the creation/enqueuing of a message to be processed later + // Example: Publishing a message to a message queue, sending to a stream + Producer = 'producer', + + // Represents the processing of a message from a message queue/stream + // Example: Processing a message from RabbitMQ, handling a Kafka message + Consumer = 'consumer', +} + +export type TraceWithSpans = Trace & { + spans: Span[] + realtimeAdded?: boolean +} + +export type SpanMetadataTypes = 'default' | 'generation' + export type CsvData = { headers: string[] data: { @@ -440,12 +469,20 @@ export type CsvData = { }[] } -export enum SpanKind { - Internal = 'internal', - Server = 'server', - Client = 'client', - Producer = 'producer', - Consumer = 'consumer', +export type { + AppliedRules, + ProviderRules, +} from './services/ai/providers/rules/types' + +export type SearchFilter = { + field: string + operator: string + value: string +} + +export type DocumentVersionDto = DocumentVersion & { + projectId: number + commitUuid: string } export type DocumentLogFilterOptions = { diff --git a/packages/core/src/data-access/index.ts b/packages/core/src/data-access/index.ts index 58ed5089b..ce569b3b1 100644 --- a/packages/core/src/data-access/index.ts +++ b/packages/core/src/data-access/index.ts @@ -1,13 +1,15 @@ export * from './apiKeys' -export * from './users' -export * from './workspaces' +export * from './claimedRewards' +export * from './documentLogs' +export * from './documentVersions' export * from './evaluationAdvancedTemplates' +export * from './evaluationResults' export * from './evaluationTemplateCategories' -export * from './memberships' -export * from './magicLinkTokens' -export * from './providerLogs' -export * from './documentLogs' export * from './evaluations' +export * from './magicLinkTokens' +export * from './memberships' +export * from './projects' export * from './providerApiKeys' -export * from './claimedRewards' -export * from './evaluationResults' +export * from './providerLogs' +export * from './users' +export * from './workspaces' diff --git a/packages/core/src/data-access/projects.ts b/packages/core/src/data-access/projects.ts new file mode 100644 index 000000000..ec3da75f6 --- /dev/null +++ b/packages/core/src/data-access/projects.ts @@ -0,0 +1,27 @@ +import { and, eq, getTableColumns } from 'drizzle-orm' + +import { database } from '../client' +import { commits, documentVersions, projects } from '../schema' +import { DocumentVersion } from '../browser' + +export function unsafelyFindProject(projectId: number, db = database) { + return db.query.projects.findFirst({ where: eq(projects.id, projectId) }) +} + +export function findProjectFromDocument( + document: DocumentVersion, + db = database, +) { + return db + .select(getTableColumns(projects)) + .from(projects) + .innerJoin(commits, eq(commits.projectId, projects.id)) + .innerJoin(documentVersions, eq(documentVersions.commitId, commits.id)) + .where( + and( + eq(documentVersions.documentUuid, document.documentUuid), + eq(commits.id, document.commitId), + ), + ) + .then((r) => r[0]) +} diff --git a/packages/core/src/data-access/workspaces.ts b/packages/core/src/data-access/workspaces.ts index 012c799b9..f347533ba 100644 --- a/packages/core/src/data-access/workspaces.ts +++ b/packages/core/src/data-access/workspaces.ts @@ -1,6 +1,6 @@ -import { desc, eq } from 'drizzle-orm' +import { desc, eq, getTableColumns } from 'drizzle-orm' -import { DocumentVersion, ProviderApiKey, type Commit } from '../browser' +import { DocumentVersion, ProviderApiKey, Span, type Commit } from '../browser' import { database } from '../client' import { workspacesDtoColumns } from '../repositories' import { @@ -9,7 +9,9 @@ import { memberships, projects, providerApiKeys, + spans, subscriptions, + traces, workspaces, } from '../schema' @@ -98,3 +100,14 @@ export async function findWorkspaceFromProviderApiKey( return results[0] } + +export async function findWorkspaceFromSpan(span: Span, db = database) { + return db + .select(getTableColumns(workspaces)) + .from(workspaces) + .innerJoin(traces, eq(workspaces.id, traces.workspaceId)) + .innerJoin(spans, eq(traces.traceId, spans.traceId)) + .where(eq(spans.id, span.id)) + .limit(1) + .then((r) => r[0]) +} diff --git a/packages/core/src/events/events.d.ts b/packages/core/src/events/events.d.ts index ee186d61b..0f85744ff 100644 --- a/packages/core/src/events/events.d.ts +++ b/packages/core/src/events/events.d.ts @@ -17,7 +17,9 @@ import type { ProviderApiKey, ProviderLog, Providers, + Span, StreamType, + Trace, User, Workspace, } from '../browser' @@ -58,6 +60,7 @@ export type Events = | 'copilotSuggestionGenerated' | 'copilotSuggestionApplied' | 'evaluationResultUpdated' + | 'bulkCreateTracesAndSpans' export type LatitudeEventGeneric< U extends Events, @@ -416,6 +419,15 @@ export type EvaluationResultUpdatedEvent = LatitudeEventGeneric< } > +export type BulkCreateTracesAndSpansEvent = LatitudeEventGeneric< + 'bulkCreateTracesAndSpans', + { + workspaceId: number + traces: Trace[] + spans: Span[] + } +> + export type LatitudeEvent = | MembershipCreatedEvent | UserCreatedEvent @@ -451,6 +463,7 @@ export type LatitudeEvent = | CopilotSuggestionGenerated | CopilotSuggestionApplied | EvaluationResultUpdatedEvent + | BulkCreateTracesAndSpansEvent export interface IEventsHandlers { magicLinkTokenCreated: EventHandler[] @@ -487,4 +500,5 @@ export interface IEventsHandlers { copilotSuggestionGenerated: EventHandler[] copilotSuggestionApplied: EventHandler[] evaluationResultUpdated: EventHandler[] + bulkCreateTracesAndSpans: EventHandler[] } diff --git a/packages/core/src/events/handlers/createDocumentLogsFromSpansJob.ts b/packages/core/src/events/handlers/createDocumentLogsFromSpansJob.ts new file mode 100644 index 000000000..20a1a2e63 --- /dev/null +++ b/packages/core/src/events/handlers/createDocumentLogsFromSpansJob.ts @@ -0,0 +1,52 @@ +import { BulkCreateTracesAndSpansEvent } from '../events' +import { setupJobs } from '../../jobs' +import { database } from '../../client' +import { and, eq, inArray } from 'drizzle-orm' +import { spans as spansModel } from '../../schema' + +export async function createDocumentLogsFromSpansJob({ + data: event, +}: { + data: BulkCreateTracesAndSpansEvent +}) { + const { workspaceId, spans } = event.data + const spansLinkedToPrompts = spans.filter((span) => !!span.documentUuid) + if (!spansLinkedToPrompts.length) return + + const generationSpans = await database + .select() + .from(spansModel) + .where( + and( + inArray( + spansModel.traceId, + spansLinkedToPrompts.map((s) => s.traceId), + ), + eq(spansModel.internalType, 'generation'), + ), + ) + .execute() + + const spansToImport = spansLinkedToPrompts.flatMap((span) => + generationSpans + .filter((s) => s.traceId === span.traceId) + .map((s) => ({ + workspaceId, + span: s, + prompt: { + documentUuid: span.documentUuid, + commitUuid: span.commitUuid, + parameters: span.parameters, + }, + distinctId: span.distinctId, + })), + ) + if (!spansToImport.length) return + + const jobs = await setupJobs() + spansToImport.forEach(async (data) => { + jobs.defaultQueue.jobs.enqueueCreateDocumentLogFromSpanJob({ + ...data, + }) + }) +} diff --git a/packages/core/src/events/handlers/index.ts b/packages/core/src/events/handlers/index.ts index eecd8d004..9cd9bb3d6 100644 --- a/packages/core/src/events/handlers/index.ts +++ b/packages/core/src/events/handlers/index.ts @@ -1,6 +1,8 @@ import { IEventsHandlers } from '../events' import { createClaimInvitationReferralJob } from './createClaimInvitationReferralJob' +import { createDocumentLogsFromSpansJob } from './createDocumentLogsFromSpansJob' import { createLoopsContact } from './createLoopsContact' +import { notifyClientOfBulkCreateTracesAndSpans } from './notifyClientOfBulkCreateTracesAndSpans' import { notifyToClientDocumentLogCreatedJob } from './notifyToClientDocumentLogCreatedJob' import { notifyToClientEvaluationResultCreatedJob } from './notifyToClientEvaluationResultCreatedJob' import { runLiveEvaluationsJob } from './runLiveEvaluationsJob' @@ -46,4 +48,8 @@ export const EventHandlers: IEventsHandlers = { copilotRefinerApplied: [], copilotSuggestionGenerated: [], copilotSuggestionApplied: [], + bulkCreateTracesAndSpans: [ + notifyClientOfBulkCreateTracesAndSpans, + createDocumentLogsFromSpansJob, + ], } diff --git a/packages/core/src/events/handlers/notifyClientOfBulkCreateTracesAndSpans.ts b/packages/core/src/events/handlers/notifyClientOfBulkCreateTracesAndSpans.ts new file mode 100644 index 000000000..46a72290f --- /dev/null +++ b/packages/core/src/events/handlers/notifyClientOfBulkCreateTracesAndSpans.ts @@ -0,0 +1,25 @@ +import { unsafelyFindWorkspace } from '../../data-access' +import { NotFoundError } from '../../lib' +import { WebsocketClient } from '../../websockets/workers' +import { BulkCreateTracesAndSpansEvent } from '../events' + +export const notifyClientOfBulkCreateTracesAndSpans = async ({ + data: event, +}: { + data: BulkCreateTracesAndSpansEvent +}) => { + const { traces, spans, workspaceId } = event.data + const workspace = await unsafelyFindWorkspace(workspaceId) + if (!workspace) throw new NotFoundError(`Workspace not found ${workspaceId}`) + + const websockets = await WebsocketClient.getSocket() + + websockets.emit('tracesAndSpansCreated', { + workspaceId: workspace.id, + data: { + workspaceId: workspace.id, + traces, + spans, + }, + }) +} diff --git a/packages/core/src/jobs/constants.ts b/packages/core/src/jobs/constants.ts index e2bd656db..e52720a87 100644 --- a/packages/core/src/jobs/constants.ts +++ b/packages/core/src/jobs/constants.ts @@ -20,20 +20,25 @@ export enum Jobs { publishToAnalyticsJob = 'publishToAnalyticsJob', runLiveEvaluationJob = 'runLiveEvaluationJob', uploadDocumentLogsJob = 'uploadDocumentLogsJob', + processOtlpTracesJob = 'processOtlpTracesJob', + createDocumentLogFromSpanJob = 'createDocumentLogFromSpanJob', + createDocumentLogsFromSpansJob = 'createDocumentLogsFromSpansJob', } export const QUEUES = { [Queues.defaultQueue]: { name: Queues.defaultQueue, jobs: [ + 'createDocumentLogFromSpanJob', + 'createDocumentLogJob', 'createProviderLogJob', + 'processOtlpTracesJob', 'runBatchEvaluationJob', 'runDocumentForEvaluationJob', 'runDocumentInBatchJob', 'runDocumentJob', 'runEvaluationJob', 'uploadDocumentLogsJob', - 'createDocumentLogJob', ], }, [Queues.eventsQueue]: { @@ -44,13 +49,15 @@ export const QUEUES = { name: Queues.eventHandlersQueue, jobs: [ 'createClaimInvitationReferralJob', + 'createDocumentLogsFromSpansJob', + 'createLoopsContact', + 'notifyClientOfBulkCreateTracesAndSpans', 'notifyToClientDocumentLogCreatedJob', 'notifyToClientEvaluationResultCreatedJob', 'runLiveEvaluationsJob', 'sendInvitationToUserJob', 'sendMagicLinkJob', 'sendReferralInvitationJob', - 'createLoopsContact', ], }, [Queues.liveEvaluationsQueue]: { diff --git a/packages/core/src/jobs/job-definitions/documentLogs/createDocumentLogFromSpanJob.ts b/packages/core/src/jobs/job-definitions/documentLogs/createDocumentLogFromSpanJob.ts new file mode 100644 index 000000000..0680e539b --- /dev/null +++ b/packages/core/src/jobs/job-definitions/documentLogs/createDocumentLogFromSpanJob.ts @@ -0,0 +1,103 @@ +import type { Job } from 'bullmq' + +import { HEAD_COMMIT, LogSources } from '../../../browser' +import { Span } from '../../../browser' +import { findCommitByUuid } from '../../../data-access/commits' +import { createDocumentLog } from '../../../services/documentLogs' +import { generateUUIDIdentifier } from '../../../lib' +import { + findProjectFromDocument, + findWorkspaceFromSpan, +} from '../../../data-access' +import { DocumentVersionsRepository } from '../../../repositories' +import { CoreAssistantMessage, CoreMessage } from 'ai' + +export type CreateDocumentLogFromSpanJobData = { + span: Span + distinctId: string | undefined | null + prompt: { + commitUuid: string | undefined | null + documentUuid: string + parameters?: Record | undefined + } +} + +export async function createDocumentLogFromSpanJob( + job: Job, +) { + const { span, distinctId, prompt } = job.data + if (span.internalType !== 'generation') return + if (!prompt.documentUuid) return + + const workspace = await findWorkspaceFromSpan(span) + if (!workspace) return + + const docsRepo = new DocumentVersionsRepository(workspace.id) + const document = await docsRepo + .getDocumentByUuid({ + documentUuid: prompt.documentUuid, + }) + .then((r) => r.unwrap()) + if (!document) return + + const project = await findProjectFromDocument(document) + if (!project) return + + const commit = await findCommitByUuid({ + projectId: project.id, + uuid: prompt.commitUuid ?? HEAD_COMMIT, + }).then((r) => r.unwrap()) + if (!commit) return + + // @ts-ignore - Fix when we fix types in compiler + const response = span.output?.[0]?.content + const duration = + span.endTime && span.startTime + ? new Date(span.endTime).getTime() - new Date(span.startTime).getTime() + : undefined + + const costInMillicents = + (span.inputCostInMillicents ?? 0) + (span.outputCostInMillicents ?? 0) + const tokens = (span.inputTokens ?? 0) + (span.outputTokens ?? 0) + const toolCalls = (span.output as CoreMessage[]) + .filter((message) => message.role === 'assistant') + .flatMap((message: CoreAssistantMessage) => + typeof message.content === 'string' + ? [] + : message.content.filter((c) => c.type === 'tool-call'), + ) + .map((toolCall) => ({ + id: toolCall.toolCallId, + name: toolCall.toolName, + arguments: toolCall.args as Record, + })) + + await createDocumentLog({ + commit, + data: { + uuid: generateUUIDIdentifier(), + documentUuid: document.documentUuid, + parameters: prompt.parameters ?? {}, + resolvedContent: '', + source: LogSources.API, + duration, + customIdentifier: distinctId ?? undefined, + createdAt: new Date(), + providerLog: { + toolCalls, + model: span.model ?? '', + costInMillicents, + duration, + usage: { + promptTokens: span.inputTokens ?? 0, + completionTokens: span.outputTokens ?? 0, + totalTokens: tokens, + }, + // @ts-ignore - Fix when we fix types in compiler + messages: span.input!, + responseText: + typeof response === 'string' ? response : JSON.stringify(response), + }, + }, + }) +} diff --git a/packages/core/src/jobs/job-definitions/index.ts b/packages/core/src/jobs/job-definitions/index.ts index 4dcbc7f1d..3d36710d8 100644 --- a/packages/core/src/jobs/job-definitions/index.ts +++ b/packages/core/src/jobs/job-definitions/index.ts @@ -9,5 +9,9 @@ export * from '../../events/handlers/sendMagicLinkHandler' export * from '../../events/handlers/sendInvitationToUser' export * from '../../events/handlers/sendReferralInvitation' export * from '../../events/handlers/createLoopsContact' +export * from '../../events/handlers/notifyClientOfBulkCreateTracesAndSpans' +export * from '../../events/handlers/createDocumentLogsFromSpansJob' export * from './documentLogs/uploadDocumentLogsJob' export * from './documentLogs/createDocumentLogJob' +export * from './documentLogs/createDocumentLogFromSpanJob' +export * from './traces/processOtlpTracesJob' diff --git a/packages/core/src/jobs/job-definitions/traces/processOtlpTracesJob.test.ts b/packages/core/src/jobs/job-definitions/traces/processOtlpTracesJob.test.ts new file mode 100644 index 000000000..5a5daf2e7 --- /dev/null +++ b/packages/core/src/jobs/job-definitions/traces/processOtlpTracesJob.test.ts @@ -0,0 +1,143 @@ +import { describe, it, expect, vi } from 'vitest' +import { Job } from 'bullmq' +import { + processOtlpTracesJob, + ProcessOtlpTracesJobData, +} from './processOtlpTracesJob' +import { bulkCreateTracesAndSpans } from '../../../services/traces/bulkCreateTracesAndSpans' +import { createProject } from '../../../tests/factories' + +// Mock the bulkCreateTracesAndSpans function +vi.mock('../../../services/traces/bulkCreateTracesAndSpans', () => ({ + bulkCreateTracesAndSpans: vi.fn(), +})) + +describe('processOtlpTracesJob', () => { + it('should process OTLP traces and create them in the workspace', async () => { + // Arrange + const { workspace } = await createProject() + const mockSpans = [ + { + span: { + traceId: 'trace-1', + spanId: 'span-1', + name: 'test-span-1', + kind: 1, + startTimeUnixNano: '1700000000000000000', + endTimeUnixNano: '1700000001000000000', + attributes: {}, + }, + resourceAttributes: { + 'service.name': 'test-service', + }, + }, + { + span: { + traceId: 'trace-1', // Same trace as above + spanId: 'span-2', + name: 'test-span-2', + kind: 1, + startTimeUnixNano: '1700000000500000000', + endTimeUnixNano: '1700000001500000000', + attributes: {}, + }, + resourceAttributes: { + 'service.name': 'test-service', + }, + }, + ] + + const jobData: ProcessOtlpTracesJobData = { + // @ts-expect-error - mocks + spans: mockSpans, + workspace, + } + + const job = { + data: jobData, + } as Job + + // Act + await processOtlpTracesJob(job) + + // Assert + expect(bulkCreateTracesAndSpans).toHaveBeenCalledWith({ + workspace, + traces: [ + { + traceId: 'trace-1', + startTime: new Date(1700000000000), + endTime: new Date(1700000001000), + attributes: { + 'service.name': 'test-service', + }, + }, + ], + spans: expect.arrayContaining([ + expect.objectContaining({ + spanId: 'span-1', + name: 'test-span-1', + }), + expect.objectContaining({ + spanId: 'span-2', + name: 'test-span-2', + }), + ]), + }) + }) + + it('should handle spans without endTime', async () => { + // Arrange + const { workspace } = await createProject() + const mockSpans = [ + { + span: { + traceId: 'trace-1', + spanId: 'span-1', + name: 'test-span', + kind: 1, + startTimeUnixNano: '1700000000000000000', + // No endTimeUnixNano + attributes: {}, + }, + resourceAttributes: { + 'service.name': 'test-service', + }, + }, + ] + + const jobData: ProcessOtlpTracesJobData = { + // @ts-expect-error - mocks + spans: mockSpans, + workspace, + } + + const job = { + data: jobData, + } as Job + + // Act + await processOtlpTracesJob(job) + + // Assert + expect(bulkCreateTracesAndSpans).toHaveBeenCalledWith({ + workspace, + traces: [ + { + traceId: 'trace-1', + startTime: new Date(1700000000000), + endTime: undefined, + attributes: { + 'service.name': 'test-service', + }, + }, + ], + spans: expect.arrayContaining([ + expect.objectContaining({ + spanId: 'span-1', + name: 'test-span', + }), + ]), + }) + }) +}) diff --git a/packages/core/src/jobs/job-definitions/traces/processOtlpTracesJob.ts b/packages/core/src/jobs/job-definitions/traces/processOtlpTracesJob.ts new file mode 100644 index 000000000..1aa9cde95 --- /dev/null +++ b/packages/core/src/jobs/job-definitions/traces/processOtlpTracesJob.ts @@ -0,0 +1,71 @@ +import { Job } from 'bullmq' + +import { Workspace } from '../../../browser' +import { bulkCreateTracesAndSpans } from '../../../services/traces/bulkCreateTracesAndSpans' +import { + convertOtlpAttributes, + OtlpSpan, + processSpan, + ResourceSpan, +} from '../../../services/traces/otlp' + +export type ProcessOtlpTracesJobData = { + spans: { + span: OtlpSpan + resourceAttributes: ResourceSpan['resource']['attributes'] + }[] + workspace: Workspace +} + +export const processOtlpTracesJob = async ( + job: Job, +) => { + const { spans, workspace } = job.data + + // Group spans by traceId for efficient trace creation + const traceGroups = spans.reduce( + (acc, { span, resourceAttributes }) => { + const key = span.traceId + if (!acc[key]) { + acc[key] = { + traceId: span.traceId, + startTime: new Date(parseInt(span.startTimeUnixNano) / 1_000_000), + endTime: span.endTimeUnixNano + ? new Date(parseInt(span.endTimeUnixNano) / 1_000_000) + : undefined, + attributes: convertOtlpAttributes({ attributes: resourceAttributes }), + spans: [], + } + } + acc[key].spans.push(span) + return acc + }, + {} as Record< + string, + { + traceId: string + startTime: Date + endTime?: Date + attributes: Record + spans: OtlpSpan[] + } + >, + ) + + const tracesToCreate = Object.values(traceGroups).map( + ({ traceId, startTime, endTime, attributes }) => ({ + traceId, + startTime, + endTime, + attributes, + }), + ) + + // Create all traces and spans in a single transaction, skipping existing traces + await bulkCreateTracesAndSpans({ + workspace, + traces: tracesToCreate, + // @ts-expect-error - Fix when we fix types in compiler + spans: spans.map(({ span }) => processSpan({ span })), + }) +} diff --git a/packages/core/src/jobs/job-definitions/types.d.ts b/packages/core/src/jobs/job-definitions/types.d.ts index 64465e5ba..689a46c56 100644 --- a/packages/core/src/jobs/job-definitions/types.d.ts +++ b/packages/core/src/jobs/job-definitions/types.d.ts @@ -7,6 +7,7 @@ import type { Jobs, Queues } from '../constants' import type { RunDocumentForEvaluationJobData } from './batchEvaluations' import type { RunBatchEvaluationJobParams } from './batchEvaluations/runBatchEvaluationJob' import type { RunEvaluationJobData } from './batchEvaluations/runEvaluationJob' +import type { CreateDocumentLogFromSpanJobData } from './documentLogs/createDocumentLogFromSpanJob' import type { RunDocumentInBatchJobProps } from './documents/runDocumentInBatchJob' import type { RunDocumentJobData } from './documents/runDocumentJob' import type { UploadDocumentLogsJobData } from './documents/uploadDocumentLogsJob' @@ -25,6 +26,7 @@ export type JobDataMap = { [Jobs.publishToAnalyticsJob]: LatitudeEvent [Jobs.runLiveEvaluationJob]: RunLiveEvaluationJobData [Jobs.uploadDocumentLogsJob]: UploadDocumentLogsJobData + [Jobs.createDocumentLogFromSpanJob]: CreateDocumentLogFromSpanJobData } type JobData = J extends keyof JobDataMap diff --git a/packages/core/src/repositories/documentVersionsRepository/getDocumentByUuid.test.ts b/packages/core/src/repositories/documentVersionsRepository/getDocumentByUuid.test.ts new file mode 100644 index 000000000..17f6ff2d7 --- /dev/null +++ b/packages/core/src/repositories/documentVersionsRepository/getDocumentByUuid.test.ts @@ -0,0 +1,121 @@ +import { beforeEach, describe, expect, it } from 'vitest' + +import { + createDocumentVersion, + createProject, + createCommit, +} from '../../tests/factories' +import { DocumentVersionsRepository } from '.' +import { Project, User, Workspace } from '../../browser' + +describe('DocumentVersionsRepository.getDocumentByUuid', () => { + let repository: DocumentVersionsRepository + let workspace: Workspace + let project: Project + let user: User + + beforeEach(async () => { + const { user: u, project: p, workspace: w } = await createProject() + workspace = w + project = p + user = u + repository = new DocumentVersionsRepository(workspace.id) + }) + + it('returns the latest merged version when no commit is specified', async () => { + const documentUuid = 'f47ac10b-58cc-4372-a567-0e02b2c3d479' + + // Create commits with different merge times + const oldCommit = await createCommit({ + projectId: project.id, + mergedAt: new Date('2024-01-01'), + }) + const newCommit = await createCommit({ + projectId: project.id, + mergedAt: new Date('2024-01-02'), + }) + const unmergedCommit = await createCommit({ + projectId: project.id, + mergedAt: null, + }) + + // Create document versions in different commits + await createDocumentVersion({ + workspace, + user, + commit: oldCommit, + path: '/old.md', + content: 'old content', + }) + await createDocumentVersion({ + workspace, + user, + commit: newCommit, + path: '/new.md', + content: 'new content', + }) + await createDocumentVersion({ + workspace, + user, + commit: unmergedCommit, + path: '/draft.md', + content: 'draft content', + }) + + const result = await repository.getDocumentByUuid({ documentUuid }) + expect(result.error).toBeNull() + + const document = result.unwrap() + expect(document.path).toBe('/new.md') + expect(document.content).toBe('new content') + expect(document.commitId).toBe(newCommit.id) + }) + + it('returns the specific version when commit is provided', async () => { + const documentUuid = 'f47ac10b-58cc-4372-a567-0e02b2c3d479' + + const oldCommit = await createCommit({ + projectId: project.id, + mergedAt: new Date('2024-01-01'), + }) + const newCommit = await createCommit({ + projectId: project.id, + mergedAt: new Date('2024-01-02'), + }) + + await createDocumentVersion({ + workspace, + user, + commit: oldCommit, + path: '/old.md', + content: 'old content', + }) + await createDocumentVersion({ + workspace, + user, + commit: newCommit, + path: '/new.md', + content: 'new content', + }) + + const result = await repository.getDocumentByUuid({ + documentUuid, + commit: oldCommit, + }) + expect(result.error).toBeNull() + + const document = result.unwrap() + expect(document.path).toBe('/old.md') + expect(document.content).toBe('old content') + expect(document.commitId).toBe(oldCommit.id) + }) + + it('returns error when document does not exist', async () => { + const result = await repository.getDocumentByUuid({ + documentUuid: 'f47ac10b-58cc-4372-a567-0e02b2c3d479', + }) + + expect(result.error).not.toBeNull() + expect(result.error?.message).toBe('Document not found') + }) +}) diff --git a/packages/core/src/repositories/documentVersionsRepository/index.ts b/packages/core/src/repositories/documentVersionsRepository/index.ts index 11b4e9fa0..4cb3e8cde 100644 --- a/packages/core/src/repositories/documentVersionsRepository/index.ts +++ b/packages/core/src/repositories/documentVersionsRepository/index.ts @@ -1,5 +1,6 @@ import { and, + desc, eq, getTableColumns, isNotNull, @@ -102,20 +103,29 @@ export class DocumentVersionsRepository extends RepositoryLegacy< commit, documentUuid, }: { - commit: Commit + commit?: Commit documentUuid: string }) { - const document = await this.db - .select() - .from(this.scope) - .where( - and( - eq(this.scope.commitId, commit.id), - eq(this.scope.documentUuid, documentUuid), - ), - ) - .limit(1) - .then((docs) => docs[0]) + const conditions = [eq(this.scope.documentUuid, documentUuid)] + + let document + if (commit) { + conditions.push(eq(this.scope.commitId, commit.id)) + document = await this.db + .select() + .from(this.scope) + .where(and(...conditions)) + .limit(1) + .then((docs) => docs[0]) + } else { + document = await this.db + .select() + .from(this.scope) + .where(and(...conditions, isNotNull(this.scope.mergedAt))) + .orderBy(desc(this.scope.mergedAt)) + .limit(1) + .then((docs) => docs[0]) + } if (!document) return Result.error(new NotFoundError('Document not found')) diff --git a/packages/core/src/repositories/evaluationsRepository.ts b/packages/core/src/repositories/evaluationsRepository.ts index c6160f200..1074870fe 100644 --- a/packages/core/src/repositories/evaluationsRepository.ts +++ b/packages/core/src/repositories/evaluationsRepository.ts @@ -1,5 +1,4 @@ import { omit } from 'lodash-es' - import { and, eq, getTableColumns, inArray, isNull } from 'drizzle-orm' import { EvaluationDto } from '../browser' @@ -113,12 +112,13 @@ export class EvaluationsRepository extends RepositoryLegacy< .select() .from(this.scope) .where(eq(this.scope.name, name)) + .limit(1) if (!result.length) { - return Result.error(new NotFoundError('Evaluation not found')) + return Result.error(new NotFoundError(`Evaluation ${name} not found`)) } - return Result.ok(result[0]! as EvaluationDto) + return Result.ok(result[0] as EvaluationDto) } async findByUuid(uuid: string) { diff --git a/packages/core/src/repositories/index.ts b/packages/core/src/repositories/index.ts index b070e5383..db86b5f4f 100644 --- a/packages/core/src/repositories/index.ts +++ b/packages/core/src/repositories/index.ts @@ -15,3 +15,4 @@ export * from './connectedEvaluationsRepository' export * from './evaluationResultsRepository' export * from './runErrors/evaluationResultsRepository' export * from './claimedRewardsRepository' +export * from './spanRepository' diff --git a/packages/core/src/repositories/spanRepository.ts b/packages/core/src/repositories/spanRepository.ts new file mode 100644 index 000000000..8b020d08e --- /dev/null +++ b/packages/core/src/repositories/spanRepository.ts @@ -0,0 +1,22 @@ +import { eq, getTableColumns } from 'drizzle-orm' +import { Span } from '../browser' +import { spans, traces } from '../schema' +import Repository from './repositoryV2' + +export default class SpanRepository extends Repository { + get scope() { + return this.db + .select(getTableColumns(spans)) + .from(spans) + .innerJoin(traces, eq(traces.traceId, spans.traceId)) + .where(eq(traces.workspaceId, this.workspaceId)) + .$dynamic() + } + + findBySpanId(spanId: string) { + return this.scope + .where(eq(spans.spanId, spanId)) + .limit(1) + .then((r) => r[0]) + } +} diff --git a/packages/core/src/repositories/tracesRepository.ts b/packages/core/src/repositories/tracesRepository.ts new file mode 100644 index 000000000..4ebda8cb0 --- /dev/null +++ b/packages/core/src/repositories/tracesRepository.ts @@ -0,0 +1,50 @@ +import { and, count, desc, eq, getTableColumns } from 'drizzle-orm' + +import { Trace } from '../browser' +import { projects, spans, traces, workspaces } from '../schema' +import Repository from './repositoryV2' + +const tt = getTableColumns(traces) + +export class TracesRepository extends Repository { + get scope() { + return this.db + .select() + .from(traces) + .innerJoin(projects, eq(projects.id, traces.projectId)) + .innerJoin(workspaces, eq(workspaces.id, projects.workspaceId)) + .where(eq(workspaces.id, this.workspaceId)) + .$dynamic() + } + + async findByProjectId(projectId: number, page: number, pageSize: number) { + const where = and(eq(tt.projectId, projectId)) + + const [items, total] = await Promise.all([ + this.db + .select({ + traceId: tt.traceId, + name: tt.name, + startTime: tt.startTime, + endTime: tt.endTime, + attributes: tt.attributes, + status: tt.status, + spanCount: count(spans.id), + }) + .from(traces) + .leftJoin(spans, eq(spans.traceId, traces.traceId)) + .where(where) + .groupBy(tt.id) + .orderBy(desc(tt.startTime)) + .limit(pageSize) + .offset((page - 1) * pageSize), + this.db + .select({ value: count() }) + .from(traces) + .where(where) + .then((r) => r[0]?.value ?? 0), + ]) + + return { items, total } + } +} diff --git a/packages/core/src/schema/index.ts b/packages/core/src/schema/index.ts index 8081e6a18..d81141644 100644 --- a/packages/core/src/schema/index.ts +++ b/packages/core/src/schema/index.ts @@ -45,5 +45,8 @@ export * from './models/evaluationResultableNumbers' export * from './models/evaluationResultableTexts' export * from './models/evaluationResultableBooleans' +export * from './models/traces' +export * from './models/spans' + // Public sharing export * from './models/publishedDocuments' diff --git a/packages/core/src/schema/models/spans.ts b/packages/core/src/schema/models/spans.ts index ad52c0e5e..eb483691e 100644 --- a/packages/core/src/schema/models/spans.ts +++ b/packages/core/src/schema/models/spans.ts @@ -84,15 +84,16 @@ export const spans = latitudeSchema.table( inputCostInMillicents: integer('input_cost_in_millicents').default(0), outputCostInMillicents: integer('output_cost_in_millicents').default(0), totalCostInMillicents: integer('total_cost_in_millicents').default(0), - toolCalls: jsonb('tool_calls').$type(), + tools: jsonb('tools').$type(), // Internal Latitude enum to identify generation spans from other spans internalType: spanInternalTypesEnum('internal_type'), distinctId: varchar('distinct_id', { length: 256 }), metadata: jsonb('metadata').$type>(), - promptPath: varchar('prompt_path', { length: 256 }), + documentUuid: uuid('document_uuid'), commitUuid: uuid('commit_uuid'), + parameters: jsonb('parameters').$type>(), ...timestamps(), }, (table) => ({ diff --git a/packages/core/src/schema/models/traces.ts b/packages/core/src/schema/models/traces.ts index e789e4ce3..48ca983ee 100644 --- a/packages/core/src/schema/models/traces.ts +++ b/packages/core/src/schema/models/traces.ts @@ -9,16 +9,16 @@ import { import { latitudeSchema } from '../db-schema' import { timestamps } from '../schemaHelpers' -import { projects } from './projects' +import { workspaces } from './workspaces' export const traces = latitudeSchema.table( 'traces', { id: bigserial('id', { mode: 'number' }).notNull().primaryKey(), traceId: varchar('trace_id', { length: 32 }).notNull().unique(), - projectId: bigint('project_id', { mode: 'number' }) + workspaceId: bigint('workspace_id', { mode: 'number' }) .notNull() - .references(() => projects.id, { onDelete: 'cascade' }), + .references(() => workspaces.id, { onDelete: 'cascade' }), name: varchar('name', { length: 256 }), startTime: timestamp('start_time').notNull(), endTime: timestamp('end_time'), @@ -28,7 +28,7 @@ export const traces = latitudeSchema.table( ...timestamps(), }, (table) => ({ - projectIdIdx: index('traces_project_id_idx').on(table.projectId), + workspaceIdIdx: index('traces_workspace_id_idx').on(table.workspaceId), traceIdIdx: index('traces_trace_id_idx').on(table.traceId), startTimeIdx: index('traces_start_time_idx').on(table.startTime), }), diff --git a/packages/core/src/schema/relations.ts b/packages/core/src/schema/relations.ts index 5f0920a80..b26b36940 100644 --- a/packages/core/src/schema/relations.ts +++ b/packages/core/src/schema/relations.ts @@ -21,7 +21,9 @@ import { projects } from './models/projects' import { providerApiKeys } from './models/providerApiKeys' import { providerLogs } from './models/providerLogs' import { sessions } from './models/sessions' +import { spans } from './models/spans' import { subscriptions } from './models/subscriptions' +import { traces } from './models/traces' import { users } from './models/users' import { workspaces } from './models/workspaces' @@ -267,3 +269,18 @@ export const subscriptionRelations = relations(subscriptions, ({ one }) => ({ references: [workspaces.id], }), })) + +export const traceRelations = relations(traces, ({ one, many }) => ({ + workspace: one(workspaces, { + fields: [traces.workspaceId], + references: [workspaces.id], + }), + spans: many(spans), +})) + +export const spansRelations = relations(spans, ({ one }) => ({ + trace: one(traces, { + fields: [spans.traceId], + references: [traces.id], + }), +})) diff --git a/packages/core/src/schema/types.ts b/packages/core/src/schema/types.ts index 1df45237f..0f6d0539c 100644 --- a/packages/core/src/schema/types.ts +++ b/packages/core/src/schema/types.ts @@ -26,7 +26,9 @@ import { providerLogs } from './models/providerLogs' import { publishedDocuments } from './models/publishedDocuments' import { runErrors } from './models/runErrors' import { sessions } from './models/sessions' +import { spans } from './models/spans' import { subscriptions } from './models/subscriptions' +import { traces } from './models/traces' import { users } from './models/users' import { workspaces } from './models/workspaces' @@ -62,6 +64,8 @@ export type EvaluationTemplateCategory = InferSelectModel< typeof evaluationTemplateCategories > export type Subscription = InferSelectModel +export type Trace = InferSelectModel +export type Span = InferSelectModel export type EvaluationMetadataLlmAsJudgeAdvanced = Omit< InferSelectModel, @@ -209,3 +213,17 @@ export interface AverageResultOverTime { averageResult: number count: number } + +export type SpanEvent = { + name: string + timestamp: string + attributes?: Record +} + +export type SpanLink = { + traceId: string + spanId: string + attributes?: Record +} + +export type TraceAttributes = Record diff --git a/packages/core/src/services/ai/providers/rules/anthropic.test.ts b/packages/core/src/services/ai/providers/rules/anthropic.test.ts index 4895a1f59..81acb1dff 100644 --- a/packages/core/src/services/ai/providers/rules/anthropic.test.ts +++ b/packages/core/src/services/ai/providers/rules/anthropic.test.ts @@ -3,7 +3,8 @@ import { beforeAll, describe, expect, it } from 'vitest' import { PartialConfig } from '../../helpers' import { Providers } from '../models' -import { applyProviderRules, ProviderRules } from './index' +import { ProviderRules } from './types' +import { applyProviderRules } from '.' const providerType = Providers.Anthropic diff --git a/packages/core/src/services/ai/providers/rules/anthropic.ts b/packages/core/src/services/ai/providers/rules/anthropic.ts index a5df4df40..75c92bc9d 100644 --- a/packages/core/src/services/ai/providers/rules/anthropic.ts +++ b/packages/core/src/services/ai/providers/rules/anthropic.ts @@ -1,5 +1,5 @@ -import { AppliedRules, ProviderRules } from '.' import { enforceAllSystemMessagesFirst } from './helpers/enforceAllSystemMessagesFirst' +import { AppliedRules, ProviderRules } from './types' export function applyAnthropicRules(appliedRule: AppliedRules): AppliedRules { const rule = enforceAllSystemMessagesFirst(appliedRule, { diff --git a/packages/core/src/services/ai/providers/rules/custom.test.ts b/packages/core/src/services/ai/providers/rules/custom.test.ts index f0e0731d7..23f19958b 100644 --- a/packages/core/src/services/ai/providers/rules/custom.test.ts +++ b/packages/core/src/services/ai/providers/rules/custom.test.ts @@ -1,8 +1,8 @@ import type { Message } from '@latitude-data/compiler' import { describe, expect, it } from 'vitest' -import { ProviderRules } from '.' import { applyCustomRules } from './custom' +import { ProviderRules } from './types' describe('applyCustomRules', () => { it('not warns when no rules are violated', () => { diff --git a/packages/core/src/services/ai/providers/rules/custom.ts b/packages/core/src/services/ai/providers/rules/custom.ts index ef7a57608..1db5a3a43 100644 --- a/packages/core/src/services/ai/providers/rules/custom.ts +++ b/packages/core/src/services/ai/providers/rules/custom.ts @@ -1,4 +1,4 @@ -import { AppliedRules, ProviderRules } from '.' +import { AppliedRules, ProviderRules } from './types' export function applyCustomRules(rules: AppliedRules): AppliedRules { const hasNonTextSystemMessage = rules.messages.some( diff --git a/packages/core/src/services/ai/providers/rules/google.test.ts b/packages/core/src/services/ai/providers/rules/google.test.ts index ab5678d63..1fa809a79 100644 --- a/packages/core/src/services/ai/providers/rules/google.test.ts +++ b/packages/core/src/services/ai/providers/rules/google.test.ts @@ -1,9 +1,10 @@ import type { Message } from '@latitude-data/compiler' import { beforeAll, describe, expect, it } from 'vitest' -import { applyProviderRules, ProviderRules } from '.' import { PartialConfig } from '../../helpers' import { Providers } from '../models' +import { ProviderRules } from './types' +import { applyProviderRules } from '.' const providerType = Providers.Google diff --git a/packages/core/src/services/ai/providers/rules/google.ts b/packages/core/src/services/ai/providers/rules/google.ts index e13bd2694..13d7b1e56 100644 --- a/packages/core/src/services/ai/providers/rules/google.ts +++ b/packages/core/src/services/ai/providers/rules/google.ts @@ -1,5 +1,5 @@ import { enforceAllSystemMessagesFirst } from './helpers/enforceAllSystemMessagesFirst' -import { AppliedRules, ProviderRules } from './index' +import { AppliedRules, ProviderRules } from './types' export function applyGoogleRules(appliedRule: AppliedRules): AppliedRules { return enforceAllSystemMessagesFirst(appliedRule, { diff --git a/packages/core/src/services/ai/providers/rules/helpers/enforceAllSystemMessagesFirst.ts b/packages/core/src/services/ai/providers/rules/helpers/enforceAllSystemMessagesFirst.ts index ec8c94e0e..93b689101 100644 --- a/packages/core/src/services/ai/providers/rules/helpers/enforceAllSystemMessagesFirst.ts +++ b/packages/core/src/services/ai/providers/rules/helpers/enforceAllSystemMessagesFirst.ts @@ -1,6 +1,6 @@ import type { ContentType, Message, MessageRole } from '@latitude-data/compiler' -import { AppliedRules, ProviderRules } from '../index' +import { AppliedRules, ProviderRules } from '../types' const SYSTEM_ROLE = 'system' diff --git a/packages/core/src/services/ai/providers/rules/index.ts b/packages/core/src/services/ai/providers/rules/index.ts index 169581357..532fc7a77 100644 --- a/packages/core/src/services/ai/providers/rules/index.ts +++ b/packages/core/src/services/ai/providers/rules/index.ts @@ -5,23 +5,9 @@ import { Providers } from '../models' import { applyAnthropicRules } from './anthropic' import { applyCustomRules } from './custom' import { applyGoogleRules } from './google' +import { AppliedRules } from './types' import { vercelSdkRules } from './vercel' -export enum ProviderRules { - Anthropic = 'anthropic', - Google = 'google', - VercelSDK = 'latitude', - Custom = 'custom', -} - -type ProviderRule = { rule: ProviderRules; ruleMessage: string } - -export type AppliedRules = { - rules: ProviderRule[] - messages: Message[] - config: Config -} - type Props = { providerType: Providers messages: Message[] diff --git a/packages/core/src/services/ai/providers/rules/types.ts b/packages/core/src/services/ai/providers/rules/types.ts new file mode 100644 index 000000000..4ed901267 --- /dev/null +++ b/packages/core/src/services/ai/providers/rules/types.ts @@ -0,0 +1,16 @@ +import type { Config, Message } from '@latitude-data/compiler' + +export enum ProviderRules { + Anthropic = 'anthropic', + Google = 'google', + VercelSDK = 'latitude', + Custom = 'custom', +} + +type ProviderRule = { rule: ProviderRules; ruleMessage: string } + +export type AppliedRules = { + rules: ProviderRule[] + messages: Message[] + config: Config +} diff --git a/packages/core/src/services/ai/providers/rules/vercel.ts b/packages/core/src/services/ai/providers/rules/vercel.ts index d838a8b43..3cda704cf 100644 --- a/packages/core/src/services/ai/providers/rules/vercel.ts +++ b/packages/core/src/services/ai/providers/rules/vercel.ts @@ -6,13 +6,13 @@ import type { } from '@latitude-data/compiler' import { Providers } from '../models' -import { AppliedRules } from './index' import { extractContentMetadata, extractMessageMetadata, getProviderMetadataKey, type ProviderMetadata, } from './providerMetadata' +import { AppliedRules } from './types' function flattenSystemMessage({ message, diff --git a/packages/core/src/services/documentLogs/create.ts b/packages/core/src/services/documentLogs/create.ts index 8bd23abce..506e54983 100644 --- a/packages/core/src/services/documentLogs/create.ts +++ b/packages/core/src/services/documentLogs/create.ts @@ -1,4 +1,4 @@ -import { Message } from '@latitude-data/compiler' +import { Message, ToolCall } from '@latitude-data/compiler' import { Commit, DocumentLog, LogSources } from '../../browser' import { database } from '../../client' @@ -13,6 +13,7 @@ import { } from '../../lib' import { documentLogs } from '../../schema' import { createProviderLog } from '../providerLogs' +import { LanguageModelUsage } from 'ai' export type CreateDocumentLogProps = { commit: Commit @@ -27,7 +28,12 @@ export type CreateDocumentLogProps = { createdAt?: Date providerLog?: { messages: Message[] + model: string responseText?: string + toolCalls?: ToolCall[] + duration?: number + usage?: LanguageModelUsage + costInMillicents?: number } } } @@ -78,7 +84,12 @@ export async function createDocumentLog( documentLogUuid: documentLog.uuid, messages: providerLog.messages, responseText: providerLog.responseText, + toolCalls: providerLog.toolCalls, generatedAt: new Date(), + model: providerLog.model, + duration: providerLog.duration, + costInMillicents: providerLog.costInMillicents, + usage: providerLog.usage, source, workspace, }).then((r) => r.unwrap()) diff --git a/packages/core/src/services/providerLogs/documentVersionPresenter.ts b/packages/core/src/services/providerLogs/documentVersionPresenter.ts new file mode 100644 index 000000000..e6dd1db07 --- /dev/null +++ b/packages/core/src/services/providerLogs/documentVersionPresenter.ts @@ -0,0 +1,15 @@ +import { Commit, DocumentVersion, DocumentVersionDto } from '../../browser' + +export function documentVersionPresenter({ + documentVersion, + commit, +}: { + documentVersion: DocumentVersion + commit: Commit +}): DocumentVersionDto { + return { + ...documentVersion, + projectId: commit.projectId, + commitUuid: commit.uuid, + } +} diff --git a/packages/core/src/services/providerLogs/index.ts b/packages/core/src/services/providerLogs/index.ts index f343eb1ea..2dd44e43e 100644 --- a/packages/core/src/services/providerLogs/index.ts +++ b/packages/core/src/services/providerLogs/index.ts @@ -3,3 +3,4 @@ export * from './addMessages' export * from './buildResponse' export * from './serialize' export * from './serializeForEvaluation' +export * from './documentVersionPresenter' diff --git a/packages/core/src/services/traces/bulkCreateTracesAndSpans.test.ts b/packages/core/src/services/traces/bulkCreateTracesAndSpans.test.ts new file mode 100644 index 000000000..c50c4ff8a --- /dev/null +++ b/packages/core/src/services/traces/bulkCreateTracesAndSpans.test.ts @@ -0,0 +1,100 @@ +import { beforeEach, describe, expect, it } from 'vitest' + +import { Project } from '../../browser' +import { SpanKind } from '../../constants' +import { createProject } from '../../tests/factories' +import { bulkCreateTracesAndSpans } from './bulkCreateTracesAndSpans' + +describe('bulkCreateTracesAndSpans', () => { + let project: Project + + beforeEach(async () => { + project = (await createProject()).project + }) + + it('handles concurrent trace creation gracefully', async () => { + const traceId = 'test-trace-id' + const spanId = 'test-span-id' + + // Create first trace + const result1 = await bulkCreateTracesAndSpans({ + project, + traces: [ + { + traceId, + startTime: new Date(), + }, + ], + spans: [ + { + traceId, + spanId, + name: 'test-span', + kind: SpanKind.Client, + startTime: new Date(), + }, + ], + }) + + expect(result1.ok).toBe(true) + if (!result1.ok) return + expect(result1.unwrap().traces).toHaveLength(1) + expect(result1.unwrap().spans).toHaveLength(1) + + // Try to create the same trace again + const result2 = await bulkCreateTracesAndSpans({ + project, + traces: [ + { + traceId, + startTime: new Date(), + }, + ], + spans: [ + { + traceId, + spanId: 'another-span-id', + name: 'test-span-2', + kind: SpanKind.Client, + startTime: new Date(), + }, + ], + }) + + expect(result2.ok).toBe(true) + if (!result2.ok) return + expect(result2.unwrap().traces).toHaveLength(0) // No new traces should be created + expect(result2.unwrap().spans).toHaveLength(1) // New span should be created + }) + + it('creates multiple traces and spans in a single transaction', async () => { + const result = await bulkCreateTracesAndSpans({ + project, + traces: [ + { traceId: 'trace-1', startTime: new Date() }, + { traceId: 'trace-2', startTime: new Date() }, + ], + spans: [ + { + traceId: 'trace-1', + spanId: 'span-1', + name: 'span-1', + kind: SpanKind.Client, + startTime: new Date(), + }, + { + traceId: 'trace-2', + spanId: 'span-2', + name: 'span-2', + kind: SpanKind.Client, + startTime: new Date(), + }, + ], + }) + + expect(result.ok).toBe(true) + if (!result.ok) return + expect(result.unwrap().traces).toHaveLength(2) + expect(result.unwrap().spans).toHaveLength(2) + }) +}) diff --git a/packages/core/src/services/traces/bulkCreateTracesAndSpans.ts b/packages/core/src/services/traces/bulkCreateTracesAndSpans.ts new file mode 100644 index 000000000..c9af96888 --- /dev/null +++ b/packages/core/src/services/traces/bulkCreateTracesAndSpans.ts @@ -0,0 +1,201 @@ +import { eq, inArray } from 'drizzle-orm' + +import { Workspace } from '../../browser' +import { database } from '../../client' +import { SpanKind, SpanMetadataTypes } from '../../constants' +import { publisher } from '../../events/publisher' +import { Result, Transaction } from '../../lib' +import { spans } from '../../schema/models/spans' +import { traces } from '../../schema/models/traces' +import { Message, ToolCall } from '@latitude-data/compiler' + +export type BulkCreateTracesAndSpansProps = { + workspace: Workspace + traces: Array<{ + traceId: string + name?: string + startTime: Date + endTime?: Date + attributes?: Record + status?: string + }> + spans: Array<{ + traceId: string + spanId: string + parentSpanId?: string | null + name: string + kind: SpanKind + startTime: Date + endTime?: Date | null + attributes?: Record | null + status?: string | null + statusMessage?: string | null + tools?: Array | null + events?: Array<{ + name: string + timestamp: string + attributes?: Record + }> | null + links?: Array<{ + traceId: string + spanId: string + attributes?: Record + }> | null + internalType?: SpanMetadataTypes | null + model?: string | null + modelParameters?: unknown | null + input?: Message[] | null + output?: Message[] | null + inputTokens?: number | null + outputTokens?: number | null + totalTokens?: number | null + inputCostInMillicents?: number | null + outputCostInMillicents?: number | null + totalCostInMillicents?: number | null + metadata?: Record | null + documentUuid?: string | null + parameters?: Record | null + distinctId?: string | null + commitUuid?: string | null + }> +} + +export async function bulkCreateTracesAndSpans( + { + workspace, + traces: tracesToCreate, + spans: spansToCreate, + }: BulkCreateTracesAndSpansProps, + db = database, +) { + // First, find existing traces outside the transaction + let existingTraceIds = new Set() + if (tracesToCreate.length > 0) { + const existingTraces = await db.query.traces.findMany({ + where: inArray( + traces.traceId, + tracesToCreate.map((t) => t.traceId), + ), + }) + existingTraceIds = new Set(existingTraces.map((t) => t.traceId)) + } + + // Filter out traces that already exist if skipExistingTraces is true + const tracesToInsert = tracesToCreate.filter( + (trace) => !existingTraceIds.has(trace.traceId), + ) + const tracesToUpdate = tracesToCreate.filter((trace) => + existingTraceIds.has(trace.traceId), + ) + + return Transaction.call(async (tx) => { + // Create new traces if any + let createdTraces: (typeof traces.$inferSelect)[] = [] + let updatedTraces: (typeof traces.$inferSelect)[] = [] + + if (tracesToUpdate.length > 0) { + tracesToUpdate.forEach(async (trace) => { + const updatedTrace = await tx + .update(traces) + .set({ + startTime: trace.startTime, + endTime: trace.endTime, + attributes: trace.attributes, + status: trace.status, + }) + .where(eq(traces.traceId, trace.traceId)) + .returning() + + updatedTraces.push(updatedTrace[0]!) + }) + } + if (tracesToInsert.length > 0) { + createdTraces = await tx + .insert(traces) + .values( + tracesToInsert.map((trace) => ({ + workspaceId: workspace.id, + traceId: trace.traceId, + name: trace.name, + startTime: trace.startTime, + endTime: trace.endTime, + attributes: trace.attributes, + status: trace.status, + })), + ) + // If the trace already exists we do a noop. This can happen as + // atomicity is not guaranteed (two traces can try to get created at the + // same time). + .onConflictDoUpdate({ + target: [traces.traceId], + set: { + updatedAt: new Date(), + }, + }) + .returning() + } + + // Get all valid trace IDs (both existing and newly created) + const validTraceIds = new Set([ + ...existingTraceIds, + ...createdTraces.map((t) => t.traceId), + ]) + + // Filter spans to only include those associated with valid traces + const validSpans = spansToCreate.filter((span) => + validTraceIds.has(span.traceId), + ) + + // Create all valid spans + const createdSpans = await tx + .insert(spans) + .values( + validSpans.map((span) => ({ + traceId: span.traceId, + spanId: span.spanId, + parentSpanId: span.parentSpanId, + name: span.name, + kind: span.kind, + startTime: span.startTime, + endTime: span.endTime, + attributes: span.attributes, + status: span.status, + statusMessage: span.statusMessage, + events: span.events, + links: span.links, + internalType: span.internalType, + model: span.model, + modelParameters: span.modelParameters, + input: span.input, + output: span.output, + inputTokens: span.inputTokens, + outputTokens: span.outputTokens, + totalTokens: span.totalTokens, + inputCostInMillicents: span.inputCostInMillicents, + outputCostInMillicents: span.outputCostInMillicents, + totalCostInMillicents: span.totalCostInMillicents, + tools: span.tools, + metadata: span.metadata, + documentUuid: span.documentUuid, + parameters: span.parameters, + distinctId: span.distinctId, + commitUuid: span.commitUuid, + })), + ) + .returning() + + publisher.publishLater({ + type: 'bulkCreateTracesAndSpans', + data: { + workspaceId: workspace.id, + traces: createdTraces, + spans: createdSpans, + }, + }) + + return Result.ok({ + traces: createdTraces, + spans: createdSpans, + }) + }, db) +} diff --git a/packages/core/src/services/traces/extractInputOutput.ts b/packages/core/src/services/traces/extractInputOutput.ts new file mode 100644 index 000000000..d8b834244 --- /dev/null +++ b/packages/core/src/services/traces/extractInputOutput.ts @@ -0,0 +1,181 @@ +import { ToolCallPart, ToolResultPart } from './types' +import { tryParseJSON } from './utils' +import { + ToolResultBlockParam, + ToolUseBlock, +} from '@anthropic-ai/sdk/resources/messages.mjs' + +type Message = { + role: string + content: unknown +} + +export function extractInputOutput( + attrs: Record, +) { + const prompts: Array = [] + const completions: Array = [] + + Object.entries(attrs).forEach(([key, value]) => { + if (key.startsWith('gen_ai.prompt.') && key.endsWith('.content')) { + const content = extractInputContents(attrs, key, value) + if (content) { + const index = parseInt(key.split('.')[2] as string) + prompts[index] = content + } + } + + if (key.startsWith('gen_ai.completion.')) { + const content = extractOutputContents(attrs, key, value) + if (content) { + const index = parseInt(key.split('.')[2] as string) + completions[index] = content + } + } + }) + + return { + input: prompts.filter(Boolean), + output: completions.filter(Boolean), + } +} + +function extractInputContents( + attrs: Record, + key: string, + value: string | number | boolean, +): Message | undefined { + const parts = key.split('.') + if (!parts[2]) return undefined + + const index = parseInt(parts[2]) + const role = attrs[`gen_ai.prompt.${index}.role`] as string + + let content + if (role === 'tool') { + content = extractOpenAIToolResult(attrs, index) + } else { + content = extractContent(value) + } + + return { role, content } +} + +function extractOutputContents( + attrs: Record, + key: string, + value: string | number | boolean, +): Message | undefined { + const parts = key.split('.') + if (!parts[2]) return undefined + + const index = parseInt(parts[2]) + const role = attrs[`gen_ai.completion.${index}.role`] as string + const finishReason = attrs[ + `gen_ai.completion.${index}.finish_reason` + ] as string + + let content + if (finishReason === 'tool_calls') { + content = extractOpenAIToolCalls(attrs, index) + } else if (key.endsWith('.content')) { + content = extractContent(value) + } + + if (!content) return undefined + + return { role, content } +} + +function extractContent(value: string | number | boolean) { + if (typeof value !== 'string') return value + + const content = tryParseJSON(value) + + if (!content) return value + if (!Array.isArray(content)) return value + + return content.map((c) => { + switch (c.type) { + case 'tool_use': + return extractAnthropicToolCall(c) + case 'tool_result': + return extractAnthropicToolResult(c) + default: + return c + } + }) +} + +function extractAnthropicToolResult(content: ToolResultBlockParam) { + const result = tryParseJSON(content.content as string) + if (!result) return content + + return { + type: 'tool-result', + toolCallId: content.tool_use_id || '-', + toolName: '-', + result, + isError: false, + } +} + +function extractAnthropicToolCall(content: ToolUseBlock) { + return { + type: 'tool-call', + args: content.input || {}, + toolName: content.name || '-', + toolCallId: content.id || '-', + } +} + +function extractOpenAIToolResult( + attrs: Record, + index: number, +): ToolResultPart[] { + const toolName = attrs[`gen_ai.prompt.${index}.tool_name`] as string + const toolCallId = attrs[`gen_ai.prompt.${index}.tool_call_id`] as string + const content = tryParseJSON( + attrs[`gen_ai.prompt.${index}.content`] as string, + ) + const isError = (attrs[`gen_ai.prompt.${index}.is_error`] as boolean) || false + + return [ + { + type: 'tool-result', + toolCallId: toolCallId || '-', + toolName: toolName || '-', + result: content, + isError, + }, + ] +} + +function extractOpenAIToolCalls( + attrs: Record, + completionIndex: number, +): ToolCallPart[] { + const toolCalls: ToolCallPart[] = [] + let toolCallIndex = 0 + + while (true) { + const toolCallKey = `gen_ai.completion.${completionIndex}.tool_calls.${toolCallIndex}` + const toolName = attrs[`${toolCallKey}.name`] as string + + if (!toolName) break + + const args = tryParseJSON(attrs[`${toolCallKey}.arguments`] as string) + toolCalls.push({ + type: 'tool-call', + toolCallId: + (attrs[`${toolCallKey}.id`] as string) || + `call_${completionIndex}_${toolCallIndex}`, + toolName, + args, + }) + + toolCallIndex++ + } + + return toolCalls +} diff --git a/packages/core/src/services/traces/index.ts b/packages/core/src/services/traces/index.ts new file mode 100644 index 000000000..22b960223 --- /dev/null +++ b/packages/core/src/services/traces/index.ts @@ -0,0 +1,2 @@ +export * from './bulkCreateTracesAndSpans' +export * from './list' diff --git a/packages/core/src/services/traces/list.ts b/packages/core/src/services/traces/list.ts new file mode 100644 index 000000000..86db8beb2 --- /dev/null +++ b/packages/core/src/services/traces/list.ts @@ -0,0 +1,244 @@ +import { + count, + desc, + inArray, + eq, + lt, + gt, + ne, + like, + notLike, + exists, + not, + and, + SQL, +} from 'drizzle-orm' +import type { PgColumn } from 'drizzle-orm/pg-core' + +import type { SearchFilter, Span, Workspace } from '../../browser' +import { database } from '../../client' +import { BadRequestError, Result, TypedResult } from '../../lib' +import { spans } from '../../schema/models/spans' +import { traces } from '../../schema/models/traces' + +export type ListTracesProps = { + workspace: Workspace + page?: number + pageSize?: number + filters?: SearchFilter[] +} + +export type ListTracesResponse = { + items: Array<{ + workspaceId: number + traceId: string + name: string | null + startTime: Date + endTime: Date | null + attributes: Record | null + status: string | null + spans: Span[] + realtimeAdded?: boolean + }> + count: number + page: number + pageSize: number + filters?: SearchFilter[] +} + +export async function listTraces({ + workspace, + page = 1, + pageSize = 25, + filters = [], +}: ListTracesProps): Promise> { + let where + try { + where = buildWhereClause({ filters, workspace }) + } catch (e) { + return Result.error(e as Error) + } + + // First get the traces + const [traceResults, total] = await Promise.all([ + database + .select({ + workspaceId: traces.workspaceId, + traceId: traces.traceId, + name: traces.name, + startTime: traces.startTime, + endTime: traces.endTime, + attributes: traces.attributes, + status: traces.status, + }) + .from(traces) + .where(where) + .orderBy(desc(traces.startTime)) + .limit(pageSize) + .offset((page - 1) * pageSize), + database + .select({ value: count() }) + .from(traces) + .where(where) + .then((r) => r[0]?.value ?? 0), + ]) + + // Then get spans for these traces + const traceIds = traceResults.map((t) => t.traceId) + const spansResults = + traceIds.length > 0 + ? await database + .select() + .from(spans) + .where(inArray(spans.traceId, traceIds)) + : [] + + // Group spans by traceId + const spansMap = spansResults.reduce>((acc, span) => { + if (!acc[span.traceId]) { + acc[span.traceId] = [] + } + acc[span.traceId]?.push(span) + return acc + }, {}) + + // Combine traces with their spans + const tracesWithSpans = traceResults.map((trace) => ({ + ...trace, + spans: spansMap[trace.traceId] || [], + })) + + return Result.ok({ + items: tracesWithSpans, + count: total, + page, + pageSize, + }) +} + +function buildSpanCondition( + field: keyof typeof spans.$inferSelect, + operator: string, + value: string, +) { + const baseCondition = eq(spans.traceId, traces.traceId) + let fieldCondition: SQL + + switch (operator) { + case 'eq': + fieldCondition = eq(spans[field], value) + break + case 'neq': + fieldCondition = ne(spans[field], value) + break + case 'contains': + fieldCondition = like(spans[field], `%${value}%`) + break + case 'not_contains': + fieldCondition = notLike(spans[field], `%${value}%`) + break + default: + throw new Error(`Unsupported operator ${operator} for field ${field}`) + } + + const subquery = database + .select() + .from(spans) + .where(and(baseCondition, fieldCondition)) + + return operator.startsWith('not_') || operator === 'neq' + ? not(exists(subquery)) + : exists(subquery) +} + +function buildDateCondition( + field: PgColumn, + operator: string, + value: string, +) { + const date = new Date(value) + if (isNaN(date.getTime())) { + throw new BadRequestError( + `Invalid date value: ${value}. Expected value should be ISO compatible, e.g: YYYY-MM-DD`, + ) + } + + switch (operator) { + case 'eq': + return eq(field, date) + case 'lt': + return lt(field, date) + case 'gt': + return gt(field, date) + default: + throw new Error(`Unsupported operator ${operator} for date field`) + } +} + +function buildStringCondition( + field: PgColumn, + operator: string, + value: string, +) { + switch (operator) { + case 'eq': + return eq(field, value) + case 'neq': + return ne(field, value) + case 'contains': + return like(field, `%${value}%`) + case 'not_contains': + return notLike(field, `%${value}%`) + default: + throw new Error(`Unsupported operator ${operator} for string field`) + } +} + +function buildWhereClause({ + filters = [], + workspace, +}: { + filters?: SearchFilter[] + workspace: Workspace +}) { + const conditions = [eq(traces.workspaceId, workspace.id)] + + filters?.forEach((filter) => { + switch (filter.field) { + case 'startTime': + conditions.push( + buildDateCondition(traces.startTime, filter.operator, filter.value), + ) + break + case 'endTime': + conditions.push( + buildDateCondition(traces.endTime, filter.operator, filter.value), + ) + break + case 'name': + conditions.push( + buildStringCondition( + traces[filter.field], + filter.operator, + filter.value, + ), + ) + break + case 'spans.model': + case 'spans.distinctId': + case 'spans.commitUuid': + case 'spans.promptPath': { + const field = filter.field.replace( + 'spans.', + '', + ) as keyof typeof spans.$inferSelect + conditions.push( + buildSpanCondition(field, filter.operator, filter.value), + ) + break + } + } + }) + + return and(...conditions) +} diff --git a/packages/core/src/services/traces/otlp.test.ts b/packages/core/src/services/traces/otlp.test.ts new file mode 100644 index 000000000..3e5dc6eb9 --- /dev/null +++ b/packages/core/src/services/traces/otlp.test.ts @@ -0,0 +1,622 @@ +import { describe, expect, it } from 'vitest' +import { processSpan } from './otlp' + +describe('processSpan', () => { + describe('OpenAI', () => { + it('correctly processes OpenAI chat completion with tool calls', () => { + const span = { + traceId: '123', + spanId: '456', + name: 'test', + kind: 1, + startTimeUnixNano: '1000000000', + attributes: [ + { key: 'gen_ai.system', value: { stringValue: 'OpenAI' } }, + { key: 'llm.request.type', value: { stringValue: 'chat' } }, + { key: 'gen_ai.prompt.0.role', value: { stringValue: 'system' } }, + { key: 'gen_ai.prompt.1.role', value: { stringValue: 'user' } }, + { + key: 'gen_ai.request.model', + value: { stringValue: 'gpt-3.5-turbo' }, + }, + { + key: 'gen_ai.response.model', + value: { stringValue: 'gpt-3.5-turbo-0125' }, + }, + { key: 'llm.usage.total_tokens', value: { stringValue: '156' } }, + { + key: 'gen_ai.prompt.0.content', + value: { + stringValue: + 'You are a professional meteorologist and weather forecaster with years of experience. Provide detailed, accurate weather information and forecasts in a clear, professional manner. When discussing weather patterns, include relevant meteorological terms and explanations while keeping the information accessible. If asked about weather in specific locations, you should always use the getWeather function to get current data before providing your analysis.', + }, + }, + { + key: 'gen_ai.prompt.1.content', + value: { + stringValue: + '[{"type":"text","text":"what\'s the weather in paris?"}]', + }, + }, + { + key: 'gen_ai.completion.0.role', + value: { stringValue: 'assistant' }, + }, + { key: 'gen_ai.request.max_tokens', value: { stringValue: '1000' } }, + { key: 'gen_ai.usage.prompt_tokens', value: { stringValue: '142' } }, + { key: 'gen_ai.completion.0.content', value: { stringValue: '' } }, + { + key: 'llm.request.functions.0.name', + value: { stringValue: 'getWeather' }, + }, + { + key: 'gen_ai.usage.completion_tokens', + value: { stringValue: '14' }, + }, + { + key: 'gen_ai.completion.0.finish_reason', + value: { stringValue: 'tool_calls' }, + }, + { + key: 'llm.request.functions.0.arguments', + value: { + stringValue: + '{"type":"object","properties":{"location":{"type":"string","description":"The city and state, e.g. San Francisco, CA"}},"required":["location"]}', + }, + }, + { + key: 'llm.request.functions.0.description', + value: { + stringValue: 'Get the current weather in a given location', + }, + }, + { + key: 'gen_ai.completion.0.tool_calls.0.name', + value: { stringValue: 'getWeather' }, + }, + { + key: 'gen_ai.completion.0.tool_calls.0.arguments', + value: { stringValue: '{"location":"Paris"}' }, + }, + ], + } + + const result = processSpan({ span }) + + expect(result.model).toBe('gpt-3.5-turbo') + expect(result.totalTokens).toBe(156) + expect(result.inputTokens).toBe(142) + expect(result.outputTokens).toBe(14) + + const parsedInput = result.input as any + expect(parsedInput).toHaveLength(2) + expect(parsedInput[0].role).toBe('system') + expect(parsedInput[1].role).toBe('user') + expect(parsedInput[1].content[0].type).toBe('text') + expect(parsedInput[1].content[0].text).toBe( + "what's the weather in paris?", + ) + + expect(result.tools).toBeDefined() + expect(result.tools).toHaveLength(1) + expect(result.tools![0]).toMatchObject({ + name: 'getWeather', + description: 'Get the current weather in a given location', + arguments: { + type: 'object', + properties: { + location: { + type: 'string', + description: 'The city and state, e.g. San Francisco, CA', + }, + }, + }, + }) + }) + + it('correctly processes OpenAI chat completion with structured output', () => { + const span = { + traceId: '123', + spanId: '456', + name: 'test', + kind: 1, + startTimeUnixNano: '1000000000', + attributes: [ + { key: 'gen_ai.system', value: { stringValue: 'OpenAI' } }, + { key: 'llm.request.type', value: { stringValue: 'chat' } }, + { key: 'gen_ai.prompt.0.role', value: { stringValue: 'system' } }, + { key: 'gen_ai.prompt.1.role', value: { stringValue: 'user' } }, + { + key: 'gen_ai.request.model', + value: { stringValue: 'gpt-4o-mini' }, + }, + { + key: 'gen_ai.response.model', + value: { stringValue: 'gpt-4o-mini-2024-07-18' }, + }, + { key: 'llm.usage.total_tokens', value: { stringValue: '207' } }, + { + key: 'gen_ai.prompt.0.content', + value: { + stringValue: + 'You are a professional meteorologist and weather forecaster with years of experience. Provide detailed, accurate weather information and forecasts in a clear, professional manner. When discussing weather patterns, include relevant meteorological terms and explanations while keeping the information accessible. If asked about weather in specific locations, you should always use the getWeather function to get current data before providing your analysis.', + }, + }, + { + key: 'gen_ai.prompt.1.content', + value: { + stringValue: '[{"type":"text","text":"how u doing today?"}]', + }, + }, + { + key: 'gen_ai.completion.0.role', + value: { stringValue: 'assistant' }, + }, + { key: 'gen_ai.request.max_tokens', value: { stringValue: '1000' } }, + { key: 'gen_ai.usage.prompt_tokens', value: { stringValue: '174' } }, + { + key: 'gen_ai.completion.0.content', + value: { + stringValue: + '{"response":"I\'m here and ready to assist you with any weather-related questions or forecasts you may have! How can I help you today?"}', + }, + }, + { + key: 'llm.request.functions.0.name', + value: { stringValue: 'getWeather' }, + }, + { + key: 'gen_ai.usage.completion_tokens', + value: { stringValue: '33' }, + }, + { + key: 'gen_ai.completion.0.finish_reason', + value: { stringValue: 'stop' }, + }, + { + key: 'llm.request.functions.0.arguments', + value: { + stringValue: + '{"type":"object","properties":{"location":{"type":"string","description":"The city and state, e.g. San Francisco, CA"}},"required":["location"]}', + }, + }, + { + key: 'llm.request.functions.0.description', + value: { + stringValue: 'Get the current weather in a given location', + }, + }, + ], + } + + const result = processSpan({ span }) + + expect(result.model).toBe('gpt-4o-mini') + expect(result.totalTokens).toBe(207) + expect(result.inputTokens).toBe(174) + expect(result.outputTokens).toBe(33) + + const parsedInput = result.input as any + expect(parsedInput).toHaveLength(2) + expect(parsedInput[0].role).toBe('system') + expect(parsedInput[1].role).toBe('user') + expect(parsedInput[1].content[0].type).toBe('text') + expect(parsedInput[1].content[0].text).toBe('how u doing today?') + + const parsedOutput = result.output as any + expect(parsedOutput).toHaveLength(1) + expect(parsedOutput[0].role).toBe('assistant') + const content = JSON.parse(parsedOutput[0].content as string) + expect(content).toEqual({ + response: + "I'm here and ready to assist you with any weather-related questions or forecasts you may have! How can I help you today?", + }) + }) + }) + + describe('Vercel', () => { + it('correctly processes Vercel chat completion with tool calls', () => { + const span = { + traceId: '123', + spanId: '456', + name: 'test', + kind: 1, + startTimeUnixNano: '1000000000', + attributes: [ + { key: 'ai.model.id', value: { stringValue: 'gpt-3.5-turbo' } }, + { key: 'gen_ai.system', value: { stringValue: 'openai.chat' } }, + { + key: 'ai.operationId', + value: { stringValue: 'ai.generateText.doGenerate' }, + }, + { + key: 'ai.response.id', + value: { stringValue: 'aitxt-pFw0SX4ybEhxtci7KGg0FdhB' }, + }, + { + key: 'operation.name', + value: { stringValue: 'ai.generateText.doGenerate' }, + }, + { + key: 'ai.prompt.tools', + value: { + stringValue: + '{"type":"function","name":"0","description":"Get the current weather in a given location","parameters":{"type":"object","properties":{"location":{"type":"string","description":"The city and state, e.g. San Francisco, CA"}},"required":["location"]}}', + }, + }, + { key: 'ai.prompt.format', value: { stringValue: 'messages' } }, + { key: 'llm.request.type', value: { stringValue: 'chat' } }, + { key: 'ai.model.provider', value: { stringValue: 'openai.chat' } }, + { key: 'ai.response.model', value: { stringValue: 'gpt-3.5-turbo' } }, + { + key: 'ai.prompt.messages', + value: { + stringValue: + '[{"role":"system","content":"You are a professional meteorologist and weather forecaster with years of experience. Provide detailed, accurate weather information and forecasts in a clear, professional manner. When discussing weather patterns, include relevant meteorological terms and explanations while keeping the information accessible. If asked about weather in specific locations, you should always use the getWeather function to get current data before providing your analysis."},{"role":"user","content":[{"type":"text","text":"what\'s the weather in dublin?"}]}]', + }, + }, + { + key: 'gen_ai.response.id', + value: { stringValue: 'aitxt-pFw0SX4ybEhxtci7KGg0FdhB' }, + }, + { + key: 'ai.prompt.toolChoice', + value: { stringValue: '{"type":"auto"}' }, + }, + { key: 'gen_ai.prompt.0.role', value: { stringValue: 'system' } }, + { key: 'gen_ai.prompt.1.role', value: { stringValue: 'user' } }, + { + key: 'gen_ai.request.model', + value: { stringValue: 'gpt-3.5-turbo' }, + }, + { + key: 'ai.response.timestamp', + value: { stringValue: '2024-12-09T15:20:48.154Z' }, + }, + { + key: 'ai.response.toolCalls', + value: { + stringValue: + '[{"toolCallType":"function","toolCallId":"call_QJxIVUoLQetn28hyQbkxTrYk","toolName":"0","args":"{\\"location\\":\\"Dublin\\"}"}]', + }, + }, + { key: 'ai.usage.promptTokens', value: { stringValue: '143' } }, + { + key: 'gen_ai.response.model', + value: { stringValue: 'gpt-3.5-turbo' }, + }, + { key: 'ai.settings.maxRetries', value: { stringValue: '2' } }, + { key: 'ai.settings.max_tokens', value: { stringValue: '1000' } }, + { key: 'llm.usage.total_tokens', value: { stringValue: '158' } }, + { + key: 'gen_ai.prompt.0.content', + value: { + stringValue: + 'You are a professional meteorologist and weather forecaster with years of experience. Provide detailed, accurate weather information and forecasts in a clear, professional manner. When discussing weather patterns, include relevant meteorological terms and explanations while keeping the information accessible. If asked about weather in specific locations, you should always use the getWeather function to get current data before providing your analysis.', + }, + }, + { + key: 'gen_ai.prompt.1.content', + value: { + stringValue: + '[{"type":"text","text":"what\'s the weather in dublin?"}]', + }, + }, + { + key: 'ai.response.finishReason', + value: { stringValue: 'tool-calls' }, + }, + { + key: 'gen_ai.completion.0.role', + value: { stringValue: 'assistant' }, + }, + { key: 'ai.usage.completionTokens', value: { stringValue: '15' } }, + { key: 'gen_ai.usage.input_tokens', value: { stringValue: '143' } }, + { key: 'gen_ai.usage.output_tokens', value: { stringValue: '15' } }, + { key: 'gen_ai.usage.prompt_tokens', value: { stringValue: '143' } }, + { + key: 'gen_ai.response.finish_reasons', + value: { stringValue: 'tool-calls' }, + }, + { + key: 'gen_ai.usage.completion_tokens', + value: { stringValue: '15' }, + }, + { + key: 'gen_ai.completion.0.finish_reason', + value: { stringValue: 'tool_calls' }, + }, + { + key: 'gen_ai.completion.0.tool_calls.0.id', + value: { stringValue: 'call_QJxIVUoLQetn28hyQbkxTrYk' }, + }, + { + key: 'gen_ai.completion.0.tool_calls.0.name', + value: { stringValue: '0' }, + }, + { + key: 'gen_ai.completion.0.tool_calls.0.arguments', + value: { stringValue: '{"location":"Dublin"}' }, + }, + ], + } + + const result = processSpan({ span }) + + expect(result.model).toBe('gpt-3.5-turbo') + expect(result.totalTokens).toBe(158) + expect(result.inputTokens).toBe(143) + expect(result.outputTokens).toBe(15) + + const parsedInput = result.input as any + expect(parsedInput).toHaveLength(2) + expect(parsedInput[0].role).toBe('system') + expect(parsedInput[1].role).toBe('user') + expect(parsedInput[1].content[0].type).toBe('text') + expect(parsedInput[1].content[0].text).toBe( + "what's the weather in dublin?", + ) + + const parsedOutput = result.output as any + expect(parsedOutput).toHaveLength(1) + expect(parsedOutput[0].role).toBe('assistant') + const content = parsedOutput[0].content as string + expect(content).toEqual([ + { + type: 'tool-call', + toolCallId: 'call_QJxIVUoLQetn28hyQbkxTrYk', + toolName: '0', + args: { location: 'Dublin' }, + }, + ]) + }) + + it('correctly processes Vercel chat completion with structured output', () => { + const span = { + traceId: '123', + spanId: '456', + name: 'test', + kind: 1, + startTimeUnixNano: '1000000000', + attributes: [ + { key: 'ai.model.id', value: { stringValue: 'gpt-3.5-turbo' } }, + { key: 'gen_ai.system', value: { stringValue: 'openai.chat' } }, + { + key: 'ai.operationId', + value: { stringValue: 'ai.generateObject.doGenerate' }, + }, + { + key: 'ai.response.id', + value: { stringValue: 'aiobj-pabwouiW9dwv0Xy205tUHgyW' }, + }, + { + key: 'operation.name', + value: { stringValue: 'ai.generateObject.doGenerate' }, + }, + { key: 'ai.prompt.format', value: { stringValue: 'messages' } }, + { key: 'ai.settings.mode', value: { stringValue: 'tool' } }, + { key: 'llm.request.type', value: { stringValue: 'chat' } }, + { key: 'ai.model.provider', value: { stringValue: 'openai.chat' } }, + { key: 'ai.response.model', value: { stringValue: 'gpt-3.5-turbo' } }, + { + key: 'ai.prompt.messages', + value: { + stringValue: + '[{"role":"system","content":"You are a professional meteorologist and weather forecaster with years of experience. Provide detailed, accurate weather information and forecasts in a clear, professional manner. When discussing weather patterns, include relevant meteorological terms and explanations while keeping the information accessible. If asked about weather in specific locations, you should always use the getWeather function to get current data before providing your analysis."},{"role":"user","content":[{"type":"text","text":"how u doing?"}]}]', + }, + }, + { + key: 'ai.response.object', + value: { + stringValue: + '{"response":"I\'m here and ready to help with any weather-related questions or forecasts you may have. How can I assist you today?"}', + }, + }, + { + key: 'gen_ai.response.id', + value: { stringValue: 'aiobj-pabwouiW9dwv0Xy205tUHgyW' }, + }, + { key: 'gen_ai.prompt.0.role', value: { stringValue: 'system' } }, + { key: 'gen_ai.prompt.1.role', value: { stringValue: 'user' } }, + { + key: 'gen_ai.request.model', + value: { stringValue: 'gpt-3.5-turbo' }, + }, + { + key: 'ai.response.timestamp', + value: { stringValue: '2024-12-09T15:55:05.465Z' }, + }, + { key: 'ai.usage.promptTokens', value: { stringValue: '128' } }, + { + key: 'gen_ai.response.model', + value: { stringValue: 'gpt-3.5-turbo' }, + }, + { key: 'ai.settings.maxRetries', value: { stringValue: '2' } }, + { key: 'ai.settings.max_tokens', value: { stringValue: '1000' } }, + { key: 'llm.usage.total_tokens', value: { stringValue: '157' } }, + { + key: 'gen_ai.prompt.0.content', + value: { + stringValue: + 'You are a professional meteorologist and weather forecaster with years of experience. Provide detailed, accurate weather information and forecasts in a clear, professional manner. When discussing weather patterns, include relevant meteorological terms and explanations while keeping the information accessible. If asked about weather in specific locations, you should always use the getWeather function to get current data before providing your analysis.', + }, + }, + { + key: 'gen_ai.prompt.1.content', + value: { stringValue: '[{"type":"text","text":"how u doing?"}]' }, + }, + { key: 'ai.response.finishReason', value: { stringValue: 'stop' } }, + { + key: 'gen_ai.completion.0.role', + value: { stringValue: 'assistant' }, + }, + { key: 'ai.usage.completionTokens', value: { stringValue: '29' } }, + { key: 'gen_ai.usage.input_tokens', value: { stringValue: '128' } }, + { key: 'gen_ai.usage.output_tokens', value: { stringValue: '29' } }, + { key: 'gen_ai.usage.prompt_tokens', value: { stringValue: '128' } }, + { + key: 'gen_ai.completion.0.content', + value: { + stringValue: + '{"response":"I\'m here and ready to help with any weather-related questions or forecasts you may have. How can I assist you today?"}', + }, + }, + { + key: 'gen_ai.response.finish_reasons', + value: { stringValue: 'stop' }, + }, + { + key: 'gen_ai.usage.completion_tokens', + value: { stringValue: '29' }, + }, + ], + } + + const result = processSpan({ span }) + + expect(result.model).toBe('gpt-3.5-turbo') + expect(result.totalTokens).toBe(157) + expect(result.inputTokens).toBe(128) + expect(result.outputTokens).toBe(29) + + const parsedInput = result.input as any + expect(parsedInput).toHaveLength(2) + expect(parsedInput[0].role).toBe('system') + expect(parsedInput[1].role).toBe('user') + expect(parsedInput[1].content[0].type).toBe('text') + expect(parsedInput[1].content[0].text).toBe('how u doing?') + + const parsedOutput = result.output as any + expect(parsedOutput).toHaveLength(1) + expect(parsedOutput[0].role).toBe('assistant') + const content = JSON.parse(parsedOutput[0].content) + expect(content).toEqual({ + response: + "I'm here and ready to help with any weather-related questions or forecasts you may have. How can I assist you today?", + }) + + // Vercel specific attributes + expect(result.attributes?.['ai.settings.mode']).toBe('tool') + expect(result.attributes?.['ai.operationId']).toBe( + 'ai.generateObject.doGenerate', + ) + expect(result.attributes?.['ai.response.object']).toBe( + '{"response":"I\'m here and ready to help with any weather-related questions or forecasts you may have. How can I assist you today?"}', + ) + }) + }) + + describe('Anthropic', () => { + it('correctly processes Anthropic chat completion with tool calls', () => { + const span = { + traceId: '123', + spanId: '456', + name: 'test', + kind: 1, + startTimeUnixNano: '1000000000', + attributes: [ + { key: 'gen_ai.system', value: { stringValue: 'Anthropic' } }, + { key: 'llm.request.type', value: { stringValue: 'chat' } }, + { key: 'gen_ai.prompt.0.role', value: { stringValue: 'user' } }, + { + key: 'gen_ai.request.model', + value: { stringValue: 'claude-3-5-sonnet-20240620' }, + }, + { + key: 'gen_ai.response.model', + value: { stringValue: 'claude-3-5-sonnet-20240620' }, + }, + { key: 'llm.usage.total_tokens', value: { stringValue: '546' } }, + { + key: 'gen_ai.prompt.0.content', + value: { + stringValue: + '[{"type":"text","text":"what\'s the weather in london?"}]', + }, + }, + { + key: 'gen_ai.completion.0.role', + value: { stringValue: 'assistant' }, + }, + { key: 'gen_ai.request.max_tokens', value: { stringValue: '1000' } }, + { key: 'gen_ai.usage.prompt_tokens', value: { stringValue: '435' } }, + { + key: 'gen_ai.completion.0.content', + value: { + stringValue: + '[{"type":"text","text":"Certainly! I\'d be happy to provide you with the current weather information for London. To give you the most accurate and up-to-date information, I\'ll need to use the getWeather function to retrieve the latest data. Let me do that for you right now."},{"type":"tool_use","id":"toolu_01HocCArY36zXvgP8tYFdsep","name":"getWeather","input":{"location":"London"}}]', + }, + }, + { + key: 'gen_ai.usage.completion_tokens', + value: { stringValue: '111' }, + }, + { + key: 'gen_ai.completion.0.finish_reason', + value: { stringValue: 'tool_use' }, + }, + ], + } + + const result = processSpan({ span }) + + expect(result.model).toBe('claude-3-5-sonnet-20240620') + expect(result.totalTokens).toBe(546) + expect(result.inputTokens).toBe(435) + expect(result.outputTokens).toBe(111) + + const parsedInput = result.input as any + expect(parsedInput).toHaveLength(1) + expect(parsedInput[0].role).toBe('user') + expect(parsedInput[0].content[0].type).toBe('text') + expect(parsedInput[0].content[0].text).toBe( + "what's the weather in london?", + ) + + const parsedOutput = result.output as any + expect(parsedOutput).toHaveLength(1) + expect(parsedOutput[0].content).toHaveLength(2) + expect(parsedOutput[0].content[1].type).toBe('tool-call') + expect(parsedOutput[0].content[1].toolName).toBe('getWeather') + expect(parsedOutput[0].content[1].args).toEqual({ location: 'London' }) + }) + }) + + describe('Latitude-specific attributes', () => { + it('should extract Latitude-specific attributes', () => { + const span = { + traceId: '1234', + spanId: '5678', + name: 'test', + kind: 1, + startTimeUnixNano: '1234567890000000', + attributes: [ + { + key: 'latitude.prompt', + value: { + stringValue: '{"path":"/prompts/test.prompt","parameters":{}}', + }, + }, + { key: 'latitude.distinctId', value: { stringValue: 'user123' } }, + { + key: 'latitude.versionUuid', + value: { stringValue: '550e8400-e29b-41d4-a716-446655440000' }, + }, + { + key: 'latitude.metadata', + value: { stringValue: '{"key":"value"}' }, + }, + ], + } + + const result = processSpan({ span }) + + expect(result.promptPath).toBe('/prompts/test.prompt') + expect(result.distinctId).toBe('user123') + expect(result.commitUuid).toBe('550e8400-e29b-41d4-a716-446655440000') + expect(result.metadata).toEqual({ + key: 'value', + }) + }) + }) +}) diff --git a/packages/core/src/services/traces/otlp.ts b/packages/core/src/services/traces/otlp.ts new file mode 100644 index 000000000..bba41e7a2 --- /dev/null +++ b/packages/core/src/services/traces/otlp.ts @@ -0,0 +1,373 @@ +import { Providers, SpanKind } from '../../constants' +import { spans } from '../../schema' +import { estimateCost } from '../ai' +import { extractInputOutput } from './extractInputOutput' + +// Types +// ---------------------------------------- + +export type OtlpSpan = { + traceId: string + spanId: string + parentSpanId?: string + name: string + kind: number + startTimeUnixNano: string + endTimeUnixNano?: string + attributes?: Array<{ + key: string + value: { stringValue?: string; intValue?: number; boolValue?: boolean } + }> + status?: { + code: number + message?: string + } + events?: Array<{ + timeUnixNano: string + name: string + attributes?: Array<{ + key: string + value: { stringValue?: string; intValue?: number; boolValue?: boolean } + }> + }> + links?: Array<{ + traceId: string + spanId: string + attributes?: Array<{ + key: string + value: { stringValue?: string; intValue?: number; boolValue?: boolean } + }> + }> +} + +export type ResourceSpan = { + resource: { + attributes: Array<{ + key: string + value: { stringValue?: string; intValue?: number; boolValue?: boolean } + }> + } + scopeSpans: Array<{ + spans: OtlpSpan[] + }> +} + +type ToolCall = { + id: string + name: string + description?: string + arguments: Record +} + +type LatitudeAttrs = { + distinctId: string | undefined + commitUuid: string | undefined + metadata: Record | undefined + documentUuid?: string + parameters?: Record | undefined +} + +// Main Export Functions +// ---------------------------------------- + +export function processSpan({ span }: { span: OtlpSpan }) { + const startTime = new Date(parseInt(span.startTimeUnixNano) / 1_000_000) + const endTime = span.endTimeUnixNano + ? new Date(parseInt(span.endTimeUnixNano) / 1_000_000) + : undefined + + const { status, statusMessage } = convertOtlpStatus({ status: span.status }) + const attributes = convertOtlpAttributes({ attributes: span.attributes }) + + // Extract Latitude-specific attributes + const latitudeAttrs = extractLatitudeAttrs(attributes) + + return { + traceId: span.traceId, + spanId: span.spanId, + parentSpanId: span.parentSpanId, + name: span.name, + kind: convertOtlpSpanKind({ kind: span.kind }), + startTime, + endTime, + attributes, + status, + statusMessage, + events: span.events?.map((event) => ({ + name: event.name, + timestamp: new Date( + parseInt(event.timeUnixNano) / 1_000_000, + ).toISOString(), + attributes: convertOtlpAttributes({ attributes: event.attributes }), + })), + links: span.links?.map((link) => ({ + traceId: link.traceId, + spanId: link.spanId, + attributes: convertOtlpAttributes({ attributes: link.attributes }), + })), + ...processGenerationSpan(span), + ...latitudeAttrs, + } +} + +// OTLP Conversion Helpers +// ---------------------------------------- + +export function convertOtlpAttributes({ + attributes = [], +}: { + attributes?: Array<{ + key: string + value: { stringValue?: string; intValue?: number; boolValue?: boolean } + }> +}): Record { + return attributes.reduce( + (acc, attr) => { + const value = + attr.value.stringValue ?? + attr.value.intValue ?? + attr.value.boolValue ?? + null + if (value !== null) { + acc[attr.key] = value + } + return acc + }, + {} as Record, + ) +} + +function convertOtlpSpanKind({ kind }: { kind: number }): SpanKind { + const kinds = { + 0: 'internal', // SPAN_KIND_UNSPECIFIED + 1: 'server', // SPAN_KIND_SERVER + 2: 'client', // SPAN_KIND_CLIENT + 3: 'producer', // SPAN_KIND_PRODUCER + 4: 'consumer', // SPAN_KIND_CONSUMER + } + return (kinds[kind as keyof typeof kinds] as SpanKind) || SpanKind.Internal +} + +function convertOtlpStatus({ + status, +}: { + status?: { code: number; message?: string } +}): { + status?: string + statusMessage?: string +} { + if (!status) return {} + + const statusMap = { + 0: undefined, // UNSET + 1: 'ok', // OK + 2: 'error', // ERROR + } + + return { + status: statusMap[status.code as keyof typeof statusMap], + statusMessage: status.message, + } +} + +// Generation Span Processing +// ---------------------------------------- + +function processGenerationSpan( + span: OtlpSpan, +): Partial { + const attrs = convertOtlpAttributes({ attributes: span.attributes }) + if (!attrs['gen_ai.system']) return {} + + const provider = extractProvider(attrs) + if (!provider) return {} + + const model = extractModel(attrs) + const { input, output } = extractInputOutput(attrs) + const modelParameters = extractModelParameters(attrs) + const usage = extractUsage(attrs) + const costs = calculateCosts({ usage, provider, model: model as string }) + const toolCalls = extractFunctions(attrs) + + return { + internalType: 'generation', + model: model as string, + modelParameters: + Object.keys(modelParameters).length > 0 + ? JSON.stringify(modelParameters) + : null, + input: input.length > 0 ? input : undefined, + output: output.length > 0 ? output : undefined, + inputTokens: usage.promptTokens, + outputTokens: usage.completionTokens, + totalTokens: parseInt(attrs['llm.usage.total_tokens'] as string) || 0, + tools: toolCalls.length > 0 ? toolCalls : null, + ...costs, + } +} + +// Generation Attribute Processing +// ---------------------------------------- + +function extractModelParameters( + attrs: Record, +) { + return Object.entries(attrs) + .filter( + ([key, value]) => + key.startsWith('gen_ai.request.') && + key !== 'gen_ai.request.model' && + value !== undefined, + ) + .reduce( + (acc, [key, value]) => { + const paramName = key.replace('gen_ai.request.', '') + acc[paramName] = value + return acc + }, + {} as Record, + ) +} + +function extractUsage(attrs: Record) { + return { + promptTokens: parseInt(attrs['gen_ai.usage.prompt_tokens'] as string) || 0, + completionTokens: + parseInt(attrs['gen_ai.usage.completion_tokens'] as string) || 0, + totalTokens: parseInt(attrs['gen_ai.usage.total_tokens'] as string) || 0, + } +} + +function extractModel(attrs: Record) { + return attrs['gen_ai.request.model'] +} + +function extractProvider(attrs: Record) { + const providerMap: Record = { + OpenAI: Providers.OpenAI, + 'openai.chat': Providers.OpenAI, + Anthropic: Providers.Anthropic, + Groq: Providers.Groq, + Mistral: Providers.Mistral, + Google: Providers.Google, + } + + const provider = providerMap[attrs['gen_ai.system'] as string] + if (!provider) return undefined + + return provider +} + +// Utility Functions +// ---------------------------------------- + +function calculateCosts({ + usage, + provider, + model, +}: { + usage: { promptTokens: number; completionTokens: number; totalTokens: number } + provider: Providers + model: string +}) { + const totalCost = estimateCost({ usage, provider, model }) + if (!totalCost) return {} + + const costInMillicents = Math.round(totalCost * 100_000) + + return { + inputCostInMillicents: Math.round( + (costInMillicents * usage.promptTokens) / + (usage.promptTokens + usage.completionTokens), + ), + outputCostInMillicents: Math.round( + (costInMillicents * usage.completionTokens) / + (usage.promptTokens + usage.completionTokens), + ), + totalCostInMillicents: costInMillicents, + } +} + +function extractFunctions( + attrs: Record, +): ToolCall[] { + const functionAttrs = Object.entries(attrs).filter(([key]) => + key.startsWith('llm.request.functions.'), + ) + + const groupedFunctions = functionAttrs.reduce( + (acc, [key, value]) => { + const [, , , index, field] = key.split('.') + if (!index || !field) { + return acc + } + + if (!acc[index]) { + acc[index] = {} + } + + acc[index][field] = value + return acc + }, + {} as Record>, + ) + + return Object.entries(groupedFunctions).map(([index, func]) => { + let args: Record = {} + try { + if (func.arguments && typeof func.arguments === 'string') { + args = JSON.parse(func.arguments) + } + } catch (e) { + // If JSON parsing fails, use the raw string + args = { raw: func.arguments } + } + + return { + id: `function_${index}`, + name: func.name as string, + description: func.description as string | undefined, + arguments: args, + } + }) +} + +function extractLatitudeAttrs(attributes: Record) { + const latitudeAttrs: LatitudeAttrs = { + distinctId: attributes['latitude.distinctId'] as string | undefined, + commitUuid: attributes['latitude.versionUuid'] as string | undefined, + metadata: undefined, + documentUuid: undefined, + parameters: undefined, + } + + if (attributes['latitude.prompt']) { + try { + const promptData = JSON.parse( + attributes['latitude.prompt'] as string, + ) as { + uuid: string + versionUuid: string | undefined + parameters: Record | undefined + } + + latitudeAttrs.documentUuid = promptData.uuid + latitudeAttrs.commitUuid = promptData.versionUuid + latitudeAttrs.parameters = promptData.parameters + } catch (e) { + // do nothing + } + } + + if (attributes['latitude.metadata']) { + try { + latitudeAttrs.metadata = JSON.parse( + attributes['latitude.metadata'] as string, + ) + } catch (e) { + // do nothing + } + } + + return latitudeAttrs +} diff --git a/packages/core/src/services/traces/types.ts b/packages/core/src/services/traces/types.ts new file mode 100644 index 000000000..ac1c9e338 --- /dev/null +++ b/packages/core/src/services/traces/types.ts @@ -0,0 +1,14 @@ +export type ToolResultPart = { + type: 'tool-result' + toolCallId: string + toolName: string + result: unknown + isError?: boolean +} + +export type ToolCallPart = { + type: 'tool-call' + toolCallId: string + toolName: string + args: unknown +} diff --git a/packages/core/src/services/traces/utils.ts b/packages/core/src/services/traces/utils.ts new file mode 100644 index 000000000..4cd9075a5 --- /dev/null +++ b/packages/core/src/services/traces/utils.ts @@ -0,0 +1,7 @@ +export function tryParseJSON(content: string): unknown { + try { + return JSON.parse(content) + } catch { + return content + } +} diff --git a/packages/core/src/tests/factories/commits.ts b/packages/core/src/tests/factories/commits.ts index c481a7c24..abe8e8013 100644 --- a/packages/core/src/tests/factories/commits.ts +++ b/packages/core/src/tests/factories/commits.ts @@ -6,10 +6,33 @@ import { createCommit as createCommitFn } from '../../services/commits/create' import { createProject } from './createProject' import { ICreateProject } from './projects' +export type ICreateCommit = { + projectId: number + mergedAt?: Date | null + title?: string +} + export type ICreateDraft = { + project: Project | ICreateProject user: User - project?: Project | ICreateProject } + +export async function createCommit({ + projectId, + mergedAt, + title, +}: ICreateCommit) { + const result = await createCommitFn({ + project: { id: projectId } as Project, + user: {} as User, // User is not used in the actual implementation + data: { + title: title ?? faker.lorem.sentence(4), + mergedAt: mergedAt ?? undefined, + }, + }) + return result.unwrap() +} + export async function createDraft({ project, user }: ICreateDraft) { let projectModel = hasOwnProperty(project, 'id') ? (project as unknown as Project) diff --git a/packages/core/src/websockets/constants.ts b/packages/core/src/websockets/constants.ts index e16463902..8126d034d 100644 --- a/packages/core/src/websockets/constants.ts +++ b/packages/core/src/websockets/constants.ts @@ -3,6 +3,7 @@ // All this can be seen in the browser. If you want something private // put in other place. +import { Span, Trace } from '../browser' import { type DocumentLogWithMetadataAndError, type EvaluationResultWithMetadataAndErrors, @@ -71,6 +72,11 @@ export type WebServerToClientEvents = { evaluationResultCreated: (args: EvaluationResultCreatedArgs) => void joinWorkspace: (args: { workspaceId: number; userId: string }) => void documentLogCreated: (args: DocumentLogCreatedArgs) => void + tracesAndSpansCreated: (args: { + workspaceId: number + traces: Trace[] + spans: Span[] + }) => void } export type WebClientToServerEvents = { @@ -94,4 +100,12 @@ export type WorkersClientToServerEvents = { workspaceId: number data: DocumentLogCreatedArgs }) => void + tracesAndSpansCreated: (args: { + workspaceId: number + data: { + workspaceId: number + traces: Trace[] + spans: Span[] + } + }) => void } diff --git a/packages/sdks/typescript/README.md b/packages/sdks/typescript/README.md deleted file mode 100644 index 8d85a2ea4..000000000 --- a/packages/sdks/typescript/README.md +++ /dev/null @@ -1,130 +0,0 @@ -# @latitude-data/sdk - -Welcome to the Latitude SDK for TypeScript! This SDK is designed to help developers and product teams integrate Latitude's powerful AI features into their applications with ease. Latitude is a platform that simplifies prompt management, testing, and provides valuable insights into AI performance. - -## 🌟 Features - -- **Collaborative prompt manager**: Work together on prompts with your team. -- **Advanced features**: Support for parameters, snippets, logic, and more. -- **Version control**: Keep track of different prompt versions. -- **API + SDKs**: Easy integration with your applications. -- **Built-in observability**: Monitor and evaluate AI performance. -- **Batch or real-time evaluations**: Assess prompt performance across various scenarios. -- **Open-source**: Driven by the community. - -## ⚡ Quick Start - -### Installation - -To install the SDK, use npm, yarn, or pnpm: - -```bash -npm install @latitude-data/sdk -``` - -or - -```bash -yarn add @latitude-data/sdk -``` - -or - -```bash -pnpm add @latitude-data/sdk -``` - -### Usage - -#### Importing the SDK - -First, import the necessary classes and types from the SDK: - -```typescript -import { Latitude, Message, StreamChainResponse } from '@latitude-data/sdk' -``` - -#### Initializing the SDK - -Create an instance of the `Latitude` class by providing your API key and optionally a project ID and gateway configuration: - -```typescript -const sdk = new Latitude('your-api-key', { - projectId: 123, // optional - gateway: { - host: 'your-gateway-hostname', - port: 443, - ssl: true, - }, -}) -``` - -#### Running a Prompt - -To run a prompt, use the `run` method. You can provide a path, project ID, version UUID, parameters, and callbacks for handling events, completion, and errors: - -```typescript -sdk.prompts.run('path/to/prompt', { - projectId: 123, // optional, defaults to the projectId provided during initialization - versionUuid: 'version-uuid', // optional, defaults to the live version - parameters: { key: 'value' }, // optional, depends on whether the prompt expects parameters - stream: true, // optional, depends on whether you want all events through SSEs or the final event as JSON - onEvent: ({ event, data }) => { - console.log('Event:', event, 'Data:', data) - }, - onFinished: (data: StreamChainResponse) => { - console.log('Finished:', data) - }, - onError: (error: Error) => { - console.error('Error:', error) - }, -}) -``` - -#### Chatting with a Prompt - -To chat with a prompt, use the `chat` method. Provide the prompt UUID, an array of messages, and optional callbacks for handling events, completion, and errors: - -```typescript -const messages: Message[] = [ - { role: 'user', content: 'Hello, how are you?' }, - { role: 'assistant', content: 'I am fine, thank you!' }, -] - -sdk.prompts.chat('prompt-uuid', messages, { - stream: true, // optional, depends on whether you want all events through SSEs or the final event as JSON - onEvent: ({ event, data }) => { - console.log('Event:', event, 'Data:', data) - }, - onFinished: (data: StreamChainResponse) => { - console.log('Finished:', data) - }, - onError: (error: Error) => { - console.error('Error:', error) - }, -}) -``` - -#### Handling Stream Responses - -The SDK handles server-sent events (SSE) streams internally. You can provide callbacks to handle events, completion, and errors as shown in the examples above. - -#### Error Handling - -Both the `run` and `chat` methods accept an `onError` callback to handle any errors that occur during the request or stream processing. - -```typescript -onError: (error: Error) => { - console.error('Error:', error) -} -``` - -### Publish a new version - -If you have publish permissions you can do: - -```bash -pnpm version patch && pnpm build && pnpm publish -``` - -That's it! You are now ready to integrate Latitude's powerful AI features into your TypeScript application using the Latitude SDK. For more detailed information and advanced usage, please refer to the official documentation. diff --git a/packages/sdks/typescript/package.json b/packages/sdks/typescript/package.json index b1f20956a..f3e7b6206 100644 --- a/packages/sdks/typescript/package.json +++ b/packages/sdks/typescript/package.json @@ -1,6 +1,6 @@ { "name": "@latitude-data/sdk", - "version": "1.0.0-beta.7", + "version": "1.0.0-beta.8", "description": "Latitude SDK for Typescript", "author": "Latitude Data SL ", "license": "LGPL-3.0", @@ -35,10 +35,8 @@ } } }, - "types": { - "index.d.ts": "./dist/index.d.ts" - }, "dependencies": { + "@latitude-data/telemetry-js": "workspace:^", "@t3-oss/env-core": "^0.10.1", "eventsource-parser": "^2.0.1", "node-fetch": "3.3.2", @@ -46,8 +44,8 @@ "@latitude-data/promptl": "^0.3.2" }, "devDependencies": { - "@latitude-data/constants": "workspace:*", "@latitude-data/compiler": "workspace:^", + "@latitude-data/constants": "workspace:*", "@latitude-data/core": "workspace:^", "@latitude-data/eslint-config": "workspace:*", "@latitude-data/typescript-config": "workspace:^", diff --git a/packages/sdks/typescript/rollup.config.mjs b/packages/sdks/typescript/rollup.config.mjs index 7ca3177af..c4fc6060d 100644 --- a/packages/sdks/typescript/rollup.config.mjs +++ b/packages/sdks/typescript/rollup.config.mjs @@ -28,6 +28,9 @@ const EXTERNALS = [ 'node-fetch', 'stream', 'eventsource-parser/stream', + '@latitude-data/telemetry-js', + '@latitude-data/promptl', + '@latitude-data/compiler', ] const config = [ { diff --git a/packages/sdks/typescript/src/index.ts b/packages/sdks/typescript/src/index.ts index 569567db7..85d852b1e 100644 --- a/packages/sdks/typescript/src/index.ts +++ b/packages/sdks/typescript/src/index.ts @@ -1,6 +1,10 @@ import type { ContentType, Message, MessageRole } from '@latitude-data/compiler' + import { DocumentLog, + EvaluationDto, + EvaluationMetadataType, + EvaluationResultableType, EvaluationResultDto, type ChainEventDto, } from '@latitude-data/core/browser' @@ -11,6 +15,11 @@ import { render, type Message as PromptlMessage, } from '@latitude-data/promptl' +import { + LatitudeExporter, + LatitudeTelemetrySDK, + LatitudeTelemetrySDKConfig, +} from '@latitude-data/telemetry-js' import env from '$sdk/env' import { GatewayApiConfig, RouteResolver } from '$sdk/utils' import { @@ -55,13 +64,21 @@ const DEFAULT_INTERNAL = { type Options = { versionUuid?: string projectId?: number - gateway?: GatewayApiConfig - __internal?: { source?: LogSources; retryMs?: number } + telemetry?: Omit & { + exporter?: any + } + __internal?: { + gateway?: GatewayApiConfig + source?: LogSources + retryMs?: number + } } class Latitude { protected options: SDKOptions + public telemetry?: LatitudeTelemetrySDK + public evaluations: { trigger: (uuid: string, options?: EvalOptions) => Promise<{ uuid: string }> createResult: ( @@ -84,12 +101,15 @@ class Latitude { } public prompts: { - get: (path: string, args: GetPromptOptions) => Promise + get: (path: string, args?: GetPromptOptions) => Promise getOrCreate: ( path: string, - args: GetOrCreatePromptOptions, + args?: GetOrCreatePromptOptions, ) => Promise - run: (path: string, args: RunPromptOptions) => Promise + run: ( + path: string, + args: RunPromptOptions, + ) => Promise<(StreamChainResponse & { uuid: string }) | undefined> chat: ( uuid: string, messages: Message[], @@ -108,13 +128,19 @@ class Latitude { { projectId, versionUuid, - gateway = DEFAULT_GAWATE_WAY, - __internal, + telemetry, + __internal = { + gateway: DEFAULT_GAWATE_WAY, + }, }: Options = { - gateway: DEFAULT_GAWATE_WAY, + __internal: { + gateway: DEFAULT_GAWATE_WAY, + }, }, ) { const { source, retryMs } = { ...DEFAULT_INTERNAL, ...__internal } + const { gateway = DEFAULT_GAWATE_WAY } = __internal + this.options = { apiKey, retryMs, @@ -147,6 +173,20 @@ class Latitude { render: this.renderPrompt.bind(this), renderChain: this.renderChain.bind(this), } + + if (telemetry) { + const exporter = + telemetry.exporter ?? + new LatitudeExporter({ + apiKey: this.options.apiKey, + }) + + this.telemetry = new LatitudeTelemetrySDK({ + ...telemetry, + exporter, + processors: telemetry.processors, + }) + } } async getPrompt( @@ -154,9 +194,8 @@ class Latitude { { projectId, versionUuid }: GetPromptOptions = {}, ) { projectId = projectId ?? this.options.projectId - if (!projectId) { - throw new Error('Project ID is required') - } + if (!projectId) throw new Error('Project ID is required') + versionUuid = versionUuid ?? this.options.versionUuid const response = await makeRequest({ @@ -168,6 +207,7 @@ class Latitude { if (!response.ok) { const error = (await response.json()) as ApiErrorJsonResponse + throw new LatitudeApiError({ status: response.status, serverResponse: JSON.stringify(error), diff --git a/packages/sdks/typescript/src/utils/adapters/adaptPromptConfigToProvider.ts b/packages/sdks/typescript/src/utils/adapters/adaptPromptConfigToProvider.ts index 080668e68..9cdd2c2ba 100644 --- a/packages/sdks/typescript/src/utils/adapters/adaptPromptConfigToProvider.ts +++ b/packages/sdks/typescript/src/utils/adapters/adaptPromptConfigToProvider.ts @@ -1,4 +1,4 @@ -import { Config } from '@latitude-data/compiler' +import type { Config } from '@latitude-data/compiler' import { Adapters, ProviderAdapter } from '@latitude-data/promptl' /** diff --git a/packages/sdks/typescript/src/utils/syncRun.ts b/packages/sdks/typescript/src/utils/syncRun.ts index c47aa4581..5e4b1a44e 100644 --- a/packages/sdks/typescript/src/utils/syncRun.ts +++ b/packages/sdks/typescript/src/utils/syncRun.ts @@ -76,5 +76,6 @@ export async function syncRun( const json = (await response.json()) as RunSyncAPIResponse onFinished?.(json) + return Promise.resolve(json) } diff --git a/packages/telemetry/.eslintrc.json b/packages/telemetry/.eslintrc.json new file mode 100644 index 000000000..055116d85 --- /dev/null +++ b/packages/telemetry/.eslintrc.json @@ -0,0 +1,11 @@ +{ + "extends": [ + "./node_modules/@latitude-data/eslint-config/library.js" + ], + "env": { + "node": true + }, + "rules": { + "no-constant-condition": "off" + } +} \ No newline at end of file diff --git a/packages/telemetry/package.json b/packages/telemetry/package.json new file mode 100644 index 000000000..e10fdbc92 --- /dev/null +++ b/packages/telemetry/package.json @@ -0,0 +1,105 @@ +{ + "name": "@latitude-data/telemetry-js", + "version": "1.0.0", + "description": "OpenTelemetry exporters for Latitude", + "author": "Latitude Data SL ", + "license": "LGPL-3.0", + "repository": { + "type": "git", + "url": "https://github.com/latitude-dev/latitude-llm/tree/main/packages/telemetry" + }, + "homepage": "https://github.com/latitude-dev/latitude-llm/tree/main/packages/telemetry#readme", + "scripts": { + "dev": "rollup -w -c ./rollup.config.mjs", + "build": "NODE_ENV=production rollup -c ./rollup.config.mjs", + "test": "vitest run --pool=forks", + "test:watch": "vitest", + "tc": "tsc --noEmit", + "lint": "eslint src", + "prettier": "prettier --write \"**/*.{ts,tsx,md}\"" + }, + "type": "module", + "files": [ + "dist" + ], + "main": "./dist/index.cjs", + "module": "./dist/index.js", + "exports": { + ".": { + "import": { + "types": "./dist/index.d.ts", + "default": "./dist/index.js" + }, + "require": { + "types": "./dist/index.d.ts", + "default": "./dist/index.cjs" + } + } + }, + "dependencies": { + "@opentelemetry/api": "^1.8.0", + "@opentelemetry/core": "^1.22.0", + "@opentelemetry/otlp-exporter-base": "^0.49.1", + "@opentelemetry/otlp-transformer": "^0.49.1", + "@opentelemetry/resources": "^1.22.0", + "@opentelemetry/sdk-node": "^0.55.0", + "@opentelemetry/sdk-trace-base": "^1.22.0", + "@opentelemetry/sdk-trace-node": "^1.22.0", + "@opentelemetry/semantic-conventions": "^1.22.0", + "@traceloop/instrumentation-anthropic": "^0.11.1", + "@traceloop/instrumentation-azure": "^0.11.1", + "@traceloop/instrumentation-bedrock": "^0.11.1", + "@traceloop/instrumentation-chromadb": "^0.11.3", + "@traceloop/instrumentation-cohere": "^0.11.1", + "@traceloop/instrumentation-langchain": "^0.11.4", + "@traceloop/instrumentation-llamaindex": "^0.11.1", + "@traceloop/instrumentation-openai": "^0.11.3", + "@traceloop/instrumentation-pinecone": "^0.11.1", + "@traceloop/instrumentation-qdrant": "^0.11.1", + "@traceloop/instrumentation-vertexai": "^0.11.4" + }, + "devDependencies": { + "@anthropic-ai/sdk": "^0.32.1", + "@aws-sdk/client-bedrock-runtime": "^3.704.0", + "@azure/openai": "^2.0.0", + "@google-cloud/aiplatform": "^3.34.0", + "@google-cloud/vertexai": "^1.9.0", + "@langchain/core": "^0.3.19", + "@latitude-data/eslint-config": "workspace:^", + "@latitude-data/typescript-config": "workspace:^", + "@pinecone-database/pinecone": "^4.0.0", + "@qdrant/js-client-rest": "^1.12.0", + "@rollup/plugin-alias": "^5.1.1", + "@rollup/plugin-replace": "^6.0.1", + "@rollup/plugin-typescript": "^11.1.6", + "@types/node": "^22.7.5", + "ai": "^4.0.10", + "chromadb": "^1.9.4", + "cohere-ai": "^7.14.0", + "langchain": "^0.3.6", + "llamaindex": "^0.8.26", + "openai": "^4.74.0", + "rollup": "^4.21.1", + "rollup-plugin-dts": "^6.1.1", + "vitest": "^2.0.5" + }, + "peerDependencies": { + "@anthropic-ai/sdk": "^0.32.1", + "@aws-sdk/client-bedrock-runtime": "^3.704.0", + "@azure/openai": "^2.0.0", + "@google-cloud/aiplatform": "^3.34.0", + "@google-cloud/vertexai": "^1.9.0", + "@langchain/core": "^0.3.19", + "@latitude-data/eslint-config": "workspace:^", + "@latitude-data/typescript-config": "workspace:^", + "@pinecone-database/pinecone": "^4.0.0", + "@qdrant/js-client-rest": "^1.12.0", + "@rollup/plugin-alias": "^5.1.1", + "chromadb": "^1.9.4", + "cohere-ai": "^7.14.0", + "langchain": "^0.3.6", + "llamaindex": "^0.8.26", + "openai": "^4.74.0", + "typescript": "^5.5.4" + } +} \ No newline at end of file diff --git a/packages/telemetry/rollup.config.mjs b/packages/telemetry/rollup.config.mjs new file mode 100644 index 000000000..67c01112b --- /dev/null +++ b/packages/telemetry/rollup.config.mjs @@ -0,0 +1,98 @@ +import * as path from 'path' +import * as url from 'url' + +import alias from '@rollup/plugin-alias' +import replace from '@rollup/plugin-replace' +import typescript from '@rollup/plugin-typescript' +import { dts } from 'rollup-plugin-dts' + +const __dirname = path.dirname(url.fileURLToPath(import.meta.url)) +const aliasEntries = { + entries: [ + { find: '$telemetry', replacement: path.resolve(__dirname, 'src') }, + ], +} + +const EXTERNALS = [ + '@anthropic-ai/sdk', + '@aws-sdk/client-bedrock-runtime', + '@azure/openai', + '@google-cloud/aiplatform', + '@google-cloud/vertexai', + '@langchain/core', + '@opentelemetry/api', + '@opentelemetry/core', + '@opentelemetry/otlp-exporter-base', + '@opentelemetry/otlp-transformer', + '@opentelemetry/resources', + '@opentelemetry/sdk-node', + '@opentelemetry/sdk-trace-base', + '@opentelemetry/sdk-trace-node', + '@opentelemetry/semantic-conventions', + '@pinecone-database/pinecone', + '@qdrant/js-client-rest', + '@traceloop/instrumentation-anthropic', + '@traceloop/instrumentation-azure', + '@traceloop/instrumentation-bedrock', + '@traceloop/instrumentation-chromadb', + '@traceloop/instrumentation-cohere', + '@traceloop/instrumentation-langchain', + '@traceloop/instrumentation-llamaindex', + '@traceloop/instrumentation-openai', + '@traceloop/instrumentation-pinecone', + '@traceloop/instrumentation-qdrant', + '@traceloop/instrumentation-vertexai', + 'ai', + 'chromadb', + 'cohere-ai', + 'langchain', + 'llamaindex', + 'openai', +] + +const config = [ + { + input: 'src/index.ts', + output: { + file: 'dist/index.js', + format: 'es', + sourcemap: true, + }, + plugins: [ + typescript({ + exclude: ['**/__tests__', '**/*.test.ts'], + }), + replace({ + 'process.env.NODE_ENV': JSON.stringify(process.env.NODE_ENV), + preventAssignment: true, + }), + ], + external: EXTERNALS, + }, + { + input: 'src/index.ts', + output: { + file: 'dist/index.cjs', + format: 'cjs', + sourcemap: true, + }, + plugins: [ + typescript({ + exclude: ['**/__tests__', '**/*.test.ts'], + }), + replace({ + 'process.env.NODE_ENV': JSON.stringify(process.env.NODE_ENV), + preventAssignment: true, + }), + ], + external: EXTERNALS, + }, + { + input: 'src/index.ts', + output: [{ file: 'dist/index.d.ts', format: 'es' }], + plugins: [alias(aliasEntries), dts()], + external: EXTERNALS, + }, +] + +export default config diff --git a/packages/telemetry/src/exporters/latitudeExporter.ts b/packages/telemetry/src/exporters/latitudeExporter.ts new file mode 100644 index 000000000..b48c1ea6e --- /dev/null +++ b/packages/telemetry/src/exporters/latitudeExporter.ts @@ -0,0 +1,157 @@ +import { ExportResultCode, hrTimeToNanoseconds } from '@opentelemetry/core' +import { + OTLPExporterBase, + OTLPExporterConfigBase, +} from '@opentelemetry/otlp-exporter-base' +import { ReadableSpan, SpanExporter } from '@opentelemetry/sdk-trace-base' + +interface OTLPHttpExporterConfig extends OTLPExporterConfigBase { + apiKey: string + endpoint?: string +} + +export class LatitudeExporter + extends OTLPExporterBase + implements SpanExporter +{ + url: string + private headers: Record + + constructor(config: OTLPHttpExporterConfig) { + super(config) + + this.url = config.endpoint || 'http://localhost:8787/api/v2/otlp/v1/traces' + this.headers = { + Authorization: `Bearer ${config.apiKey}`, + } + } + + async export( + spans: ReadableSpan[], + resultCallback: (result: any) => void, + ): Promise { + await this.send( + spans, + () => resultCallback({ code: ExportResultCode.SUCCESS }), + (error) => { + resultCallback({ code: ExportResultCode.FAILED, error }) + }, + ) + } + + async shutdown(): Promise { + // No-op + } + + async onShutdown(): Promise { + // No-op + } + + async onInit(): Promise { + // No-op + } + + async send( + spans: ReadableSpan[], + onSuccess: () => void, + onError: (error: Error) => void, + ): Promise { + if (spans.length === 0) { + onSuccess() + return + } + + const serviceRequest = this.convert(spans) + const body = JSON.stringify(serviceRequest) + + try { + const response = await fetch(this.url, { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + ...this.headers, + }, + body, + }) + + if (!response.ok || response.status >= 400) { + throw new Error(`${response.status} ${response.statusText}`) + } + + onSuccess() + } catch (error) { + onError(error as Error) + } + } + + convert(spans: ReadableSpan[]) { + return { + resourceSpans: [ + { + resource: { + attributes: this.convertAttributes( + spans[0]?.resource?.attributes || {}, + ), + }, + scopeSpans: [ + { + spans: spans.map((span) => ({ + traceId: span.spanContext().traceId, + spanId: span.spanContext().spanId, + parentSpanId: span.parentSpanId, + name: span.name, + kind: span.kind, + startTimeUnixNano: hrTimeToNanoseconds( + span.startTime, + ).toString(), + endTimeUnixNano: span.endTime + ? hrTimeToNanoseconds(span.endTime).toString() + : undefined, + attributes: this.convertAttributes(span.attributes), + status: span.status && { + code: span.status.code, + message: span.status.message, + }, + events: span.events?.map((event) => ({ + timeUnixNano: hrTimeToNanoseconds(event.time).toString(), + name: event.name, + attributes: this.convertAttributes(event.attributes), + })), + links: span.links?.map((link) => ({ + traceId: link.context.traceId, + spanId: link.context.spanId, + attributes: this.convertAttributes(link.attributes), + })), + })), + }, + ], + }, + ], + } + } + + getDefaultUrl(config: any): string { + return config.endpoint || 'http://localhost:8787/api/v2/otlp/v1/traces' + } + + private convertAttributes(attributes: Record = {}): Array<{ + key: string + value: { stringValue?: string; intValue?: number; boolValue?: boolean } + }> { + return Object.entries(attributes).map(([key, value]) => ({ + key, + value: this.convertAttributeValue(value), + })) + } + + private convertAttributeValue(value: unknown): { + stringValue?: string + intValue?: number + boolValue?: boolean + } { + if (typeof value === 'string') return { stringValue: value } + if (typeof value === 'number') return { intValue: value } + if (typeof value === 'boolean') return { boolValue: value } + return { stringValue: String(value) } + } +} diff --git a/packages/telemetry/src/index.ts b/packages/telemetry/src/index.ts new file mode 100644 index 000000000..dbbbf470c --- /dev/null +++ b/packages/telemetry/src/index.ts @@ -0,0 +1,8 @@ +export { LatitudeExporter } from './exporters/latitudeExporter' +export { + VercelSpanProcessor, + VercelBatchSpanProcessor, +} from './processors/vercel' +export { LatitudeTelemetrySDK } from './telemetry/index' + +export type { LatitudeTelemetrySDKConfig } from './telemetry' diff --git a/packages/telemetry/src/processors/vercel/conventions.ts b/packages/telemetry/src/processors/vercel/conventions.ts new file mode 100644 index 000000000..750971a6d --- /dev/null +++ b/packages/telemetry/src/processors/vercel/conventions.ts @@ -0,0 +1,109 @@ +/** + * Below are the semantic conventions for the Vercel AI SDK. + * @see https://sdk.vercel.ai/docs/ai-sdk-core/telemetry#collected-data + */ +const AI_PREFIX = 'ai' as const + +const AIPrefixes = { + settings: 'settings', + model: 'model', + usage: 'usage', + telemetry: 'telemetry', + prompt: 'prompt', + toolCall: 'toolCall', + response: 'response', +} as const + +const AIUsagePostfixes = { + completionTokens: 'completionTokens', + promptTokens: 'promptTokens', +} as const + +const AIResultPostfixes = { + text: 'text', + toolCalls: 'toolCalls', + object: 'object', +} as const + +const AIPromptPostfixes = { + messages: 'messages', +} as const + +const AIToolCallPostfixes = { + id: 'id', + name: 'name', + args: 'args', + result: 'result', +} as const + +const SETTINGS = `${AI_PREFIX}.${AIPrefixes.settings}` as const + +const MODEL_ID = `${AI_PREFIX}.${AIPrefixes.model}.id` as const + +const METADATA = `${AI_PREFIX}.${AIPrefixes.telemetry}.metadata` as const + +const TOKEN_COUNT_COMPLETION = + `${AI_PREFIX}.${AIPrefixes.usage}.${AIUsagePostfixes.completionTokens}` as const + +const TOKEN_COUNT_PROMPT = + `${AI_PREFIX}.${AIPrefixes.usage}.${AIUsagePostfixes.promptTokens}` as const + +const RESPONSE_TEXT = + `${AI_PREFIX}.${AIPrefixes.response}.${AIResultPostfixes.text}` as const + +const RESPONSE_TOOL_CALLS = + `${AI_PREFIX}.${AIPrefixes.response}.${AIResultPostfixes.toolCalls}` as const + +const RESULT_OBJECT = + `${AI_PREFIX}.${AIPrefixes.response}.${AIResultPostfixes.object}` as const + +const PROMPT = `${AI_PREFIX}.${AIPrefixes.prompt}` as const + +const PROMPT_MESSAGES = `${PROMPT}.${AIPromptPostfixes.messages}` as const + +const EMBEDDING_TEXT = `${AI_PREFIX}.value` as const +const EMBEDDING_VECTOR = `${AI_PREFIX}.embedding` as const + +const EMBEDDING_TEXTS = `${AI_PREFIX}.values` as const +const EMBEDDING_VECTORS = `${AI_PREFIX}.embeddings` as const + +const TOOL_CALL_ID = + `${AI_PREFIX}.${AIPrefixes.toolCall}.${AIToolCallPostfixes.id}` as const +const TOOL_CALL_NAME = + `${AI_PREFIX}.${AIPrefixes.toolCall}.${AIToolCallPostfixes.name}` as const +const TOOL_CALL_ARGS = + `${AI_PREFIX}.${AIPrefixes.toolCall}.${AIToolCallPostfixes.args}` as const +const TOOL_CALL_RESULT = + `${AI_PREFIX}.${AIPrefixes.toolCall}.${AIToolCallPostfixes.result}` as const + +/** + * The semantic conventions used by the Vercel AI SDK. + * @see https://sdk.vercel.ai/docs/ai-sdk-core/telemetry#collected-data + */ +export const AISemanticConventions = { + MODEL_ID, + METADATA, + SETTINGS, + TOKEN_COUNT_COMPLETION, + TOKEN_COUNT_PROMPT, + RESPONSE_TEXT, + RESPONSE_TOOL_CALLS, + RESULT_OBJECT, + PROMPT, + PROMPT_MESSAGES, + EMBEDDING_TEXT, + EMBEDDING_VECTOR, + EMBEDDING_TEXTS, + EMBEDDING_VECTORS, + TOOL_CALL_ID, + TOOL_CALL_NAME, + TOOL_CALL_ARGS, + TOOL_CALL_RESULT, +} as const + +export const AISemanticConventionsList = Object.freeze( + Object.values(AISemanticConventions), +) + +export type AISemanticConvention = + (typeof AISemanticConventions)[keyof typeof AISemanticConventions] diff --git a/packages/telemetry/src/processors/vercel/index.ts b/packages/telemetry/src/processors/vercel/index.ts new file mode 100644 index 000000000..2c7332f2a --- /dev/null +++ b/packages/telemetry/src/processors/vercel/index.ts @@ -0,0 +1,166 @@ +import { + ReadableSpan, + SimpleSpanProcessor, + SpanProcessor, + BatchSpanProcessor, +} from '@opentelemetry/sdk-trace-base' +import type { ToolCallPart } from 'ai' + +import { AISemanticConventions } from './conventions' + +export class VercelSpanProcessor + extends SimpleSpanProcessor + implements SpanProcessor +{ + onEnd(span: ReadableSpan): void { + if (!shouldProcess(span)) return + if (shouldConvertToLatitudeFormat(span)) convertToLatitudeFormat(span) + + super.onEnd(span) + } +} + +export class VercelBatchSpanProcessor + extends BatchSpanProcessor + implements SpanProcessor +{ + onEnd(span: ReadableSpan): void { + if (!shouldProcess(span)) return + if (shouldConvertToLatitudeFormat(span)) convertToLatitudeFormat(span) + + super.onEnd(span) + } +} + +function shouldProcess(span: ReadableSpan): boolean { + return ( + Object.keys(span.attributes).some((k) => k.startsWith('latitude.')) || + Object.keys(span.attributes).some((k) => k.startsWith('ai.')) + ) +} + +function shouldConvertToLatitudeFormat(span: ReadableSpan): boolean { + return Object.keys(span.attributes).some((k) => k.startsWith('ai.')) +} + +function convertToLatitudeFormat(span: ReadableSpan): void { + try { + const computedAttrs = computeOpenLLMAttributes(span) + if (computedAttrs) { + ;(span as any).attributes = { + ...span.attributes, + ...computedAttrs, + } + } + } catch (e) { + console.log('Latitude telemetry Error: ', e) + // do nothing + } +} + +function computeOpenLLMAttributes(span: ReadableSpan) { + const attrs = span.attributes || {} + const result: Record = {} + + // Extract model information + if (attrs[AISemanticConventions.MODEL_ID]) { + result['gen_ai.request.model'] = String( + attrs[AISemanticConventions.MODEL_ID], + ) + result['gen_ai.response.model'] = String( + attrs[AISemanticConventions.MODEL_ID], + ) + } + + // Extract settings + try { + const settings = attrs[AISemanticConventions.SETTINGS] + ? JSON.parse(String(attrs[AISemanticConventions.SETTINGS])) + : {} + + if (settings) { + // Add max tokens if present + if (settings.maxTokens) { + result['gen_ai.request.max_tokens'] = settings.maxTokens + } + + if (!attrs['gen_ai.system'] && settings.provider) { + result['gen_ai.system'] = String(settings.provider) + } + } + } catch (e) { + console.error('Error parsing settings', e) + } + + // Set request type to chat as that's what Vercel AI SDK uses + result['llm.request.type'] = 'chat' + + // Extract messages + try { + const messages = attrs['ai.prompt.messages'] + ? JSON.parse(String(attrs['ai.prompt.messages'])) + : [] + + // Process prompt messages + messages.forEach((msg: any, index: number) => { + result[`gen_ai.prompt.${index}.role`] = msg.role + result[`gen_ai.prompt.${index}.content`] = + typeof msg.content === 'string' + ? msg.content + : JSON.stringify(msg.content) + }) + } catch (e) { + console.error('Error parsing messages', e) + return undefined + } + + // Extract completion/response + const responseText = attrs['ai.response.text'] + const responseObject = attrs['ai.response.object'] + const responseToolCalls = attrs['ai.response.toolCalls'] + if (responseText) { + result[`gen_ai.completion.0.role`] = 'assistant' + result[`gen_ai.completion.0.content`] = String(responseText) + } else if (responseToolCalls) { + try { + const toolCalls = JSON.parse(String(responseToolCalls)) + if (toolCalls.length > 0) { + result['gen_ai.completion.0.finish_reason'] = 'tool_calls' + result[`gen_ai.completion.0.role`] = 'assistant' + + toolCalls.forEach((toolCall: ToolCallPart, toolCallIndex: number) => { + result[`gen_ai.completion.0.tool_calls.${toolCallIndex}.id`] = + toolCall.toolCallId + result[`gen_ai.completion.0.tool_calls.${toolCallIndex}.name`] = + toolCall.toolName + result[`gen_ai.completion.0.tool_calls.${toolCallIndex}.arguments`] = + toolCall.args as string + }) + } + } catch (e) { + console.error('Error parsing tool calls', e) + } + } else if (responseObject) { + result['gen_ai.completion.0.role'] = 'assistant' + result['gen_ai.completion.0.content'] = String(responseObject) + } + + // Extract token usage + const completionTokens = attrs['ai.usage.completionTokens'] + const promptTokens = attrs['ai.usage.promptTokens'] + + if (typeof completionTokens === 'number') { + result['gen_ai.usage.completion_tokens'] = completionTokens + } + if (typeof promptTokens === 'number') { + result['gen_ai.usage.prompt_tokens'] = promptTokens + } + if ( + typeof completionTokens === 'number' && + typeof promptTokens === 'number' + ) { + result['llm.usage.total_tokens'] = completionTokens + promptTokens + } + + return result +} diff --git a/packages/telemetry/src/telemetry/index.ts b/packages/telemetry/src/telemetry/index.ts new file mode 100644 index 000000000..40785ca74 --- /dev/null +++ b/packages/telemetry/src/telemetry/index.ts @@ -0,0 +1,263 @@ +import { NodeSDK } from '@opentelemetry/sdk-node' +import { + SimpleSpanProcessor, + BatchSpanProcessor, + SpanExporter, +} from '@opentelemetry/sdk-trace-node' + +import { AnthropicInstrumentation } from '@traceloop/instrumentation-anthropic' +import { OpenAIInstrumentation } from '@traceloop/instrumentation-openai' +import { AzureOpenAIInstrumentation } from '@traceloop/instrumentation-azure' +import { + AIPlatformInstrumentation, + VertexAIInstrumentation, +} from '@traceloop/instrumentation-vertexai' +import { BedrockInstrumentation } from '@traceloop/instrumentation-bedrock' +import { CohereInstrumentation } from '@traceloop/instrumentation-cohere' + +import type * as openai from 'openai' +import type * as anthropic from '@anthropic-ai/sdk' +import type * as azure from '@azure/openai' +import type * as cohere from 'cohere-ai' +import type * as bedrock from '@aws-sdk/client-bedrock-runtime' +import type * as aiplatform from '@google-cloud/aiplatform' +import type * as vertexAI from '@google-cloud/vertexai' +import type * as pinecone from '@pinecone-database/pinecone' +import type * as ChainsModule from 'langchain/chains' +import type * as AgentsModule from 'langchain/agents' +import type * as ToolsModule from 'langchain/tools' +import type * as RunnableModule from '@langchain/core/runnables' +import type * as VectorStoreModule from '@langchain/core/vectorstores' +import type * as llamaindex from 'llamaindex' +import type * as chromadb from 'chromadb' +import type * as qdrant from '@qdrant/js-client-rest' +import { Resource } from '@opentelemetry/resources' +import { context, trace } from '@opentelemetry/api' + +type IModules = { + openAI?: typeof openai + anthropic?: typeof anthropic + azureOpenAI?: typeof azure + cohere?: typeof cohere + bedrock?: typeof bedrock + google_vertexai?: typeof vertexAI + google_aiplatform?: typeof aiplatform + pinecone?: typeof pinecone + langchain?: { + chainsModule?: typeof ChainsModule + agentsModule?: typeof AgentsModule + toolsModule?: typeof ToolsModule + runnablesModule?: typeof RunnableModule + vectorStoreModule?: typeof VectorStoreModule + } + llamaIndex?: typeof llamaindex + chromadb?: typeof chromadb + qdrant?: typeof qdrant +} + +type SpanAttributes = { + name?: string + metadata?: Record + prompt?: { + uuid: string + versionUuid?: string + parameters?: Record + } + distinctId?: string +} + +export type LatitudeTelemetrySDKConfig = { + exporter: SpanExporter + modules?: IModules + disableBatch?: boolean + processors?: (typeof SimpleSpanProcessor)[] | (typeof BatchSpanProcessor)[] +} + +export class LatitudeTelemetrySDK { + private exporter: SpanExporter + + constructor({ + exporter, + modules = {}, + disableBatch = false, + processors = [], + }: LatitudeTelemetrySDKConfig) { + this.exporter = exporter + + this._init(modules, { disableBatch, processors }) + } + + private _init( + modules: IModules, + options?: { + disableBatch?: boolean + processors?: + | (typeof SimpleSpanProcessor)[] + | (typeof BatchSpanProcessor)[] + }, + ) { + const instrumentations = [] + + if (modules?.openAI) { + const openAIInstrumentation = new OpenAIInstrumentation({ + enrichTokens: true, + }) + // @ts-ignore + openAIInstrumentation.manuallyInstrument(modules.openAI!) + instrumentations.push(openAIInstrumentation) + } + + if (modules?.anthropic) { + const anthropicInstrumentation = new AnthropicInstrumentation() + anthropicInstrumentation.manuallyInstrument(modules.anthropic!) + instrumentations.push(new AnthropicInstrumentation()) + } + + if (modules?.azureOpenAI) { + const azureOpenAIInstrumentation = new AzureOpenAIInstrumentation() + azureOpenAIInstrumentation.manuallyInstrument(modules.azureOpenAI!) + instrumentations.push(azureOpenAIInstrumentation) + } + + if (modules?.cohere) { + const cohereInstrumentation = new CohereInstrumentation() + cohereInstrumentation.manuallyInstrument(modules.cohere!) + instrumentations.push(cohereInstrumentation) + } + + if (modules?.google_vertexai) { + const vertexAIInstrumentation = new VertexAIInstrumentation() + vertexAIInstrumentation.manuallyInstrument(modules.google_vertexai!) + instrumentations.push(vertexAIInstrumentation) + } + + if (modules?.google_aiplatform) { + const aiplatformInstrumentation = new AIPlatformInstrumentation() + aiplatformInstrumentation.manuallyInstrument(modules.google_aiplatform!) + instrumentations.push(aiplatformInstrumentation) + } + + if (modules?.bedrock) { + const bedrockInstrumentation = new BedrockInstrumentation() + bedrockInstrumentation.manuallyInstrument(modules.bedrock!) + instrumentations.push(bedrockInstrumentation) + } + + // TODO: Enable these once we have manually tested them + //if (modules?.langchain) { + // const langchainInstrumentation = new LangChainInstrumentation() + // langchainInstrumentation.manuallyInstrument(modules.langchain!) + // instrumentations.push(langchainInstrumentation) + //} + // + //if (modules?.llamaIndex) { + // const llamaindexInstrumentation = new LlamaIndexInstrumentation() + // llamaindexInstrumentation.manuallyInstrument(modules.llamaIndex!) + // instrumentations.push(llamaindexInstrumentation) + //} + + //if (modules?.pinecone) { + // const pineconeInstrumentation = new PineconeInstrumentation() + // pineconeInstrumentation.manuallyInstrument(modules.pinecone!) + // instrumentations.push(pineconeInstrumentation) + //} + + //if (modules?.chromadb) { + // const chromadbInstrumentation = new ChromaDBInstrumentation() + // chromadbInstrumentation.manuallyInstrument(modules.chromadb!) + // instrumentations.push(chromadbInstrumentation) + //} + + //if (modules?.qdrant) { + // const qdrantInstrumentation = new QdrantInstrumentation() + // qdrantInstrumentation.manuallyInstrument(modules.qdrant!) + // instrumentations.push(qdrantInstrumentation) + //} + + if (!instrumentations.length && !options?.processors?.length) { + console.warn('Latitude: No instrumentations or processors to initialize') + return + } + + const processors = options?.disableBatch + ? [ + new SimpleSpanProcessor(this.exporter), + ...(options?.processors?.map( + (processor) => new processor(this.exporter), + ) || []), + ] + : [ + new BatchSpanProcessor(this.exporter), + ...(options?.processors?.map( + (processor) => new processor(this.exporter), + ) || []), + ] + + const sdk = new NodeSDK({ + resource: new Resource({ + 'service.name': process.env.npm_package_name, + }), + instrumentations, + traceExporter: this.exporter, + // @ts-ignore + spanProcessors: processors, + }) + + sdk.start() + } + + span(s: SpanAttributes, fn: (span: any) => T): Promise { + const c = context.active() + return context.with(c, () => + trace + .getTracer('latitude') + .startActiveSpan(s.name ?? 'latitude.span', {}, c, async (span) => { + try { + if (s.prompt) { + try { + span.setAttribute('latitude.prompt', JSON.stringify(s.prompt)) + } catch (e) { + console.error( + 'Latitude: Could not serialize latitude.prompt attribute', + e, + ) + } + } + + if (s.distinctId) { + span.setAttribute('latitude.distinctId', s.distinctId) + } + + if (s.metadata) { + try { + span.setAttribute( + 'latitude.metadata', + JSON.stringify(s.metadata), + ) + } catch (e) { + console.error( + 'Latitude: Could not serialize latitude.metadata attribute', + e, + ) + } + } + } catch (error) { + console.error(error) + } + + const res = fn(span) + if (res instanceof Promise) { + return res.then((resolvedRes) => { + span.end() + + return resolvedRes + }) + } + + span.end() + + return res + }), + ) + } +} diff --git a/packages/telemetry/tsconfig.json b/packages/telemetry/tsconfig.json new file mode 100644 index 000000000..151feee7c --- /dev/null +++ b/packages/telemetry/tsconfig.json @@ -0,0 +1,18 @@ +{ + "extends": "@latitude-data/typescript-config/base.json", + "include": [ + "src" + ], + "exclude": [ + "node_modules", + "dist" + ], + "compilerOptions": { + "outDir": "dist", + "paths": { + "$telemetry/*": [ + "./src/*" + ] + } + } +} \ No newline at end of file diff --git a/packages/web-ui/src/ds/atoms/Icons/index.tsx b/packages/web-ui/src/ds/atoms/Icons/index.tsx index 28b1abe8d..a95987f1b 100644 --- a/packages/web-ui/src/ds/atoms/Icons/index.tsx +++ b/packages/web-ui/src/ds/atoms/Icons/index.tsx @@ -34,6 +34,7 @@ import { ListOrdered, LoaderCircle, Lock, + Logs, MinusIcon, MonitorIcon, Moon, @@ -55,6 +56,7 @@ import { Trash, Twitter, Undo, + X, } from 'lucide-react' import { cn } from '../../../lib/utils' @@ -120,6 +122,8 @@ const Icons = { notEqual: EqualNotIcon, settings: SettingsIcon, paperclip: Paperclip, + logs: Logs, + x: X, } export type IconName = keyof typeof Icons diff --git a/packages/web-ui/src/ds/molecules/Chat/Message/index.tsx b/packages/web-ui/src/ds/molecules/Chat/Message/index.tsx index 7180ec88f..bd46d4471 100644 --- a/packages/web-ui/src/ds/molecules/Chat/Message/index.tsx +++ b/packages/web-ui/src/ds/molecules/Chat/Message/index.tsx @@ -166,17 +166,30 @@ const Content = ({ sourceMap?: PromptlSourceRef[] }) => { if (typeof value === 'string') { - return ( - - ) + try { + const parsedValue = JSON.parse(value) + return ( +
+
+ + {JSON.stringify(parsedValue, null, 2)} + +
+
+ ) + } catch (_) { + return ( + + ) + } } switch (value.type) { diff --git a/packages/web-ui/src/ds/molecules/ClicktoCopy/index.tsx b/packages/web-ui/src/ds/molecules/ClicktoCopy/index.tsx index bf312f6aa..732db4b32 100644 --- a/packages/web-ui/src/ds/molecules/ClicktoCopy/index.tsx +++ b/packages/web-ui/src/ds/molecules/ClicktoCopy/index.tsx @@ -8,6 +8,7 @@ import { Icon, toast, Tooltip } from '../../atoms' export function ClickToCopy({ copyValue, children, + tooltipContent, fullWidth = false, showIcon = true, }: { @@ -15,6 +16,7 @@ export function ClickToCopy({ children: ReactNode fullWidth?: boolean showIcon?: boolean + tooltipContent?: string }) { const onCopy = useCallback(() => { navigator.clipboard.writeText(copyValue) @@ -26,7 +28,6 @@ export function ClickToCopy({ return ( @@ -45,7 +46,7 @@ export function ClickToCopy({
} > - Click to copy: {copyValue} + {tooltipContent ?? `Click to copy: ${copyValue}`} ) } diff --git a/packages/web-ui/src/ds/organisms/ClickToCopyUuid/index.tsx b/packages/web-ui/src/ds/organisms/ClickToCopyUuid/index.tsx index a7ab6adcf..a78c2c67d 100644 --- a/packages/web-ui/src/ds/organisms/ClickToCopyUuid/index.tsx +++ b/packages/web-ui/src/ds/organisms/ClickToCopyUuid/index.tsx @@ -3,16 +3,16 @@ import { ClickToCopy } from '../../molecules' export function ClickToCopyUuid({ uuid, + tooltipContent, variant = 'muted', }: { uuid: string variant?: BadgeProps['variant'] + tooltipContent?: string }) { return ( - - - {uuid.split('-')[0]} - + + {uuid.slice(-8)} ) } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 46b3e1cca..3ad348b7f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -79,7 +79,7 @@ importers: version: 0.11.1(typescript@5.6.3)(zod@3.23.8) ai: specifier: ^3.2.42 - version: 3.4.23(openai@4.68.4(encoding@0.1.13)(zod@3.23.8))(react@18.3.1)(sswr@2.1.0(svelte@4.2.19))(svelte@4.2.19)(vue@3.5.12(typescript@5.6.3))(zod@3.23.8) + version: 3.4.23(openai@4.74.0(encoding@0.1.13)(zod@3.23.8))(react@18.3.1)(solid-js@1.9.3)(sswr@2.1.0(svelte@4.2.19))(svelte@4.2.19)(vue@3.5.12(typescript@5.6.3))(zod@3.23.8) argon2: specifier: ^0.41.0 version: 0.41.1 @@ -133,7 +133,7 @@ importers: version: 3.2.0 nodemailer-mailgun-transport: specifier: ^2.1.5 - version: 2.1.5(lodash@4.17.21)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 2.1.5(lodash@4.17.21)(nunjucks@3.2.4(chokidar@3.6.0))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(underscore@1.13.7) pg: specifier: ^8.12.0 version: 8.13.1 @@ -286,7 +286,7 @@ importers: version: 4.19.2 vitest: specifier: ^2.0.4 - version: 2.1.4(@types/node@22.8.1)(jsdom@24.1.3)(msw@2.5.2(@types/node@22.8.1)(typescript@5.7.2))(terser@5.36.0) + version: 2.1.4(@types/node@22.8.1)(jsdom@24.1.3(canvas@2.11.2(encoding@0.1.13)))(msw@2.5.2(@types/node@22.8.1)(typescript@5.7.2))(terser@5.36.0) apps/infra: dependencies: @@ -350,7 +350,7 @@ importers: version: 0.1.65 '@sentry/nextjs': specifier: ^8.34.0 - version: 8.35.0(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.27.0(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.53.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.27.0(@opentelemetry/api@1.9.0))(encoding@0.1.13)(next@15.0.3(@opentelemetry/api@1.9.0)(react-dom@19.0.0-rc-5d19e1c8-20240923(react@19.0.0-rc-5d19e1c8-20240923))(react@19.0.0-rc-5d19e1c8-20240923))(react@19.0.0-rc-5d19e1c8-20240923)(webpack@5.95.0(esbuild@0.19.12)) + version: 8.35.0(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.28.0(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.55.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.28.0(@opentelemetry/api@1.9.0))(encoding@0.1.13)(next@15.0.3(@opentelemetry/api@1.9.0)(react-dom@19.0.0-rc-5d19e1c8-20240923(react@19.0.0-rc-5d19e1c8-20240923))(react@19.0.0-rc-5d19e1c8-20240923))(react@19.0.0-rc-5d19e1c8-20240923)(webpack@5.95.0(esbuild@0.19.12)) '@sentry/utils': specifier: ^8.30.0 version: 8.35.0 @@ -362,7 +362,7 @@ importers: version: 0.10.1(typescript@5.7.2)(zod@3.23.8) ai: specifier: ^3.2.42 - version: 3.4.23(openai@4.68.4(encoding@0.1.13)(zod@3.23.8))(react@19.0.0-rc-5d19e1c8-20240923)(sswr@2.1.0(svelte@4.2.19))(svelte@4.2.19)(vue@3.5.12(typescript@5.7.2))(zod@3.23.8) + version: 3.4.23(openai@4.74.0(encoding@0.1.13)(zod@3.23.8))(react@19.0.0-rc-5d19e1c8-20240923)(solid-js@1.9.3)(sswr@2.1.0(svelte@4.2.19))(svelte@4.2.19)(vue@3.5.12(typescript@5.7.2))(zod@3.23.8) bullmq: specifier: ^5.8.5 version: 5.21.2 @@ -520,7 +520,7 @@ importers: version: 5.7.2 vitest: specifier: ^2.0.3 - version: 2.1.4(@types/node@20.17.1)(jsdom@24.1.3)(msw@2.5.2(@types/node@20.17.1)(typescript@5.7.2))(terser@5.36.0) + version: 2.1.4(@types/node@20.17.1)(jsdom@24.1.3(canvas@2.11.2(encoding@0.1.13)))(msw@2.5.2(@types/node@20.17.1)(typescript@5.7.2))(terser@5.36.0) apps/websockets: dependencies: @@ -599,17 +599,84 @@ importers: specifier: ^4.16.2 version: 4.19.2 + examples/chat-app: + dependencies: + '@ai-sdk/openai': + specifier: ^0.0.54 + version: 0.0.54(zod@3.23.8) + '@anthropic-ai/sdk': + specifier: ^0.32.1 + version: 0.32.1(encoding@0.1.13) + '@latitude-data/sdk': + specifier: workspace:^ + version: link:../../packages/sdks/typescript + '@latitude-data/telemetry-js': + specifier: workspace:^ + version: link:../../packages/telemetry + '@types/morgan': + specifier: ^1.9.9 + version: 1.9.9 + '@vercel/otel': + specifier: ^1.10.0 + version: 1.10.0(@opentelemetry/api@1.9.0)(@opentelemetry/resources@1.28.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-metrics@1.28.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.28.0(@opentelemetry/api@1.9.0)) + ai: + specifier: ^4.0.9 + version: 4.0.9(react@19.0.0-rc-5d19e1c8-20240923)(zod@3.23.8) + axios: + specifier: ^1.7.8 + version: 1.7.8 + dotenv: + specifier: ^16.4.5 + version: 16.4.5 + express: + specifier: ^4.21.1 + version: 4.21.1 + morgan: + specifier: ^1.10.0 + version: 1.10.0 + openai: + specifier: ^4.73.1 + version: 4.73.1(encoding@0.1.13)(zod@3.23.8) + devDependencies: + '@types/express': + specifier: ^4.17.21 + version: 4.17.21 + '@types/node': + specifier: ^20.17.9 + version: 20.17.9 + tsx: + specifier: ^4.19.2 + version: 4.19.2 + typescript: + specifier: ^5.7.2 + version: 5.7.2 + examples/sdks/typescript: dependencies: + '@ai-sdk/openai': + specifier: ^0.0.54 + version: 0.0.54(zod@3.23.8) + '@anthropic-ai/sdk': + specifier: ^0.32.1 + version: 0.32.1(encoding@0.1.13) '@latitude-data/sdk': specifier: workspace:^ version: link:../../../packages/sdks/typescript - '@pinecone-database/pinecone': - specifier: ^4.0.0 - version: 4.0.0 + '@latitude-data/telemetry-js': + specifier: workspace:^ + version: link:../../../packages/telemetry + '@vercel/otel': + specifier: ^1.10.0 + version: 1.10.0(@opentelemetry/api@1.9.0)(@opentelemetry/resources@1.28.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-metrics@1.28.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.28.0(@opentelemetry/api@1.9.0)) + ai: + specifier: ^4.0.3 + version: 4.0.7(react@19.0.0-rc-5d19e1c8-20240923)(zod@3.23.8) openai: specifier: ^4.68.4 version: 4.68.4(encoding@0.1.13)(zod@3.23.8) + zod: + specifier: ^3.23.8 + version: 3.23.8 packages/compiler: dependencies: @@ -658,7 +725,7 @@ importers: version: 5.7.2 vitest: specifier: ^1.2.2 - version: 1.6.0(@types/node@20.17.1)(jsdom@24.1.3)(terser@5.36.0) + version: 1.6.0(@types/node@20.17.1)(jsdom@24.1.3(canvas@2.11.2(encoding@0.1.13)))(terser@5.36.0) packages/constants: devDependencies: @@ -690,6 +757,9 @@ importers: '@ai-sdk/openai': specifier: ^0.0.54 version: 0.0.54(zod@3.23.8) + '@anthropic-ai/sdk': + specifier: ^0.32.1 + version: 0.32.1(encoding@0.1.13) '@aws-sdk/client-s3': specifier: ^3.645.0 version: 3.679.0 @@ -761,7 +831,7 @@ importers: version: 10.0.0 ai: specifier: ^3.4.7 - version: 3.4.23(openai@4.68.4(encoding@0.1.13)(zod@3.23.8))(react@18.3.1)(sswr@2.1.0(svelte@4.2.19))(svelte@4.2.19)(vue@3.5.12(typescript@5.7.2))(zod@3.23.8) + version: 3.4.23(openai@4.74.0(encoding@0.1.13)(zod@3.23.8))(react@18.3.1)(solid-js@1.9.3)(sswr@2.1.0(svelte@4.2.19))(svelte@4.2.19)(vue@3.5.12(typescript@5.7.2))(zod@3.23.8) argon2: specifier: ^0.41.0 version: 0.41.1 @@ -809,7 +879,7 @@ importers: version: 3.2.0 nodemailer-mailgun-transport: specifier: ^2.1.5 - version: 2.1.5(lodash@4.17.21)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 2.1.5(lodash@4.17.21)(nunjucks@3.2.4(chokidar@3.6.0))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(underscore@1.13.7) officeparser: specifier: ^5.1.1 version: 5.1.1 @@ -845,7 +915,7 @@ importers: version: 10.0.0 vitest: specifier: ^2.0.3 - version: 2.1.4(@types/node@22.8.1)(jsdom@24.1.3)(msw@2.5.2(@types/node@22.8.1)(typescript@5.7.2))(terser@5.36.0) + version: 2.1.4(@types/node@22.8.1)(jsdom@24.1.3(canvas@2.11.2(encoding@0.1.13)))(msw@2.5.2(@types/node@22.8.1)(typescript@5.7.2))(terser@5.36.0) vue: specifier: ^3.4.38 version: 3.5.12(typescript@5.7.2) @@ -876,6 +946,9 @@ importers: '@latitude-data/promptl': specifier: ^0.3.2 version: 0.3.2 + '@latitude-data/telemetry-js': + specifier: workspace:^ + version: link:../../telemetry '@t3-oss/env-core': specifier: ^0.10.1 version: 0.10.1(typescript@5.6.3)(zod@3.23.8) @@ -936,7 +1009,143 @@ importers: version: 6.1.1(rollup@4.24.2)(typescript@5.6.3) vitest: specifier: ^2.0.5 - version: 2.1.4(@types/node@22.8.1)(jsdom@24.1.3)(msw@2.5.2(@types/node@22.8.1)(typescript@5.6.3))(terser@5.36.0) + version: 2.1.4(@types/node@22.8.1)(jsdom@24.1.3(canvas@2.11.2(encoding@0.1.13)))(msw@2.5.2(@types/node@22.8.1)(typescript@5.6.3))(terser@5.36.0) + + packages/telemetry: + dependencies: + '@opentelemetry/api': + specifier: ^1.8.0 + version: 1.9.0 + '@opentelemetry/core': + specifier: ^1.22.0 + version: 1.27.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-exporter-base': + specifier: ^0.49.1 + version: 0.49.1(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-transformer': + specifier: ^0.49.1 + version: 0.49.1(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': + specifier: ^1.22.0 + version: 1.27.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-node': + specifier: ^0.55.0 + version: 0.55.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-base': + specifier: ^1.22.0 + version: 1.27.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-node': + specifier: ^1.22.0 + version: 1.27.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': + specifier: ^1.22.0 + version: 1.27.0 + '@traceloop/instrumentation-anthropic': + specifier: ^0.11.1 + version: 0.11.1(@opentelemetry/api@1.9.0) + '@traceloop/instrumentation-azure': + specifier: ^0.11.1 + version: 0.11.1(@opentelemetry/api@1.9.0) + '@traceloop/instrumentation-bedrock': + specifier: ^0.11.1 + version: 0.11.1(@opentelemetry/api@1.9.0) + '@traceloop/instrumentation-chromadb': + specifier: ^0.11.3 + version: 0.11.3(@opentelemetry/api@1.9.0) + '@traceloop/instrumentation-cohere': + specifier: ^0.11.1 + version: 0.11.1(@opentelemetry/api@1.9.0) + '@traceloop/instrumentation-langchain': + specifier: ^0.11.4 + version: 0.11.4(@opentelemetry/api@1.9.0) + '@traceloop/instrumentation-llamaindex': + specifier: ^0.11.1 + version: 0.11.1(@opentelemetry/api@1.9.0) + '@traceloop/instrumentation-openai': + specifier: ^0.11.3 + version: 0.11.3(@opentelemetry/api@1.9.0) + '@traceloop/instrumentation-pinecone': + specifier: ^0.11.1 + version: 0.11.1(@opentelemetry/api@1.9.0) + '@traceloop/instrumentation-qdrant': + specifier: ^0.11.1 + version: 0.11.1(@opentelemetry/api@1.9.0) + '@traceloop/instrumentation-vertexai': + specifier: ^0.11.4 + version: 0.11.4(@opentelemetry/api@1.9.0) + typescript: + specifier: ^5.5.4 + version: 5.7.2 + devDependencies: + '@anthropic-ai/sdk': + specifier: ^0.32.1 + version: 0.32.1(encoding@0.1.13) + '@aws-sdk/client-bedrock-runtime': + specifier: ^3.704.0 + version: 3.704.0 + '@azure/openai': + specifier: ^2.0.0 + version: 2.0.0 + '@google-cloud/aiplatform': + specifier: ^3.34.0 + version: 3.34.0(encoding@0.1.13) + '@google-cloud/vertexai': + specifier: ^1.9.0 + version: 1.9.0(encoding@0.1.13) + '@langchain/core': + specifier: ^0.3.19 + version: 0.3.19(openai@4.74.0(encoding@0.1.13)(zod@3.23.8)) + '@latitude-data/eslint-config': + specifier: workspace:^ + version: link:../../tools/eslint + '@latitude-data/typescript-config': + specifier: workspace:^ + version: link:../../tools/typescript + '@pinecone-database/pinecone': + specifier: ^4.0.0 + version: 4.0.0 + '@qdrant/js-client-rest': + specifier: ^1.12.0 + version: 1.12.0(typescript@5.7.2) + '@rollup/plugin-alias': + specifier: ^5.1.1 + version: 5.1.1(rollup@4.24.2) + '@rollup/plugin-replace': + specifier: ^6.0.1 + version: 6.0.1(rollup@4.24.2) + '@rollup/plugin-typescript': + specifier: ^11.1.6 + version: 11.1.6(rollup@4.24.2)(tslib@2.8.0)(typescript@5.7.2) + '@types/node': + specifier: ^22.7.5 + version: 22.8.1 + ai: + specifier: ^4.0.10 + version: 4.0.10(react@19.0.0-rc-5d19e1c8-20240923)(zod@3.23.8) + chromadb: + specifier: ^1.9.4 + version: 1.9.4(@google/generative-ai@0.21.0)(cohere-ai@7.14.0(@aws-sdk/client-sso-oidc@3.699.0(@aws-sdk/client-sts@3.699.0))(encoding@0.1.13))(encoding@0.1.13)(openai@4.74.0(encoding@0.1.13)(zod@3.23.8)) + cohere-ai: + specifier: ^7.14.0 + version: 7.14.0(@aws-sdk/client-sso-oidc@3.699.0(@aws-sdk/client-sts@3.699.0))(encoding@0.1.13) + langchain: + specifier: ^0.3.6 + version: 0.3.6(@langchain/core@0.3.19(openai@4.74.0(encoding@0.1.13)(zod@3.23.8)))(axios@1.7.8)(encoding@0.1.13)(openai@4.74.0(encoding@0.1.13)(zod@3.23.8)) + llamaindex: + specifier: ^0.8.26 + version: 0.8.26(@aws-sdk/client-sts@3.699.0)(@aws-sdk/credential-providers@3.699.0(@aws-sdk/client-sso-oidc@3.699.0(@aws-sdk/client-sts@3.699.0)))(@huggingface/transformers@3.1.0)(encoding@0.1.13)(pg@8.13.1)(socks@2.8.3)(tree-sitter@0.22.1)(typescript@5.7.2)(web-tree-sitter@0.24.4) + openai: + specifier: ^4.74.0 + version: 4.74.0(encoding@0.1.13)(zod@3.23.8) + rollup: + specifier: ^4.21.1 + version: 4.24.2 + rollup-plugin-dts: + specifier: ^6.1.1 + version: 6.1.1(rollup@4.24.2)(typescript@5.7.2) + vitest: + specifier: ^2.0.5 + version: 2.1.4(@types/node@22.8.1)(jsdom@24.1.3(canvas@2.11.2(encoding@0.1.13)))(msw@2.5.2(@types/node@22.8.1)(typescript@5.7.2))(terser@5.36.0) packages/web-ui: dependencies: @@ -1060,7 +1269,7 @@ importers: version: 2.1.1 jsdom: specifier: ^24.1.0 - version: 24.1.3 + version: 24.1.3(canvas@2.11.2(encoding@0.1.13)) lucide-react: specifier: ^0.403.0 version: 0.403.0(react@18.3.0) @@ -1099,7 +1308,7 @@ importers: version: 10.0.4(react@18.3.0) vitest: specifier: ^2.0.3 - version: 2.1.4(@types/node@22.8.1)(jsdom@24.1.3)(msw@2.5.2(@types/node@22.8.1)(typescript@5.7.2))(terser@5.36.0) + version: 2.1.4(@types/node@22.8.1)(jsdom@24.1.3(canvas@2.11.2(encoding@0.1.13)))(msw@2.5.2(@types/node@22.8.1)(typescript@5.7.2))(terser@5.36.0) zod: specifier: ^3.23.8 version: 3.23.8 @@ -1192,6 +1401,15 @@ packages: zod: optional: true + '@ai-sdk/provider-utils@2.0.2': + resolution: {integrity: sha512-IAvhKhdlXqiSmvx/D4uNlFYCl8dWT+M9K+IuEcSgnE2Aj27GWu8sDIpAf4r4Voc+wOUkOECVKQhFo8g9pozdjA==} + engines: {node: '>=18'} + peerDependencies: + zod: ^3.0.0 + peerDependenciesMeta: + zod: + optional: true + '@ai-sdk/provider@0.0.22': resolution: {integrity: sha512-smZ1/2jL/JSKnbhC6ama/PxI2D/psj+YAe0c0qpd5ComQCNFltg72VFf0rpUSFMmFuj1pCCNoBOCrvyl8HTZHQ==} engines: {node: '>=18'} @@ -1204,6 +1422,10 @@ packages: resolution: {integrity: sha512-dQkfBDs2lTYpKM8389oopPdQgIU007GQyCbuPPrV+K6MtSII3HBfE0stUIMXUb44L+LK1t6GXPP7wjSzjO6uKg==} engines: {node: '>=18'} + '@ai-sdk/provider@1.0.1': + resolution: {integrity: sha512-mV+3iNDkzUsZ0pR2jG0sVzU6xtQY5DtSCBy3JFycLp6PwjyLw/iodfL3MwdmMCRJWgs3dadcHejRnMvF9nGTBg==} + engines: {node: '>=18'} + '@ai-sdk/react@0.0.68': resolution: {integrity: sha512-dD7cm2UsPWkuWg+qKRXjF+sNLVcUzWUnV25FxvEliJP7I2ajOpq8c+/xyGlm+YodyvAB0fX+oSODOeIWi7lCKg==} engines: {node: '>=18'} @@ -1216,6 +1438,18 @@ packages: zod: optional: true + '@ai-sdk/react@1.0.3': + resolution: {integrity: sha512-Mak7qIRlbgtP4I7EFoNKRIQTlABJHhgwrN8SV2WKKdmsfWK2RwcubQWz1hp88cQ0bpF6KxxjSY1UUnS/S9oR5g==} + engines: {node: '>=18'} + peerDependencies: + react: ^18 || ^19 || ^19.0.0-rc + zod: ^3.0.0 + peerDependenciesMeta: + react: + optional: true + zod: + optional: true + '@ai-sdk/solid@0.0.53': resolution: {integrity: sha512-0yXkwTE75QKdmz40CBtAFy3sQdUnn/TNMTkTE2xfqC9YN7Ixql472TtC+3h6s4dPjRJm5bNnGJAWHwjT2PBmTw==} engines: {node: '>=18'} @@ -1243,6 +1477,15 @@ packages: zod: optional: true + '@ai-sdk/ui-utils@1.0.2': + resolution: {integrity: sha512-hHrUdeThGHu/rsGZBWQ9PjrAU9Htxgbo9MFyR5B/aWoNbBeXn1HLMY1+uMEnXL5pRPlmyVRjgIavWg7UgeNDOw==} + engines: {node: '>=18'} + peerDependencies: + zod: ^3.0.0 + peerDependenciesMeta: + zod: + optional: true + '@ai-sdk/vue@0.0.58': resolution: {integrity: sha512-8cuIekJV+jYz68Z+EDp8Df1WNiBEO1NOUGNCy+5gqIi+j382YjuhZfzC78zbzg0PndfF5JzcXhWPqmcc0loUQA==} engines: {node: '>=18'} @@ -1260,6 +1503,12 @@ packages: resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} engines: {node: '>=6.0.0'} + '@anthropic-ai/sdk@0.32.1': + resolution: {integrity: sha512-U9JwTrDvdQ9iWuABVsMLj8nJVwAyQz6QXvgLsVhryhCEPkLsbcP/MXxm+jYcAwLoV8ESbaTTjnD4kuAFa+Hyjg==} + + '@aws-crypto/crc32@3.0.0': + resolution: {integrity: sha512-IzSgsrxUcsrejQbPVilIKy16kAT52EwB6zSaI+M3xxIhKh5+aldEyvI+z6erM7TCLB2BJsFrtHjp6/4/sr+3dA==} + '@aws-crypto/crc32@5.2.0': resolution: {integrity: sha512-nLbCWqQNgUiwwtFsen1AdzAtvuLRsQS8rYgMuxCrdKf9kOssamGLuPwyTY9wyYblNr9+1XM8v6zoDTPPSIeANg==} engines: {node: '>=16.0.0'} @@ -1280,9 +1529,20 @@ packages: '@aws-crypto/supports-web-crypto@5.2.0': resolution: {integrity: sha512-iAvUotm021kM33eCdNfwIN//F77/IADDSs58i+MDaOqFrVjZo9bAal0NK7HurRuWLLpF1iLX7gbWrjHjeo+YFg==} + '@aws-crypto/util@3.0.0': + resolution: {integrity: sha512-2OJlpeJpCR48CC8r+uKVChzs9Iungj9wkZrl8Z041DWEWvyIHILYKCPNzJghKsivj+S3mLo6BVc7mBNzdxA46w==} + '@aws-crypto/util@5.2.0': resolution: {integrity: sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ==} + '@aws-sdk/client-bedrock-runtime@3.704.0': + resolution: {integrity: sha512-QVDF3r3DHbvuCdtW/Pu7ruRGKkFuG+w33U3Cft/CCEl9co4fUzz/w1D/JP5vakOswNLkuQvVPCGYz+pLVCT/Pw==} + engines: {node: '>=16.0.0'} + + '@aws-sdk/client-cognito-identity@3.699.0': + resolution: {integrity: sha512-9tFt+we6AIvj/f1+nrLHuCWcQmyfux5gcBSOy9d9+zIG56YxGEX7S9TaZnybogpVV8A0BYWml36WvIHS9QjIpA==} + engines: {node: '>=16.0.0'} + '@aws-sdk/client-ecs@3.679.0': resolution: {integrity: sha512-Ibp5DLneX2DNIWHNDd8GtNTmnLOXae/66Utrl3W0yTiX+Xoa0C5egcb//E+/nv7iSqEP8RlpECpjNyNFWbnULw==} engines: {node: '>=16.0.0'} @@ -1291,56 +1551,118 @@ packages: resolution: {integrity: sha512-P93tUbJXiDtSPgBfFpnjaijLV38hyPlE3g0XybsPTmSYNV6A9Jt1TUIF6vX+o6LdFuq3FerCiagUjhfDANWkAw==} engines: {node: '>=16.0.0'} + '@aws-sdk/client-sagemaker@3.699.0': + resolution: {integrity: sha512-qp2u49IXmxXf8zErppF/k6cx8RagEKsYrCrSoWjbpl9ULto074/JpTgxlRF7B861YMN4IvJR1bpgbZzqLgQlAw==} + engines: {node: '>=16.0.0'} + '@aws-sdk/client-sso-oidc@3.679.0': resolution: {integrity: sha512-/dBYWcCwbA/id4sFCIVZvf0UsvzHCC68SryxeNQk/PDkY9N4n5yRcMUkZDaEyQCjowc3kY4JOXp2AdUP037nhA==} engines: {node: '>=16.0.0'} peerDependencies: '@aws-sdk/client-sts': ^3.679.0 + '@aws-sdk/client-sso-oidc@3.699.0': + resolution: {integrity: sha512-u8a1GorY5D1l+4FQAf4XBUC1T10/t7neuwT21r0ymrtMFSK2a9QqVHKMoLkvavAwyhJnARSBM9/UQC797PFOFw==} + engines: {node: '>=16.0.0'} + peerDependencies: + '@aws-sdk/client-sts': ^3.699.0 + '@aws-sdk/client-sso@3.679.0': resolution: {integrity: sha512-/0cAvYnpOZTo/Y961F1kx2fhDDLUYZ0SQQ5/75gh3xVImLj7Zw+vp74ieqFbqWLYGMaq8z1Arr9A8zG95mbLdg==} engines: {node: '>=16.0.0'} + '@aws-sdk/client-sso@3.696.0': + resolution: {integrity: sha512-q5TTkd08JS0DOkHfUL853tuArf7NrPeqoS5UOvqJho8ibV9Ak/a/HO4kNvy9Nj3cib/toHYHsQIEtecUPSUUrQ==} + engines: {node: '>=16.0.0'} + '@aws-sdk/client-sts@3.679.0': resolution: {integrity: sha512-3CvrT8w1RjFu1g8vKA5Azfr5V83r2/b68Ock43WE003Bq/5Y38mwmYX7vk0fPHzC3qejt4YMAWk/C3fSKOy25g==} engines: {node: '>=16.0.0'} + '@aws-sdk/client-sts@3.699.0': + resolution: {integrity: sha512-++lsn4x2YXsZPIzFVwv3fSUVM55ZT0WRFmPeNilYIhZClxHLmVAWKH4I55cY9ry60/aTKYjzOXkWwyBKGsGvQg==} + engines: {node: '>=16.0.0'} + '@aws-sdk/core@3.679.0': resolution: {integrity: sha512-CS6PWGX8l4v/xyvX8RtXnBisdCa5+URzKd0L6GvHChype9qKUVxO/Gg6N/y43Hvg7MNWJt9FBPNWIxUB+byJwg==} engines: {node: '>=16.0.0'} + '@aws-sdk/core@3.696.0': + resolution: {integrity: sha512-3c9III1k03DgvRZWg8vhVmfIXPG6hAciN9MzQTzqGngzWAELZF/WONRTRQuDFixVtarQatmLHYVw/atGeA2Byw==} + engines: {node: '>=16.0.0'} + + '@aws-sdk/credential-provider-cognito-identity@3.699.0': + resolution: {integrity: sha512-iuaTnudaBfEET+o444sDwf71Awe6UiZfH+ipUPmswAi2jZDwdFF1nxMKDEKL8/LV5WpXsdKSfwgS0RQeupURew==} + engines: {node: '>=16.0.0'} + '@aws-sdk/credential-provider-env@3.679.0': resolution: {integrity: sha512-EdlTYbzMm3G7VUNAMxr9S1nC1qUNqhKlAxFU8E7cKsAe8Bp29CD5HAs3POc56AVo9GC4yRIS+/mtlZSmrckzUA==} engines: {node: '>=16.0.0'} + '@aws-sdk/credential-provider-env@3.696.0': + resolution: {integrity: sha512-T9iMFnJL7YTlESLpVFT3fg1Lkb1lD+oiaIC8KMpepb01gDUBIpj9+Y+pA/cgRWW0yRxmkDXNazAE2qQTVFGJzA==} + engines: {node: '>=16.0.0'} + '@aws-sdk/credential-provider-http@3.679.0': resolution: {integrity: sha512-ZoKLubW5DqqV1/2a3TSn+9sSKg0T8SsYMt1JeirnuLJF0mCoYFUaWMyvxxKuxPoqvUsaycxKru4GkpJ10ltNBw==} engines: {node: '>=16.0.0'} + '@aws-sdk/credential-provider-http@3.696.0': + resolution: {integrity: sha512-GV6EbvPi2eq1+WgY/o2RFA3P7HGmnkIzCNmhwtALFlqMroLYWKE7PSeHw66Uh1dFQeVESn0/+hiUNhu1mB0emA==} + engines: {node: '>=16.0.0'} + '@aws-sdk/credential-provider-ini@3.679.0': resolution: {integrity: sha512-Rg7t8RwUzKcumpipG4neZqaeJ6DF+Bco1+FHn5BZB68jpvwvjBjcQUuWkxj18B6ctYHr1fkunnzeKEn/+vy7+w==} engines: {node: '>=16.0.0'} peerDependencies: '@aws-sdk/client-sts': ^3.679.0 + '@aws-sdk/credential-provider-ini@3.699.0': + resolution: {integrity: sha512-dXmCqjJnKmG37Q+nLjPVu22mNkrGHY8hYoOt3Jo9R2zr5MYV7s/NHsCHr+7E+BZ+tfZYLRPeB1wkpTeHiEcdRw==} + engines: {node: '>=16.0.0'} + peerDependencies: + '@aws-sdk/client-sts': ^3.699.0 + '@aws-sdk/credential-provider-node@3.679.0': resolution: {integrity: sha512-E3lBtaqCte8tWs6Rkssc8sLzvGoJ10TLGvpkijOlz43wPd6xCRh1YLwg6zolf9fVFtEyUs/GsgymiASOyxhFtw==} engines: {node: '>=16.0.0'} + '@aws-sdk/credential-provider-node@3.699.0': + resolution: {integrity: sha512-MmEmNDo1bBtTgRmdNfdQksXu4uXe66s0p1hi1YPrn1h59Q605eq/xiWbGL6/3KdkViH6eGUuABeV2ODld86ylg==} + engines: {node: '>=16.0.0'} + '@aws-sdk/credential-provider-process@3.679.0': resolution: {integrity: sha512-u/p4TV8kQ0zJWDdZD4+vdQFTMhkDEJFws040Gm113VHa/Xo1SYOjbpvqeuFoz6VmM0bLvoOWjxB9MxnSQbwKpQ==} engines: {node: '>=16.0.0'} + '@aws-sdk/credential-provider-process@3.696.0': + resolution: {integrity: sha512-mL1RcFDe9sfmyU5K1nuFkO8UiJXXxLX4JO1gVaDIOvPqwStpUAwi3A1BoeZhWZZNQsiKI810RnYGo0E0WB/hUA==} + engines: {node: '>=16.0.0'} + '@aws-sdk/credential-provider-sso@3.679.0': resolution: {integrity: sha512-SAtWonhi9asxn0ukEbcE81jkyanKgqpsrtskvYPpO9Z9KOednM4Cqt6h1bfcS9zaHjN2zu815Gv8O7WiV+F/DQ==} engines: {node: '>=16.0.0'} + '@aws-sdk/credential-provider-sso@3.699.0': + resolution: {integrity: sha512-Ekp2cZG4pl9D8+uKWm4qO1xcm8/MeiI8f+dnlZm8aQzizeC+aXYy9GyoclSf6daK8KfRPiRfM7ZHBBL5dAfdMA==} + engines: {node: '>=16.0.0'} + '@aws-sdk/credential-provider-web-identity@3.679.0': resolution: {integrity: sha512-a74tLccVznXCaBefWPSysUcLXYJiSkeUmQGtalNgJ1vGkE36W5l/8czFiiowdWdKWz7+x6xf0w+Kjkjlj42Ung==} engines: {node: '>=16.0.0'} peerDependencies: '@aws-sdk/client-sts': ^3.679.0 + '@aws-sdk/credential-provider-web-identity@3.696.0': + resolution: {integrity: sha512-XJ/CVlWChM0VCoc259vWguFUjJDn/QwDqHwbx+K9cg3v6yrqXfK5ai+p/6lx0nQpnk4JzPVeYYxWRpaTsGC9rg==} + engines: {node: '>=16.0.0'} + peerDependencies: + '@aws-sdk/client-sts': ^3.696.0 + + '@aws-sdk/credential-providers@3.699.0': + resolution: {integrity: sha512-jBjOntl9zN9Nvb0jmbMGRbiTzemDz64ij7W6BDavxBJRZpRoNeN0QCz6RolkCyXnyUJjo5mF2unY2wnv00A+LQ==} + engines: {node: '>=16.0.0'} + '@aws-sdk/middleware-bucket-endpoint@3.679.0': resolution: {integrity: sha512-5EpiPhhGgnF+uJR4DzWUk6Lx3pOn9oM6JGXxeHsiynfoBfq7vHMleq+uABHHSQS+y7XzbyZ7x8tXNQlliMwOsg==} engines: {node: '>=16.0.0'} @@ -1357,6 +1679,10 @@ packages: resolution: {integrity: sha512-y176HuQ8JRY3hGX8rQzHDSbCl9P5Ny9l16z4xmaiLo+Qfte7ee4Yr3yaAKd7GFoJ3/Mhud2XZ37fR015MfYl2w==} engines: {node: '>=16.0.0'} + '@aws-sdk/middleware-host-header@3.696.0': + resolution: {integrity: sha512-zELJp9Ta2zkX7ELggMN9qMCgekqZhFC5V2rOr4hJDEb/Tte7gpfKSObAnw/3AYiVqt36sjHKfdkoTsuwGdEoDg==} + engines: {node: '>=16.0.0'} + '@aws-sdk/middleware-location-constraint@3.679.0': resolution: {integrity: sha512-SA1C1D3XgoKTGxyNsOqd016ONpk46xJLWDgJUd00Zb21Ox5wYCoY6aDRKiaMRW+1VfCJdezs1Do3XLyIU9KxyA==} engines: {node: '>=16.0.0'} @@ -1365,10 +1691,18 @@ packages: resolution: {integrity: sha512-0vet8InEj7nvIvGKk+ch7bEF5SyZ7Us9U7YTEgXPrBNStKeRUsgwRm0ijPWWd0a3oz2okaEwXsFl7G/vI0XiEA==} engines: {node: '>=16.0.0'} + '@aws-sdk/middleware-logger@3.696.0': + resolution: {integrity: sha512-KhkHt+8AjCxcR/5Zp3++YPJPpFQzxpr+jmONiT/Jw2yqnSngZ0Yspm5wGoRx2hS1HJbyZNuaOWEGuJoxLeBKfA==} + engines: {node: '>=16.0.0'} + '@aws-sdk/middleware-recursion-detection@3.679.0': resolution: {integrity: sha512-sQoAZFsQiW/LL3DfKMYwBoGjYDEnMbA9WslWN8xneCmBAwKo6IcSksvYs23PP8XMIoBGe2I2J9BSr654XWygTQ==} engines: {node: '>=16.0.0'} + '@aws-sdk/middleware-recursion-detection@3.696.0': + resolution: {integrity: sha512-si/maV3Z0hH7qa99f9ru2xpS5HlfSVcasRlNUXKSDm611i7jFMWwGNLUOXFAOLhXotPX5G3Z6BLwL34oDeBMug==} + engines: {node: '>=16.0.0'} + '@aws-sdk/middleware-sdk-s3@3.679.0': resolution: {integrity: sha512-4zcT193F7RkEfqlS6ZdwyNQ0UUp9s66msNXgItugasTbjf7oqfWDas7N+BG8ADB/Ql3wvRUh9I+zdrVkxxw3BQ==} engines: {node: '>=16.0.0'} @@ -1381,10 +1715,23 @@ packages: resolution: {integrity: sha512-4hdeXhPDURPqQLPd9jCpUEo9fQITXl3NM3W1MwcJpE0gdUM36uXkQOYsTPeeU/IRCLVjK8Htlh2oCaM9iJrLCA==} engines: {node: '>=16.0.0'} + '@aws-sdk/middleware-user-agent@3.696.0': + resolution: {integrity: sha512-Lvyj8CTyxrHI6GHd2YVZKIRI5Fmnugt3cpJo0VrKKEgK5zMySwEZ1n4dqPK6czYRWKd5+WnYHYAuU+Wdk6Jsjw==} + engines: {node: '>=16.0.0'} + + '@aws-sdk/protocol-http@3.374.0': + resolution: {integrity: sha512-9WpRUbINdGroV3HiZZIBoJvL2ndoWk39OfwxWs2otxByppJZNN14bg/lvCx5e8ggHUti7IBk5rb0nqQZ4m05pg==} + engines: {node: '>=14.0.0'} + deprecated: This package has moved to @smithy/protocol-http + '@aws-sdk/region-config-resolver@3.679.0': resolution: {integrity: sha512-Ybx54P8Tg6KKq5ck7uwdjiKif7n/8g1x+V0V9uTjBjRWqaIgiqzXwKWoPj6NCNkE7tJNtqI4JrNxp/3S3HvmRw==} engines: {node: '>=16.0.0'} + '@aws-sdk/region-config-resolver@3.696.0': + resolution: {integrity: sha512-7EuH142lBXjI8yH6dVS/CZeiK/WZsmb/8zP6bQbVYpMrppSTgB3MzZZdxVZGzL5r8zPQOU10wLC4kIMy0qdBVQ==} + engines: {node: '>=16.0.0'} + '@aws-sdk/s3-request-presigner@3.679.0': resolution: {integrity: sha512-ZP3f21TwEWLLBgbQUPAzmI4MxG3vAniwu1plgQnbFVK+hEhutrh58OU5xFRMZ3diEI2tPJlnQ4ZkLI14IEohXA==} engines: {node: '>=16.0.0'} @@ -1393,16 +1740,31 @@ packages: resolution: {integrity: sha512-g1D57e7YBhgXihCWIRBcTUvKquS3FS27xuA24EynY9teiTIq7vHkASxxDnMMMcmKHnCKLI5pkznjk0PuDJ4uJw==} engines: {node: '>=16.0.0'} + '@aws-sdk/signature-v4@3.374.0': + resolution: {integrity: sha512-2xLJvSdzcZZAg0lsDLUAuSQuihzK0dcxIK7WmfuJeF7DGKJFmp9czQmz5f3qiDz6IDQzvgK1M9vtJSVCslJbyQ==} + engines: {node: '>=14.0.0'} + deprecated: This package has moved to @smithy/signature-v4 + '@aws-sdk/token-providers@3.679.0': resolution: {integrity: sha512-1/+Zso/x2jqgutKixYFQEGli0FELTgah6bm7aB+m2FAWH4Hz7+iMUsazg6nSWm714sG9G3h5u42Dmpvi9X6/hA==} engines: {node: '>=16.0.0'} peerDependencies: '@aws-sdk/client-sso-oidc': ^3.679.0 + '@aws-sdk/token-providers@3.699.0': + resolution: {integrity: sha512-kuiEW9DWs7fNos/SM+y58HCPhcIzm1nEZLhe2/7/6+TvAYLuEWURYsbK48gzsxXlaJ2k/jGY3nIsA7RptbMOwA==} + engines: {node: '>=16.0.0'} + peerDependencies: + '@aws-sdk/client-sso-oidc': ^3.699.0 + '@aws-sdk/types@3.679.0': resolution: {integrity: sha512-NwVq8YvInxQdJ47+zz4fH3BRRLC6lL+WLkvr242PVBbUOLRyK/lkwHlfiKUoeVIMyK5NF+up6TRg71t/8Bny6Q==} engines: {node: '>=16.0.0'} + '@aws-sdk/types@3.696.0': + resolution: {integrity: sha512-9rTvUJIAj5d3//U5FDPWGJ1nFJLuWb30vugGOrWk7aNZ6y9tuA3PI7Cc9dP8WEXKVyK1vuuk8rSFP2iqXnlgrw==} + engines: {node: '>=16.0.0'} + '@aws-sdk/util-arn-parser@3.679.0': resolution: {integrity: sha512-CwzEbU8R8rq9bqUFryO50RFBlkfufV9UfMArHPWlo+lmsC+NlSluHQALoj6Jkq3zf5ppn1CN0c1DDLrEqdQUXg==} engines: {node: '>=16.0.0'} @@ -1411,6 +1773,10 @@ packages: resolution: {integrity: sha512-YL6s4Y/1zC45OvddvgE139fjeWSKKPgLlnfrvhVL7alNyY9n7beR4uhoDpNrt5mI6sn9qiBF17790o+xLAXjjg==} engines: {node: '>=16.0.0'} + '@aws-sdk/util-endpoints@3.696.0': + resolution: {integrity: sha512-T5s0IlBVX+gkb9g/I6CLt4yAZVzMSiGnbUqWihWsHvQR1WOoIcndQy/Oz/IJXT9T2ipoy7a80gzV6a5mglrioA==} + engines: {node: '>=16.0.0'} + '@aws-sdk/util-format-url@3.679.0': resolution: {integrity: sha512-pqV1b/hJ/kumtF8AwObJ7bsGgs/2zuAdZtalSD8Pu4jdjOji3IBwP79giAHyhVwoXaMjkpG3mG4ldn9CVtzZJA==} engines: {node: '>=16.0.0'} @@ -1422,6 +1788,9 @@ packages: '@aws-sdk/util-user-agent-browser@3.679.0': resolution: {integrity: sha512-CusSm2bTBG1kFypcsqU8COhnYc6zltobsqs3nRrvYqYaOqtMnuE46K4XTWpnzKgwDejgZGOE+WYyprtAxrPvmQ==} + '@aws-sdk/util-user-agent-browser@3.696.0': + resolution: {integrity: sha512-Z5rVNDdmPOe6ELoM5AhF/ja5tSjbe6ctSctDPb0JdDf4dT0v2MfwhJKzXju2RzX8Es/77Glh7MlaXLE0kCB9+Q==} + '@aws-sdk/util-user-agent-node@3.679.0': resolution: {integrity: sha512-Bw4uXZ+NU5ed6TNfo4tBbhBSW+2eQxXYjYBGl5gLUNUpg2pDFToQAP6rXBFiwcG52V2ny5oLGiD82SoYuYkAVg==} engines: {node: '>=16.0.0'} @@ -1431,10 +1800,78 @@ packages: aws-crt: optional: true + '@aws-sdk/util-user-agent-node@3.696.0': + resolution: {integrity: sha512-KhKqcfyXIB0SCCt+qsu4eJjsfiOrNzK5dCV7RAW2YIpp+msxGUUX0NdRE9rkzjiv+3EMktgJm3eEIS+yxtlVdQ==} + engines: {node: '>=16.0.0'} + peerDependencies: + aws-crt: '>=1.0.0' + peerDependenciesMeta: + aws-crt: + optional: true + + '@aws-sdk/util-utf8-browser@3.259.0': + resolution: {integrity: sha512-UvFa/vR+e19XookZF8RzFZBrw2EUkQWxiBW0yYQAhvk3C+QVGl0H3ouca8LDBlBfQKXwmW3huo/59H8rwb1wJw==} + '@aws-sdk/xml-builder@3.679.0': resolution: {integrity: sha512-nPmhVZb39ty5bcQ7mAwtjezBcsBqTYZ9A2D9v/lE92KCLdu5RhSkPH7O71ZqbZx1mUSg9fAOxHPiG79U5VlpLQ==} engines: {node: '>=16.0.0'} + '@azure-rest/core-client@2.3.1': + resolution: {integrity: sha512-sGTdh2Ln95F/Jqikr9OybQvx00EVvljwgxjfcxTqjID0PBVGDuNR0ie9e9HsTA1vJT23BlVRd/dCIGzJriYw9g==} + engines: {node: '>=18.0.0'} + + '@azure/abort-controller@2.1.2': + resolution: {integrity: sha512-nBrLsEWm4J2u5LpAPjxADTlq3trDgVZZXHNKabeXZtpq3d3AbN/KGO82R87rdDz5/lYB024rtEf10/q0urNgsA==} + engines: {node: '>=18.0.0'} + + '@azure/core-auth@1.9.0': + resolution: {integrity: sha512-FPwHpZywuyasDSLMqJ6fhbOK3TqUdviZNF8OqRGA4W5Ewib2lEEZ+pBsYcBa88B2NGO/SEnYPGhyBqNlE8ilSw==} + engines: {node: '>=18.0.0'} + + '@azure/core-client@1.9.2': + resolution: {integrity: sha512-kRdry/rav3fUKHl/aDLd/pDLcB+4pOFwPPTVEExuMyaI5r+JBbMWqRbCY1pn5BniDaU3lRxO9eaQ1AmSMehl/w==} + engines: {node: '>=18.0.0'} + + '@azure/core-rest-pipeline@1.18.1': + resolution: {integrity: sha512-/wS73UEDrxroUEVywEm7J0p2c+IIiVxyfigCGfsKvCxxCET4V/Hef2aURqltrXMRjNmdmt5IuOgIpl8f6xdO5A==} + engines: {node: '>=18.0.0'} + + '@azure/core-tracing@1.2.0': + resolution: {integrity: sha512-UKTiEJPkWcESPYJz3X5uKRYyOcJD+4nYph+KpfdPRnQJVrZfk0KJgdnaAWKfhsBBtAf/D58Az4AvCJEmWgIBAg==} + engines: {node: '>=18.0.0'} + + '@azure/core-util@1.11.0': + resolution: {integrity: sha512-DxOSLua+NdpWoSqULhjDyAZTXFdP/LKkqtYuxxz1SCN289zk3OG8UOpnCQAz/tygyACBtWp/BoO72ptK7msY8g==} + engines: {node: '>=18.0.0'} + + '@azure/cosmos@4.2.0': + resolution: {integrity: sha512-acfAQTYLxgB/iZK7XvTVYe9NPk6DECEgcIXDQhyn7Uo4dGxeeW5D3YqLjLJrrzND5Iawer3eUQ5/iiLWvTGAxQ==} + engines: {node: '>=18.0.0'} + + '@azure/identity@4.5.0': + resolution: {integrity: sha512-EknvVmtBuSIic47xkOqyNabAme0RYTw52BTMz8eBgU1ysTyMrD1uOoM+JdS0J/4Yfp98IBT3osqq3BfwSaNaGQ==} + engines: {node: '>=18.0.0'} + + '@azure/logger@1.1.4': + resolution: {integrity: sha512-4IXXzcCdLdlXuCG+8UKEwLA1T1NHqUfanhXYHiQTn+6sfWCZXduqbtXDGceg3Ce5QxTGo7EqmbV6Bi+aqKuClQ==} + engines: {node: '>=18.0.0'} + + '@azure/msal-browser@3.27.0': + resolution: {integrity: sha512-+b4ZKSD8+vslCtVRVetkegEhOFMLP3rxDWJY212ct+2r6jVg6OSQKc1Qz3kCoXo0FgwaXkb+76TMZfpHp8QtgA==} + engines: {node: '>=0.8.0'} + + '@azure/msal-common@14.16.0': + resolution: {integrity: sha512-1KOZj9IpcDSwpNiQNjt0jDYZpQvNZay7QAEi/5DLubay40iGYtLzya/jbjRPLyOTZhEKyL1MzPuw2HqBCjceYA==} + engines: {node: '>=0.8.0'} + + '@azure/msal-node@2.16.2': + resolution: {integrity: sha512-An7l1hEr0w1HMMh1LU+rtDtqL7/jw74ORlc9Wnh06v7TU/xpG39/Zdr1ZJu3QpjUfKJ+E0/OXMW8DRSWTlh7qQ==} + engines: {node: '>=16'} + + '@azure/openai@2.0.0': + resolution: {integrity: sha512-zSNhwarYbqg3P048uKMjEjbge41OnAgmiiE1elCHVsuCCXRyz2BXnHMJkW6WR6ZKQy5NHswJNUNSWsuqancqFA==} + engines: {node: '>=18.0.0'} + '@babel/code-frame@7.26.0': resolution: {integrity: sha512-INCKxTtbXtcNbUZ3YXutwMpEleqttcswhAdee7dhuoVrD2cnuc3PqtERBtxkX5nziX9vnBL8WXmSGwv8CuPV6g==} engines: {node: '>=6.9.0'} @@ -1527,10 +1964,37 @@ packages: '@bundled-es-modules/tough-cookie@0.1.6': resolution: {integrity: sha512-dvMHbL464C0zI+Yqxbz6kZ5TOEp7GLW+pry/RWndAR8MJQAXZ2rPmIs8tziTZjeIyhSNZgZbCePtfSbdWqStJw==} + '@colors/colors@1.6.0': + resolution: {integrity: sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA==} + engines: {node: '>=0.1.90'} + '@cspotcode/source-map-support@0.8.1': resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} engines: {node: '>=12'} + '@dabh/diagnostics@2.0.3': + resolution: {integrity: sha512-hrlQOIi7hAfzsMqlGSFyVucrx38O+j6wiGOf//H2ecvIEqYN4ADBSS2iLMh5UFyDunCNniUIPk/q3riFv45xRA==} + + '@datastax/astra-db-ts@1.5.0': + resolution: {integrity: sha512-Z9pEVyyHfglh8XAKrIASxdvORdei4pLUKDDGarqYvBkA9B9rKdqqdN+4I42Dz8paU5uscu8FwM5mc+Ly/U6jfA==} + engines: {node: '>=14.0.0'} + + '@discordjs/collection@2.1.1': + resolution: {integrity: sha512-LiSusze9Tc7qF03sLCujF5iZp7K+vRNEDBZ86FT9aQAv3vxMLihUvKvpsCWiQ2DJq1tVckopKm1rxomgNUc9hg==} + engines: {node: '>=18'} + + '@discordjs/rest@2.4.0': + resolution: {integrity: sha512-Xb2irDqNcq+O8F0/k/NaDp7+t091p+acb51iA4bCKfIn+WFWd6HrNvcsSbMMxIR9NjcMZS6NReTKygqiQN+ntw==} + engines: {node: '>=18'} + + '@discordjs/util@1.1.1': + resolution: {integrity: sha512-eddz6UnOBEB1oITPinyrB2Pttej49M9FZQY8NxgEvc3tq6ZICZ19m70RsmzRdDHk80O9NoYN/25AqJl8vPVf/g==} + engines: {node: '>=18'} + + '@discoveryjs/json-ext@0.6.3': + resolution: {integrity: sha512-4B4OijXeVNOPZlYA2oEwWOTkzyltLao+xbotHQeqN++Rv27Y6s818+n2Qkp8q+Fxhn0t/5lA5X1Mxktud8eayQ==} + engines: {node: '>=14.17.0'} + '@emnapi/core@0.45.0': resolution: {integrity: sha512-DPWjcUDQkCeEM4VnljEOEcXdAD7pp8zSZsgOujk/LGIwCXWbXJngin+MO4zbH429lzeC3WbYLGjE2MaUOwzpyw==} @@ -2404,6 +2868,10 @@ packages: resolution: {integrity: sha512-XQ3cU+Q8Uqmrbf2e0cIC/QN43sTBSC8KF12u29Mb47tWrt2hAgBXSgpZMj4Ao8Uk0iJcU99QsOCaIL8934obCg==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0, npm: '>=6.14.13'} + '@fastify/busboy@2.1.1': + resolution: {integrity: sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==} + engines: {node: '>=14'} + '@floating-ui/core@1.6.8': resolution: {integrity: sha512-7XJ9cPU+yI2QeLS+FCSlqNFZJq8arvswefkZrYI1yQBbftw6FyrZOxYSh+9S7z7TpeWlRt9zJ5IhM1WIL334jA==} @@ -2419,6 +2887,23 @@ packages: '@floating-ui/utils@0.2.8': resolution: {integrity: sha512-kym7SodPp8/wloecOpcmSnWJsK7M0E5Wg8UcFA+uO4B9s5d0ywXOEro/8HM9x0rW+TljRzul/14UYz3TleT3ig==} + '@google-cloud/aiplatform@3.34.0': + resolution: {integrity: sha512-Ii1CXJ59g5hcVYNZOx08XBV5nq0JIOSo2I9uC/WYkdXWekc3XSV9emRz8pKOQSULzrTOTnD80N4re49S07xfyQ==} + engines: {node: '>=14.0.0'} + + '@google-cloud/vertexai@1.9.0': + resolution: {integrity: sha512-8brlcJwFXI4fPuBtsDNQqCdWZmz8gV9jeEKOU0vc5H2SjehCQpXK/NwuSEr916zbhlBHtg/sU37qQQdgvh5BRA==} + engines: {node: '>=18.0.0'} + + '@google/generative-ai@0.21.0': + resolution: {integrity: sha512-7XhUbtnlkSEZK15kN3t+tzIMxsbKm/dSkKBFalj+20NvPKe1kBY7mR2P7vuijEn+f06z5+A8bVGKO0v39cr6Wg==} + engines: {node: '>=18.0.0'} + + '@graphql-typed-document-node/core@3.2.0': + resolution: {integrity: sha512-mB9oAsNCm9aM3/SOv4YtBMqZbYj10R7dkq8byBqxGY/ncFwhf2oQzMV+LCRlWoDSEBJ3COiR1yeDvMtsoOsuFQ==} + peerDependencies: + graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + '@grpc/grpc-js@1.12.2': resolution: {integrity: sha512-bgxdZmgTrJZX50OjyVwz3+mNEnCTNkh3cIqGPWVNeW9jX6bn1ZkU80uPd+67/ZpIJIjRQ9qaHCjhavyoWYxumg==} engines: {node: '>=12.10.0'} @@ -2440,6 +2925,24 @@ packages: hono: '>=3.9.0' zod: ^3.19.1 + '@huggingface/inference@2.8.1': + resolution: {integrity: sha512-EfsNtY9OR6JCNaUa5bZu2mrs48iqeTz0Gutwf+fU0Kypx33xFQB4DKMhp8u4Ee6qVbLbNWvTHuWwlppLQl4p4Q==} + engines: {node: '>=18'} + + '@huggingface/jinja@0.1.3': + resolution: {integrity: sha512-9KsiorsdIK8+7VmlamAT7Uh90zxAhC/SeKaKc80v58JhtPYuwaJpmR/ST7XAUxrHAFqHTCoTH5aJnJDwSL6xIQ==} + engines: {node: '>=18'} + + '@huggingface/jinja@0.3.2': + resolution: {integrity: sha512-F2FvuIc+w1blGsaqJI/OErRbWH6bVJDCBI8Rm5D86yZ2wlwrGERsfIaru7XUv9eYC3DMP3ixDRRtF0h6d8AZcQ==} + engines: {node: '>=18'} + + '@huggingface/tasks@0.12.30': + resolution: {integrity: sha512-A1ITdxbEzx9L8wKR8pF7swyrTLxWNDFIGDLUWInxvks2ruQ8PLRBZe8r0EcjC3CDdtlj9jV1V4cgV35K/iy3GQ==} + + '@huggingface/transformers@3.1.0': + resolution: {integrity: sha512-NeaZk/KBBrvy8v8gvRBE5bficnn1a9cKJDJlgr9jv+fcEiqsgqt5Mh7LKKuLxeO/bFtLppFceJVwM9gbUQyLnA==} + '@humanwhocodes/config-array@0.13.0': resolution: {integrity: sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==} engines: {node: '>=10.10.0'} @@ -2601,6 +3104,10 @@ packages: resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} engines: {node: '>=12'} + '@isaacs/fs-minipass@4.0.1': + resolution: {integrity: sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==} + engines: {node: '>=18.0.0'} + '@isaacs/string-locale-compare@1.1.0': resolution: {integrity: sha512-SQ7Kzhh9+D+ZW9MA0zkYv3VXhIDNx+LzM6EJ+/65I3QY+enU6Itte7E5XX7EWrqLW2FN4n06GWzBnPoC3th2aQ==} @@ -2635,26 +3142,124 @@ packages: '@js-sdsl/ordered-map@4.4.2': resolution: {integrity: sha512-iUKgm52T8HOE/makSxjqoWhe95ZJA1/G1sYsGev2JDKUSS14KAgg1LHb+Ba+IPow0xflbnSkOsZcO08C7w1gYw==} + '@langchain/core@0.3.19': + resolution: {integrity: sha512-pJVOAHShefu1SRO8uhzUs0Pexah/Ib66WETLMScIC2w9vXlpwQy3DzXJPJ5X7ixry9N666jYO5cHtM2Z1DnQIQ==} + engines: {node: '>=18'} + + '@langchain/openai@0.3.14': + resolution: {integrity: sha512-lNWjUo1tbvsss45IF7UQtMu1NJ6oUKvhgPYWXnX9f/d6OmuLu7D99HQ3Y88vLcUo9XjjOy417olYHignMduMjA==} + engines: {node: '>=18'} + peerDependencies: + '@langchain/core': '>=0.2.26 <0.4.0' + + '@langchain/textsplitters@0.1.0': + resolution: {integrity: sha512-djI4uw9rlkAb5iMhtLED+xJebDdAG935AdP4eRTB02R7OB/act55Bj9wsskhZsvuyQRpO4O1wQOp85s6T6GWmw==} + engines: {node: '>=18'} + peerDependencies: + '@langchain/core': '>=0.2.21 <0.4.0' + '@latitude-data/promptl@0.3.2': resolution: {integrity: sha512-yk6PCCsf8Nwf81gIwIMupF5bbZWdwN9txWEjHSGpd8P1r/A+YblmyM/fIwG9h9RnSFT/stjtfAjb+TNMLqBGmQ==} '@leichtgewicht/ip-codec@2.0.5': resolution: {integrity: sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==} - '@logdna/tail-file@2.2.0': - resolution: {integrity: sha512-XGSsWDweP80Fks16lwkAUIr54ICyBs6PsI4mpfTLQaWgEJRtY9xEV+PeyDpJ+sJEGZxqINlpmAwe/6tS1pP8Ng==} - engines: {node: '>=10.3.0'} + '@llamaindex/anthropic@0.0.26': + resolution: {integrity: sha512-TdQIP6HE1IDJKuwS4c8erJ2B+EW9XS+xnf9O/Yt5iHvz0QHPM2aIxMDOQ6XiI1QT/lfpBZNraqUs5r5L0is0Nw==} - '@lucia-auth/adapter-drizzle@1.1.0': - resolution: {integrity: sha512-iCTnZWvfI5lLZOdUHZYiXA1jaspIFEeo2extLxQ3DjP3uOVys7IPwBi7zezLIRu9dhro4H4Kji+7gSYyjcef2A==} + '@llamaindex/clip@0.0.26': + resolution: {integrity: sha512-6NnDLEqmGQ+gmdd90hlOd6IkAk0Y8f+8ajlMwt7PmtpQAwX4lefl3Twf8XCQXRtYBwz1toYhCWDujnDrPvY3JQ==} peerDependencies: - drizzle-orm: '>= 0.29 <1' - lucia: 3.x + '@huggingface/transformers': ^3.0.2 - '@lukeed/ms@2.0.2': - resolution: {integrity: sha512-9I2Zn6+NJLfaGoz9jN3lpwDgAYvfGeNYdbAIjJOqzs4Tpc+VU3Jqq4IofSUBKajiDS8k9fZIg18/z13mpk1bsA==} + '@llamaindex/cloud@2.0.17': + resolution: {integrity: sha512-ey1U+YGIhMJksXf2aKk2i48XgHRu4DSlYZCQ+upYUMsD5GioJgWXwhq8WK45Tw21JphiJuD2rHBv122msWELEw==} + peerDependencies: + '@llamaindex/core': 0.4.17 + '@llamaindex/env': 0.1.24 + + '@llamaindex/core@0.4.17': + resolution: {integrity: sha512-dNRak/CYjglVAP0uUr4MpB9ZX9wTCFr/TUHTjIOu1M+n+jSaUUAjx5nsk/Z5jYt3Omuf+d1EVffl2yHDqUU3VQ==} + + '@llamaindex/deepinfra@0.0.26': + resolution: {integrity: sha512-ib35Qpy2EPMuMQDtr9VrvIbDR8Sgt/Vs/OVehy3IFmpxrSZGXfrv3NlDQMhMU8afSl3dsi+sgRNOj79+talg/g==} + + '@llamaindex/env@0.1.24': + resolution: {integrity: sha512-4/Xw9E1p7wSEevep3parEoAQfxWSV/n1/leabLZofonjm7Rgdi7MYrBh9nkUioNERGMiacjRnGUEau/NvFe7EA==} + peerDependencies: + '@aws-crypto/sha256-js': ^5.2.0 + '@huggingface/transformers': ^3.0.2 + gpt-tokenizer: ^2.5.0 + js-tiktoken: ^1.0.12 + pathe: ^1.1.2 + tiktoken: '*' + peerDependenciesMeta: + '@aws-crypto/sha256-js': + optional: true + '@huggingface/transformers': + optional: true + js-tiktoken: + optional: true + pathe: + optional: true + tiktoken: + optional: true + + '@llamaindex/groq@0.0.41': + resolution: {integrity: sha512-rscyZ8ekMi1vXBZjATeJPW5nhzMUlPkUYomdWJmT8XEWZTuyuuDhbuGkBfh0ENzIXydJt9BmcAm1grxxncX2IA==} + + '@llamaindex/huggingface@0.0.26': + resolution: {integrity: sha512-ST+aLXgrozLRxcgiF2dkOIwqBob7rs49aApHB6zyqBKpziG8DFY/uPCcfP18HAKaf5PS9B0luDQ5VO4luCEm6Q==} + peerDependencies: + '@huggingface/transformers': ^3.0.2 + + '@llamaindex/node-parser@0.0.18': + resolution: {integrity: sha512-5Piz+z07v1yaDnUZ2O+VslPec/O+4H2A+MndJcQvxFk0Yo9bjRPEYGXrcdNB5Nf3/f2uDyMIWPaVBLjDzcQR7g==} + peerDependencies: + '@llamaindex/core': 0.4.17 + '@llamaindex/env': 0.1.24 + tree-sitter: ^0.22.0 + web-tree-sitter: ^0.24.3 + + '@llamaindex/ollama@0.0.33': + resolution: {integrity: sha512-ygrfaEvHi5DkKCkMh8b+/Lt8d2/+EeVykZBQv7HvVpULSys4GkCEeuxmDZ5uY1tqov/C3S5+ixmTbbqeHAvTSw==} + + '@llamaindex/openai@0.1.42': + resolution: {integrity: sha512-eH1vi1fAJQsm7qZQ/VuOko5jXM2BJpxIDuc+/EJxfCWA1NHbkEopS+6N2niRzSoNSMQLiga1QiTd2IdQqcp4BA==} + + '@llamaindex/portkey-ai@0.0.26': + resolution: {integrity: sha512-vJJEtOadyI0+oASaSIKup5dSX16XTFEw22rUItQ/uTJpTwtAuG1fgUUV7BmpPXrVQXu0Sf3KPy3ukV67zNsBMA==} + + '@llamaindex/readers@1.0.19': + resolution: {integrity: sha512-OW3kEC2+bOqFexh1NYvo7Gc/fTFo4WO1a8fZt5rs7KZAHvd1CgXO6thEeBZOQhUwj/IW+8MURSsQlQ4uvsrj9w==} + peerDependencies: + '@llamaindex/core': 0.4.17 + '@llamaindex/env': 0.1.24 + + '@llamaindex/replicate@0.0.26': + resolution: {integrity: sha512-96S3yH1zfQ5IhgcGweK8YabE7Z5EkATGDoLof5go/HQIx7egra2FoC3iqAfrd56z62ffGbN2ScZqn76idvxn4A==} + + '@llamaindex/vllm@0.0.12': + resolution: {integrity: sha512-KU6MqMFzaRsk7sey4s4TqO+aIt5VsHWXLlQQnPhbBKr3BZltbUHoqePlk642yb/7ahSv9xMB3LPc7U3bLXWT2g==} + + '@logdna/tail-file@2.2.0': + resolution: {integrity: sha512-XGSsWDweP80Fks16lwkAUIr54ICyBs6PsI4mpfTLQaWgEJRtY9xEV+PeyDpJ+sJEGZxqINlpmAwe/6tS1pP8Ng==} + engines: {node: '>=10.3.0'} + + '@lucia-auth/adapter-drizzle@1.1.0': + resolution: {integrity: sha512-iCTnZWvfI5lLZOdUHZYiXA1jaspIFEeo2extLxQ3DjP3uOVys7IPwBi7zezLIRu9dhro4H4Kji+7gSYyjcef2A==} + peerDependencies: + drizzle-orm: '>= 0.29 <1' + lucia: 3.x + + '@lukeed/ms@2.0.2': + resolution: {integrity: sha512-9I2Zn6+NJLfaGoz9jN3lpwDgAYvfGeNYdbAIjJOqzs4Tpc+VU3Jqq4IofSUBKajiDS8k9fZIg18/z13mpk1bsA==} engines: {node: '>=8'} + '@mapbox/node-pre-gyp@1.0.11': + resolution: {integrity: sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==} + hasBin: true + '@mdx-js/mdx@2.3.0': resolution: {integrity: sha512-jLuwRlz8DQfQNiUCJR50Y09CGPq3fLtmtUQfVrj79E0JWu3dvsVcxVIcfhR5h0iXu+/z++zDrYeiJqifRynJkA==} @@ -2710,6 +3315,14 @@ packages: '@mintlify/validation@0.1.208': resolution: {integrity: sha512-NGQrnxidvszGLL0oatLHo1RGwqPgW73roXNX0dUGjVRRNork4gBIADECO831UpPh0RJgj+ecJT8kWEpluU0GJQ==} + '@mistralai/mistralai@1.3.4': + resolution: {integrity: sha512-db5UhCXqH0N05XbXMR/2bSiGKIFUzS6p0sI9Nl2XDmJuDZIm+WRGTlsq60ALwhvKpHcQKzN5L58HIneksRrn9g==} + peerDependencies: + zod: '>= 3' + + '@mixedbread-ai/sdk@2.2.11': + resolution: {integrity: sha512-NJiY6BVPR+s/DTzUPQS1Pv418trOmII/8hftmIqxXlYaKbIrgJimQfwCW9M6Y21YPcMA8zTQGYZHm4IWlMjIQw==} + '@monaco-editor/loader@1.4.0': resolution: {integrity: sha512-00ioBig0x642hytVspPl7DbQyaSWRaolYie/UFNjoTdvoKPzo6xrXLhTk9ixgIKcLH5b5vDOjVNiGyY+uDCUlg==} peerDependencies: @@ -2722,6 +3335,9 @@ packages: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + '@mongodb-js/saslprep@1.1.9': + resolution: {integrity: sha512-tVkljjeEaAhCqTzajSdgbQ6gE6f3oneVwa3iXR6csiEwXXOFsiC6Uh9iAjAhXPtqa/XMDHWjjeNH/77m/Yq2dw==} + '@msgpackr-extract/msgpackr-extract-darwin-arm64@3.0.3': resolution: {integrity: sha512-QZHtlVgbAdy2zAqNA9Gu1UpIuI8Xvsd1v8ic6B2pZmeFnFcMWiPLfWXh7TVw4eGEZ/C9TH281KwhVoeQUKbyjw==} cpu: [arm64] @@ -3124,6 +3740,10 @@ packages: resolution: {integrity: sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA==} engines: {node: '>=12.4.0'} + '@notionhq/client@2.2.15': + resolution: {integrity: sha512-XhdSY/4B1D34tSco/GION+23GMjaS9S2zszcqYkMHo8RcWInymF6L1x+Gk7EmHdrSxNFva2WM8orhC4BwQCwgw==} + engines: {node: '>=12'} + '@npmcli/agent@2.2.2': resolution: {integrity: sha512-OrcNPXdpSl9UX7qPVRWbmWMCSXrcDa2M9DvrbOTj7ao1S4PlqVFYv9/yLKMkrJKZ/V5A/kDBC690or307i26Og==} engines: {node: ^16.14.0 || >=18.0.0} @@ -3251,6 +3871,10 @@ packages: '@open-draft/until@2.1.0': resolution: {integrity: sha512-U69T3ItWHvLwGg5eJ0n3I62nWuE6ilHlmz7zM0npLBRvPRd7e6NYmg54vvRtP5mZG7kZqZCFVdsTWo7BPtBujg==} + '@opentelemetry/api-logs@0.49.1': + resolution: {integrity: sha512-kaNl/T7WzyMUQHQlVq7q0oV4Kev6+0xFwqzofryC66jgGMacd0QH5TwfpbUwSTby+SdAdprAe5UKMvBw4tKS5Q==} + engines: {node: '>=14'} + '@opentelemetry/api-logs@0.52.1': resolution: {integrity: sha512-qnSqB2DQ9TPP96dl8cDubDvrUyWc0/sK81xHTK8eSUspzDM3bsewX903qclQFvVhgStjRWdC5bLb3kQqMkfV5A==} engines: {node: '>=14'} @@ -3259,6 +3883,10 @@ packages: resolution: {integrity: sha512-8HArjKx+RaAI8uEIgcORbZIPklyh1YLjPSBus8hjRmvLi6DeFzgOcdZ7KwPabKj8mXF8dX0hyfAyGfycz0DbFw==} engines: {node: '>=14'} + '@opentelemetry/api-logs@0.55.0': + resolution: {integrity: sha512-3cpa+qI45VHYcA5c0bHM6VHo9gicv3p5mlLHNG3rLyjQU8b7e0st1rWtrUn3JbZ3DwwCfhKop4eQ9UuYlC6Pkg==} + engines: {node: '>=14'} + '@opentelemetry/api@1.9.0': resolution: {integrity: sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==} engines: {node: '>=8.0.0'} @@ -3269,6 +3897,18 @@ packages: peerDependencies: '@opentelemetry/api': '>=1.0.0 <1.10.0' + '@opentelemetry/context-async-hooks@1.28.0': + resolution: {integrity: sha512-igcl4Ve+F1N2063PJUkesk/GkYyuGIWinYkSyAFTnIj3gzrOgvOA4k747XNdL47HRRL1w/qh7UW8NDuxOLvKFA==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.10.0' + + '@opentelemetry/core@1.22.0': + resolution: {integrity: sha512-0VoAlT6x+Xzik1v9goJ3pZ2ppi6+xd3aUfg4brfrLkDBHRIVjMP0eBHrKrhB+NKcDyMAg8fAbGL3Npg/F6AwWA==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.9.0' + '@opentelemetry/core@1.26.0': resolution: {integrity: sha512-1iKxXXE8415Cdv0yjG3G6hQnB5eVEsJce3QaawX8SjDn0mAS0ZM8fAbZZJD4ajvhC15cePvosSCut404KrIIvQ==} engines: {node: '>=14'} @@ -3281,12 +3921,60 @@ packages: peerDependencies: '@opentelemetry/api': '>=1.0.0 <1.10.0' + '@opentelemetry/core@1.28.0': + resolution: {integrity: sha512-ZLwRMV+fNDpVmF2WYUdBHlq0eOWtEaUJSusrzjGnBt7iSRvfjFE3RXYUZJrqou/wIDWV0DwQ5KIfYe9WXg9Xqw==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.10.0' + + '@opentelemetry/exporter-logs-otlp-grpc@0.55.0': + resolution: {integrity: sha512-ykqawCL0ILJWyCJlxCPSAlqQXZ6x2bQsxAVUu8S3z22XNqY5SMx0rl2d93XnvnrOwtcfm+sM9ZhbGh/i5AZ9xw==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/exporter-logs-otlp-http@0.55.0': + resolution: {integrity: sha512-fpFObWWq+DoLVrBU2dyMEaVkibByEkmKQZIUIjW/4j7lwIsTgW7aJCoD9RYFVB/tButcqov5Es2C0J2wTjM2tg==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/exporter-logs-otlp-proto@0.55.0': + resolution: {integrity: sha512-vjE+DxUr+cUpxikdKCPiLZM5Wx7g1bywjCG76TQocvsA7Tmbb9p0t1+8gPlu9AGH7VEzPwDxxpN4p1ajpOurzQ==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/exporter-trace-otlp-grpc@0.55.0': + resolution: {integrity: sha512-ohIkCLn2Wc3vhhFuf1bH8kOXHMEdcWiD847x7f3Qfygc+CGiatGLzQYscTcEYsWGMV22gVwB/kVcNcx5a3o8gA==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/exporter-trace-otlp-http@0.55.0': + resolution: {integrity: sha512-lMiNic63EVHpW+eChmLD2CieDmwQBFi72+LFbh8+5hY0ShrDGrsGP/zuT5MRh7M/vM/UZYO/2A/FYd7CMQGR7A==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/exporter-trace-otlp-proto@0.55.0': + resolution: {integrity: sha512-qxiJFP+bBZW3+goHCGkE1ZdW9gJU0fR7eQ6OP+Rz5oGtEBbq4nkGodhb7C9FJlEFlE2siPtCxoeupV0gtYynag==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + '@opentelemetry/exporter-zipkin@1.27.0': resolution: {integrity: sha512-eGMY3s4QprspFZojqsuQyQpWNFpo+oNVE/aosTbtvAlrJBAlvXcwwsOROOHOd8Y9lkU4i0FpQW482rcXkgwCSw==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': ^1.0.0 + '@opentelemetry/exporter-zipkin@1.28.0': + resolution: {integrity: sha512-AMwr3eGXaPEH7gk8yhcUcen31VXy1yU5VJETu0pCfGpggGCYmhm0FKgYBpL5/vlIgQJWU/sW2vIjCL7aSilpKg==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.0.0 + '@opentelemetry/instrumentation-amqplib@0.42.0': resolution: {integrity: sha512-fiuU6OKsqHJiydHWgTRQ7MnIrJ2lEqsdgFtNIH4LbAUJl/5XmrIeoDzDnox+hfkgWK65jsleFuQDtYb5hW1koQ==} engines: {node: '>=14'} @@ -3437,46 +4125,159 @@ packages: peerDependencies: '@opentelemetry/api': ^1.3.0 + '@opentelemetry/instrumentation@0.55.0': + resolution: {integrity: sha512-YDCMlaQRZkziLL3t6TONRgmmGxDx6MyQDXRD0dknkkgUZtOK5+8MWft1OXzmNu6XfBOdT12MKN5rz+jHUkafKQ==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/otlp-exporter-base@0.49.1': + resolution: {integrity: sha512-z6sHliPqDgJU45kQatAettY9/eVF58qVPaTuejw9YWfSRqid9pXPYeegDCSdyS47KAUgAtm+nC28K3pfF27HWg==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.0.0 + + '@opentelemetry/otlp-exporter-base@0.55.0': + resolution: {integrity: sha512-iHQI0Zzq3h1T6xUJTVFwmFl5Dt5y1es+fl4kM+k5T/3YvmVyeYkSiF+wHCg6oKrlUAJfk+t55kaAu3sYmt7ZYA==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/otlp-grpc-exporter-base@0.55.0': + resolution: {integrity: sha512-gebbjl9FiSp52igWXuGjcWQKfB6IBwFGt5z1VFwTcVZVeEZevB6bJIqoFrhH4A02m7OUlpJ7l4EfRi3UtkNANQ==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/otlp-transformer@0.49.1': + resolution: {integrity: sha512-Z+koA4wp9L9e3jkFacyXTGphSWTbOKjwwXMpb0CxNb0kjTHGUxhYRN8GnkLFsFo5NbZPjP07hwAqeEG/uCratQ==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': '>=1.3.0 <1.9.0' + + '@opentelemetry/otlp-transformer@0.55.0': + resolution: {integrity: sha512-kVqEfxtp6mSN2Dhpy0REo1ghP4PYhC1kMHQJ2qVlO99Pc+aigELjZDfg7/YKmL71gR6wVGIeJfiql/eXL7sQPA==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + '@opentelemetry/propagator-b3@1.27.0': resolution: {integrity: sha512-pTsko3gnMioe3FeWcwTQR3omo5C35tYsKKwjgTCTVCgd3EOWL9BZrMfgLBmszrwXABDfUrlAEFN/0W0FfQGynQ==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': '>=1.0.0 <1.10.0' + '@opentelemetry/propagator-b3@1.28.0': + resolution: {integrity: sha512-Q7HVDIMwhN5RxL4bECMT4BdbyYSAKkC6U/RGn4NpO/cbqP6ZRg+BS7fPo/pGZi2w8AHfpIGQFXQmE8d2PC5xxQ==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.10.0' + '@opentelemetry/propagator-jaeger@1.27.0': resolution: {integrity: sha512-EI1bbK0wn0yIuKlc2Qv2LKBRw6LiUWevrjCF80fn/rlaB+7StAi8Y5s8DBqAYNpY7v1q86+NjU18v7hj2ejU3A==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': '>=1.0.0 <1.10.0' + '@opentelemetry/propagator-jaeger@1.28.0': + resolution: {integrity: sha512-wKJ94+s8467CnIRgoSRh0yXm/te0QMOwTq9J01PfG/RzYZvlvN8aRisN2oZ9SznB45dDGnMj3BhUlchSA9cEKA==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.10.0' + '@opentelemetry/redis-common@0.36.2': resolution: {integrity: sha512-faYX1N0gpLhej/6nyp6bgRjzAKXn5GOEMYY7YhciSfCoITAktLUtQ36d24QEWNA1/WA1y6qQunCe0OhHRkVl9g==} engines: {node: '>=14'} + '@opentelemetry/resources@1.22.0': + resolution: {integrity: sha512-+vNeIFPH2hfcNL0AJk/ykJXoUCtR1YaDUZM+p3wZNU4Hq98gzq+7b43xbkXjadD9VhWIUQqEwXyY64q6msPj6A==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.9.0' + '@opentelemetry/resources@1.27.0': resolution: {integrity: sha512-jOwt2VJ/lUD5BLc+PMNymDrUCpm5PKi1E9oSVYAvz01U/VdndGmrtV3DU1pG4AwlYhJRHbHfOUIlpBeXCPw6QQ==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': '>=1.0.0 <1.10.0' + '@opentelemetry/resources@1.28.0': + resolution: {integrity: sha512-cIyXSVJjGeTICENN40YSvLDAq4Y2502hGK3iN7tfdynQLKWb3XWZQEkPc+eSx47kiy11YeFAlYkEfXwR1w8kfw==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.10.0' + + '@opentelemetry/sdk-logs@0.49.1': + resolution: {integrity: sha512-gCzYWsJE0h+3cuh3/cK+9UwlVFyHvj3PReIOCDOmdeXOp90ZjKRoDOJBc3mvk1LL6wyl1RWIivR8Rg9OToyesw==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': '>=1.4.0 <1.9.0' + '@opentelemetry/api-logs': '>=0.39.1' + + '@opentelemetry/sdk-logs@0.55.0': + resolution: {integrity: sha512-TSx+Yg/d48uWW6HtjS1AD5x6WPfLhDWLl/WxC7I2fMevaiBuKCuraxTB8MDXieCNnBI24bw9ytyXrDCswFfWgA==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': '>=1.4.0 <1.10.0' + + '@opentelemetry/sdk-metrics@1.22.0': + resolution: {integrity: sha512-k6iIx6H3TZ+BVMr2z8M16ri2OxWaljg5h8ihGJxi/KQWcjign6FEaEzuigXt5bK9wVEhqAcWLCfarSftaNWkkg==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': '>=1.3.0 <1.9.0' + '@opentelemetry/sdk-metrics@1.27.0': resolution: {integrity: sha512-JzWgzlutoXCydhHWIbLg+r76m+m3ncqvkCcsswXAQ4gqKS+LOHKhq+t6fx1zNytvLuaOUBur7EvWxECc4jPQKg==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': '>=1.3.0 <1.10.0' + '@opentelemetry/sdk-metrics@1.28.0': + resolution: {integrity: sha512-43tqMK/0BcKTyOvm15/WQ3HLr0Vu/ucAl/D84NO7iSlv6O4eOprxSHa3sUtmYkaZWHqdDJV0AHVz/R6u4JALVQ==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': '>=1.3.0 <1.10.0' + + '@opentelemetry/sdk-node@0.55.0': + resolution: {integrity: sha512-gSXQWV23+9vhbjsvAIeM0LxY3W8DTKI3MZlzFp61noIb1jSr46ET+qoUjHlfZ1Yymebv9KXWeZsqhft81HBXuQ==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': '>=1.3.0 <1.10.0' + + '@opentelemetry/sdk-trace-base@1.22.0': + resolution: {integrity: sha512-pfTuSIpCKONC6vkTpv6VmACxD+P1woZf4q0K46nSUvXFvOFqjBYKFaAMkKD3M1mlKUUh0Oajwj35qNjMl80m1Q==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.9.0' + '@opentelemetry/sdk-trace-base@1.27.0': resolution: {integrity: sha512-btz6XTQzwsyJjombpeqCX6LhiMQYpzt2pIYNPnw0IPO/3AhT6yjnf8Mnv3ZC2A4eRYOjqrg+bfaXg9XHDRJDWQ==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': '>=1.0.0 <1.10.0' + '@opentelemetry/sdk-trace-base@1.28.0': + resolution: {integrity: sha512-ceUVWuCpIao7Y5xE02Xs3nQi0tOGmMea17ecBdwtCvdo9ekmO+ijc9RFDgfifMl7XCBf41zne/1POM3LqSTZDA==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.10.0' + '@opentelemetry/sdk-trace-node@1.27.0': resolution: {integrity: sha512-dWZp/dVGdUEfRBjBq2BgNuBlFqHCxyyMc8FsN0NX15X07mxSUO0SZRLyK/fdAVrde8nqFI/FEdMH4rgU9fqJfQ==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': '>=1.0.0 <1.10.0' + '@opentelemetry/sdk-trace-node@1.28.0': + resolution: {integrity: sha512-N0sYfYXvHpP0FNIyc+UfhLnLSTOuZLytV0qQVrDWIlABeD/DWJIGttS7nYeR14gQLXch0M1DW8zm3VeN6Opwtg==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.10.0' + + '@opentelemetry/semantic-conventions@1.22.0': + resolution: {integrity: sha512-CAOgFOKLybd02uj/GhCdEeeBjOS0yeoDeo/CA7ASBSmenpZHAKGB3iDm/rv3BQLcabb/OprDEsSQ1y0P8A7Siw==} + engines: {node: '>=14'} + '@opentelemetry/semantic-conventions@1.25.1': resolution: {integrity: sha512-ZDjMJJQRlyk8A1KZFCc+bCbsyrn1wTwdNt56F7twdfUfnHUZUq77/WfONCj8p72NZOyP7pNTdUWSTYC3GTbuuQ==} engines: {node: '>=14'} @@ -3503,6 +4304,9 @@ packages: '@oslojs/encoding@1.1.0': resolution: {integrity: sha512-70wQhgYmndg4GCPxPPxPGevRKqTIJ2Nh4OkiMWmDAVYsTQ+Ta7Sq+rPevXyXGdzr30/qZBnyOalCszoMxlyldQ==} + '@petamoriken/float16@3.9.0': + resolution: {integrity: sha512-rYUZ+VFjPHD0NT2JYKj64NxXxrV642IiyaUxxorTEj0S3hT7B5Ixezyc9Fn+XvSk0ETEBp5VWjGIErzh0ug0Xw==} + '@phc/format@1.0.0': resolution: {integrity: sha512-m7X9U6BG2+J+R1lSOdCiITLLrxm+cWlNI3HUFA92oLO77ObGNzaKdh8pMLqdZcshtkKuV84olNNXDfMc4FezBQ==} engines: {node: '>=10'} @@ -3591,6 +4395,16 @@ packages: engines: {node: '>=18'} hasBin: true + '@qdrant/js-client-rest@1.12.0': + resolution: {integrity: sha512-H8VokZq2DYe9yfKG3c7xPNR+Oc5ZvwMUtPEr1wUO4xVi9w5P89MScJaCc9UW8mS5AR+/Y1h2t1YjSxBFPIYT2Q==} + engines: {node: '>=18.0.0', pnpm: '>=8'} + peerDependencies: + typescript: '>=4.7' + + '@qdrant/openapi-typescript-fetch@1.2.6': + resolution: {integrity: sha512-oQG/FejNpItrxRHoyctYvT3rwGZOnK4jr3JdppO/c78ktDvkWiPXPHNsrDf33K9sZdRb6PR7gi4noIapu5q4HA==} + engines: {node: '>=18.0.0', pnpm: '>=8'} + '@radix-ui/number@1.1.0': resolution: {integrity: sha512-V3gRzhVNU1ldS5XhAPTom1fOIo4ccrjjJgmE+LI2h/WaFpHmx0MQApT+KZHnx8abG6Avtfcz4WoEciMnpFT3HQ==} @@ -4296,6 +5110,14 @@ packages: '@rushstack/eslint-patch@1.10.4': resolution: {integrity: sha512-WJgX9nzTqknM393q1QJDJmoW28kUfEnybeTfVNcNAPnIx210RXm2DiXiHzfNPJNIUUb1tJnz/l4QGtJ30PgWmA==} + '@sapphire/async-queue@1.5.5': + resolution: {integrity: sha512-cvGzxbba6sav2zZkH8GPf2oGk9yYoD5qrNWdu9fRehifgnFZJMV+nuy2nON2roRO4yQQ+v7MK/Pktl/HgfsUXg==} + engines: {node: '>=v14.0.0', npm: '>=7.0.0'} + + '@sapphire/snowflake@3.5.5': + resolution: {integrity: sha512-xzvBr1Q1c4lCe7i6sRnrofxeO1QTP/LKQ6A6qy0iB4x5yfiSfARMEQEghojzTNALDTcv8En04qYNIco9/K9eZQ==} + engines: {node: '>=v14.0.0', npm: '>=7.0.0'} + '@selderee/plugin-htmlparser2@0.11.0': resolution: {integrity: sha512-P33hHGdldxGabLFjPPpaTxVolMrzrcegejx+0GxjrIb9Zv48D8yAIA/QTDR2dFl7Uz7urX8aX6+5bCZslr+gWQ==} @@ -4425,6 +5247,9 @@ packages: peerDependencies: webpack: '>=4.40.0' + '@sevinf/maybe@0.5.0': + resolution: {integrity: sha512-ARhyoYDnY1LES3vYI0fiG6e9esWfTNcXcO6+MPJJXcnyMV3bim4lnFt45VXouV7y82F4x3YH8nOQ6VztuvUiWg==} + '@sigstore/bundle@2.3.2': resolution: {integrity: sha512-wueKWDk70QixNLB363yHc2D2ItTgYiMTdPwK8D9dKQMR3ZQ0c35IxP5xnwQ8cNLoCgCRcHf14kE+CLIvNX1zmA==} engines: {node: ^16.14.0 || >=18.0.0} @@ -4472,6 +5297,10 @@ packages: resolution: {integrity: sha512-0XuhuHQlEqbNQZp7QxxrFTdVWdwxch4vjxYgfInF91hZFkPxf9QDrdQka0KfxFMPqLNzSw0b95uGTrLliQUavQ==} engines: {node: '>=16.0.0'} + '@smithy/abort-controller@3.1.8': + resolution: {integrity: sha512-+3DOBcUn5/rVjlxGvUPKc416SExarAQ+Qe0bqk30YSUjbepwpS7QN0cyKUSifvLJhdMZ0WPzPP5ymut0oonrpQ==} + engines: {node: '>=16.0.0'} + '@smithy/chunked-blob-reader-native@3.0.1': resolution: {integrity: sha512-VEYtPvh5rs/xlyqpm5NRnfYLZn+q0SRPELbvBV+C/G7IQ+ouTuo+NKKa3ShG5OaFR8NYVMXls9hPYLTvIKKDrQ==} @@ -4482,21 +5311,47 @@ packages: resolution: {integrity: sha512-Uh0Sz9gdUuz538nvkPiyv1DZRX9+D15EKDtnQP5rYVAzM/dnYk3P8cg73jcxyOitPgT3mE3OVj7ky7sibzHWkw==} engines: {node: '>=16.0.0'} + '@smithy/config-resolver@3.0.12': + resolution: {integrity: sha512-YAJP9UJFZRZ8N+UruTeq78zkdjUHmzsY62J4qKWZ4SXB4QXJ/+680EfXXgkYA2xj77ooMqtUY9m406zGNqwivQ==} + engines: {node: '>=16.0.0'} + '@smithy/core@2.5.1': resolution: {integrity: sha512-DujtuDA7BGEKExJ05W5OdxCoyekcKT3Rhg1ZGeiUWaz2BJIWXjZmsG/DIP4W48GHno7AQwRsaCb8NcBgH3QZpg==} engines: {node: '>=16.0.0'} + '@smithy/core@2.5.4': + resolution: {integrity: sha512-iFh2Ymn2sCziBRLPuOOxRPkuCx/2gBdXtBGuCUFLUe6bWYjKnhHyIPqGeNkLZ5Aco/5GjebRTBFiWID3sDbrKw==} + engines: {node: '>=16.0.0'} + '@smithy/credential-provider-imds@3.2.5': resolution: {integrity: sha512-4FTQGAsuwqTzVMmiRVTn0RR9GrbRfkP0wfu/tXWVHd2LgNpTY0uglQpIScXK4NaEyXbB3JmZt8gfVqO50lP8wg==} engines: {node: '>=16.0.0'} + '@smithy/credential-provider-imds@3.2.7': + resolution: {integrity: sha512-cEfbau+rrWF8ylkmmVAObOmjbTIzKyUC5TkBL58SbLywD0RCBC4JAUKbmtSm2w5KUJNRPGgpGFMvE2FKnuNlWQ==} + engines: {node: '>=16.0.0'} + + '@smithy/eventstream-codec@1.1.0': + resolution: {integrity: sha512-3tEbUb8t8an226jKB6V/Q2XU/J53lCwCzULuBPEaF4JjSh+FlCMp7TmogE/Aij5J9DwlsZ4VAD/IRDuQ/0ZtMw==} + '@smithy/eventstream-codec@3.1.7': resolution: {integrity: sha512-kVSXScIiRN7q+s1x7BrQtZ1Aa9hvvP9FeCqCdBxv37GimIHgBCOnZ5Ip80HLt0DhnAKpiobFdGqTFgbaJNrazA==} + '@smithy/eventstream-codec@3.1.9': + resolution: {integrity: sha512-F574nX0hhlNOjBnP+noLtsPFqXnWh2L0+nZKCwcu7P7J8k+k+rdIDs+RMnrMwrzhUE4mwMgyN0cYnEn0G8yrnQ==} + '@smithy/eventstream-serde-browser@3.0.11': resolution: {integrity: sha512-Pd1Wnq3CQ/v2SxRifDUihvpXzirJYbbtXfEnnLV/z0OGCTx/btVX74P86IgrZkjOydOASBGXdPpupYQI+iO/6A==} engines: {node: '>=16.0.0'} + '@smithy/eventstream-serde-browser@3.0.13': + resolution: {integrity: sha512-Nee9m+97o9Qj6/XeLz2g2vANS2SZgAxV4rDBMKGHvFJHU/xz88x2RwCkwsvEwYjSX4BV1NG1JXmxEaDUzZTAtw==} + engines: {node: '>=16.0.0'} + + '@smithy/eventstream-serde-config-resolver@3.0.10': + resolution: {integrity: sha512-K1M0x7P7qbBUKB0UWIL5KOcyi6zqV5mPJoL0/o01HPJr0CSq3A9FYuJC6e11EX6hR8QTIR++DBiGrYveOu6trw==} + engines: {node: '>=16.0.0'} + '@smithy/eventstream-serde-config-resolver@3.0.8': resolution: {integrity: sha512-zkFIG2i1BLbfoGQnf1qEeMqX0h5qAznzaZmMVNnvPZz9J5AWBPkOMckZWPedGUPcVITacwIdQXoPcdIQq5FRcg==} engines: {node: '>=16.0.0'} @@ -4505,19 +5360,34 @@ packages: resolution: {integrity: sha512-hjpU1tIsJ9qpcoZq9zGHBJPBOeBGYt+n8vfhDwnITPhEre6APrvqq/y3XMDEGUT2cWQ4ramNqBPRbx3qn55rhw==} engines: {node: '>=16.0.0'} + '@smithy/eventstream-serde-node@3.0.12': + resolution: {integrity: sha512-kiZymxXvZ4tnuYsPSMUHe+MMfc4FTeFWJIc0Q5wygJoUQM4rVHNghvd48y7ppuulNMbuYt95ah71pYc2+o4JOA==} + engines: {node: '>=16.0.0'} + '@smithy/eventstream-serde-universal@3.0.10': resolution: {integrity: sha512-ewG1GHbbqsFZ4asaq40KmxCmXO+AFSM1b+DcO2C03dyJj/ZH71CiTg853FSE/3SHK9q3jiYQIFjlGSwfxQ9kww==} engines: {node: '>=16.0.0'} + '@smithy/eventstream-serde-universal@3.0.12': + resolution: {integrity: sha512-1i8ifhLJrOZ+pEifTlF0EfZzMLUGQggYQ6WmZ4d5g77zEKf7oZ0kvh1yKWHPjofvOwqrkwRDVuxuYC8wVd662A==} + engines: {node: '>=16.0.0'} + '@smithy/fetch-http-handler@3.2.9': resolution: {integrity: sha512-hYNVQOqhFQ6vOpenifFME546f0GfJn2OiQ3M0FDmuUu8V/Uiwy2wej7ZXxFBNqdx0R5DZAqWM1l6VRhGz8oE6A==} '@smithy/fetch-http-handler@4.0.0': resolution: {integrity: sha512-MLb1f5tbBO2X6K4lMEKJvxeLooyg7guq48C2zKr4qM7F2Gpkz4dc+hdSgu77pCJ76jVqFBjZczHYAs6dp15N+g==} + '@smithy/fetch-http-handler@4.1.1': + resolution: {integrity: sha512-bH7QW0+JdX0bPBadXt8GwMof/jz0H28I84hU1Uet9ISpzUqXqRQ3fEZJ+ANPOhzSEczYvANNl3uDQDYArSFDtA==} + '@smithy/hash-blob-browser@3.1.7': resolution: {integrity: sha512-4yNlxVNJifPM5ThaA5HKnHkn7JhctFUHvcaz6YXxHlYOSIrzI6VKQPTN8Gs1iN5nqq9iFcwIR9THqchUCouIfg==} + '@smithy/hash-node@3.0.10': + resolution: {integrity: sha512-3zWGWCHI+FlJ5WJwx73Mw2llYR8aflVyZN5JhoqLxbdPZi6UyKSdCeXAWJw9ja22m6S6Tzz1KZ+kAaSwvydi0g==} + engines: {node: '>=16.0.0'} + '@smithy/hash-node@3.0.8': resolution: {integrity: sha512-tlNQYbfpWXHimHqrvgo14DrMAgUBua/cNoz9fMYcDmYej7MAmUcjav/QKQbFc3NrcPxeJ7QClER4tWZmfwoPng==} engines: {node: '>=16.0.0'} @@ -4526,9 +5396,16 @@ packages: resolution: {integrity: sha512-xMAsvJ3hLG63lsBVi1Hl6BBSfhd8/Qnp8fC06kjOpJvyyCEXdwHITa5Kvdsk6gaAXLhbZMhQMIGvgUbfnJDP6Q==} engines: {node: '>=16.0.0'} + '@smithy/invalid-dependency@3.0.10': + resolution: {integrity: sha512-Lp2L65vFi+cj0vFMu2obpPW69DU+6O5g3086lmI4XcnRCG8PxvpWC7XyaVwJCxsZFzueHjXnrOH/E0pl0zikfA==} + '@smithy/invalid-dependency@3.0.8': resolution: {integrity: sha512-7Qynk6NWtTQhnGTTZwks++nJhQ1O54Mzi7fz4PqZOiYXb4Z1Flpb2yRvdALoggTS8xjtohWUM+RygOtB30YL3Q==} + '@smithy/is-array-buffer@1.1.0': + resolution: {integrity: sha512-twpQ/n+3OWZJ7Z+xu43MJErmhB/WO/mMTnqR6PwWQShvSJ/emx5d1N59LQZk6ZpTAeuRWrc+eHhkzTp9NFjNRQ==} + engines: {node: '>=14.0.0'} + '@smithy/is-array-buffer@2.2.0': resolution: {integrity: sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==} engines: {node: '>=14.0.0'} @@ -4544,22 +5421,46 @@ packages: resolution: {integrity: sha512-T4dIdCs1d/+/qMpwhJ1DzOhxCZjZHbHazEPJWdB4GDi2HjIZllVzeBEcdJUN0fomV8DURsgOyrbEUzg3vzTaOg==} engines: {node: '>=16.0.0'} + '@smithy/middleware-content-length@3.0.12': + resolution: {integrity: sha512-1mDEXqzM20yywaMDuf5o9ue8OkJ373lSPbaSjyEvkWdqELhFMyNNgKGWL/rCSf4KME8B+HlHKuR8u9kRj8HzEQ==} + engines: {node: '>=16.0.0'} + '@smithy/middleware-endpoint@3.2.1': resolution: {integrity: sha512-wWO3xYmFm6WRW8VsEJ5oU6h7aosFXfszlz3Dj176pTij6o21oZnzkCLzShfmRaaCHDkBXWBdO0c4sQAvLFP6zA==} engines: {node: '>=16.0.0'} + '@smithy/middleware-endpoint@3.2.4': + resolution: {integrity: sha512-TybiW2LA3kYVd3e+lWhINVu1o26KJbBwOpADnf0L4x/35vLVica77XVR5hvV9+kWeTGeSJ3IHTcYxbRxlbwhsg==} + engines: {node: '>=16.0.0'} + '@smithy/middleware-retry@3.0.25': resolution: {integrity: sha512-m1F70cPaMBML4HiTgCw5I+jFNtjgz5z5UdGnUbG37vw6kh4UvizFYjqJGHvicfgKMkDL6mXwyPp5mhZg02g5sg==} engines: {node: '>=16.0.0'} + '@smithy/middleware-retry@3.0.28': + resolution: {integrity: sha512-vK2eDfvIXG1U64FEUhYxoZ1JSj4XFbYWkK36iz02i3pFwWiDz1Q7jKhGTBCwx/7KqJNk4VS7d7cDLXFOvP7M+g==} + engines: {node: '>=16.0.0'} + + '@smithy/middleware-serde@3.0.10': + resolution: {integrity: sha512-MnAuhh+dD14F428ubSJuRnmRsfOpxSzvRhaGVTvd/lrUDE3kxzCCmH8lnVTvoNQnV2BbJ4c15QwZ3UdQBtFNZA==} + engines: {node: '>=16.0.0'} + '@smithy/middleware-serde@3.0.8': resolution: {integrity: sha512-Xg2jK9Wc/1g/MBMP/EUn2DLspN8LNt+GMe7cgF+Ty3vl+Zvu+VeZU5nmhveU+H8pxyTsjrAkci8NqY6OuvZnjA==} engines: {node: '>=16.0.0'} + '@smithy/middleware-stack@3.0.10': + resolution: {integrity: sha512-grCHyoiARDBBGPyw2BeicpjgpsDFWZZxptbVKb3CRd/ZA15F/T6rZjCCuBUjJwdck1nwUuIxYtsS4H9DDpbP5w==} + engines: {node: '>=16.0.0'} + '@smithy/middleware-stack@3.0.8': resolution: {integrity: sha512-d7ZuwvYgp1+3682Nx0MD3D/HtkmZd49N3JUndYWQXfRZrYEnCWYc8BHcNmVsPAp9gKvlurdg/mubE6b/rPS9MA==} engines: {node: '>=16.0.0'} + '@smithy/node-config-provider@3.1.11': + resolution: {integrity: sha512-URq3gT3RpDikh/8MBJUB+QGZzfS7Bm6TQTqoh4CqE8NBuyPkWa5eUXj0XFcFfeZVgg3WMh1u19iaXn8FvvXxZw==} + engines: {node: '>=16.0.0'} + '@smithy/node-config-provider@3.1.9': resolution: {integrity: sha512-qRHoah49QJ71eemjuS/WhUXB+mpNtwHRWQr77J/m40ewBVVwvo52kYAmb7iuaECgGTTcYxHS4Wmewfwy++ueew==} engines: {node: '>=16.0.0'} @@ -4568,42 +5469,97 @@ packages: resolution: {integrity: sha512-PkOwPNeKdvX/jCpn0A8n9/TyoxjGZB8WVoJmm9YzsnAgggTj4CrjpRHlTQw7dlLZ320n1mY1y+nTRUDViKi/3w==} engines: {node: '>=16.0.0'} + '@smithy/node-http-handler@3.3.1': + resolution: {integrity: sha512-fr+UAOMGWh6bn4YSEezBCpJn9Ukp9oR4D32sCjCo7U81evE11YePOQ58ogzyfgmjIO79YeOdfXXqr0jyhPQeMg==} + engines: {node: '>=16.0.0'} + + '@smithy/property-provider@3.1.10': + resolution: {integrity: sha512-n1MJZGTorTH2DvyTVj+3wXnd4CzjJxyXeOgnTlgNVFxaaMeT4OteEp4QrzF8p9ee2yg42nvyVK6R/awLCakjeQ==} + engines: {node: '>=16.0.0'} + '@smithy/property-provider@3.1.8': resolution: {integrity: sha512-ukNUyo6rHmusG64lmkjFeXemwYuKge1BJ8CtpVKmrxQxc6rhUX0vebcptFA9MmrGsnLhwnnqeH83VTU9hwOpjA==} engines: {node: '>=16.0.0'} + '@smithy/protocol-http@1.2.0': + resolution: {integrity: sha512-GfGfruksi3nXdFok5RhgtOnWe5f6BndzYfmEXISD+5gAGdayFGpjWu5pIqIweTudMtse20bGbc+7MFZXT1Tb8Q==} + engines: {node: '>=14.0.0'} + '@smithy/protocol-http@4.1.5': resolution: {integrity: sha512-hsjtwpIemmCkm3ZV5fd/T0bPIugW1gJXwZ/hpuVubt2hEUApIoUTrf6qIdh9MAWlw0vjMrA1ztJLAwtNaZogvg==} engines: {node: '>=16.0.0'} + '@smithy/protocol-http@4.1.7': + resolution: {integrity: sha512-FP2LepWD0eJeOTm0SjssPcgqAlDFzOmRXqXmGhfIM52G7Lrox/pcpQf6RP4F21k0+O12zaqQt5fCDOeBtqY6Cg==} + engines: {node: '>=16.0.0'} + + '@smithy/querystring-builder@3.0.10': + resolution: {integrity: sha512-nT9CQF3EIJtIUepXQuBFb8dxJi3WVZS3XfuDksxSCSn+/CzZowRLdhDn+2acbBv8R6eaJqPupoI/aRFIImNVPQ==} + engines: {node: '>=16.0.0'} + '@smithy/querystring-builder@3.0.8': resolution: {integrity: sha512-btYxGVqFUARbUrN6VhL9c3dnSviIwBYD9Rz1jHuN1hgh28Fpv2xjU1HeCeDJX68xctz7r4l1PBnFhGg1WBBPuA==} engines: {node: '>=16.0.0'} + '@smithy/querystring-parser@3.0.10': + resolution: {integrity: sha512-Oa0XDcpo9SmjhiDD9ua2UyM3uU01ZTuIrNdZvzwUTykW1PM8o2yJvMh1Do1rY5sUQg4NDV70dMi0JhDx4GyxuQ==} + engines: {node: '>=16.0.0'} + '@smithy/querystring-parser@3.0.8': resolution: {integrity: sha512-BtEk3FG7Ks64GAbt+JnKqwuobJNX8VmFLBsKIwWr1D60T426fGrV2L3YS5siOcUhhp6/Y6yhBw1PSPxA5p7qGg==} engines: {node: '>=16.0.0'} + '@smithy/service-error-classification@3.0.10': + resolution: {integrity: sha512-zHe642KCqDxXLuhs6xmHVgRwy078RfqxP2wRDpIyiF8EmsWXptMwnMwbVa50lw+WOGNrYm9zbaEg0oDe3PTtvQ==} + engines: {node: '>=16.0.0'} + '@smithy/service-error-classification@3.0.8': resolution: {integrity: sha512-uEC/kCCFto83bz5ZzapcrgGqHOh/0r69sZ2ZuHlgoD5kYgXJEThCoTuw/y1Ub3cE7aaKdznb+jD9xRPIfIwD7g==} engines: {node: '>=16.0.0'} + '@smithy/shared-ini-file-loader@3.1.11': + resolution: {integrity: sha512-AUdrIZHFtUgmfSN4Gq9nHu3IkHMa1YDcN+s061Nfm+6pQ0mJy85YQDB0tZBCmls0Vuj22pLwDPmL92+Hvfwwlg==} + engines: {node: '>=16.0.0'} + '@smithy/shared-ini-file-loader@3.1.9': resolution: {integrity: sha512-/+OsJRNtoRbtsX0UpSgWVxFZLsJHo/4sTr+kBg/J78sr7iC+tHeOvOJrS5hCpVQ6sWBbhWLp1UNiuMyZhE6pmA==} engines: {node: '>=16.0.0'} + '@smithy/signature-v4@1.1.0': + resolution: {integrity: sha512-fDo3m7YqXBs7neciOePPd/X9LPm5QLlDMdIC4m1H6dgNLnXfLMFNIxEfPyohGA8VW9Wn4X8lygnPSGxDZSmp0Q==} + engines: {node: '>=14.0.0'} + '@smithy/signature-v4@4.2.1': resolution: {integrity: sha512-NsV1jF4EvmO5wqmaSzlnTVetemBS3FZHdyc5CExbDljcyJCEEkJr8ANu2JvtNbVg/9MvKAWV44kTrGS+Pi4INg==} engines: {node: '>=16.0.0'} + '@smithy/signature-v4@4.2.3': + resolution: {integrity: sha512-pPSQQ2v2vu9vc8iew7sszLd0O09I5TRc5zhY71KA+Ao0xYazIG+uLeHbTJfIWGO3BGVLiXjUr3EEeCcEQLjpWQ==} + engines: {node: '>=16.0.0'} + '@smithy/smithy-client@3.4.2': resolution: {integrity: sha512-dxw1BDxJiY9/zI3cBqfVrInij6ShjpV4fmGHesGZZUiP9OSE/EVfdwdRz0PgvkEvrZHpsj2htRaHJfftE8giBA==} engines: {node: '>=16.0.0'} + '@smithy/smithy-client@3.4.5': + resolution: {integrity: sha512-k0sybYT9zlP79sIKd1XGm4TmK0AS1nA2bzDHXx7m0nGi3RQ8dxxQUs4CPkSmQTKAo+KF9aINU3KzpGIpV7UoMw==} + engines: {node: '>=16.0.0'} + + '@smithy/types@1.2.0': + resolution: {integrity: sha512-z1r00TvBqF3dh4aHhya7nz1HhvCg4TRmw51fjMrh5do3h+ngSstt/yKlNbHeb9QxJmFbmN8KEVSWgb1bRvfEoA==} + engines: {node: '>=14.0.0'} + '@smithy/types@3.6.0': resolution: {integrity: sha512-8VXK/KzOHefoC65yRgCn5vG1cysPJjHnOVt9d0ybFQSmJgQj152vMn4EkYhGuaOmnnZvCPav/KnYyE6/KsNZ2w==} engines: {node: '>=16.0.0'} + '@smithy/types@3.7.1': + resolution: {integrity: sha512-XKLcLXZY7sUQgvvWyeaL/qwNPp6V3dWcUjqrQKjSb+tzYiCy340R/c64LV5j+Tnb2GhmunEX0eou+L+m2hJNYA==} + engines: {node: '>=16.0.0'} + + '@smithy/url-parser@3.0.10': + resolution: {integrity: sha512-j90NUalTSBR2NaZTuruEgavSdh8MLirf58LoGSk4AtQfyIymogIhgnGUU2Mga2bkMkpSoC9gxb74xBXL5afKAQ==} + '@smithy/url-parser@3.0.8': resolution: {integrity: sha512-4FdOhwpTW7jtSFWm7SpfLGKIBC9ZaTKG5nBF0wK24aoQKQyDIKUw3+KFWCQ9maMzrgTJIuOvOnsV2lLGW5XjTg==} @@ -4618,6 +5574,10 @@ packages: resolution: {integrity: sha512-Tj7pZ4bUloNUP6PzwhN7K386tmSmEET9QtQg0TgdNOnxhZvCssHji+oZTUIuzxECRfG8rdm2PMw2WCFs6eIYkA==} engines: {node: '>=16.0.0'} + '@smithy/util-buffer-from@1.1.0': + resolution: {integrity: sha512-9m6NXE0ww+ra5HKHCHig20T+FAwxBAm7DIdwc/767uGWbRcY720ybgPacQNB96JMOI7xVr/CDa3oMzKmW4a+kw==} + engines: {node: '>=14.0.0'} + '@smithy/util-buffer-from@2.2.0': resolution: {integrity: sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==} engines: {node: '>=14.0.0'} @@ -4634,22 +5594,50 @@ packages: resolution: {integrity: sha512-fRw7zymjIDt6XxIsLwfJfYUfbGoO9CmCJk6rjJ/X5cd20+d2Is7xjU5Kt/AiDt6hX8DAf5dztmfP5O82gR9emA==} engines: {node: '>= 10.0.0'} + '@smithy/util-defaults-mode-browser@3.0.28': + resolution: {integrity: sha512-6bzwAbZpHRFVJsOztmov5PGDmJYsbNSoIEfHSJJyFLzfBGCCChiO3od9k7E/TLgrCsIifdAbB9nqbVbyE7wRUw==} + engines: {node: '>= 10.0.0'} + '@smithy/util-defaults-mode-node@3.0.25': resolution: {integrity: sha512-H3BSZdBDiVZGzt8TG51Pd2FvFO0PAx/A0mJ0EH8a13KJ6iUCdYnw/Dk/MdC1kTd0eUuUGisDFaxXVXo4HHFL1g==} engines: {node: '>= 10.0.0'} + '@smithy/util-defaults-mode-node@3.0.28': + resolution: {integrity: sha512-78ENJDorV1CjOQselGmm3+z7Yqjj5HWCbjzh0Ixuq736dh1oEnD9sAttSBNSLlpZsX8VQnmERqA2fEFlmqWn8w==} + engines: {node: '>= 10.0.0'} + '@smithy/util-endpoints@2.1.4': resolution: {integrity: sha512-kPt8j4emm7rdMWQyL0F89o92q10gvCUa6sBkBtDJ7nV2+P7wpXczzOfoDJ49CKXe5CCqb8dc1W+ZdLlrKzSAnQ==} engines: {node: '>=16.0.0'} + '@smithy/util-endpoints@2.1.6': + resolution: {integrity: sha512-mFV1t3ndBh0yZOJgWxO9J/4cHZVn5UG1D8DeCc6/echfNkeEJWu9LD7mgGH5fHrEdR7LDoWw7PQO6QiGpHXhgA==} + engines: {node: '>=16.0.0'} + + '@smithy/util-hex-encoding@1.1.0': + resolution: {integrity: sha512-7UtIE9eH0u41zpB60Jzr0oNCQ3hMJUabMcKRUVjmyHTXiWDE4vjSqN6qlih7rCNeKGbioS7f/y2Jgym4QZcKFg==} + engines: {node: '>=14.0.0'} + '@smithy/util-hex-encoding@3.0.0': resolution: {integrity: sha512-eFndh1WEK5YMUYvy3lPlVmYY/fZcQE1D8oSf41Id2vCeIkKJXPcYDCZD+4+xViI6b1XSd7tE+s5AmXzz5ilabQ==} engines: {node: '>=16.0.0'} + '@smithy/util-middleware@1.1.0': + resolution: {integrity: sha512-6hhckcBqVgjWAqLy2vqlPZ3rfxLDhFWEmM7oLh2POGvsi7j0tHkbN7w4DFhuBExVJAbJ/qqxqZdRY6Fu7/OezQ==} + engines: {node: '>=14.0.0'} + + '@smithy/util-middleware@3.0.10': + resolution: {integrity: sha512-eJO+/+RsrG2RpmY68jZdwQtnfsxjmPxzMlQpnHKjFPwrYqvlcT+fHdT+ZVwcjlWSrByOhGr9Ff2GG17efc192A==} + engines: {node: '>=16.0.0'} + '@smithy/util-middleware@3.0.8': resolution: {integrity: sha512-p7iYAPaQjoeM+AKABpYWeDdtwQNxasr4aXQEA/OmbOaug9V0odRVDy3Wx4ci8soljE/JXQo+abV0qZpW8NX0yA==} engines: {node: '>=16.0.0'} + '@smithy/util-retry@3.0.10': + resolution: {integrity: sha512-1l4qatFp4PiU6j7UsbasUHL2VU023NRB/gfaa1M0rDqVrRN4g3mCArLRyH3OuktApA4ye+yjWQHjdziunw2eWA==} + engines: {node: '>=16.0.0'} + '@smithy/util-retry@3.0.8': resolution: {integrity: sha512-TCEhLnY581YJ+g1x0hapPz13JFqzmh/pMWL2KEFASC51qCfw3+Y47MrTmea4bUE5vsdxQ4F6/KFbUeSz22Q1ow==} engines: {node: '>=16.0.0'} @@ -4658,10 +5646,22 @@ packages: resolution: {integrity: sha512-R3ufuzJRxSJbE58K9AEnL/uSZyVdHzud9wLS8tIbXclxKzoe09CRohj2xV8wpx5tj7ZbiJaKYcutMm1eYgz/0A==} engines: {node: '>=16.0.0'} + '@smithy/util-stream@3.3.1': + resolution: {integrity: sha512-Ff68R5lJh2zj+AUTvbAU/4yx+6QPRzg7+pI7M1FbtQHcRIp7xvguxVsQBKyB3fwiOwhAKu0lnNyYBaQfSW6TNw==} + engines: {node: '>=16.0.0'} + + '@smithy/util-uri-escape@1.1.0': + resolution: {integrity: sha512-/jL/V1xdVRt5XppwiaEU8Etp5WHZj609n0xMTuehmCqdoOFbId1M+aEeDWZsQ+8JbEB/BJ6ynY2SlYmOaKtt8w==} + engines: {node: '>=14.0.0'} + '@smithy/util-uri-escape@3.0.0': resolution: {integrity: sha512-LqR7qYLgZTD7nWLBecUi4aqolw8Mhza9ArpNEQ881MJJIU2sE5iHCK6TdyqqzcDLy0OPe10IY4T8ctVdtynubg==} engines: {node: '>=16.0.0'} + '@smithy/util-utf8@1.1.0': + resolution: {integrity: sha512-p/MYV+JmqmPyjdgyN2UxAeYDj9cBqCjp0C/NsTWnnjoZUVqoeZ6IrW915L9CAKWVECgv9lVQGc4u/yz26/bI1A==} + engines: {node: '>=14.0.0'} + '@smithy/util-utf8@2.3.0': resolution: {integrity: sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==} engines: {node: '>=14.0.0'} @@ -4674,6 +5674,10 @@ packages: resolution: {integrity: sha512-d5yGlQtmN/z5eoTtIYgkvOw27US2Ous4VycnXatyoImIF9tzlcpnKqQ/V7qhvJmb2p6xZne1NopCLakdTnkBBQ==} engines: {node: '>=16.0.0'} + '@smithy/util-waiter@3.1.9': + resolution: {integrity: sha512-/aMXPANhMOlMPjfPtSrDfPeVP8l56SJlz93xeiLmhLe5xvlXA5T3abZ2ilEsDEPeY9T/wnN/vNGn9wa1SbufWA==} + engines: {node: '>=16.0.0'} + '@socket.io/component-emitter@3.1.2': resolution: {integrity: sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA==} @@ -4759,14 +5763,66 @@ packages: '@tokenizer/token@0.3.0': resolution: {integrity: sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==} + '@tootallnate/once@2.0.0': + resolution: {integrity: sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==} + engines: {node: '>= 10'} + '@tootallnate/quickjs-emscripten@0.23.0': resolution: {integrity: sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==} - '@tsconfig/node10@1.0.11': - resolution: {integrity: sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==} + '@traceloop/ai-semantic-conventions@0.11.0': + resolution: {integrity: sha512-KTnLq44GMj3dygUOrI+v2C2gwiICHqZPeTzazQxQOjsovlTRlpjNJnxu/PNrKwmlqqAg6UfJh8wXUObO5FFCMg==} + engines: {node: '>=14'} - '@tsconfig/node12@1.0.11': - resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} + '@traceloop/instrumentation-anthropic@0.11.1': + resolution: {integrity: sha512-TsVPt8zn/4LnNZjcKzN4D2wxHWuOc0repMAPDm/iaQcT/cSffpwE6CcwNrh2iE+9rLYGGfe9Y5P+CU22r8N9+w==} + engines: {node: '>=14'} + + '@traceloop/instrumentation-azure@0.11.1': + resolution: {integrity: sha512-p9P2VBNCZyNcy0VidnnsduSuE/AVa5CHN2LMKNMczYS/VBLQ7kXE90zMV354HrRXvVOKAcC7kGViaB3dsARQ7A==} + engines: {node: '>=14'} + + '@traceloop/instrumentation-bedrock@0.11.1': + resolution: {integrity: sha512-Un7NcwLRUMvGDQTCGdHddOkpkyG+twSz+O82UdizTltZ/VO/CWIu1lHGGFBHVMcom9OrGpA2gXWZWu5/BxI61w==} + engines: {node: '>=14'} + + '@traceloop/instrumentation-chromadb@0.11.3': + resolution: {integrity: sha512-QadV0dmdGCguEi9mEp+xWkNoDwmNcZ+EjNj1pQbhKCJOMAJEMPBl1lAHF3CBr2vRBrxTg4278zgtFQP+Mufqow==} + engines: {node: '>=14'} + + '@traceloop/instrumentation-cohere@0.11.1': + resolution: {integrity: sha512-S+bQGdKD8Aw+G04F/xGzpEmT5HHgnq4ApcEYQiCVxHCuky17bJ2pMAw/3psALzqR2F0B8wF7b8KU/3bKiu0tVw==} + engines: {node: '>=14'} + + '@traceloop/instrumentation-langchain@0.11.4': + resolution: {integrity: sha512-FsFQtD4mrLjX8qffNPZ41LIs5OShwT96XlZ3uIa//QQ+kmpbsajm/rklqzz8yF2J28UkxuOg/eQBosuRYFf0TA==} + engines: {node: '>=14'} + + '@traceloop/instrumentation-llamaindex@0.11.1': + resolution: {integrity: sha512-3YP3svb0VU9Q51Ggud8QxjKfn35l+3ha0dGYg4wPo8Q5GRUjNTWl306473x5KGinbqIHQS8ozG7WHIs4Hvn16A==} + engines: {node: '>=14'} + + '@traceloop/instrumentation-openai@0.11.3': + resolution: {integrity: sha512-CGkH6IMOr6VfWnT5cWMUcVC9cZzpgNLHaV+4zERpGt86Zui/EjwJq9PiNZ7S8XiDldgaFP5IVRTZ3MMIF/GFjQ==} + engines: {node: '>=14'} + + '@traceloop/instrumentation-pinecone@0.11.1': + resolution: {integrity: sha512-ivW74KeyAtpa/AINAgvRfUWmpN86mIYq1///sJJ1fiBa0ylV+fG1+UpTW7xCKkvEgM5mZUBh9wGZG+wN+FP0uA==} + engines: {node: '>=14'} + + '@traceloop/instrumentation-qdrant@0.11.1': + resolution: {integrity: sha512-jgYUjT6MA9qhRGlGd3HAfbsFuisi9N6/1Ia/IxrxaN1bJbwrgge7rSwWCczXjeolFcVE9kxUoJOs/yMv6k+OCw==} + engines: {node: '>=14'} + + '@traceloop/instrumentation-vertexai@0.11.4': + resolution: {integrity: sha512-tbz33vXTYMUZ/6nfcw/PkqLmUt9y+BrrCDHBEOELToASnuS2hLWJDZZP7hwBEQztRaGIdgviq2SivTXLoWkvqg==} + engines: {node: '>=14'} + + '@tsconfig/node10@1.0.11': + resolution: {integrity: sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==} + + '@tsconfig/node12@1.0.11': + resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} '@tsconfig/node14@1.0.3': resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} @@ -4803,6 +5859,9 @@ packages: '@types/cacheable-request@6.0.3': resolution: {integrity: sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==} + '@types/caseless@0.12.5': + resolution: {integrity: sha512-hWtVTC2q7hc7xZ/RLbxapMvDMgUnDvKvMOpKal4DrMyfGBUfB1oKaZlIRr6mJL+If3bAP6sV/QneGzF6tJjZDg==} + '@types/connect@3.4.36': resolution: {integrity: sha512-P63Zd/JUGq+PdrM1lv0Wv5SBYeA2+CORvbrXbngriYY0jzLUWfQMQQxOhjONEz/wlHOAxOdY7CY65rgQdTjq2w==} @@ -4917,6 +5976,9 @@ packages: '@types/lodash@4.17.12': resolution: {integrity: sha512-sviUmCE8AYdaF/KIHLDJBQgeYzPBI0vf/17NaYehBJfYD1j6/L95Slh07NlyK2iNyBNaEkb3En2jRt+a8y3xZQ==} + '@types/long@4.0.2': + resolution: {integrity: sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA==} + '@types/mdast@3.0.15': resolution: {integrity: sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ==} @@ -4929,6 +5991,9 @@ packages: '@types/mime@1.3.5': resolution: {integrity: sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==} + '@types/morgan@1.9.9': + resolution: {integrity: sha512-iRYSDKVaC6FkGSpEVVIvrRGw0DfJMiQzIn3qr2G5B3C//AWkulhXgaBd7tS9/J79GWSYMTHGs7PfI5b3Y8m+RQ==} + '@types/ms@0.7.34': resolution: {integrity: sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==} @@ -4941,12 +6006,24 @@ packages: '@types/node-fetch@2.6.11': resolution: {integrity: sha512-24xFj9R5+rfQJLRyM56qh+wnVSYhyXC2tkoBndtY0U+vubqNsYXGjufB2nn8Q6gt0LrARwL6UBtMCSVCwl4B1g==} + '@types/node-fetch@2.6.12': + resolution: {integrity: sha512-8nneRWKCg3rMtF69nLQJnOYUcbafYeFSjqkw3jCRLsqkWFlHaoQrr5mXmofFGOx3DKn7UfmBMyov8ySvLRVldA==} + '@types/node@18.19.59': resolution: {integrity: sha512-vizm2EqwV/7Zay+A6J3tGl9Lhr7CjZe2HmWS988sefiEmsyP9CeXEleho6i4hJk/8UtZAo0bWN4QPZZr83RxvQ==} + '@types/node@18.19.67': + resolution: {integrity: sha512-wI8uHusga+0ZugNp0Ol/3BqQfEcCCNfojtO6Oou9iVNGPTL6QNSdnUdqq85fRgIorLhLMuPIKpsN98QE9Nh+KQ==} + '@types/node@20.17.1': resolution: {integrity: sha512-j2VlPv1NnwPJbaCNv69FO/1z4lId0QmGvpT41YxitRtWlg96g/j8qcv2RKsLKe2F6OJgyXhupN1Xo17b2m139Q==} + '@types/node@20.17.9': + resolution: {integrity: sha512-0JOXkRyLanfGPE2QRCwgxhzlBAvaRdCNMcvbd7jFfpmD4eEXll7LRwy5ymJmyeZqk7Nh7eD2LeUyQ68BbndmXw==} + + '@types/node@22.10.1': + resolution: {integrity: sha512-qKgsUwfHZV2WCWLAnVP1JqnpE6Im6h3Y0+fYgMTasNQ7V++CBX5OT1as0g0f+OyubbFqhf6XVNIsmN4IIhEgGQ==} + '@types/node@22.8.1': resolution: {integrity: sha512-k6Gi8Yyo8EtrNtkHXutUu2corfDf9su95VYVP10aGYMMROM6SAItZi0w1XszA6RtWTHSVp5OeFof37w0IEqCQg==} @@ -4986,8 +6063,8 @@ packages: '@types/prop-types@15.7.13': resolution: {integrity: sha512-hCZTSvwbzWGvhqxp/RqVqwU999pBf2vp7hzIjiYOsl8wqOmUxkQ6ddw1cV3l8811+kdUFus/q4d1Y3E3SyEifA==} - '@types/qs@6.9.16': - resolution: {integrity: sha512-7i+zxXdPD0T4cKDuxCUXJ4wHcsJLwENa6Z3dCu8cfCK743OGy5Nu1RmAGqDPsoTDINVEcdXKRvR/zre+P2Ku1A==} + '@types/qs@6.9.17': + resolution: {integrity: sha512-rX4/bPcfmvxHDv0XjfJELTTr+iB+tn032nPILqHm5wbthUUUuVtNGGqzhya9XUxjTP8Fpr0qYgSZZKxGY++svQ==} '@types/range-parser@1.2.7': resolution: {integrity: sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==} @@ -5004,12 +6081,18 @@ packages: '@types/react@18.3.0': resolution: {integrity: sha512-DiUcKjzE6soLyln8NNZmyhcQjVv+WsUIFSqetMN0p8927OztKT4VTfFTqsbAi5oAGIcgOmOajlfBqyptDDjZRw==} + '@types/request@2.48.12': + resolution: {integrity: sha512-G3sY+NpsA9jnwm0ixhAFQSJ3Q9JkpLZpJbI3GMv0mIAT0y3mRabYeINzal5WOChIiaTEGQYlHOKgkaM9EisWHw==} + '@types/resolve@1.20.2': resolution: {integrity: sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==} '@types/responselike@1.0.3': resolution: {integrity: sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==} + '@types/retry@0.12.0': + resolution: {integrity: sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==} + '@types/semver@7.5.8': resolution: {integrity: sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==} @@ -5031,6 +6114,9 @@ packages: '@types/tough-cookie@4.0.5': resolution: {integrity: sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==} + '@types/triple-beam@1.3.5': + resolution: {integrity: sha512-6WaYesThRMCl19iryMYP7/x2OVgCtbIVflDGFpWnb9irXI3UjYE4AzmYuiUKY1AJstGijoY+MgUszMgRxIYTYw==} + '@types/unist@2.0.11': resolution: {integrity: sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==} @@ -5043,6 +6129,12 @@ packages: '@types/uuid@9.0.8': resolution: {integrity: sha512-jg+97EGIcY9AGHJJRaaPVgetKDsrTgbRjQ5Msgjh/DQKEFl0DtyRr/VCOyD1T2R1MNeWPK/u7JoGhlDZnKBAfA==} + '@types/webidl-conversions@7.0.3': + resolution: {integrity: sha512-CiJJvcRtIgzadHCYXw7dqEnMNRjhGZlYK05Mj9OyktqV8uVT8fD2BFOB7S1uwBE3Kj2Z+4UyPmFw/Ixgw/LAlA==} + + '@types/whatwg-url@11.0.5': + resolution: {integrity: sha512-coYR071JRaHa+xoEvvYqvnIHaVqaYrLPbsufM9BF63HkwI5Lgmy2QR8Q5K/lYDYo5AK82wOvSOS0UsLTpTG7uQ==} + '@types/yauzl@2.10.3': resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==} @@ -5192,6 +6284,21 @@ packages: '@ungap/structured-clone@1.2.0': resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} + '@upstash/vector@1.1.7': + resolution: {integrity: sha512-yxgXdH/Z2uX8XUVrLeo6ZNci2Z8EzXGwjIZ8EZwctF5+oiBIKwz8tsh/yUesyGrbuQ+ViBPGtZWV5vLFbp649w==} + + '@vercel/otel@1.10.0': + resolution: {integrity: sha512-bv1FXbFZlFbB89vyA2P9/kr6eZ42bMtXgqBJpgi+8yOrZU8rkg9wMi0TL//AgAf/qKtaryDm1sbCnkLHgCI3PQ==} + engines: {node: '>=18'} + peerDependencies: + '@opentelemetry/api': ^1.7.0 + '@opentelemetry/api-logs': '>=0.46.0 && <1.0.0' + '@opentelemetry/instrumentation': '>=0.46.0 && <1.0.0' + '@opentelemetry/resources': ^1.19.0 + '@opentelemetry/sdk-logs': '>=0.46.0 && <1.0.0' + '@opentelemetry/sdk-metrics': ^1.19.0 + '@opentelemetry/sdk-trace-base': ^1.19.0 + '@vercel/style-guide@5.2.0': resolution: {integrity: sha512-fNSKEaZvSkiBoF6XEefs8CcgAV9K9e+MbcsDZjUsktHycKdA0jvjAzQi1W/FzLS+Nr5zZ6oejCwq/97dHUKe0g==} engines: {node: '>=16'} @@ -5254,6 +6361,10 @@ packages: '@vitest/utils@2.1.4': resolution: {integrity: sha512-MXDnZn0Awl2S86PSNIim5PWXgIAx8CIkzu35mBdSApUip6RFOGXBCf3YFyeEu8n1IHk4bWD46DeYFu9mQlFIRg==} + '@vladfrangu/async_event_emitter@2.4.6': + resolution: {integrity: sha512-RaI5qZo6D2CVS6sTHFKg1v5Ohq/+Bo2LZ5gzUEwZ/WkHhwtGTCB/sVLw8ijOkAUxasZ+WshN/Rzj4ywsABJ5ZA==} + engines: {node: '>=v14.0.0', npm: '>=7.0.0'} + '@vue/compiler-core@3.5.12': resolution: {integrity: sha512-ISyBTRMmMYagUxhcpyEH0hpXRd/KqDU4ymofPgl2XAkY9ZhQ+h0ovEZJIiPop13UmR/54oA2cgMDjgroRelaEw==} @@ -5338,10 +6449,22 @@ packages: '@xtuc/long@4.2.2': resolution: {integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==} + '@zilliz/milvus2-sdk-node@2.5.1': + resolution: {integrity: sha512-awb5Y2uT9Ku+YJ7m+16T6TphoPIzwgtOXxf7s53qK54mv4F+7YWN4mBE9R2ScVO5H499ra6k+QxbGRbxAuO53g==} + + a-sync-waterfall@1.0.1: + resolution: {integrity: sha512-RYTOHHdWipFUliRFMCS4X2Yn2X8M87V/OpSqWzKKOGhzqyUxzyVmhHDH9sAvG+ZuQf/TAOFsLCpMw09I1ufUnA==} + + abbrev@1.1.1: + resolution: {integrity: sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==} + abbrev@2.0.0: resolution: {integrity: sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + abort-controller-x@0.4.3: + resolution: {integrity: sha512-VtUwTNU8fpMwvWGn4xE93ywbogTYsuT+AUxAXOeelbXuQVIwNmC5YLeho9sH4vZ4ITW8414TTAOG1nW6uIVHCA==} + abort-controller@3.0.0: resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} engines: {node: '>=6.5'} @@ -5414,6 +6537,42 @@ packages: zod: optional: true + ai@4.0.10: + resolution: {integrity: sha512-40GaEGLbp7if1F50zp3Kr03vcqyGS8svyJWpbkgec7G5Ik2rEtnbDWiUoOJuAVqgP5/iy4NgZQfvX3jRmOyQrw==} + engines: {node: '>=18'} + peerDependencies: + react: ^18 || ^19 || ^19.0.0-rc + zod: ^3.0.0 + peerDependenciesMeta: + react: + optional: true + zod: + optional: true + + ai@4.0.7: + resolution: {integrity: sha512-8KWAHZbL2xwQwFqLX/3Cb9+r2xyu0acgYK2xii/kW6l5fl6Bq7Zng+jU7DF7lxNU3M9rf29Gkc0oVrTzkRVJjw==} + engines: {node: '>=18'} + peerDependencies: + react: ^18 || ^19 || ^19.0.0-rc + zod: ^3.0.0 + peerDependenciesMeta: + react: + optional: true + zod: + optional: true + + ai@4.0.9: + resolution: {integrity: sha512-25Ve05XJYjlV2os//J2WVITm8GXRRGgt9Y5vQyxnJJ6P4ttyH585Uc1fbOTh5tK1CEXTfn+Ml+Ux7oR9J8hImA==} + engines: {node: '>=18'} + peerDependencies: + react: ^18 || ^19 || ^19.0.0-rc + zod: ^3.0.0 + peerDependenciesMeta: + react: + optional: true + zod: + optional: true + ajv-draft-04@1.0.0: resolution: {integrity: sha512-mv00Te6nmYbRp5DCwclxtt7yV/joXJPGS7nM+97GdxvuttCOfgI3K4U25zboyeX0O+myI8ERluxQe5wljMmVIw==} peerDependencies: @@ -5441,6 +6600,9 @@ packages: ajv@8.17.1: resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==} + already@2.2.1: + resolution: {integrity: sha512-qk6RIVMS/R1yTvBzfIL1T76PsIL7DIVCINoLuFw2YXKLpLtsTobqdChMs8m3OhuPS3CEE3+Ra5ibYiqdyogbsQ==} + ansi-escapes@4.3.2: resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} engines: {node: '>=8'} @@ -5472,6 +6634,14 @@ packages: resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} engines: {node: '>= 8'} + aproba@2.0.0: + resolution: {integrity: sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==} + + are-we-there-yet@2.0.0: + resolution: {integrity: sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==} + engines: {node: '>=10'} + deprecated: This package is no longer supported. + arg@4.1.3: resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} @@ -5544,6 +6714,10 @@ packages: asap@2.0.6: resolution: {integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==} + assemblyai@4.8.0: + resolution: {integrity: sha512-TRIcthDBdJ+lj1ohLa516Kr/BO2AQn+IhBBl/eeomZGZym90aEC6qirc337hEPUxmmINSJ8XTSY4xwy51HmDGA==} + engines: {node: '>=18'} + assertion-error@1.1.0: resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==} @@ -5566,6 +6740,9 @@ packages: resolution: {integrity: sha512-LElXdjswlqjWrPpJFg1Fx4wpkOCxj1TDHlSV4PlaRxHGWko024xICaa97ZkMfs6DRKlCguiAI+rbXv5GWwXIkg==} hasBin: true + async@3.2.6: + resolution: {integrity: sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==} + asynckit@0.4.0: resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} @@ -5588,8 +6765,8 @@ packages: resolution: {integrity: sha512-RE3mdQ7P3FRSe7eqCWoeQ/Z9QXrtniSjp1wUjt5nRC3WIpz5rSCve6o3fsZ2aCpJtrZjSZgjwXAoTO5k4tEI0w==} engines: {node: '>=4'} - axios@1.7.7: - resolution: {integrity: sha512-S4kL7XrjgBmvdGut0sN3yJxqYzrDOnivkBiN0OFs6hLiUam3UPvswUo0kqGyhqUZGEOytHyumEdXsAkgCOUf3Q==} + axios@1.7.8: + resolution: {integrity: sha512-Uu0wb7KNqK2t5K+YQyVCLM76prD5sRFjKHbJYCP1J7JFGEQ6nN7HWn9+04LAeiJ3ji54lgS/gZCH1oxyrf1SPw==} axobject-query@4.1.0: resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==} @@ -5629,6 +6806,10 @@ packages: resolution: {integrity: sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==} engines: {node: ^4.5.0 || >= 5.9} + basic-auth@2.0.1: + resolution: {integrity: sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==} + engines: {node: '>= 0.8'} + basic-ftp@5.0.5: resolution: {integrity: sha512-4Bcg1P8xhUuqcii/S0Z9wiHIrQVPMermM1any+MX5GeGD7faD3/msQUDGLol9wOcz4/jbg/WJnGqoJF6LiBdtg==} engines: {node: '>=10.0.0'} @@ -5640,6 +6821,9 @@ packages: resolution: {integrity: sha512-aVNobHnJqLiUelTaHat9DZ1qM2w0C0Eym4LPI/3JxOnSokGVdsl1T1kN7TFvsEAD8G47A6VKQ0TVHqbBnYMJlQ==} engines: {node: '>=12.0.0'} + bignumber.js@9.1.2: + resolution: {integrity: sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug==} + bin-links@4.0.4: resolution: {integrity: sha512-cMtq4W5ZsEwcutJrVId+a/tjt8GSbS+h0oNkdl6+6rBuEv8Ot33Bevj5KPm40t309zuhVic8NjpuL42QCiJWWA==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} @@ -5658,6 +6842,9 @@ packages: bl@5.1.0: resolution: {integrity: sha512-tv1ZJHLfTDnXE6tMHv73YgSJaWR2AFuPwMntBe7XL/GBFHnT0CLnsHMogfk5+GzCDC5ZWarSCYaIGATZt9dNsQ==} + bluebird@3.4.7: + resolution: {integrity: sha512-iD3898SR7sWVRHbiQv+sHUtHnMvC1o3nW5rAcqnq3uOn07DSAppZYUkIGslDz6gXC7HfunPe7YVBgoEJASPcHA==} + bluebird@3.7.2: resolution: {integrity: sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==} @@ -5683,9 +6870,16 @@ packages: engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true + bson@6.10.0: + resolution: {integrity: sha512-ROchNosXMJD2cbQGm84KoP7vOGPO6/bOAW0veMMbzhXLqoZptcaYRVLitwvuhwhjjpU1qP4YZRWLhgETdgqUQw==} + engines: {node: '>=16.20.1'} + buffer-crc32@0.2.13: resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==} + buffer-equal-constant-time@1.0.1: + resolution: {integrity: sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==} + buffer-from@1.1.2: resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} @@ -5751,6 +6945,9 @@ packages: resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} engines: {node: '>= 0.4'} + callguard@2.0.0: + resolution: {integrity: sha512-I3nd+fuj20FK1qu00ImrbH+II+8ULS6ioYr9igqR1xyqySoqc3DiHEyUM0mkoAdKeLGg2CtGnO8R3VRQX5krpQ==} + callsites@3.1.0: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} @@ -5759,9 +6956,21 @@ packages: resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} engines: {node: '>= 6'} + camelcase@4.1.0: + resolution: {integrity: sha512-FxAv7HpHrXbh3aPo4o2qxHay2lkLY3x5Mw3KeE4KQE8ysVfziWeRZDwcjauvwBSGEC/nXUPzZy8zeh4HokqOnw==} + engines: {node: '>=4'} + + camelcase@6.3.0: + resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} + engines: {node: '>=10'} + caniuse-lite@1.0.30001673: resolution: {integrity: sha512-WTrjUCSMp3LYX0nE12ECkV0a+e6LC85E0Auz75555/qr78Oc8YWhEPNfDd6SHdtlCMSzqtuXY0uyEMNRcsKpKw==} + canvas@2.11.2: + resolution: {integrity: sha512-ItanGBMrmRV7Py2Z+Xhs7cT+FNt5K0vPL4p9EZ/UX/Mu7hFbkxSjKF2KVtPwX7UYWp7dRKnrTvReflgrItJbdw==} + engines: {node: '>=6'} + case-anything@3.1.0: resolution: {integrity: sha512-rRYnn5Elur8RuNHKoJ2b0tgn+pjYxL7BzWom+JZ7NKKn1lt/yGV/tUNwOovxYa9l9VL5hnXQdMc+mENbhJzosQ==} engines: {node: '>=18'} @@ -5825,10 +7034,50 @@ packages: resolution: {integrity: sha512-n8enUVCED/KVRQlab1hr3MVpcVMvxtZjmEa956u+4YijlmQED223XMSYj2tLuKvr4jcCTzNNMpQDUer72MMmzA==} engines: {node: '>= 14.16.0'} + chownr@1.1.4: + resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==} + chownr@2.0.0: resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==} engines: {node: '>=10'} + chownr@3.0.0: + resolution: {integrity: sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==} + engines: {node: '>=18'} + + chromadb-default-embed@2.13.2: + resolution: {integrity: sha512-mhqo5rLjkF2KkxAV0WS82vNIXWpVMzvz5y5ayIB2FxcebUbEBNlcRh6XSSqYChWMfJ9us1ZzLQU8RXqsy3sKaA==} + + chromadb@1.9.2: + resolution: {integrity: sha512-JNeLKlrsPxld7oPJCNeF73yHyyYeyP950enWRkTa6WsJ6UohH2NQ1vXZu6lWO9WuA9EMypITyZFZ8KtcTV3y2Q==} + engines: {node: '>=14.17.0'} + peerDependencies: + '@google/generative-ai': ^0.1.1 + cohere-ai: ^5.0.0 || ^6.0.0 || ^7.0.0 + openai: ^3.0.0 || ^4.0.0 + peerDependenciesMeta: + '@google/generative-ai': + optional: true + cohere-ai: + optional: true + openai: + optional: true + + chromadb@1.9.4: + resolution: {integrity: sha512-KtBy3uvZWV5+B6tlSYxwi8YW+Dv+qBs2spffSaamLeAHLn+N4ss6xoscLWDp5J1ImfscT8NFW1lGZlTZbs8Huw==} + engines: {node: '>=14.17.0'} + peerDependencies: + '@google/generative-ai': ^0.1.1 + cohere-ai: ^5.0.0 || ^6.0.0 || ^7.0.0 + openai: ^3.0.0 || ^4.0.0 + peerDependenciesMeta: + '@google/generative-ai': + optional: true + cohere-ai: + optional: true + openai: + optional: true + chrome-trace-event@1.0.4: resolution: {integrity: sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==} engines: {node: '>=6.0'} @@ -5913,20 +7162,39 @@ packages: code-red@1.0.4: resolution: {integrity: sha512-7qJWqItLA8/VPVlKJlFXU+NBlo/qyfs39aJcuMT/2ere32ZqvF5OSxgdM5xOfJJ7O429gg2HM47y8v9P+9wrNw==} + cohere-ai@7.14.0: + resolution: {integrity: sha512-hSo2/tFV29whjFFtVtdS7kHmtUsjfMO1sgwE/d5bhOE4O7Vkj5G1R9lLIqkIprp/+rrvCq3HGvEaOgry7xRcDA==} + + color-convert@1.9.3: + resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} + color-convert@2.0.1: resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} engines: {node: '>=7.0.0'} + color-name@1.1.3: + resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} + color-name@1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} color-string@1.9.1: resolution: {integrity: sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==} + color-support@1.1.3: + resolution: {integrity: sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==} + hasBin: true + + color@3.2.1: + resolution: {integrity: sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==} + color@4.2.3: resolution: {integrity: sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==} engines: {node: '>=12.5.0'} + colorspace@1.1.4: + resolution: {integrity: sha512-BgvKJiuVu1igBUF2kEjRCZXol6wiiGbY5ipL/oVPwm0BL9sIpMIzM8IK7vwuxIIzOXMV3Ey5w+vxhm0rR/TN8w==} + combined-stream@1.0.8: resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} engines: {node: '>= 0.8'} @@ -5952,6 +7220,10 @@ packages: resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} engines: {node: '>= 6'} + commander@5.1.0: + resolution: {integrity: sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==} + engines: {node: '>= 6'} + commander@8.3.0: resolution: {integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==} engines: {node: '>= 12'} @@ -5982,6 +7254,9 @@ packages: resolution: {integrity: sha512-I5qxpzLv+sJhTVEoLYNcTW+bThDCPsit0vLNKShZx6rLtpilNpmmeTPaeqJb9ZE9dV3DGaeby6Vuhrw38WjeyQ==} engines: {node: ^14.18.0 || >=16.10.0} + console-control-strings@1.1.0: + resolution: {integrity: sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==} + consolidate@0.15.1: resolution: {integrity: sha512-DW46nrsMJgy9kqAbPt5rKaCr7uFtpo4mSUvLHIUbJEjm0vo+aY5QLwBUq3FK4tRnJr/X0Psc0C4jf/h+HtXSMw==} engines: {node: '>= 0.10.0'} @@ -6184,6 +7459,9 @@ packages: core-js@3.38.1: resolution: {integrity: sha512-OP35aUorbU3Zvlx7pjsFdu1rGNnD4pgw/CWoYzRY3t2EzoVT7shKHY1dlAy3f41cGIO7ZDPQimhGFTlEYkG/Hw==} + core-util-is@1.0.3: + resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} + cors@2.8.5: resolution: {integrity: sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==} engines: {node: '>= 0.10'} @@ -6204,6 +7482,9 @@ packages: resolution: {integrity: sha512-p0SaNjrHOnQeR8/VnfGbmg9te2kfyYSQ7Sc/j/6DtPL3JQvKxmjO9TSjNFpujqV3vEYYBvNNvXSxzyksBWAx1Q==} engines: {node: '>=12.0.0'} + cross-fetch@3.1.8: + resolution: {integrity: sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg==} + cross-spawn@7.0.3: resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} engines: {node: '>= 8'} @@ -6301,6 +7582,9 @@ packages: date-fns@3.6.0: resolution: {integrity: sha512-fRHTG8g/Gif+kSh50gaGEdToemgfj74aRX3swtiouboip5JDLAyDE9F11nHMIcvOaXeOC6D7SpNhi7uFyB7Uww==} + dayjs@1.11.13: + resolution: {integrity: sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==} + debounce@2.0.0: resolution: {integrity: sha512-xRetU6gL1VJbs85Mc4FoEGSjQxzpdxRyFhe3lmWFyy2EzydIcD4xzUvRJMD+NPDfMwKNhxa3PvsIOU32luIWeA==} engines: {node: '>=18'} @@ -6330,6 +7614,10 @@ packages: supports-color: optional: true + decamelize@1.2.0: + resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==} + engines: {node: '>=0.10.0'} + decimal.js-light@2.5.1: resolution: {integrity: sha512-qIMFpTMZmny+MMIitAB6D7iVPEorVw6YQRWkvarTkT4tBeSLLiHzcwj6q0MmYSFCiVpiqPJTJEYIrpcPzVEIvg==} @@ -6339,6 +7627,10 @@ packages: decode-named-character-reference@1.0.2: resolution: {integrity: sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==} + decompress-response@4.2.1: + resolution: {integrity: sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw==} + engines: {node: '>=8'} + decompress-response@6.0.0: resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==} engines: {node: '>=10'} @@ -6351,6 +7643,10 @@ packages: resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==} engines: {node: '>=6'} + deep-extend@0.6.0: + resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==} + engines: {node: '>=4.0.0'} + deep-is@0.1.4: resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} @@ -6385,6 +7681,9 @@ packages: resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} engines: {node: '>=0.4.0'} + delegates@1.0.0: + resolution: {integrity: sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==} + denque@2.1.0: resolution: {integrity: sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==} engines: {node: '>=0.10'} @@ -6455,10 +7754,19 @@ packages: resolution: {integrity: sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==} engines: {node: '>=0.3.1'} + dingbat-to-unicode@1.0.1: + resolution: {integrity: sha512-98l0sW87ZT58pU4i61wa2OHwxbiYSbuxsCBozaVnYX2iCnr3bLM3fIes1/ej7h1YdOKuKt/MLs706TVnALA65w==} + dir-glob@3.0.1: resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} engines: {node: '>=8'} + discord-api-types@0.37.110: + resolution: {integrity: sha512-wVaAJkrSgNRo8nd523qKYPqkClTNHhjKOk/g6265rzHuc7TNS6Ivz06DPW4iZvnhFobbH95hKlgsRf6jcAbtlA==} + + discord-api-types@0.37.97: + resolution: {integrity: sha512-No1BXPcVkyVD4ZVmbNgDKaBoqgeQ+FJpzZ8wqHkfmBnTZig1FcH3iPPersiK1TUIAzgClh2IvOuVUYfcWLQAOA==} + dlv@1.1.3: resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} @@ -6608,9 +7916,18 @@ packages: sqlite3: optional: true + duck@0.1.12: + resolution: {integrity: sha512-wkctla1O6VfP89gQ+J/yDesM0S7B7XLXjKGzXxMDVFg7uEn706niAtyYovKbyq1oT9YwDcly721/iUWoc8MVRg==} + + duplexify@4.1.3: + resolution: {integrity: sha512-M3BmBhwJRZsSx38lZyhE53Csddgzl5R7xGJNk7CVddZD6CcmwMCH8J+7AprIrQKH7TonKxaCjcv27Qmf+sQ+oA==} + eastasianwidth@0.2.0: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} + ecdsa-sig-formatter@1.0.11: + resolution: {integrity: sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==} + editions@6.21.0: resolution: {integrity: sha512-ofkXJtn7z0urokN62DI3SBo/5xAtF0rR7tn+S/bSYV79Ka8pTajIIl+fFQ1q88DQEImymmo97M4azY3WX/nUdg==} engines: {node: '>=4'} @@ -6632,6 +7949,9 @@ packages: emoji-regex@9.2.2: resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + enabled@2.0.0: + resolution: {integrity: sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ==} + encodeurl@1.0.2: resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==} engines: {node: '>= 0.8'} @@ -7024,6 +8344,10 @@ packages: resolution: {integrity: sha512-gMaRLm5zejEH9mNXC54AnIteFI9YwL/q5JKMdBnoG+lEI1JWVGFVk0Taaj9Xb5SKgzIBDZoQX5IzMe44ILWODg==} engines: {node: '>=18.0.0'} + eventsource-parser@3.0.0: + resolution: {integrity: sha512-T1C0XCUimhxVQzW4zFipdx0SficT651NnkR0ZSH3yQwh+mFMdLfgjABVi4YtMTtaL4s168593DaoaRLMqryavA==} + engines: {node: '>=18.0.0'} + execa@5.1.1: resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} engines: {node: '>=10'} @@ -7032,6 +8356,10 @@ packages: resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==} engines: {node: '>=16.17'} + expand-template@2.0.3: + resolution: {integrity: sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==} + engines: {node: '>=6'} + expect-type@1.1.0: resolution: {integrity: sha512-bFi65yM+xZgk+u/KRIpekdSYkTB5W1pEf0Lt8Q8Msh7b+eQ7LXVtIB1Bkm4fvclDEL1b2CZkMhv2mOeF8tMdkA==} engines: {node: '>=12.0.0'} @@ -7112,10 +8440,17 @@ packages: picomatch: optional: true + fecha@4.2.3: + resolution: {integrity: sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw==} + fetch-blob@3.2.0: resolution: {integrity: sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==} engines: {node: ^12.20 || >= 14.13} + fetch-h2@3.0.2: + resolution: {integrity: sha512-Lo6UPdMKKc9Ond7yjG2vq0mnocspOLh1oV6+XZdtfdexacvMSz5xm3WoQhTAdoR2+UqPlyMNqcqfecipoD+l/A==} + engines: {node: '>=12'} + fflate@0.4.8: resolution: {integrity: sha512-FJqqoDBR00Mdj9ppamLa/Y7vxm+PRmNWA67N846RvsoYVMKB4q3y/de5PA7gUmRMYK/8CMz2GDZQmCRN1wBcWA==} @@ -7151,6 +8486,9 @@ packages: resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} engines: {node: ^10.12.0 || >=12.0.0} + flatbuffers@1.12.0: + resolution: {integrity: sha512-c7CZADjRcl6j0PlvFy0ZqXQ67qSEZfrVPynmnL+2zPc+NtMvrF8Y0QceMo7QqnSPc7+uWjUIAbvCQ5WIKlMVdQ==} + flatted@3.3.1: resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==} @@ -7173,6 +8511,9 @@ packages: '@google-cloud/storage': optional: true + fn.name@1.1.0: + resolution: {integrity: sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==} + follow-redirects@1.15.9: resolution: {integrity: sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==} engines: {node: '>=4.0'} @@ -7196,6 +8537,18 @@ packages: resolution: {integrity: sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw==} engines: {node: '>= 14.17'} + form-data-encoder@4.0.2: + resolution: {integrity: sha512-KQVhvhK8ZkWzxKxOr56CPulAhH3dobtuQ4+hNQ+HekH/Wp5gSOafqRAeTphQUJAIk0GBvHZgJ2ZGRWd5kphMuw==} + engines: {node: '>= 18'} + + form-data@2.5.2: + resolution: {integrity: sha512-GgwY0PS7DbXqajuGf4OYlsrIu3zgxD6Vvql43IBhm6MahqA5SK/7mwhtNj2AdH2z35YR34ujJ7BN+3fFC3jP5Q==} + engines: {node: '>= 0.12'} + + form-data@4.0.0: + resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==} + engines: {node: '>= 6'} + form-data@4.0.1: resolution: {integrity: sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==} engines: {node: '>= 6'} @@ -7208,6 +8561,10 @@ packages: resolution: {integrity: sha512-0iirZp3uVDjVGt9p49aTaqjk84TrglENEDuqfdlZQ1roC9CWlPk6Avf8EEnZNcAqPonwkG35x4n3ww/1THYAeQ==} engines: {node: '>= 12.20'} + formdata-node@6.0.3: + resolution: {integrity: sha512-8e1++BCiTzUno9v5IZ2J6bv4RU+3UKDmqWUQD0MIMVCd9AdhWkO1gw57oo1mNEX1dMq2EGI+FbWz4B92pscSQg==} + engines: {node: '>= 18'} + formdata-polyfill@4.0.10: resolution: {integrity: sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==} engines: {node: '>=12.20.0'} @@ -7226,10 +8583,16 @@ packages: resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==} engines: {node: '>= 0.6'} + fs-constants@1.0.0: + resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==} + fs-extra@11.2.0: resolution: {integrity: sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==} engines: {node: '>=14.14'} + fs-extra@2.1.2: + resolution: {integrity: sha512-9ztMtDZtSKC78V8mev+k31qaTabbmuH5jatdvPBMikrFHvw5BqlYnQIn/WGK3WHeRooSTkRvLa2IPlaHjPq5Sg==} + fs-minipass@2.1.0: resolution: {integrity: sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==} engines: {node: '>= 8'} @@ -7241,6 +8604,10 @@ packages: fs-monkey@1.0.6: resolution: {integrity: sha512-b1FMfwetIKymC0eioW7mTywihSQE4oLzQn1dB6rZB5fx/3NpNEdAWeCSMB+60/AeT0TCXsxzAlcYVEFCTAksWg==} + fs-promise@2.0.3: + resolution: {integrity: sha512-oDrTLBQAcRd+p/tSRWvqitKegLPsvqr7aehs5N9ILWFM9az5y5Uh71jKdZ/DTMC4Kel7+GNCQyFCx/IftRv8yg==} + deprecated: Use mz or fs-extra^3.0 with Promise Support + fs.realpath@1.0.0: resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} @@ -7259,9 +8626,26 @@ packages: functions-have-names@1.2.3: resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} + gauge@3.0.2: + resolution: {integrity: sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==} + engines: {node: '>=10'} + deprecated: This package is no longer supported. + + gaxios@6.7.1: + resolution: {integrity: sha512-LDODD4TMYx7XXdpwxAVRAIAuB0bzv0s+ywFonY46k126qzQHT9ygyoa9tncmOiQmmDrik65UYsEkv3lbfqQ3yQ==} + engines: {node: '>=14'} + gcd@0.0.1: resolution: {integrity: sha512-VNx3UEGr+ILJTiMs1+xc5SX1cMgJCrXezKPa003APUWNqQqaF6n25W8VcR7nHN6yRWbvvUTwCpZCFJeWC2kXlw==} + gcp-metadata@6.1.0: + resolution: {integrity: sha512-Jh/AIwwgaxan+7ZUUmRLCjtchyDiqh4KjBJ5tW3plBZb5iL/BPcso8A5DlzeD9qlw0duCamnNdpFjxwaT0KyKg==} + engines: {node: '>=14'} + + generic-pool@3.9.0: + resolution: {integrity: sha512-hymDOu5B53XvN4QT9dBmZxPX4CWhBPPLguTZ9MMFeFa/Kg0xWVfylOVNlJji/E7yTZWFd/q9GO5TxDLq156D7g==} + engines: {node: '>= 4'} + gensync@1.0.0-beta.2: resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} engines: {node: '>=6.9.0'} @@ -7311,6 +8695,9 @@ packages: git-hooks-list@3.1.0: resolution: {integrity: sha512-LF8VeHeR7v+wAbXqfgRlTSX/1BJR9Q1vEMR8JAz1cEg6GX07+zyj3sAdDvYjj/xnlIfVuGgj4qBei1K3hKH+PA==} + github-from-package@0.0.0: + resolution: {integrity: sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==} + glob-parent@5.1.2: resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} engines: {node: '>= 6'} @@ -7369,6 +8756,14 @@ packages: resolution: {integrity: sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + google-auth-library@9.15.0: + resolution: {integrity: sha512-7ccSEJFDFO7exFbO6NRyC+xH8/mZ1GZGG2xxx9iHxZWcjUjJpjWxIMw3cofAKcueZ6DATiukmmprD7yavQHOyQ==} + engines: {node: '>=14'} + + google-gax@4.4.1: + resolution: {integrity: sha512-Phyp9fMfA00J3sZbJxbbB4jC55b7DBjE3F6poyL3wKMEBVKA79q6BGuHcTiM28yOzVql0NDbRL8MLLh8Iwk9Dg==} + engines: {node: '>=14'} + google-protobuf@3.21.4: resolution: {integrity: sha512-MnG7N936zcKTco4Jd2PX2U96Kf9PxygAPKBug+74LHzmHXmceN16MmRcdgZv+DGef/S9YvQAfRsNCn4cjf9yyQ==} @@ -7387,12 +8782,20 @@ packages: resolution: {integrity: sha512-XfBk1CxOOScDcMr9O1yKkNaQyy865NbYs+F7dr4H0LZMVgCj2Le59k6PqbNHoL5ToeaEQUYh6c6yMfVcc6SJxA==} engines: {node: '>=16'} + gpt-tokenizer@2.7.0: + resolution: {integrity: sha512-QjxaGgCZgKp8ecZzy7AmrCbYs+DD+y7GWSRwbe2ZiHPBs1EaK8xUIrt8irnmkAQcNMflpD27tk5yF4m9ig3wgw==} + graceful-fs@4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} graphemer@1.4.0: resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} + graphql-request@6.1.0: + resolution: {integrity: sha512-p+XPfS4q7aIpKVcgmnZKhMNqhltk20hfXtkaIkTfjjmiKMJ5xrt5c743cL03y/K7y1rg3WrIC49xGiEQ4mxdNw==} + peerDependencies: + graphql: 14 - 16 + graphql@16.9.0: resolution: {integrity: sha512-GGTKBX4SD7Wdb8mqeDLni2oaRGYQWjWHGKPQ24ZMnUtKfcsVoiv4uX8+LJr1K6U5VW2Lu1BwJnj7uiori0YtRw==} engines: {node: ^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0} @@ -7401,6 +8804,16 @@ packages: resolution: {integrity: sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==} engines: {node: '>=6.0'} + groq-sdk@0.8.0: + resolution: {integrity: sha512-hSgCjZCkoM4CY/TWfsaNlh512svWRR2td4HGpmEV8MbVEVrxZARJq5BHt8gbEF9Gex092/X7VJvaQpha0dIC8g==} + + gtoken@7.1.0: + resolution: {integrity: sha512-pCcEwRi+TKpMlxAQObHDQ56KawURgyAf6jtIY046fJ5tIv3zDe/LEIubckAO8fj6JnAxLdmWkUfNyulQ2iKdEw==} + engines: {node: '>=14.0.0'} + + guid-typescript@1.0.9: + resolution: {integrity: sha512-Y8T4vYhEfwJOTbouREvG+3XDsjr8E3kIr7uf+JZ0BYloFsttiHU0WfvANVsR7TxNUJa/WpCnw/Ino/p+DeBhBQ==} + has-bigints@1.0.2: resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} @@ -7423,6 +8836,9 @@ packages: resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} engines: {node: '>= 0.4'} + has-unicode@2.0.1: + resolution: {integrity: sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==} + hasown@2.0.2: resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} engines: {node: '>= 0.4'} @@ -7596,6 +9012,10 @@ packages: resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} engines: {node: '>= 0.8'} + http-proxy-agent@5.0.0: + resolution: {integrity: sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==} + engines: {node: '>= 6'} + http-proxy-agent@7.0.2: resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==} engines: {node: '>= 14'} @@ -7649,6 +9069,9 @@ packages: resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} engines: {node: '>= 4'} + immediate@3.0.6: + resolution: {integrity: sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==} + import-fresh@3.3.0: resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} engines: {node: '>=6'} @@ -7672,6 +9095,9 @@ packages: resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. + infobox-parser@3.6.4: + resolution: {integrity: sha512-d2lTlxKZX7WsYxk9/UPt51nkmZv5tbC75SSw4hfHqZ3LpRAn6ug0oru9xI2X+S78va3aUAze3xl/UqMuwLmJUw==} + inherits@2.0.4: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} @@ -7958,6 +9384,9 @@ packages: resolution: {integrity: sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==} engines: {node: '>=16'} + isomorphic-fetch@3.0.0: + resolution: {integrity: sha512-qvUtwJ3j6qwsF3jLxkZ72qCgjMysPzDfeV240JHiGZsANBYd+EEuu35v7dfrJ9Up0Ak07D7GGSkGhCHTqg/5wA==} + istextorbinary@9.5.0: resolution: {integrity: sha512-5mbUj3SiZXCuRf9fT3ibzbSSEWiy63gFfksmGfdOzujPjW3k+z8WvIBxcJHBoQNlaZaiyB25deviif2+osLmLw==} engines: {node: '>=4'} @@ -7999,6 +9428,9 @@ packages: resolution: {integrity: sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==} engines: {node: '>=10'} + js-base64@3.7.2: + resolution: {integrity: sha512-NnRs6dsyqUXejqk/yv2aiXlAvOs56sLkX6nUdeaNezI5LFFLlsZjOThmwnrcwh5ZZRwZlCMnVAY3CvhIhoVEKQ==} + js-beautify@1.15.1: resolution: {integrity: sha512-ESjNzSlt/sWE8sciZH8kBF8BPlwXPwhR6pWKAw8bw4Bwj+iZcnKW6ONWUutJ7eObuBZQpiIb8S7OYspWrKt7rA==} engines: {node: '>=14'} @@ -8008,6 +9440,9 @@ packages: resolution: {integrity: sha512-cEiJEAEoIbWfCZYKWhVwFuvPX1gETRYPw6LlaTKoxD3s2AkXzkCjnp6h0V77ozyqj0jakteJ4YqDJT830+lVGw==} engines: {node: '>=14'} + js-tiktoken@1.0.15: + resolution: {integrity: sha512-65ruOWWXDEZHHbAo7EjOcNxOGasQKbL4Fq3jEr2xsCqSsoOo6VVSqzWQb6PRIqypFSDcma4jO90YP0w5X8qVXQ==} + js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} @@ -8022,6 +9457,9 @@ packages: resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} hasBin: true + jsbi@4.3.0: + resolution: {integrity: sha512-SnZNcinB4RIcnEyZqFPdGPVgrg2AcnykiBy0sHVJQKHYeaLUvi3Exj+iaPpLnFVkDPZIV4U0yvgC9/R4uEAZ9g==} + jsbn@1.1.0: resolution: {integrity: sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==} @@ -8043,6 +9481,9 @@ packages: engines: {node: '>=6'} hasBin: true + json-bigint@1.0.0: + resolution: {integrity: sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==} + json-buffer@3.0.1: resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} @@ -8082,6 +9523,9 @@ packages: engines: {node: ^18.0.0 || >=20.0.0} hasBin: true + jsonfile@2.4.0: + resolution: {integrity: sha512-PKllAqbgLgxHaj8TElYymKCAgrASebJrWpTnEkOaTowt23VKXXN0sUeriJ+eh7y6ufb/CC5ap11pz71/cM0hUw==} + jsonfile@6.1.0: resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} @@ -8093,16 +9537,35 @@ packages: resolution: {integrity: sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==} engines: {node: '>=0.10.0'} + jsonwebtoken@9.0.2: + resolution: {integrity: sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==} + engines: {node: '>=12', npm: '>=6'} + jsx-ast-utils@3.3.5: resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==} engines: {node: '>=4.0'} + jszip@3.10.1: + resolution: {integrity: sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==} + just-diff-apply@5.5.0: resolution: {integrity: sha512-OYTthRfSh55WOItVqwpefPtNt2VdKsq5AnAK6apdtR6yCH8pr0CmSr710J0Mf+WdQy7K/OzMy7K2MgAfdQURDw==} just-diff@6.0.2: resolution: {integrity: sha512-S59eriX5u3/QhMNq3v/gm8Kd0w8OS6Tz2FS1NG4blv+z0MuQcBRJyFWjdovM0Rad4/P4aUPFtnkNjMjyMlMSYA==} + jwa@1.4.1: + resolution: {integrity: sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==} + + jwa@2.0.0: + resolution: {integrity: sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA==} + + jws@3.2.2: + resolution: {integrity: sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==} + + jws@4.0.0: + resolution: {integrity: sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==} + katex@0.16.11: resolution: {integrity: sha512-RQrI8rlHY92OLf3rho/Ts8i/XvjgguEjOkO1BEXcU3N8BqPpSzBNwV/G0Ukr+P/l3ivvJUE/Fa/CwbS6HesGNQ==} hasBin: true @@ -8118,6 +9581,63 @@ packages: resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} engines: {node: '>=6'} + kuler@2.0.0: + resolution: {integrity: sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==} + + langchain@0.3.6: + resolution: {integrity: sha512-erZOIKXzwCOrQHqY9AyjkQmaX62zUap1Sigw1KrwMUOnVoLKkVNRmAyxFlNZDZ9jLs/58MaQcaT9ReJtbj3x6w==} + engines: {node: '>=18'} + peerDependencies: + '@langchain/anthropic': '*' + '@langchain/aws': '*' + '@langchain/cohere': '*' + '@langchain/core': '>=0.2.21 <0.4.0' + '@langchain/google-genai': '*' + '@langchain/google-vertexai': '*' + '@langchain/groq': '*' + '@langchain/mistralai': '*' + '@langchain/ollama': '*' + axios: '*' + cheerio: '*' + handlebars: ^4.7.8 + peggy: ^3.0.2 + typeorm: '*' + peerDependenciesMeta: + '@langchain/anthropic': + optional: true + '@langchain/aws': + optional: true + '@langchain/cohere': + optional: true + '@langchain/google-genai': + optional: true + '@langchain/google-vertexai': + optional: true + '@langchain/groq': + optional: true + '@langchain/mistralai': + optional: true + '@langchain/ollama': + optional: true + axios: + optional: true + cheerio: + optional: true + handlebars: + optional: true + peggy: + optional: true + typeorm: + optional: true + + langsmith@0.2.8: + resolution: {integrity: sha512-wKVNZoYtd8EqQWUEsfDZlZ77rH7vVqgNtONXRwynUp7ZFMFUIPhSlqE9pXqrmYPE8ZTBFj7diag2lFgUuaOEKw==} + peerDependencies: + openai: '*' + peerDependenciesMeta: + openai: + optional: true + language-subtag-registry@0.3.23: resolution: {integrity: sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==} @@ -8139,6 +9659,9 @@ packages: resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} engines: {node: '>= 0.8.0'} + lie@3.3.0: + resolution: {integrity: sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==} + lilconfig@2.1.0: resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} engines: {node: '>=10'} @@ -8150,6 +9673,18 @@ packages: lines-and-columns@1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + llamaindex@0.8.26: + resolution: {integrity: sha512-D/2/UZHzlxa9Zqr/Daq42MfuBPz9KhUAt2OurF58YSdpdBBxdcE76RHyHYIK+cAV+cquY1VnaUnVUZ7oabXozw==} + engines: {node: '>=20.0.0'} + peerDependencies: + pg: ^8.12.0 + pgvector: 0.2.0 + peerDependenciesMeta: + pg: + optional: true + pgvector: + optional: true + load-tsconfig@0.2.5: resolution: {integrity: sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -8186,12 +9721,33 @@ packages: lodash.defaults@4.2.0: resolution: {integrity: sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==} + lodash.includes@4.3.0: + resolution: {integrity: sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==} + lodash.isarguments@3.1.0: resolution: {integrity: sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg==} + lodash.isboolean@3.0.3: + resolution: {integrity: sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==} + + lodash.isinteger@4.0.4: + resolution: {integrity: sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==} + + lodash.isnumber@3.0.3: + resolution: {integrity: sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==} + + lodash.isplainobject@4.0.6: + resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==} + + lodash.isstring@4.0.1: + resolution: {integrity: sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==} + lodash.merge@4.6.2: resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + lodash.once@4.1.1: + resolution: {integrity: sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==} + lodash.sortby@4.7.0: resolution: {integrity: sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==} @@ -8206,6 +9762,17 @@ packages: resolution: {integrity: sha512-l0x2DvrW294C9uDCoQe1VSU4gf529FkSZ6leBl4TiqZH/e+0R7hSfHQBNut2mNygDgHwvYHfFLn6Oxb3VWj2rA==} engines: {node: '>=12'} + logform@2.7.0: + resolution: {integrity: sha512-TFYA4jnP7PVbmlBIfhlSe+WKxs9dklXMTEGcBCIvLhE/Tn3H6Gk1norupVW7m5Cnd4bLcr08AytbyV/xj7f/kQ==} + engines: {node: '>= 12.0.0'} + + long@1.1.5: + resolution: {integrity: sha512-TU6nAF5SdasnTr28c7e74P4Crbn9o3/zwo1pM22Wvg2i2vlZ4Eelxwu4QT7j21z0sDBlJDEnEZjXTZg2J8WJrg==} + engines: {node: '>=0.6'} + + long@4.0.0: + resolution: {integrity: sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==} + long@5.2.3: resolution: {integrity: sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q==} @@ -8220,6 +9787,9 @@ packages: resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} hasBin: true + lop@0.4.2: + resolution: {integrity: sha512-RefILVDQ4DKoRZsJ4Pj22TxE3omDO47yFpkIBoDKzkqPRISs5U1cnAdg/5583YPkWPaLIYHOKRMQSvjFsO26cw==} + loupe@2.3.7: resolution: {integrity: sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==} @@ -8251,6 +9821,10 @@ packages: resolution: {integrity: sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==} engines: {node: '>=12'} + lru-cache@9.1.2: + resolution: {integrity: sha512-ERJq3FOzJTxBbFjZ7iDs+NiK4VI9Wz+RdrrAB8dio1oV+YvdPzUEE4QNiT2VD51DkIbCYRUUzCRkssXCHqSnKQ==} + engines: {node: 14 || >=16.14} + lucia@3.2.2: resolution: {integrity: sha512-P1FlFBGCMPMXu+EGdVD9W4Mjm0DqsusmKgO7Xc33mI5X1bklmsQb0hfzPhXomQr9waWIBDsiOjvr1e6BTaUqpA==} @@ -8267,6 +9841,9 @@ packages: resolution: {integrity: sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==} hasBin: true + magic-bytes.js@1.10.0: + resolution: {integrity: sha512-/k20Lg2q8LE5xiaaSkMXk4sfvI+9EGEykFS4b0CHHGWqDYU0bGUFSwchNOMA56D7TCs9GwVTkqe9als1/ns8UQ==} + magic-string@0.30.12: resolution: {integrity: sha512-Ea8I3sQMVXr8JhN4z+H/d8zwo+tYDgHE9+5G4Wnrwhs0gaK9fXTKx0Tw5Xwsd/bCPTTZNRAdpyzvoeORe9LYpw==} @@ -8277,6 +9854,10 @@ packages: mailgun.js@8.2.2: resolution: {integrity: sha512-po/KtofzrTuKhHLenbmliDsVVOFANwcfDFUGnggwnyZJmZz7JgBlV6nzK9o2Fk+OK2SiBmJTK25RbkAj57Hd+Q==} + make-dir@3.1.0: + resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} + engines: {node: '>=8'} + make-error@1.3.6: resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} @@ -8284,6 +9865,11 @@ packages: resolution: {integrity: sha512-cKTUFc/rbKUd/9meOvgrpJ2WrNzymt6jfRDdwg5UCnVzv9dTpEj9JS5m3wtziXVCjluIXyL8pcaukYqezIzZQA==} engines: {node: ^16.14.0 || >=18.0.0} + mammoth@1.8.0: + resolution: {integrity: sha512-pJNfxSk9IEGVpau+tsZFz22ofjUsl2mnA5eT8PjPs2n0BP+rhVte4Nez6FdgEuxv3IGI3afiV46ImKqTGDVlbA==} + engines: {node: '>=12.0.0'} + hasBin: true + markdown-extensions@1.1.1: resolution: {integrity: sha512-WWC0ZuMzCyDHYCasEGs4IPvLyTGftYwh6wIEOULOF0HXcqZlhwRzrK0w2VUlxWA98xnvb/jszw4ZSkJ6ADpM6Q==} engines: {node: '>=0.10.0'} @@ -8301,6 +9887,9 @@ packages: peerDependencies: react: 18.x + md-utils-ts@2.0.0: + resolution: {integrity: sha512-sMG6JtX0ebcRMHxYTcmgsh0/m6o8hGdQHFE2OgjvflRZlQM51CGGj/uuk056D+12BlCiW0aTpt/AdlDNtgQiew==} + mdast-util-definitions@5.1.2: resolution: {integrity: sha512-8SVPMuHqlPME/z3gqVwWY4zVXn8lqKv/pAhC57FuJ40ImXyBpmO5ukh98zB2v7Blql2FiHjHv9LVztSIqjY+MA==} @@ -8424,6 +10013,9 @@ packages: resolution: {integrity: sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==} engines: {node: '>= 4.0.0'} + memory-pager@1.5.0: + resolution: {integrity: sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==} + merge-descriptors@1.0.3: resolution: {integrity: sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==} @@ -8688,6 +10280,10 @@ packages: resolution: {integrity: sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==} engines: {node: '>=4'} + mimic-response@2.1.0: + resolution: {integrity: sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==} + engines: {node: '>=8'} + mimic-response@3.1.0: resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==} engines: {node: '>=10'} @@ -8766,7 +10362,11 @@ packages: resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==} engines: {node: '>= 8'} - mintlify@4.0.256: + minizlib@3.0.1: + resolution: {integrity: sha512-umcy022ILvb5/3Djuu8LWeqUa8D68JaBzlttKeMWen48SjabqS3iY5w/vzeMzMUNhLDifyhbOwKDSznB1vvrwg==} + engines: {node: '>= 18'} + + mintlify@4.0.256: resolution: {integrity: sha512-NKVJo6y2LYjMfyE5jocepx6n4aWXcLq7FdMBvTix9zu8U9TATNySeNww2qqevjvqwQLfqlVPkMbIi9m7avmhdQ==} engines: {node: '>=18.0.0'} hasBin: true @@ -8774,11 +10374,19 @@ packages: mitt@3.0.1: resolution: {integrity: sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==} + mkdirp-classic@0.5.3: + resolution: {integrity: sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==} + mkdirp@1.0.4: resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==} engines: {node: '>=10'} hasBin: true + mkdirp@3.0.1: + resolution: {integrity: sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==} + engines: {node: '>=10'} + hasBin: true + mlly@1.7.2: resolution: {integrity: sha512-tN3dvVHYVz4DhSXinXIk7u9syPYaJvio118uomkovAtWBT+RdbP6Lfh/5Lvo519YMmwBafwlh20IPTXIStscpA==} @@ -8788,6 +10396,40 @@ packages: monaco-editor@0.50.0: resolution: {integrity: sha512-8CclLCmrRRh+sul7C08BmPBP3P8wVWfBHomsTcndxg5NRCEPfu/mc2AGU8k37ajjDVXcXFc12ORAMUkmk+lkFA==} + mongodb-connection-string-url@3.0.1: + resolution: {integrity: sha512-XqMGwRX0Lgn05TDB4PyG2h2kKO/FfWJyCzYQbIhXUxz7ETt0I/FqHjUeqj37irJ+Dl1ZtU82uYyj14u2XsZKfg==} + + mongodb@6.11.0: + resolution: {integrity: sha512-yVbPw0qT268YKhG241vAMLaDQAPbRyTgo++odSgGc9kXnzOujQI60Iyj23B9sQQFPSvmNPvMZ3dsFz0aN55KgA==} + engines: {node: '>=16.20.1'} + peerDependencies: + '@aws-sdk/credential-providers': ^3.188.0 + '@mongodb-js/zstd': ^1.1.0 + gcp-metadata: ^5.2.0 + kerberos: ^2.0.1 + mongodb-client-encryption: '>=6.0.0 <7' + snappy: ^7.2.2 + socks: ^2.7.1 + peerDependenciesMeta: + '@aws-sdk/credential-providers': + optional: true + '@mongodb-js/zstd': + optional: true + gcp-metadata: + optional: true + kerberos: + optional: true + mongodb-client-encryption: + optional: true + snappy: + optional: true + socks: + optional: true + + morgan@1.10.0: + resolution: {integrity: sha512-AbegBVI4sh6El+1gNwvD5YIck7nSA36weD7xvIxG4in80j/UoK8AEGaWnnz8v1GxonMCltmlNs5ZKbGvl9b1XQ==} + engines: {node: '>= 0.8.0'} + mri@1.2.0: resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} engines: {node: '>=4'} @@ -8815,6 +10457,10 @@ packages: typescript: optional: true + mustache@4.2.0: + resolution: {integrity: sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==} + hasBin: true + mute-stream@2.0.0: resolution: {integrity: sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==} engines: {node: ^18.17.0 || >=20.5.0} @@ -8822,6 +10468,9 @@ packages: mz@2.7.0: resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} + nan@2.22.0: + resolution: {integrity: sha512-nbajikzWTMwsW+eSsNm3QwlOs7het9gGJU5dDZzRTQGk03vyBOauxgI4VakDzE0PtsGTmXPsXTbbjVhRwR5mpw==} + nanoid@3.3.6: resolution: {integrity: sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} @@ -8832,11 +10481,19 @@ packages: engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true + nanoid@3.3.8: + resolution: {integrity: sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + nanoid@5.0.8: resolution: {integrity: sha512-TcJPw+9RV9dibz1hHUzlLVy8N4X9TnwirAjrU08Juo6BNKggzVfP2ZJ/3ZUSq15Xl5i85i+Z89XBO90pB2PghQ==} engines: {node: ^18 || >=20} hasBin: true + napi-build-utils@1.0.2: + resolution: {integrity: sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==} + natural-compare@1.4.0: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} @@ -8914,12 +10571,28 @@ packages: react: '>= 16.0.0' react-dom: '>= 16.0.0' + nice-grpc-client-middleware-retry@3.1.9: + resolution: {integrity: sha512-BgbsNjuppxD6hoeCfO5gkBA/G69Tq5d9QX35QLdA46NSjKllelC+FlcgSPMlO9VQKCAPDfp4zzzDJZTNtbvzVw==} + + nice-grpc-common@2.0.2: + resolution: {integrity: sha512-7RNWbls5kAL1QVUOXvBsv1uO0wPQK3lHv+cY1gwkTzirnG1Nop4cBJZubpgziNbaVc/bl9QJcyvsf/NQxa3rjQ==} + + nice-grpc@2.1.10: + resolution: {integrity: sha512-Nujs/4wWJvE5OSxWPp3M5H+zHJAgsWMo38bMNfKQP1VDeCChp7MiKTkhJBV5JZvrBIkPhYQCLIbfvVqEoSuTuA==} + nlcst-to-string@3.1.1: resolution: {integrity: sha512-63mVyqaqt0cmn2VcI2aH6kxe1rLAmSROqHMA0i4qqg1tidkfExgpb0FGMikMCn86mw5dFtBtEANfmSSK7TjNHw==} + node-abi@3.71.0: + resolution: {integrity: sha512-SZ40vRiy/+wRTf21hxkkEjPJZpARzUMVcJoQse2EF8qkUWbbO2z7vd5oA/H6bVH6SZQ5STGcu0KRDS7biNRfxw==} + engines: {node: '>=10'} + node-abort-controller@3.1.1: resolution: {integrity: sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ==} + node-addon-api@6.1.0: + resolution: {integrity: sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA==} + node-addon-api@8.2.1: resolution: {integrity: sha512-vmEOvxwiH8tlOcv4SyE8RH34rI5/nWVaigUeAUPawC6f0+HoDthwI0vkMu4tbtsZrXq6QXFfrkhjofzKEs5tpA==} engines: {node: ^18 || ^20 || >= 21} @@ -8983,6 +10656,11 @@ packages: resolution: {integrity: sha512-psAuZdTIRN08HKVd/E8ObdV6NO7NTBY3KsC30F7M4H1OnmLCUNaS56FpYxyb26zWLSyYF9Ozch9KYHhHegsiOQ==} engines: {node: '>=6.0.0'} + nopt@5.0.0: + resolution: {integrity: sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==} + engines: {node: '>=6'} + hasBin: true + nopt@7.2.1: resolution: {integrity: sha512-taM24ViiimT/XntxbPyJQzCG+p4EKOpgD3mxFwW38mGjVUrfERQOeY4EDHjdnptttfHuHQXFx+lTP08Q+mLa/w==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} @@ -9011,6 +10689,9 @@ packages: resolution: {integrity: sha512-IO9QvjUMWxPQQhs60oOu10CRkWCiZzSUkzbXGGV9pviYl1fXYcvkzQ5jV9z8Y6un8ARoVRl4EtC6v6jNqbaJ/w==} engines: {node: '>=14.16'} + notion-md-crawler@1.0.0: + resolution: {integrity: sha512-mdB6zn/i32qO2C7X7wZLDpWvFryO3bPYMuBfFgmTPomnfEtIejdQJNVaZzw2GapM82lfWZ5dfsZp3s3UL4p1Fg==} + npm-bundled@3.0.1: resolution: {integrity: sha512-+AvaheE/ww1JEwRHOrn4WHNzOxGtVp+adrg2AeZS/7KuxGUYFuBta98wYpfHBbJp6Tg6j1NKSEVHNcfZzJHQwQ==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} @@ -9047,9 +10728,23 @@ packages: resolution: {integrity: sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + npmlog@5.0.1: + resolution: {integrity: sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==} + deprecated: This package is no longer supported. + nprogress@0.2.0: resolution: {integrity: sha512-I19aIingLgR1fmhftnbWWO3dXc0hSxqHQHQb3H8m+K3TnEn/iSeTZZOyvKXWqQESMwuUVnatlCnZdLBZZt2VSA==} + nunjucks@3.2.4: + resolution: {integrity: sha512-26XRV6BhkgK0VOxfbU5cQI+ICFUtMLixv1noZn1tGU38kQH5A5nmmbk/O45xdyBhD1esk47nKrY0mvQpZIhRjQ==} + engines: {node: '>= 6.9.0'} + hasBin: true + peerDependencies: + chokidar: ^3.3.0 + peerDependenciesMeta: + chokidar: + optional: true + nwsapi@2.2.13: resolution: {integrity: sha512-cTGB9ptp9dY9A5VbMSe7fQBcl/tt22Vcqdq8+eN93rblOuE0aCFu4aZ2vMwct/2t+lFnosm8RkQW1I0Omb1UtQ==} @@ -9061,8 +10756,8 @@ packages: resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} engines: {node: '>= 6'} - object-inspect@1.13.2: - resolution: {integrity: sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==} + object-inspect@1.13.3: + resolution: {integrity: sha512-kDCGIbxkDSXE3euJZZXzc6to7fCrKHNI/hSRQnRuQ+BWjFNzZwiFF8fj/6o2t2G9/jTj8PSIYTfCLelLZEeRpA==} engines: {node: '>= 0.4'} object-keys@1.1.1: @@ -9096,13 +10791,27 @@ packages: resolution: {integrity: sha512-trBCPmYQDFUCmch6YBxHhMFkDyhTl+vG8PDQHPOwRyeCDKnrrKpph2W7og7hg5T5RRF0yeyaOMasN7GZWbYuCA==} hasBin: true + ollama@0.5.10: + resolution: {integrity: sha512-M5O4u6S6yZeeKFrKA7ZfGGLjK54otOVGPrOUc3N64zSTpz9J+x/nh93dmD6Py7YLgXzq9I6Nq+PDDoaqJuV3LQ==} + + on-finished@2.3.0: + resolution: {integrity: sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==} + engines: {node: '>= 0.8'} + on-finished@2.4.1: resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} engines: {node: '>= 0.8'} + on-headers@1.0.2: + resolution: {integrity: sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==} + engines: {node: '>= 0.8'} + once@1.4.0: resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + one-time@1.0.0: + resolution: {integrity: sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g==} + onetime@5.1.2: resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} engines: {node: '>=6'} @@ -9111,6 +10820,29 @@ packages: resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} engines: {node: '>=12'} + onnx-proto@4.0.4: + resolution: {integrity: sha512-aldMOB3HRoo6q/phyB6QRQxSt895HNNw82BNyZ2CMh4bjeKv7g/c+VpAFtJuEMVfYLMbRx61hbuqnKceLeDcDA==} + + onnxruntime-common@1.14.0: + resolution: {integrity: sha512-3LJpegM2iMNRX2wUmtYfeX/ytfOzNwAWKSq1HbRrKc9+uqG/FsEA0bbKZl1btQeZaXhC26l44NWpNUeXPII7Ew==} + + onnxruntime-common@1.20.1: + resolution: {integrity: sha512-YiU0s0IzYYC+gWvqD1HzLc46Du1sXpSiwzKb63PACIJr6LfL27VsXSXQvt68EzD3V0D5Bc0vyJTjmMxp0ylQiw==} + + onnxruntime-node@1.14.0: + resolution: {integrity: sha512-5ba7TWomIV/9b6NH/1x/8QEeowsb+jBEvFzU6z0T4mNsFwdPqXeFUM7uxC6QeSRkEbWu3qEB0VMjrvzN/0S9+w==} + os: [win32, darwin, linux] + + onnxruntime-node@1.20.1: + resolution: {integrity: sha512-di/I4HDXRw+FLgq+TyHmQEDd3cEp9iFFZm0r4uJ1Wd7b/WE1VXtKWo8yemex347c6GNF/3Pv86ZfPhIWxORr0w==} + os: [win32, darwin, linux] + + onnxruntime-web@1.14.0: + resolution: {integrity: sha512-Kcqf43UMfW8mCydVGcX9OMXI2VN17c0p6XvR7IPSZzBf/6lteBzXHvcEVWDPmCKuGombl997HgLqj91F11DzXw==} + + onnxruntime-web@1.20.1: + resolution: {integrity: sha512-TePF6XVpLL1rWVMIl5Y9ACBQcyCNFThZON/jgElNd9Txb73CIEGlklhYR3UEr1cp5r0rbGI6nDwwrs79g7WjoA==} + open@8.4.2: resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==} engines: {node: '>=12'} @@ -9124,9 +10856,30 @@ packages: zod: optional: true + openai@4.73.1: + resolution: {integrity: sha512-nWImDJBcUsqrhy7yJScXB4+iqjzbUEgzfA3un/6UnHFdwWhjX24oztj69Ped/njABfOdLcO/F7CeWTI5dt8Xmg==} + hasBin: true + peerDependencies: + zod: ^3.23.8 + peerDependenciesMeta: + zod: + optional: true + + openai@4.74.0: + resolution: {integrity: sha512-pQ8t1jchUymw5WB5jZPchuBtWvxul7RyVxa+9RWfiCQyzvzUyI2sKvUYfpEDI/ouaRLcik3K6psj15ByCefeNA==} + hasBin: true + peerDependencies: + zod: ^3.23.8 + peerDependenciesMeta: + zod: + optional: true + openapi-types@12.1.3: resolution: {integrity: sha512-N4YtSYJqghVu4iek2ZUvcN/0aqH1kRDuNqzcycDxhOUpg7GdvLa2F3DgS6yBNhInhv2r/6I0Flkn7CqL8+nIcw==} + option@0.2.4: + resolution: {integrity: sha512-pkEqbDyl8ou5cpq+VsnQbe/WlEy5qS7xPzMS1U55OCG9KPvwFD46zDbxQIj3egJSFc3D+XhYOPUzz49zQAVy7A==} + optionator@0.9.4: resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} engines: {node: '>= 0.8.0'} @@ -9157,6 +10910,10 @@ packages: resolution: {integrity: sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==} engines: {node: '>=12.20'} + p-finally@1.0.0: + resolution: {integrity: sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==} + engines: {node: '>=4'} + p-limit@2.3.0: resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} engines: {node: '>=6'} @@ -9189,10 +10946,22 @@ packages: resolution: {integrity: sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==} engines: {node: '>=10'} + p-queue@6.6.2: + resolution: {integrity: sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==} + engines: {node: '>=8'} + + p-retry@4.6.2: + resolution: {integrity: sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==} + engines: {node: '>=8'} + p-some@6.0.0: resolution: {integrity: sha512-CJbQCKdfSX3fIh8/QKgS+9rjm7OBNUTmwWswAFQAhc8j1NR1dsEDETUEuVUtQHZpV+J03LqWBEwvu0g1Yn+TYg==} engines: {node: '>=12.20'} + p-timeout@3.2.0: + resolution: {integrity: sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==} + engines: {node: '>=8'} + p-timeout@5.1.0: resolution: {integrity: sha512-auFDyzzzGZZZdHz3BtET9VEz0SE/uMEAx7uWfGPucfzEwwe/xH0iVeZibQmANYE/hp9T2+UUZT5m+BKyrDp3Ew==} engines: {node: '>=12'} @@ -9217,6 +10986,12 @@ packages: engines: {node: ^16.14.0 || >=18.0.0} hasBin: true + pako@1.0.11: + resolution: {integrity: sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==} + + papaparse@5.4.1: + resolution: {integrity: sha512-HipMsgJkZu8br23pW15uvo6sib6wne/4woLZPlFf3rpDyMe9ywEXUsuD7+6K9PRkJlVT51j/sCOYDKGGS3ZJrw==} + parent-module@1.0.1: resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} engines: {node: '>=6'} @@ -9399,10 +11174,16 @@ packages: pkg-types@1.2.1: resolution: {integrity: sha512-sQoqa8alT3nHjGuTjuKgOnvjo4cljkufdtLMnO2LBP/wRwuDlo1tkaEdMxCRhyGRPacv/ztlZgDPm2b7FAmEvw==} + platform@1.3.6: + resolution: {integrity: sha512-fnWVljUchTro6RiCFvCXBbNhJc2NijN7oIQxbwsyL0buWJPG85v81ehlHI9fXrJsMNgTofEoWIQeClKpgxFLrg==} + pluralize@8.0.0: resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==} engines: {node: '>=4'} + portkey-ai@0.1.16: + resolution: {integrity: sha512-EY4FRp6PZSD75Q1o1qc08DfPNTG9FnkUPN3Z1/lEvaq9iFpSO5UekcagUZaKSVhao311qjBjns+kF0rS9ht7iA==} + possible-typed-array-names@1.0.0: resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==} engines: {node: '>= 0.4'} @@ -9515,6 +11296,11 @@ packages: preact@10.24.3: resolution: {integrity: sha512-Z2dPnBnMUfyQfSQ+GBdsGa16hz35YmLmtTLhM169uW944hYL6xzTYkJjC07j+Wosz733pMWx0fgON3JNw1jJQA==} + prebuild-install@7.1.2: + resolution: {integrity: sha512-UnNke3IQb6sgarcZIDU3gbMeTp/9SSU1DAIkil7PrqG1vZlBtY5msYccSKSHDqa3hNg436IXK+SNImReuA1wEQ==} + engines: {node: '>=10'} + hasBin: true + prelude-ls@1.2.1: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} @@ -9540,6 +11326,9 @@ packages: resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + priorityqueuejs@2.0.0: + resolution: {integrity: sha512-19BMarhgpq3x4ccvVi8k2QpJZcymo/iFUcrhPd4V96kYGovOdTsWwy7fxChYi4QY+m2EnGBWSX9Buakz+tWNQQ==} + prismjs@1.27.0: resolution: {integrity: sha512-t13BGPUlFDR7wRB5kQDG4jjl7XeuH6jbJGt11JHPL96qwsEHNX2+68tFXqc1/k+/jALsbSWJKUOT/hcYAZ5LkA==} engines: {node: '>=6'} @@ -9552,6 +11341,13 @@ packages: resolution: {integrity: sha512-g8+OnU/L2v+wyiVK+D5fA34J7EH8jZ8DDlvwhRCMxmMj7UCBvxiO1mGeN+36JXIKF4zevU4kRBd8lVgG9vLelA==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + process-nextick-args@2.0.1: + resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} + + process@0.11.10: + resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} + engines: {node: '>= 0.6.0'} + proggy@2.0.0: resolution: {integrity: sha512-69agxLtnI8xBs9gUGqEnK26UfiexpHy+KUpBQWabiytQjnn5wFY8rklAi7GRfABIuPNnQ/ik48+LGLkYYJcy4A==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} @@ -9590,6 +11386,17 @@ packages: proto-list@1.2.4: resolution: {integrity: sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==} + proto3-json-serializer@2.0.2: + resolution: {integrity: sha512-SAzp/O4Yh02jGdRc+uIrGoe87dkN/XtwxfZ4ZyafJHymd79ozp5VG5nyZ7ygqPM5+cpLDjjGnYFUkngonyDPOQ==} + engines: {node: '>=14.0.0'} + + protobuf.js@1.1.2: + resolution: {integrity: sha512-USO7Xus/pzPw549M1TguiyoOrKEhm9VMXv+CkDufcjMC8Rd7EPbxeRQPEjCV8ua1tm0k7z9xHkogcxovZogWdA==} + + protobufjs@6.11.4: + resolution: {integrity: sha512-5kQWPaJHi1WoCpjTGszzQ32PG2F4+wRY6BmAT4Vfw56Q2FZ4YZzK20xUYQH4YkfehY1e6QSICrJquM6xXZNcrw==} + hasBin: true + protobufjs@7.4.0: resolution: {integrity: sha512-mRUWCc3KUU4w1jU8sGxICXH/gNS94DvI1gxqDvBzhj1JpcsimQkYiOJfwsPUykUI5ZaspFbSgmBLER8IrQ3tqw==} engines: {node: '>=12.0.0'} @@ -9631,6 +11438,10 @@ packages: engines: {node: '>=18'} hasBin: true + qs@6.11.2: + resolution: {integrity: sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==} + engines: {node: '>=0.6'} + qs@6.13.0: resolution: {integrity: sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==} engines: {node: '>=0.6'} @@ -9653,6 +11464,9 @@ packages: resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==} engines: {node: '>=10'} + rake-modified@1.0.8: + resolution: {integrity: sha512-rj/1t+EyI8Ly52eaCeSy5hoNpdNnDlNQ/+jll2DypR6nkuxotMbaupzwbuMSaXzuSL1I2pYVYy7oPus/Ls49ag==} + randombytes@2.1.0: resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} @@ -9667,6 +11481,10 @@ packages: resolution: {integrity: sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==} engines: {node: '>= 0.8'} + rc@1.2.8: + resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==} + hasBin: true + react-day-picker@8.10.1: resolution: {integrity: sha512-TMx7fNbhLk15eqcMt+7Z7S2KF7mfTId/XJDjKE8f+IUcFn0l08/kI4FiYTL/0yuOLmEcbR4Fwe3GJf/NiiMnPA==} peerDependencies: @@ -9806,10 +11624,17 @@ packages: resolution: {integrity: sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==} engines: {node: '>=8'} + readable-stream@2.3.8: + resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} + readable-stream@3.6.2: resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} engines: {node: '>= 6'} + readable-stream@4.5.2: + resolution: {integrity: sha512-yjavECdqeZ3GLXNgRXgeQEdz9fvDDkNKyHnbHRFtOr7/LcfgBcmct7t/ET+HaCTqfh06OzoAxrkN/IfjJBVe+g==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + readable-web-to-node-stream@3.0.2: resolution: {integrity: sha512-ePeK6cc1EcKLEhJFt/AebMCLL+GgSKhuygrZ/GLaKZYEecIgIECf4UaUuaByiGtzckwR4ain9VzUh95T1exYGw==} engines: {node: '>=8'} @@ -9918,6 +11743,13 @@ packages: remark@14.0.3: resolution: {integrity: sha512-bfmJW1dmR2LvaMJuAnE88pZP9DktIFYXazkTfOIKZzi3Knk9lT0roItIA24ydOucI3bV/g/tXBA6hzqq3FV9Ew==} + remeda@2.17.4: + resolution: {integrity: sha512-pviU2Ag7Qx9mOCAKO4voxDx/scfLzdhp3v85qDO4xxntQsU76uE9sgrAAdK1ATn4zzaOJqCXYMMNRP+O9F4Wiw==} + + replicate@1.0.1: + resolution: {integrity: sha512-EY+rK1YR5bKHcM9pd6WyaIbv6m2aRIvHfHDh51j/LahlHTLKemTYXF6ptif2sLa+YospupAsIoxw8Ndt5nI3vg==} + engines: {git: '>=2.11.0', node: '>=18.0.0', npm: '>=7.19.0', yarn: '>=1.7.0'} + require-directory@2.1.1: resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} engines: {node: '>=0.10.0'} @@ -9985,10 +11817,18 @@ packages: retext@8.1.0: resolution: {integrity: sha512-N9/Kq7YTn6ZpzfiGW45WfEGJqFf1IM1q8OsRa1CGzIebCJBNCANDRmOrholiDRGKo/We7ofKR4SEvcGAWEMD3Q==} + retry-request@7.0.2: + resolution: {integrity: sha512-dUOvLMJ0/JJYEn8NrpOaGNE7X3vpI5XlZS/u0ANjqtcZVKnIxP7IgCFwrKTxENw29emmwug53awKtaMm4i9g5w==} + engines: {node: '>=14'} + retry@0.12.0: resolution: {integrity: sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==} engines: {node: '>= 4'} + 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'} @@ -9998,6 +11838,10 @@ packages: deprecated: Rimraf versions prior to v4 are no longer supported hasBin: true + rimraf@5.0.10: + resolution: {integrity: sha512-l0OE8wL34P4nJH/H2ffoaniAokM2qSmrtXHmlpvYr5AVVX8msAyW0l8NVJFDxlSK4u3Uh/f41cQheDVdnYijwQ==} + hasBin: true + rollup-plugin-dts@6.1.1: resolution: {integrity: sha512-aSHRcJ6KG2IHIioYlvAOcEq6U99sVtqDDKVhnwt70rW6tsz3tv5OSjEiWcgzfsHdLyGXZ/3b/7b/+Za3Y6r1XA==} engines: {node: '>=16'} @@ -10024,6 +11868,9 @@ packages: rusha@0.8.14: resolution: {integrity: sha512-cLgakCUf6PedEu15t8kbsjnwIFFR2D4RfL+W3iWFJ4iac7z4B0ZI8fxy4R3J956kAI68HclCFGL8MPoUVC3qVA==} + rxjs@7.8.1: + resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==} + sade@1.8.1: resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==} engines: {node: '>=6'} @@ -10032,6 +11879,9 @@ packages: resolution: {integrity: sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==} engines: {node: '>=0.4'} + safe-buffer@5.1.2: + resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} + safe-buffer@5.2.1: resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} @@ -10073,6 +11923,10 @@ packages: selderee@0.11.0: resolution: {integrity: sha512-5TF+l7p4+OsnP8BCCvSyZiSPc4x4//p5uPwK8TCnVPJYRmU2aYKMpOXvw8zM5a5JvuuCGN1jmsMwuU2W02ukfA==} + semaphore@1.1.0: + resolution: {integrity: sha512-O4OZEaNtkMd/K0i6js9SL+gqy0ZCBMgUvlSqHKi4IBdjhe7wB8pwztUk1BbZ1fmrvpwFrPbHzqd2w5pTcJH6LA==} + engines: {node: '>=0.8.0'} + semver@5.7.2: resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} hasBin: true @@ -10093,10 +11947,23 @@ packages: serialize-javascript@6.0.2: resolution: {integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==} + seroval-plugins@1.1.1: + resolution: {integrity: sha512-qNSy1+nUj7hsCOon7AO4wdAIo9P0jrzAMp18XhiOzA6/uO5TKtP7ScozVJ8T293oRIvi5wyCHSM4TrJo/c/GJA==} + engines: {node: '>=10'} + peerDependencies: + seroval: ^1.0 + + seroval@1.1.1: + resolution: {integrity: sha512-rqEO6FZk8mv7Hyv4UCj3FD3b6Waqft605TLfsCe/BiaylRpyyMC0b+uA5TJKawX3KzMrdi3wsLbCaLplrQmBvQ==} + engines: {node: '>=10'} + serve-static@1.16.2: resolution: {integrity: sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==} engines: {node: '>= 0.8.0'} + set-blocking@2.0.0: + resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} + set-function-length@1.2.2: resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} engines: {node: '>= 0.4'} @@ -10105,9 +11972,16 @@ packages: resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} engines: {node: '>= 0.4'} + setimmediate@1.0.5: + resolution: {integrity: sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==} + setprototypeof@1.2.0: resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} + sharp@0.32.6: + resolution: {integrity: sha512-KyLTWwgcR9Oe4d9HwCwNM2l7+J0dUQwn/yf7S0EnTtb0eVS4RxO0eUSvxPtzT4F3SY+C4K6fqdv/DO27sJ/v/w==} + engines: {node: '>=14.15.0'} + sharp@0.33.5: resolution: {integrity: sha512-haPVm1EkS9pgvHrQ/F3Xy+hgcuMV0Wm9vfIBSiwZ05k+xgb0PkBQpGsAA/oWdDobNaZTH5ppvHtzCFbnSEwHVw==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} @@ -10141,6 +12015,15 @@ packages: resolution: {integrity: sha512-8G+/XDU8wNsJOQS5ysDVO0Etg9/2uA5gR9l4ZwijjlwxBcrU6RPfwi2+jJmbP+Ap1Hlp/nVAaEO4Fj22/SL2gQ==} engines: {node: ^16.14.0 || >=18.0.0} + simple-concat@1.0.1: + resolution: {integrity: sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==} + + simple-get@3.1.1: + resolution: {integrity: sha512-CQ5LTKGfCpvE1K0n2us+kuMPbk/q0EKl82s4aheV9oXjFEz6W/Y7oQFVJuU6QG77hRT4Ghb5RURteF5vnWjupA==} + + simple-get@4.0.1: + resolution: {integrity: sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==} + simple-swizzle@0.2.2: resolution: {integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==} @@ -10199,6 +12082,9 @@ packages: resolution: {integrity: sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==} engines: {node: '>= 10.0.0', npm: '>= 3.0.0'} + solid-js@1.9.3: + resolution: {integrity: sha512-5ba3taPoZGt9GY3YlsCB24kCg0Lv/rie/HTD4kG6h4daZZz7+yK02xn8Vx8dLYBc9i6Ps5JwAbEiqjmKaLB3Ag==} + sort-object-keys@1.1.3: resolution: {integrity: sha512-855pvK+VkU7PaKYPc+Jjnmt4EzejQHyhhF33q31qG8x7maDzkeFhAAThdCYay11CISO+qAMwjOBP+fPZe0IPyg==} @@ -10231,6 +12117,9 @@ packages: space-separated-tokens@2.0.2: resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==} + sparse-bitfield@3.0.3: + resolution: {integrity: sha512-kvzhi7vqKTfkh0PZU+2D2PIllw2ymqJKujUcyPMd9Y75Nv4nPbGJZXNhxsgdQab2BmlDct1YnfQCguEvHr7VsQ==} + spdx-correct@3.2.0: resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} @@ -10265,6 +12154,9 @@ packages: stable-hash@0.0.3: resolution: {integrity: sha512-c63fvNCQ7ip1wBfPv54MflMA5L6OE5J0p6Fg13IpKft4JAFoNal8+s/jtJ8PibrwqXm4onnbeQsADs8k0NQGUA==} + stack-trace@0.0.10: + resolution: {integrity: sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==} + stackback@0.0.2: resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} @@ -10289,6 +12181,16 @@ packages: resolution: {integrity: sha512-xhV7w8S+bUwlPTb4bAOUQhv8/cSS5offJuX8GQGq32ONF0ZtDWKfkdomM3HMRA+LhX6um/FZ0COqlwsjD53LeQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + stoppable@1.1.0: + resolution: {integrity: sha512-KXDYZ9dszj6bzvnEMRYvxgeTHU74QBFL54XKtP3nyMuJ81CFYtABZ3bAzL2EdFUaEwJOBOgENyFj3R7oTzDyyw==} + engines: {node: '>=4', npm: '>=6'} + + stream-events@1.0.5: + resolution: {integrity: sha512-E1GUzBSgvct8Jsb3v2X15pjzN1tYebtbLaMg+eBOUOAxgbLoSbT2NS91ckc5lJD1KfLjId+jXJRgo0qnV5Nerg==} + + stream-shift@1.0.3: + resolution: {integrity: sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ==} + streamsearch@1.1.0: resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==} engines: {node: '>=10.0.0'} @@ -10329,6 +12231,9 @@ packages: resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} engines: {node: '>= 0.4'} + string_decoder@1.1.1: + resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} + string_decoder@1.3.0: resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} @@ -10363,6 +12268,10 @@ packages: resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} engines: {node: '>=8'} + strip-json-comments@2.0.1: + resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==} + engines: {node: '>=0.10.0'} + strip-json-comments@3.1.1: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} @@ -10377,6 +12286,9 @@ packages: resolution: {integrity: sha512-fZtbhtvI9I48xDSywd/somNqgUHl2L2cstmXCCif0itOf96jeW18MBSyrLuNicYQVkvpOxkZtkzujiTJ9LW5Jw==} engines: {node: '>=10'} + stubs@3.0.0: + resolution: {integrity: sha512-PdHt7hHUJKxvTCgbKX9C1V/ftOcjJQgz8BZwNfV5c4B6dcGqlpelTbJ999jBGZ2jYiPAwcX5dP6oBwVlBlUbxw==} + style-to-object@0.4.4: resolution: {integrity: sha512-HYNoHZa2GorYNyqiCaBgsxvcJIn7OHq6inEga+E6Ke3m5JkoqpQbnFssk4jwe+K7AhGa2fcha4wSOf1Kn01dMg==} @@ -10472,9 +12384,16 @@ packages: resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} engines: {node: '>=6'} + tar-fs@2.1.1: + resolution: {integrity: sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==} + tar-fs@3.0.6: resolution: {integrity: sha512-iokBDQQkUyeXhgPYaZxmczGPhnhXZ0CmrqI+MOb/WFGS9DW5wnfrLgtjUJBvz50vQ3qfRwJ62QVoCFu8mPVu5w==} + tar-stream@2.2.0: + resolution: {integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==} + engines: {node: '>=6'} + tar-stream@3.1.7: resolution: {integrity: sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==} @@ -10482,6 +12401,14 @@ packages: resolution: {integrity: sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==} engines: {node: '>=10'} + tar@7.4.3: + resolution: {integrity: sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw==} + engines: {node: '>=18'} + + teeny-request@9.0.0: + resolution: {integrity: sha512-resvxdc6Mgb7YEThw6G6bExlXKkv6+YbuzGg9xuXxSgxJF7Ozs+o8Y9+2R3sArdWdW8nOokoQb1yrpFB0pQK2g==} + engines: {node: '>=14'} + terser-webpack-plugin@5.3.10: resolution: {integrity: sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==} engines: {node: '>= 10.13.0'} @@ -10506,6 +12433,9 @@ packages: text-decoder@1.2.1: resolution: {integrity: sha512-x9v3H/lTKIJKQQe7RPQkLfKAnc9lUTkWDypIQgTzPJAq+5/GCDHonmshfvlsNSj58yyshbIJJDLmU15qNERrXQ==} + text-hex@1.0.0: + resolution: {integrity: sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==} + text-table@0.2.0: resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} @@ -10520,6 +12450,13 @@ packages: thenify@3.3.1: resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} + throttleit@2.1.0: + resolution: {integrity: sha512-nt6AMGKW1p/70DF/hGBdJB57B8Tspmbp5gfJ8ilhLnt7kkr2ye7hzD6NVG8GGErk2HWF34igrL2CXmNIkzKqKw==} + engines: {node: '>=18'} + + through2@4.0.2: + resolution: {integrity: sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==} + through@2.3.8: resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} @@ -10560,6 +12497,9 @@ packages: resolution: {integrity: sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==} engines: {node: '>=14.14'} + to-arraybuffer@1.0.1: + resolution: {integrity: sha512-okFlQcoGTi4LQBG/PgSYblw9VOyptsz2KJZqc6qtgGdes8VktzUQkj4BI2blit072iS8VODNcMA+tvnS9dnuMA==} + to-regex-range@5.0.1: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} @@ -10582,6 +12522,10 @@ packages: tr46@1.0.1: resolution: {integrity: sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==} + tr46@4.1.1: + resolution: {integrity: sha512-2lv/66T7e5yNyhAAC4NaKe5nVavzuGJQVVtRYLyQ2OI8tsJ61PMLlelehb0wi2Hx6+hT/OJUWZcw8MjlSRnxvw==} + engines: {node: '>=14'} + tr46@5.0.0: resolution: {integrity: sha512-tk2G5R2KRwBd+ZN0zaEXpmzdKyOYksXwywulIX95MBODjSzMIuQnQ3m8JxgbhnL1LeVo7lqQKsYa1O3Htl7K5g==} engines: {node: '>=18'} @@ -10594,6 +12538,9 @@ packages: resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} hasBin: true + tree-sitter@0.22.1: + resolution: {integrity: sha512-gRO+jk2ljxZlIn20QRskIvpLCMtzuLl5T0BY6L9uvPYD17uUrxlxWkvYCiVqED2q2q7CVtY52Uex4WcYo2FEXw==} + treeverse@3.0.0: resolution: {integrity: sha512-gcANaAnd2QDZFmHFEOF4k7uc1J/6a6z3DJMd/QwEyxLoKGiptJRwid582r7QIsFlFMIZ3SnxfS52S4hm2DHkuQ==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} @@ -10604,6 +12551,10 @@ packages: trim-trailing-lines@2.1.0: resolution: {integrity: sha512-5UR5Biq4VlVOtzqkm2AZlgvSlDJtME46uV0br0gENbwN4l5+mMKT4b9gJKqWtuL2zAIqajGJGuvbCbcAJUZqBg==} + triple-beam@1.4.1: + resolution: {integrity: sha512-aZbgViZrg1QNcG+LULa7nhZpJTZSLm/mXnHXnbAbjmN5aSa0y7V+wvv6+4WaBtpISJzThKy+PIPxc1Nq1EJ9mg==} + engines: {node: '>= 14.0.0'} + trough@2.2.0: resolution: {integrity: sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==} @@ -10616,6 +12567,9 @@ packages: peerDependencies: typescript: '>=4.2.0' + ts-error@1.0.6: + resolution: {integrity: sha512-tLJxacIQUM82IR7JO1UUkKlYuUTmoY9HBJAmNWFzheSlDS5SPMcNIepejHJa4BpPQLAcbRhRf3GDJzyj6rbKvA==} + ts-interface-checker@0.1.13: resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} @@ -10680,6 +12634,9 @@ packages: resolution: {integrity: sha512-GwIJau9XaA8nLVbUXsN3IlFi7WmQ48gBUrl3FTkkL/XLu/POhBzfmX9hd33FNMX1qAsfl6ozO1iMmW9NC8YniA==} engines: {node: ^16.14.0 || >=18.0.0} + tunnel-agent@0.6.0: + resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==} + turbo-darwin-64@2.2.3: resolution: {integrity: sha512-Rcm10CuMKQGcdIBS3R/9PMeuYnv6beYIHqfZFeKWVYEWH69sauj4INs83zKMTUiZJ3/hWGZ4jet9AOwhsssLyg==} cpu: [x64] @@ -10746,6 +12703,10 @@ packages: resolution: {integrity: sha512-yOGpmOAL7CkKe/91I5O3gPICmJNLJ1G4zFYVAsRHg7M64biSnPtRj0WNQt++bRkjYOqjWXrhnUw1utzmVErAdg==} engines: {node: '>=16'} + type-fest@4.30.0: + resolution: {integrity: sha512-G6zXWS1dLj6eagy6sVhOMQiLtJdxQBHIA9Z6HFUNLOlr6MFOgzV8wvmidtPONfPtEUv0uZsy77XJNzTAfwPDaA==} + engines: {node: '>=16'} + type-is@1.6.18: resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} engines: {node: '>= 0.6'} @@ -10766,6 +12727,9 @@ packages: resolution: {integrity: sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==} engines: {node: '>= 0.4'} + typed-emitter@2.1.0: + resolution: {integrity: sha512-g/KzbYKbH5C2vPkaXGu8DJlHrGKHLsM25Zg9WuC9pMGfuvT+X25tZQWo5fK1BjBm8+UrVE9LDCvaY0CQk+fXDA==} + typedarray.prototype.slice@1.0.3: resolution: {integrity: sha512-8WbVAQAUlENo1q3c3zZYuy5k9VzBQvp8AX9WOtbvyWlLM1v5JaSRmjubLjzHF4JFtptjH/5c/i95yaElvcjC0A==} engines: {node: '>= 0.4'} @@ -10792,12 +12756,26 @@ packages: unbzip2-stream@1.4.3: resolution: {integrity: sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==} + underscore@1.13.7: + resolution: {integrity: sha512-GMXzWtsc57XAtguZgaQViUOzs0KTkk8ojr3/xAxXLITqf/3EMwxC0inyETfDFjH/Krbhuep0HNbbjI9i/q3F3g==} + undici-types@5.26.5: resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} undici-types@6.19.8: resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==} + undici-types@6.20.0: + resolution: {integrity: sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==} + + undici@5.28.4: + resolution: {integrity: sha512-72RFADWFqKmUb2hmmvNODKL3p9hcB6Gt2DOQMis1SEBaV6a4MH8soBvzg+95CYhCKPFedut2JY9bMfrDl9D23g==} + engines: {node: '>=14.0'} + + undici@6.19.8: + resolution: {integrity: sha512-U8uCCl2x9TK3WANvmBavymRzxbfFYG+tAu+fgx3zxQy3qdagQqBLwJVrdyO1TBfUXvfKveMKJZhpvUYoOjM+4g==} + engines: {node: '>=18.17'} + unherit@3.0.1: resolution: {integrity: sha512-akOOQ/Yln8a2sgcLj4U0Jmx0R5jpIg2IUyRrWOzmEbjBtGzBdHtSeFKgoEcoH4KYIG/Pb8GQ/BwtYm0GCq1Sqg==} @@ -10892,6 +12870,9 @@ packages: resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} engines: {node: '>= 10.0.0'} + unpdf@0.12.1: + resolution: {integrity: sha512-ktP8+TTLDBrlu/j8rQVNbHoMMpFXzkVAkb1rt/JdshFC3jOHdZjuGCNl/voPL0kraUrUOH7ZC88kVxMvlvDBzA==} + unpipe@1.0.0: resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} engines: {node: '>= 0.8'} @@ -10996,10 +12977,18 @@ packages: resolution: {integrity: sha512-jOXGuXZAWdsTH7eZLtyXMqUb9EcWMGZNbL9YcGBJl4MH4nrxHmZJhEHvyLFrkxo+28uLb/NYRcStH48fnD0Vzw==} hasBin: true + uuid@8.3.2: + resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} + hasBin: true + uuid@9.0.1: resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==} hasBin: true + uuidv7@0.6.3: + resolution: {integrity: sha512-zV3eW2NlXTsun/aJ7AixxZjH/byQcH/r3J99MI0dDEkU2cJIBJxhEWUHDTpOaLPRNhebPZoeHuykYREkI9HafA==} + hasBin: true + uvu@0.5.6: resolution: {integrity: sha512-+g8ENReyr8YsOc6fv/NVJs2vFdHBnBNdfE49rshrTzDWOlUx4Gq7KOS2GD8eqhy2j+Ejq29+SbKH8yjkAqXqoA==} engines: {node: '>=8'} @@ -11160,6 +13149,10 @@ packages: wcwidth@1.0.1: resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} + weaviate-client@3.2.5: + resolution: {integrity: sha512-Z7X/AsKiT83rUjdd26uxqUFE01IrFl1MIMW5C49cDeWpvIKdFftboKH9XM5gPGnWfdmobTsHQlaRunUK+uGe9Q==} + engines: {node: '>=18.0.0'} + web-namespaces@2.0.1: resolution: {integrity: sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==} @@ -11171,6 +13164,9 @@ packages: resolution: {integrity: sha512-QW95TCTaHmsYfHDybGMwO5IJIM93I/6vTRk+daHTWFPhwh+C8Cg7j7XyKrwrj8Ib6vYXe0ocYNrmzY4xAAN6ug==} engines: {node: '>= 14'} + web-tree-sitter@0.24.4: + resolution: {integrity: sha512-sETP1Sf9OTd4LusrKBNznNgTt3fWoWhJnAFaKPiGSeVKXJbZ72qoMpxddKMdVI5BgXv32OI7tkKQre5PmF9reA==} + web-vitals@4.2.4: resolution: {integrity: sha512-r4DIlprAGwJ7YM11VZp4R884m0Vmgr6EAKe3P+kO0PPj3Unqyvv59rczf6UiGcb9Z8QxZVcqKNwv/g0WNdWwsw==} @@ -11205,10 +13201,17 @@ packages: resolution: {integrity: sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==} engines: {node: '>=18'} + whatwg-fetch@3.6.20: + resolution: {integrity: sha512-EqhiFU6daOA8kpjOWTL0olhVOF3i7OrFzSYiGsEMB8GcXS+RrzauAERX65xMeNWVqxA6HXH2m69Z9LaKKdisfg==} + whatwg-mimetype@4.0.0: resolution: {integrity: sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==} engines: {node: '>=18'} + whatwg-url@13.0.0: + resolution: {integrity: sha512-9WWbymnqj57+XEuqADHrCJ2eSXzn8WXIW/YSGaZtb2WKAInQ6CHfaUUcTyyver0p8BDg5StLQq8h1vtZuwmOig==} + engines: {node: '>=16'} + whatwg-url@14.0.0: resolution: {integrity: sha512-1lfMEm2IEr7RIV+f4lUNPOqfFL+pO+Xw3fJSqmjX9AbXcXcYOkCe1P6+9VBZB6n94af16NfZf+sSk0JCBZC9aw==} engines: {node: '>=18'} @@ -11249,6 +13252,24 @@ packages: engines: {node: '>=8'} hasBin: true + wide-align@1.1.5: + resolution: {integrity: sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==} + + wikipedia@2.1.2: + resolution: {integrity: sha512-RAYaMpXC9/E873RaSEtlEa8dXK4e0p5k98GKOd210MtkE5emm6fcnwD+N6ZA4cuffjDWagvhaQKtp/mGp2BOVQ==} + engines: {node: '>=10'} + + wink-nlp@2.3.2: + resolution: {integrity: sha512-PsK/nOjI0nfC23HbpJa/eeca+wvmx2SVvH2hIhOJSDe0hbsyOwwImmRgYvv6BwsGN7/8aCHoeNzCac9xAsrvaw==} + + winston-transport@4.9.0: + resolution: {integrity: sha512-8drMJ4rkgaPo1Me4zD/3WLfI/zPdA9o2IipKODunnGDcuqbHwjsbB79ylv04LCGGzU0xQ6vTznOMpQGaLhhm6A==} + engines: {node: '>= 12.0.0'} + + winston@3.17.0: + resolution: {integrity: sha512-DLiFIXYC5fMPxaRg832S6F5mJYvePtmO5G9v9IgUFPhXm9/GkXarH/TUrBAVzhTCzAj9anE/+GjrgXp/54nOgw==} + engines: {node: '>= 12.0.0'} + word-wrap@1.2.5: resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} engines: {node: '>=0.10.0'} @@ -11304,6 +13325,10 @@ packages: resolution: {integrity: sha512-T4rieHaC1EXcES0Kxxj4JWgaUQHDk+qwHcYOCFHfiwKz7tOVPLq7Hjq9dM1WCMhylqMEfP7hMcOIChvotiZegA==} engines: {node: '>=4.0.0'} + xmlbuilder@10.1.1: + resolution: {integrity: sha512-OyzrcFLL/nb6fMGHbiRDuPup9ljBycsdCypwuyg5AAHvyWzGfChJpCXMG88AGTIMFhGZ9RccFN1e6lhg3hkwKg==} + engines: {node: '>=4.0'} + xmlbuilder@11.0.1: resolution: {integrity: sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==} engines: {node: '>=4.0'} @@ -11329,6 +13354,10 @@ packages: yallist@4.0.0: resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} + yallist@5.0.0: + resolution: {integrity: sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==} + engines: {node: '>=18'} + yaml@2.6.0: resolution: {integrity: sha512-a6ae//JvKDEra2kdi1qzCyrJW/WZCgFi8ydDV+eXExl95t+5R+ijnqHJbz9tmMh8FUjx3iv2fCQ4dclAQlO2UQ==} engines: {node: '>= 14'} @@ -11463,6 +13492,15 @@ snapshots: optionalDependencies: zod: 3.23.8 + '@ai-sdk/provider-utils@2.0.2(zod@3.23.8)': + dependencies: + '@ai-sdk/provider': 1.0.1 + eventsource-parser: 3.0.0 + nanoid: 3.3.8 + secure-json-parse: 2.7.0 + optionalDependencies: + zod: 3.23.8 + '@ai-sdk/provider@0.0.22': dependencies: json-schema: 0.4.0 @@ -11475,6 +13513,10 @@ snapshots: dependencies: json-schema: 0.4.0 + '@ai-sdk/provider@1.0.1': + dependencies: + json-schema: 0.4.0 + '@ai-sdk/react@0.0.68(react@18.3.1)(zod@3.23.8)': dependencies: '@ai-sdk/provider-utils': 1.0.22(zod@3.23.8) @@ -11493,10 +13535,22 @@ snapshots: react: 19.0.0-rc-5d19e1c8-20240923 zod: 3.23.8 - '@ai-sdk/solid@0.0.53(zod@3.23.8)': + '@ai-sdk/react@1.0.3(react@19.0.0-rc-5d19e1c8-20240923)(zod@3.23.8)': + dependencies: + '@ai-sdk/provider-utils': 2.0.2(zod@3.23.8) + '@ai-sdk/ui-utils': 1.0.2(zod@3.23.8) + swr: 2.2.5(react@19.0.0-rc-5d19e1c8-20240923) + throttleit: 2.1.0 + optionalDependencies: + react: 19.0.0-rc-5d19e1c8-20240923 + zod: 3.23.8 + + '@ai-sdk/solid@0.0.53(solid-js@1.9.3)(zod@3.23.8)': dependencies: '@ai-sdk/provider-utils': 1.0.22(zod@3.23.8) '@ai-sdk/ui-utils': 0.0.49(zod@3.23.8) + optionalDependencies: + solid-js: 1.9.3 transitivePeerDependencies: - zod @@ -11520,6 +13574,14 @@ snapshots: optionalDependencies: zod: 3.23.8 + '@ai-sdk/ui-utils@1.0.2(zod@3.23.8)': + dependencies: + '@ai-sdk/provider': 1.0.1 + '@ai-sdk/provider-utils': 2.0.2(zod@3.23.8) + zod-to-json-schema: 3.23.5(zod@3.23.8) + optionalDependencies: + zod: 3.23.8 + '@ai-sdk/vue@0.0.58(vue@3.5.12(typescript@5.6.3))(zod@3.23.8)': dependencies: '@ai-sdk/provider-utils': 1.0.22(zod@3.23.8) @@ -11547,6 +13609,24 @@ snapshots: '@jridgewell/gen-mapping': 0.3.5 '@jridgewell/trace-mapping': 0.3.25 + '@anthropic-ai/sdk@0.32.1(encoding@0.1.13)': + dependencies: + '@types/node': 18.19.67 + '@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) + transitivePeerDependencies: + - encoding + + '@aws-crypto/crc32@3.0.0': + dependencies: + '@aws-crypto/util': 3.0.0 + '@aws-sdk/types': 3.696.0 + tslib: 1.14.1 + '@aws-crypto/crc32@5.2.0': dependencies: '@aws-crypto/util': 5.2.0 @@ -11573,7 +13653,7 @@ snapshots: '@aws-crypto/sha256-js': 5.2.0 '@aws-crypto/supports-web-crypto': 5.2.0 '@aws-crypto/util': 5.2.0 - '@aws-sdk/types': 3.679.0 + '@aws-sdk/types': 3.696.0 '@aws-sdk/util-locate-window': 3.679.0 '@smithy/util-utf8': 2.3.0 tslib: 2.8.0 @@ -11581,19 +13661,121 @@ snapshots: '@aws-crypto/sha256-js@5.2.0': dependencies: '@aws-crypto/util': 5.2.0 - '@aws-sdk/types': 3.679.0 + '@aws-sdk/types': 3.696.0 tslib: 2.8.0 '@aws-crypto/supports-web-crypto@5.2.0': dependencies: tslib: 2.8.0 + '@aws-crypto/util@3.0.0': + dependencies: + '@aws-sdk/types': 3.696.0 + '@aws-sdk/util-utf8-browser': 3.259.0 + tslib: 1.14.1 + '@aws-crypto/util@5.2.0': dependencies: - '@aws-sdk/types': 3.679.0 + '@aws-sdk/types': 3.696.0 '@smithy/util-utf8': 2.3.0 tslib: 2.8.0 + '@aws-sdk/client-bedrock-runtime@3.704.0': + dependencies: + '@aws-crypto/sha256-browser': 5.2.0 + '@aws-crypto/sha256-js': 5.2.0 + '@aws-sdk/client-sso-oidc': 3.699.0(@aws-sdk/client-sts@3.699.0) + '@aws-sdk/client-sts': 3.699.0 + '@aws-sdk/core': 3.696.0 + '@aws-sdk/credential-provider-node': 3.699.0(@aws-sdk/client-sso-oidc@3.699.0(@aws-sdk/client-sts@3.699.0))(@aws-sdk/client-sts@3.699.0) + '@aws-sdk/middleware-host-header': 3.696.0 + '@aws-sdk/middleware-logger': 3.696.0 + '@aws-sdk/middleware-recursion-detection': 3.696.0 + '@aws-sdk/middleware-user-agent': 3.696.0 + '@aws-sdk/region-config-resolver': 3.696.0 + '@aws-sdk/types': 3.696.0 + '@aws-sdk/util-endpoints': 3.696.0 + '@aws-sdk/util-user-agent-browser': 3.696.0 + '@aws-sdk/util-user-agent-node': 3.696.0 + '@smithy/config-resolver': 3.0.12 + '@smithy/core': 2.5.4 + '@smithy/eventstream-serde-browser': 3.0.13 + '@smithy/eventstream-serde-config-resolver': 3.0.10 + '@smithy/eventstream-serde-node': 3.0.12 + '@smithy/fetch-http-handler': 4.1.1 + '@smithy/hash-node': 3.0.10 + '@smithy/invalid-dependency': 3.0.10 + '@smithy/middleware-content-length': 3.0.12 + '@smithy/middleware-endpoint': 3.2.4 + '@smithy/middleware-retry': 3.0.28 + '@smithy/middleware-serde': 3.0.10 + '@smithy/middleware-stack': 3.0.10 + '@smithy/node-config-provider': 3.1.11 + '@smithy/node-http-handler': 3.3.1 + '@smithy/protocol-http': 4.1.7 + '@smithy/smithy-client': 3.4.5 + '@smithy/types': 3.7.1 + '@smithy/url-parser': 3.0.10 + '@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.28 + '@smithy/util-defaults-mode-node': 3.0.28 + '@smithy/util-endpoints': 2.1.6 + '@smithy/util-middleware': 3.0.10 + '@smithy/util-retry': 3.0.10 + '@smithy/util-stream': 3.3.1 + '@smithy/util-utf8': 3.0.0 + tslib: 2.8.0 + transitivePeerDependencies: + - aws-crt + + '@aws-sdk/client-cognito-identity@3.699.0': + dependencies: + '@aws-crypto/sha256-browser': 5.2.0 + '@aws-crypto/sha256-js': 5.2.0 + '@aws-sdk/client-sso-oidc': 3.699.0(@aws-sdk/client-sts@3.699.0) + '@aws-sdk/client-sts': 3.699.0 + '@aws-sdk/core': 3.696.0 + '@aws-sdk/credential-provider-node': 3.699.0(@aws-sdk/client-sso-oidc@3.699.0(@aws-sdk/client-sts@3.699.0))(@aws-sdk/client-sts@3.699.0) + '@aws-sdk/middleware-host-header': 3.696.0 + '@aws-sdk/middleware-logger': 3.696.0 + '@aws-sdk/middleware-recursion-detection': 3.696.0 + '@aws-sdk/middleware-user-agent': 3.696.0 + '@aws-sdk/region-config-resolver': 3.696.0 + '@aws-sdk/types': 3.696.0 + '@aws-sdk/util-endpoints': 3.696.0 + '@aws-sdk/util-user-agent-browser': 3.696.0 + '@aws-sdk/util-user-agent-node': 3.696.0 + '@smithy/config-resolver': 3.0.12 + '@smithy/core': 2.5.4 + '@smithy/fetch-http-handler': 4.1.1 + '@smithy/hash-node': 3.0.10 + '@smithy/invalid-dependency': 3.0.10 + '@smithy/middleware-content-length': 3.0.12 + '@smithy/middleware-endpoint': 3.2.4 + '@smithy/middleware-retry': 3.0.28 + '@smithy/middleware-serde': 3.0.10 + '@smithy/middleware-stack': 3.0.10 + '@smithy/node-config-provider': 3.1.11 + '@smithy/node-http-handler': 3.3.1 + '@smithy/protocol-http': 4.1.7 + '@smithy/smithy-client': 3.4.5 + '@smithy/types': 3.7.1 + '@smithy/url-parser': 3.0.10 + '@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.28 + '@smithy/util-defaults-mode-node': 3.0.28 + '@smithy/util-endpoints': 2.1.6 + '@smithy/util-middleware': 3.0.10 + '@smithy/util-retry': 3.0.10 + '@smithy/util-utf8': 3.0.0 + tslib: 2.8.0 + transitivePeerDependencies: + - aws-crt + '@aws-sdk/client-ecs@3.679.0': dependencies: '@aws-crypto/sha256-browser': 5.2.0 @@ -11706,20 +13888,69 @@ snapshots: transitivePeerDependencies: - aws-crt - '@aws-sdk/client-sso-oidc@3.679.0(@aws-sdk/client-sts@3.679.0)': + '@aws-sdk/client-sagemaker@3.699.0': dependencies: '@aws-crypto/sha256-browser': 5.2.0 '@aws-crypto/sha256-js': 5.2.0 - '@aws-sdk/client-sts': 3.679.0 - '@aws-sdk/core': 3.679.0 - '@aws-sdk/credential-provider-node': 3.679.0(@aws-sdk/client-sso-oidc@3.679.0(@aws-sdk/client-sts@3.679.0))(@aws-sdk/client-sts@3.679.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.679.0 - '@aws-sdk/region-config-resolver': 3.679.0 - '@aws-sdk/types': 3.679.0 - '@aws-sdk/util-endpoints': 3.679.0 + '@aws-sdk/client-sso-oidc': 3.699.0(@aws-sdk/client-sts@3.699.0) + '@aws-sdk/client-sts': 3.699.0 + '@aws-sdk/core': 3.696.0 + '@aws-sdk/credential-provider-node': 3.699.0(@aws-sdk/client-sso-oidc@3.699.0(@aws-sdk/client-sts@3.699.0))(@aws-sdk/client-sts@3.699.0) + '@aws-sdk/middleware-host-header': 3.696.0 + '@aws-sdk/middleware-logger': 3.696.0 + '@aws-sdk/middleware-recursion-detection': 3.696.0 + '@aws-sdk/middleware-user-agent': 3.696.0 + '@aws-sdk/region-config-resolver': 3.696.0 + '@aws-sdk/types': 3.696.0 + '@aws-sdk/util-endpoints': 3.696.0 + '@aws-sdk/util-user-agent-browser': 3.696.0 + '@aws-sdk/util-user-agent-node': 3.696.0 + '@smithy/config-resolver': 3.0.12 + '@smithy/core': 2.5.4 + '@smithy/fetch-http-handler': 4.1.1 + '@smithy/hash-node': 3.0.10 + '@smithy/invalid-dependency': 3.0.10 + '@smithy/middleware-content-length': 3.0.12 + '@smithy/middleware-endpoint': 3.2.4 + '@smithy/middleware-retry': 3.0.28 + '@smithy/middleware-serde': 3.0.10 + '@smithy/middleware-stack': 3.0.10 + '@smithy/node-config-provider': 3.1.11 + '@smithy/node-http-handler': 3.3.1 + '@smithy/protocol-http': 4.1.7 + '@smithy/smithy-client': 3.4.5 + '@smithy/types': 3.7.1 + '@smithy/url-parser': 3.0.10 + '@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.28 + '@smithy/util-defaults-mode-node': 3.0.28 + '@smithy/util-endpoints': 2.1.6 + '@smithy/util-middleware': 3.0.10 + '@smithy/util-retry': 3.0.10 + '@smithy/util-utf8': 3.0.0 + '@smithy/util-waiter': 3.1.9 + '@types/uuid': 9.0.8 + tslib: 2.8.0 + uuid: 9.0.1 + transitivePeerDependencies: + - aws-crt + + '@aws-sdk/client-sso-oidc@3.679.0(@aws-sdk/client-sts@3.679.0)': + dependencies: + '@aws-crypto/sha256-browser': 5.2.0 + '@aws-crypto/sha256-js': 5.2.0 + '@aws-sdk/client-sts': 3.679.0 + '@aws-sdk/core': 3.679.0 + '@aws-sdk/credential-provider-node': 3.679.0(@aws-sdk/client-sso-oidc@3.679.0(@aws-sdk/client-sts@3.679.0))(@aws-sdk/client-sts@3.679.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.679.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.679.0 '@smithy/config-resolver': 3.0.10 @@ -11751,6 +13982,51 @@ snapshots: transitivePeerDependencies: - aws-crt + '@aws-sdk/client-sso-oidc@3.699.0(@aws-sdk/client-sts@3.699.0)': + dependencies: + '@aws-crypto/sha256-browser': 5.2.0 + '@aws-crypto/sha256-js': 5.2.0 + '@aws-sdk/client-sts': 3.699.0 + '@aws-sdk/core': 3.696.0 + '@aws-sdk/credential-provider-node': 3.699.0(@aws-sdk/client-sso-oidc@3.699.0(@aws-sdk/client-sts@3.699.0))(@aws-sdk/client-sts@3.699.0) + '@aws-sdk/middleware-host-header': 3.696.0 + '@aws-sdk/middleware-logger': 3.696.0 + '@aws-sdk/middleware-recursion-detection': 3.696.0 + '@aws-sdk/middleware-user-agent': 3.696.0 + '@aws-sdk/region-config-resolver': 3.696.0 + '@aws-sdk/types': 3.696.0 + '@aws-sdk/util-endpoints': 3.696.0 + '@aws-sdk/util-user-agent-browser': 3.696.0 + '@aws-sdk/util-user-agent-node': 3.696.0 + '@smithy/config-resolver': 3.0.12 + '@smithy/core': 2.5.4 + '@smithy/fetch-http-handler': 4.1.1 + '@smithy/hash-node': 3.0.10 + '@smithy/invalid-dependency': 3.0.10 + '@smithy/middleware-content-length': 3.0.12 + '@smithy/middleware-endpoint': 3.2.4 + '@smithy/middleware-retry': 3.0.28 + '@smithy/middleware-serde': 3.0.10 + '@smithy/middleware-stack': 3.0.10 + '@smithy/node-config-provider': 3.1.11 + '@smithy/node-http-handler': 3.3.1 + '@smithy/protocol-http': 4.1.7 + '@smithy/smithy-client': 3.4.5 + '@smithy/types': 3.7.1 + '@smithy/url-parser': 3.0.10 + '@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.28 + '@smithy/util-defaults-mode-node': 3.0.28 + '@smithy/util-endpoints': 2.1.6 + '@smithy/util-middleware': 3.0.10 + '@smithy/util-retry': 3.0.10 + '@smithy/util-utf8': 3.0.0 + tslib: 2.8.0 + transitivePeerDependencies: + - aws-crt + '@aws-sdk/client-sso@3.679.0': dependencies: '@aws-crypto/sha256-browser': 5.2.0 @@ -11765,30 +14041,73 @@ snapshots: '@aws-sdk/util-endpoints': 3.679.0 '@aws-sdk/util-user-agent-browser': 3.679.0 '@aws-sdk/util-user-agent-node': 3.679.0 - '@smithy/config-resolver': 3.0.10 - '@smithy/core': 2.5.1 + '@smithy/config-resolver': 3.0.12 + '@smithy/core': 2.5.4 '@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/hash-node': 3.0.10 + '@smithy/invalid-dependency': 3.0.10 + '@smithy/middleware-content-length': 3.0.12 + '@smithy/middleware-endpoint': 3.2.4 + '@smithy/middleware-retry': 3.0.28 + '@smithy/middleware-serde': 3.0.10 + '@smithy/middleware-stack': 3.0.10 + '@smithy/node-config-provider': 3.1.11 + '@smithy/node-http-handler': 3.3.1 + '@smithy/protocol-http': 4.1.7 + '@smithy/smithy-client': 3.4.5 + '@smithy/types': 3.7.1 + '@smithy/url-parser': 3.0.10 '@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-defaults-mode-browser': 3.0.28 + '@smithy/util-defaults-mode-node': 3.0.28 + '@smithy/util-endpoints': 2.1.6 + '@smithy/util-middleware': 3.0.10 + '@smithy/util-retry': 3.0.10 + '@smithy/util-utf8': 3.0.0 + tslib: 2.8.0 + transitivePeerDependencies: + - aws-crt + + '@aws-sdk/client-sso@3.696.0': + dependencies: + '@aws-crypto/sha256-browser': 5.2.0 + '@aws-crypto/sha256-js': 5.2.0 + '@aws-sdk/core': 3.696.0 + '@aws-sdk/middleware-host-header': 3.696.0 + '@aws-sdk/middleware-logger': 3.696.0 + '@aws-sdk/middleware-recursion-detection': 3.696.0 + '@aws-sdk/middleware-user-agent': 3.696.0 + '@aws-sdk/region-config-resolver': 3.696.0 + '@aws-sdk/types': 3.696.0 + '@aws-sdk/util-endpoints': 3.696.0 + '@aws-sdk/util-user-agent-browser': 3.696.0 + '@aws-sdk/util-user-agent-node': 3.696.0 + '@smithy/config-resolver': 3.0.12 + '@smithy/core': 2.5.4 + '@smithy/fetch-http-handler': 4.1.1 + '@smithy/hash-node': 3.0.10 + '@smithy/invalid-dependency': 3.0.10 + '@smithy/middleware-content-length': 3.0.12 + '@smithy/middleware-endpoint': 3.2.4 + '@smithy/middleware-retry': 3.0.28 + '@smithy/middleware-serde': 3.0.10 + '@smithy/middleware-stack': 3.0.10 + '@smithy/node-config-provider': 3.1.11 + '@smithy/node-http-handler': 3.3.1 + '@smithy/protocol-http': 4.1.7 + '@smithy/smithy-client': 3.4.5 + '@smithy/types': 3.7.1 + '@smithy/url-parser': 3.0.10 + '@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.28 + '@smithy/util-defaults-mode-node': 3.0.28 + '@smithy/util-endpoints': 2.1.6 + '@smithy/util-middleware': 3.0.10 + '@smithy/util-retry': 3.0.10 '@smithy/util-utf8': 3.0.0 tslib: 2.8.0 transitivePeerDependencies: @@ -11839,6 +14158,51 @@ snapshots: transitivePeerDependencies: - aws-crt + '@aws-sdk/client-sts@3.699.0': + dependencies: + '@aws-crypto/sha256-browser': 5.2.0 + '@aws-crypto/sha256-js': 5.2.0 + '@aws-sdk/client-sso-oidc': 3.699.0(@aws-sdk/client-sts@3.699.0) + '@aws-sdk/core': 3.696.0 + '@aws-sdk/credential-provider-node': 3.699.0(@aws-sdk/client-sso-oidc@3.699.0(@aws-sdk/client-sts@3.699.0))(@aws-sdk/client-sts@3.699.0) + '@aws-sdk/middleware-host-header': 3.696.0 + '@aws-sdk/middleware-logger': 3.696.0 + '@aws-sdk/middleware-recursion-detection': 3.696.0 + '@aws-sdk/middleware-user-agent': 3.696.0 + '@aws-sdk/region-config-resolver': 3.696.0 + '@aws-sdk/types': 3.696.0 + '@aws-sdk/util-endpoints': 3.696.0 + '@aws-sdk/util-user-agent-browser': 3.696.0 + '@aws-sdk/util-user-agent-node': 3.696.0 + '@smithy/config-resolver': 3.0.12 + '@smithy/core': 2.5.4 + '@smithy/fetch-http-handler': 4.1.1 + '@smithy/hash-node': 3.0.10 + '@smithy/invalid-dependency': 3.0.10 + '@smithy/middleware-content-length': 3.0.12 + '@smithy/middleware-endpoint': 3.2.4 + '@smithy/middleware-retry': 3.0.28 + '@smithy/middleware-serde': 3.0.10 + '@smithy/middleware-stack': 3.0.10 + '@smithy/node-config-provider': 3.1.11 + '@smithy/node-http-handler': 3.3.1 + '@smithy/protocol-http': 4.1.7 + '@smithy/smithy-client': 3.4.5 + '@smithy/types': 3.7.1 + '@smithy/url-parser': 3.0.10 + '@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.28 + '@smithy/util-defaults-mode-node': 3.0.28 + '@smithy/util-endpoints': 2.1.6 + '@smithy/util-middleware': 3.0.10 + '@smithy/util-retry': 3.0.10 + '@smithy/util-utf8': 3.0.0 + tslib: 2.8.0 + transitivePeerDependencies: + - aws-crt + '@aws-sdk/core@3.679.0': dependencies: '@aws-sdk/types': 3.679.0 @@ -11853,6 +14217,30 @@ snapshots: fast-xml-parser: 4.4.1 tslib: 2.8.0 + '@aws-sdk/core@3.696.0': + dependencies: + '@aws-sdk/types': 3.696.0 + '@smithy/core': 2.5.4 + '@smithy/node-config-provider': 3.1.11 + '@smithy/property-provider': 3.1.10 + '@smithy/protocol-http': 4.1.7 + '@smithy/signature-v4': 4.2.3 + '@smithy/smithy-client': 3.4.5 + '@smithy/types': 3.7.1 + '@smithy/util-middleware': 3.0.10 + fast-xml-parser: 4.4.1 + tslib: 2.8.0 + + '@aws-sdk/credential-provider-cognito-identity@3.699.0': + dependencies: + '@aws-sdk/client-cognito-identity': 3.699.0 + '@aws-sdk/types': 3.696.0 + '@smithy/property-provider': 3.1.10 + '@smithy/types': 3.7.1 + tslib: 2.8.0 + transitivePeerDependencies: + - aws-crt + '@aws-sdk/credential-provider-env@3.679.0': dependencies: '@aws-sdk/core': 3.679.0 @@ -11861,6 +14249,14 @@ snapshots: '@smithy/types': 3.6.0 tslib: 2.8.0 + '@aws-sdk/credential-provider-env@3.696.0': + dependencies: + '@aws-sdk/core': 3.696.0 + '@aws-sdk/types': 3.696.0 + '@smithy/property-provider': 3.1.10 + '@smithy/types': 3.7.1 + tslib: 2.8.0 + '@aws-sdk/credential-provider-http@3.679.0': dependencies: '@aws-sdk/core': 3.679.0 @@ -11874,6 +14270,19 @@ snapshots: '@smithy/util-stream': 3.2.1 tslib: 2.8.0 + '@aws-sdk/credential-provider-http@3.696.0': + dependencies: + '@aws-sdk/core': 3.696.0 + '@aws-sdk/types': 3.696.0 + '@smithy/fetch-http-handler': 4.1.1 + '@smithy/node-http-handler': 3.3.1 + '@smithy/property-provider': 3.1.10 + '@smithy/protocol-http': 4.1.7 + '@smithy/smithy-client': 3.4.5 + '@smithy/types': 3.7.1 + '@smithy/util-stream': 3.3.1 + tslib: 2.8.0 + '@aws-sdk/credential-provider-ini@3.679.0(@aws-sdk/client-sso-oidc@3.679.0(@aws-sdk/client-sts@3.679.0))(@aws-sdk/client-sts@3.679.0)': dependencies: '@aws-sdk/client-sts': 3.679.0 @@ -11893,6 +14302,25 @@ snapshots: - '@aws-sdk/client-sso-oidc' - aws-crt + '@aws-sdk/credential-provider-ini@3.699.0(@aws-sdk/client-sso-oidc@3.699.0(@aws-sdk/client-sts@3.699.0))(@aws-sdk/client-sts@3.699.0)': + dependencies: + '@aws-sdk/client-sts': 3.699.0 + '@aws-sdk/core': 3.696.0 + '@aws-sdk/credential-provider-env': 3.696.0 + '@aws-sdk/credential-provider-http': 3.696.0 + '@aws-sdk/credential-provider-process': 3.696.0 + '@aws-sdk/credential-provider-sso': 3.699.0(@aws-sdk/client-sso-oidc@3.699.0(@aws-sdk/client-sts@3.699.0)) + '@aws-sdk/credential-provider-web-identity': 3.696.0(@aws-sdk/client-sts@3.699.0) + '@aws-sdk/types': 3.696.0 + '@smithy/credential-provider-imds': 3.2.7 + '@smithy/property-provider': 3.1.10 + '@smithy/shared-ini-file-loader': 3.1.11 + '@smithy/types': 3.7.1 + tslib: 2.8.0 + transitivePeerDependencies: + - '@aws-sdk/client-sso-oidc' + - aws-crt + '@aws-sdk/credential-provider-node@3.679.0(@aws-sdk/client-sso-oidc@3.679.0(@aws-sdk/client-sts@3.679.0))(@aws-sdk/client-sts@3.679.0)': dependencies: '@aws-sdk/credential-provider-env': 3.679.0 @@ -11912,6 +14340,25 @@ snapshots: - '@aws-sdk/client-sts' - aws-crt + '@aws-sdk/credential-provider-node@3.699.0(@aws-sdk/client-sso-oidc@3.699.0(@aws-sdk/client-sts@3.699.0))(@aws-sdk/client-sts@3.699.0)': + dependencies: + '@aws-sdk/credential-provider-env': 3.696.0 + '@aws-sdk/credential-provider-http': 3.696.0 + '@aws-sdk/credential-provider-ini': 3.699.0(@aws-sdk/client-sso-oidc@3.699.0(@aws-sdk/client-sts@3.699.0))(@aws-sdk/client-sts@3.699.0) + '@aws-sdk/credential-provider-process': 3.696.0 + '@aws-sdk/credential-provider-sso': 3.699.0(@aws-sdk/client-sso-oidc@3.699.0(@aws-sdk/client-sts@3.699.0)) + '@aws-sdk/credential-provider-web-identity': 3.696.0(@aws-sdk/client-sts@3.699.0) + '@aws-sdk/types': 3.696.0 + '@smithy/credential-provider-imds': 3.2.7 + '@smithy/property-provider': 3.1.10 + '@smithy/shared-ini-file-loader': 3.1.11 + '@smithy/types': 3.7.1 + tslib: 2.8.0 + transitivePeerDependencies: + - '@aws-sdk/client-sso-oidc' + - '@aws-sdk/client-sts' + - aws-crt + '@aws-sdk/credential-provider-process@3.679.0': dependencies: '@aws-sdk/core': 3.679.0 @@ -11921,6 +14368,15 @@ snapshots: '@smithy/types': 3.6.0 tslib: 2.8.0 + '@aws-sdk/credential-provider-process@3.696.0': + dependencies: + '@aws-sdk/core': 3.696.0 + '@aws-sdk/types': 3.696.0 + '@smithy/property-provider': 3.1.10 + '@smithy/shared-ini-file-loader': 3.1.11 + '@smithy/types': 3.7.1 + tslib: 2.8.0 + '@aws-sdk/credential-provider-sso@3.679.0(@aws-sdk/client-sso-oidc@3.679.0(@aws-sdk/client-sts@3.679.0))': dependencies: '@aws-sdk/client-sso': 3.679.0 @@ -11935,6 +14391,20 @@ snapshots: - '@aws-sdk/client-sso-oidc' - aws-crt + '@aws-sdk/credential-provider-sso@3.699.0(@aws-sdk/client-sso-oidc@3.699.0(@aws-sdk/client-sts@3.699.0))': + dependencies: + '@aws-sdk/client-sso': 3.696.0 + '@aws-sdk/core': 3.696.0 + '@aws-sdk/token-providers': 3.699.0(@aws-sdk/client-sso-oidc@3.699.0(@aws-sdk/client-sts@3.699.0)) + '@aws-sdk/types': 3.696.0 + '@smithy/property-provider': 3.1.10 + '@smithy/shared-ini-file-loader': 3.1.11 + '@smithy/types': 3.7.1 + tslib: 2.8.0 + transitivePeerDependencies: + - '@aws-sdk/client-sso-oidc' + - aws-crt + '@aws-sdk/credential-provider-web-identity@3.679.0(@aws-sdk/client-sts@3.679.0)': dependencies: '@aws-sdk/client-sts': 3.679.0 @@ -11944,6 +14414,38 @@ snapshots: '@smithy/types': 3.6.0 tslib: 2.8.0 + '@aws-sdk/credential-provider-web-identity@3.696.0(@aws-sdk/client-sts@3.699.0)': + dependencies: + '@aws-sdk/client-sts': 3.699.0 + '@aws-sdk/core': 3.696.0 + '@aws-sdk/types': 3.696.0 + '@smithy/property-provider': 3.1.10 + '@smithy/types': 3.7.1 + tslib: 2.8.0 + + '@aws-sdk/credential-providers@3.699.0(@aws-sdk/client-sso-oidc@3.699.0(@aws-sdk/client-sts@3.699.0))': + dependencies: + '@aws-sdk/client-cognito-identity': 3.699.0 + '@aws-sdk/client-sso': 3.696.0 + '@aws-sdk/client-sts': 3.699.0 + '@aws-sdk/core': 3.696.0 + '@aws-sdk/credential-provider-cognito-identity': 3.699.0 + '@aws-sdk/credential-provider-env': 3.696.0 + '@aws-sdk/credential-provider-http': 3.696.0 + '@aws-sdk/credential-provider-ini': 3.699.0(@aws-sdk/client-sso-oidc@3.699.0(@aws-sdk/client-sts@3.699.0))(@aws-sdk/client-sts@3.699.0) + '@aws-sdk/credential-provider-node': 3.699.0(@aws-sdk/client-sso-oidc@3.699.0(@aws-sdk/client-sts@3.699.0))(@aws-sdk/client-sts@3.699.0) + '@aws-sdk/credential-provider-process': 3.696.0 + '@aws-sdk/credential-provider-sso': 3.699.0(@aws-sdk/client-sso-oidc@3.699.0(@aws-sdk/client-sts@3.699.0)) + '@aws-sdk/credential-provider-web-identity': 3.696.0(@aws-sdk/client-sts@3.699.0) + '@aws-sdk/types': 3.696.0 + '@smithy/credential-provider-imds': 3.2.7 + '@smithy/property-provider': 3.1.10 + '@smithy/types': 3.7.1 + tslib: 2.8.0 + transitivePeerDependencies: + - '@aws-sdk/client-sso-oidc' + - aws-crt + '@aws-sdk/middleware-bucket-endpoint@3.679.0': dependencies: '@aws-sdk/types': 3.679.0 @@ -11982,6 +14484,13 @@ snapshots: '@smithy/types': 3.6.0 tslib: 2.8.0 + '@aws-sdk/middleware-host-header@3.696.0': + dependencies: + '@aws-sdk/types': 3.696.0 + '@smithy/protocol-http': 4.1.7 + '@smithy/types': 3.7.1 + tslib: 2.8.0 + '@aws-sdk/middleware-location-constraint@3.679.0': dependencies: '@aws-sdk/types': 3.679.0 @@ -11994,6 +14503,12 @@ snapshots: '@smithy/types': 3.6.0 tslib: 2.8.0 + '@aws-sdk/middleware-logger@3.696.0': + dependencies: + '@aws-sdk/types': 3.696.0 + '@smithy/types': 3.7.1 + tslib: 2.8.0 + '@aws-sdk/middleware-recursion-detection@3.679.0': dependencies: '@aws-sdk/types': 3.679.0 @@ -12001,6 +14516,13 @@ snapshots: '@smithy/types': 3.6.0 tslib: 2.8.0 + '@aws-sdk/middleware-recursion-detection@3.696.0': + dependencies: + '@aws-sdk/types': 3.696.0 + '@smithy/protocol-http': 4.1.7 + '@smithy/types': 3.7.1 + tslib: 2.8.0 + '@aws-sdk/middleware-sdk-s3@3.679.0': dependencies: '@aws-sdk/core': 3.679.0 @@ -12034,6 +14556,21 @@ snapshots: '@smithy/types': 3.6.0 tslib: 2.8.0 + '@aws-sdk/middleware-user-agent@3.696.0': + dependencies: + '@aws-sdk/core': 3.696.0 + '@aws-sdk/types': 3.696.0 + '@aws-sdk/util-endpoints': 3.696.0 + '@smithy/core': 2.5.4 + '@smithy/protocol-http': 4.1.7 + '@smithy/types': 3.7.1 + tslib: 2.8.0 + + '@aws-sdk/protocol-http@3.374.0': + dependencies: + '@smithy/protocol-http': 1.2.0 + tslib: 2.8.0 + '@aws-sdk/region-config-resolver@3.679.0': dependencies: '@aws-sdk/types': 3.679.0 @@ -12043,6 +14580,15 @@ snapshots: '@smithy/util-middleware': 3.0.8 tslib: 2.8.0 + '@aws-sdk/region-config-resolver@3.696.0': + dependencies: + '@aws-sdk/types': 3.696.0 + '@smithy/node-config-provider': 3.1.11 + '@smithy/types': 3.7.1 + '@smithy/util-config-provider': 3.0.0 + '@smithy/util-middleware': 3.0.10 + tslib: 2.8.0 + '@aws-sdk/s3-request-presigner@3.679.0': dependencies: '@aws-sdk/signature-v4-multi-region': 3.679.0 @@ -12063,13 +14609,27 @@ snapshots: '@smithy/types': 3.6.0 tslib: 2.8.0 + '@aws-sdk/signature-v4@3.374.0': + dependencies: + '@smithy/signature-v4': 1.1.0 + tslib: 2.8.0 + '@aws-sdk/token-providers@3.679.0(@aws-sdk/client-sso-oidc@3.679.0(@aws-sdk/client-sts@3.679.0))': dependencies: '@aws-sdk/client-sso-oidc': 3.679.0(@aws-sdk/client-sts@3.679.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 + '@smithy/types': 3.7.1 + tslib: 2.8.0 + + '@aws-sdk/token-providers@3.699.0(@aws-sdk/client-sso-oidc@3.699.0(@aws-sdk/client-sts@3.699.0))': + dependencies: + '@aws-sdk/client-sso-oidc': 3.699.0(@aws-sdk/client-sts@3.699.0) + '@aws-sdk/types': 3.696.0 + '@smithy/property-provider': 3.1.10 + '@smithy/shared-ini-file-loader': 3.1.11 + '@smithy/types': 3.7.1 tslib: 2.8.0 '@aws-sdk/types@3.679.0': @@ -12077,6 +14637,11 @@ snapshots: '@smithy/types': 3.6.0 tslib: 2.8.0 + '@aws-sdk/types@3.696.0': + dependencies: + '@smithy/types': 3.7.1 + tslib: 2.8.0 + '@aws-sdk/util-arn-parser@3.679.0': dependencies: tslib: 2.8.0 @@ -12088,6 +14653,13 @@ snapshots: '@smithy/util-endpoints': 2.1.4 tslib: 2.8.0 + '@aws-sdk/util-endpoints@3.696.0': + dependencies: + '@aws-sdk/types': 3.696.0 + '@smithy/types': 3.7.1 + '@smithy/util-endpoints': 2.1.6 + tslib: 2.8.0 + '@aws-sdk/util-format-url@3.679.0': dependencies: '@aws-sdk/types': 3.679.0 @@ -12106,6 +14678,13 @@ snapshots: bowser: 2.11.0 tslib: 2.8.0 + '@aws-sdk/util-user-agent-browser@3.696.0': + dependencies: + '@aws-sdk/types': 3.696.0 + '@smithy/types': 3.7.1 + bowser: 2.11.0 + tslib: 2.8.0 + '@aws-sdk/util-user-agent-node@3.679.0': dependencies: '@aws-sdk/middleware-user-agent': 3.679.0 @@ -12114,11 +14693,135 @@ snapshots: '@smithy/types': 3.6.0 tslib: 2.8.0 + '@aws-sdk/util-user-agent-node@3.696.0': + dependencies: + '@aws-sdk/middleware-user-agent': 3.696.0 + '@aws-sdk/types': 3.696.0 + '@smithy/node-config-provider': 3.1.11 + '@smithy/types': 3.7.1 + tslib: 2.8.0 + + '@aws-sdk/util-utf8-browser@3.259.0': + dependencies: + tslib: 2.8.0 + '@aws-sdk/xml-builder@3.679.0': dependencies: '@smithy/types': 3.6.0 tslib: 2.8.0 + '@azure-rest/core-client@2.3.1': + dependencies: + '@azure/abort-controller': 2.1.2 + '@azure/core-auth': 1.9.0 + '@azure/core-rest-pipeline': 1.18.1 + '@azure/core-tracing': 1.2.0 + '@azure/core-util': 1.11.0 + tslib: 2.8.0 + transitivePeerDependencies: + - supports-color + + '@azure/abort-controller@2.1.2': + dependencies: + tslib: 2.8.0 + + '@azure/core-auth@1.9.0': + dependencies: + '@azure/abort-controller': 2.1.2 + '@azure/core-util': 1.11.0 + tslib: 2.8.0 + + '@azure/core-client@1.9.2': + dependencies: + '@azure/abort-controller': 2.1.2 + '@azure/core-auth': 1.9.0 + '@azure/core-rest-pipeline': 1.18.1 + '@azure/core-tracing': 1.2.0 + '@azure/core-util': 1.11.0 + '@azure/logger': 1.1.4 + tslib: 2.8.0 + transitivePeerDependencies: + - supports-color + + '@azure/core-rest-pipeline@1.18.1': + dependencies: + '@azure/abort-controller': 2.1.2 + '@azure/core-auth': 1.9.0 + '@azure/core-tracing': 1.2.0 + '@azure/core-util': 1.11.0 + '@azure/logger': 1.1.4 + http-proxy-agent: 7.0.2 + https-proxy-agent: 7.0.5 + tslib: 2.8.0 + transitivePeerDependencies: + - supports-color + + '@azure/core-tracing@1.2.0': + dependencies: + tslib: 2.8.0 + + '@azure/core-util@1.11.0': + dependencies: + '@azure/abort-controller': 2.1.2 + tslib: 2.8.0 + + '@azure/cosmos@4.2.0': + dependencies: + '@azure/abort-controller': 2.1.2 + '@azure/core-auth': 1.9.0 + '@azure/core-rest-pipeline': 1.18.1 + '@azure/core-tracing': 1.2.0 + '@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.0 + transitivePeerDependencies: + - supports-color + + '@azure/identity@4.5.0': + dependencies: + '@azure/abort-controller': 2.1.2 + '@azure/core-auth': 1.9.0 + '@azure/core-client': 1.9.2 + '@azure/core-rest-pipeline': 1.18.1 + '@azure/core-tracing': 1.2.0 + '@azure/core-util': 1.11.0 + '@azure/logger': 1.1.4 + '@azure/msal-browser': 3.27.0 + '@azure/msal-node': 2.16.2 + events: 3.3.0 + jws: 4.0.0 + open: 8.4.2 + stoppable: 1.1.0 + tslib: 2.8.0 + transitivePeerDependencies: + - supports-color + + '@azure/logger@1.1.4': + dependencies: + tslib: 2.8.0 + + '@azure/msal-browser@3.27.0': + dependencies: + '@azure/msal-common': 14.16.0 + + '@azure/msal-common@14.16.0': {} + + '@azure/msal-node@2.16.2': + dependencies: + '@azure/msal-common': 14.16.0 + jsonwebtoken: 9.0.2 + uuid: 8.3.2 + + '@azure/openai@2.0.0': + dependencies: + '@azure-rest/core-client': 2.3.1 + tslib: 2.8.0 + transitivePeerDependencies: + - supports-color + '@babel/code-frame@7.26.0': dependencies: '@babel/helper-validator-identifier': 7.25.9 @@ -12275,10 +14978,43 @@ snapshots: '@types/tough-cookie': 4.0.5 tough-cookie: 4.1.4 + '@colors/colors@1.6.0': {} + '@cspotcode/source-map-support@0.8.1': dependencies: '@jridgewell/trace-mapping': 0.3.9 + '@dabh/diagnostics@2.0.3': + dependencies: + colorspace: 1.1.4 + enabled: 2.0.0 + kuler: 2.0.0 + + '@datastax/astra-db-ts@1.5.0': + dependencies: + fetch-h2: 3.0.2 + safe-stable-stringify: 2.5.0 + typed-emitter: 2.1.0 + uuidv7: 0.6.3 + + '@discordjs/collection@2.1.1': {} + + '@discordjs/rest@2.4.0': + dependencies: + '@discordjs/collection': 2.1.1 + '@discordjs/util': 1.1.1 + '@sapphire/async-queue': 1.5.5 + '@sapphire/snowflake': 3.5.5 + '@vladfrangu/async_event_emitter': 2.4.6 + discord-api-types: 0.37.97 + magic-bytes.js: 1.10.0 + tslib: 2.8.0 + undici: 6.19.8 + + '@discordjs/util@1.1.1': {} + + '@discoveryjs/json-ext@0.6.3': {} + '@emnapi/core@0.45.0': dependencies: tslib: 2.8.0 @@ -12746,6 +15482,8 @@ snapshots: '@faker-js/faker@8.4.1': {} + '@fastify/busboy@2.1.1': {} + '@floating-ui/core@1.6.8': dependencies: '@floating-ui/utils': 0.2.8 @@ -12769,6 +15507,27 @@ snapshots: '@floating-ui/utils@0.2.8': {} + '@google-cloud/aiplatform@3.34.0(encoding@0.1.13)': + dependencies: + google-gax: 4.4.1(encoding@0.1.13) + protobuf.js: 1.1.2 + transitivePeerDependencies: + - encoding + - supports-color + + '@google-cloud/vertexai@1.9.0(encoding@0.1.13)': + dependencies: + google-auth-library: 9.15.0(encoding@0.1.13) + transitivePeerDependencies: + - encoding + - supports-color + + '@google/generative-ai@0.21.0': {} + + '@graphql-typed-document-node/core@3.2.0(graphql@16.9.0)': + dependencies: + graphql: 16.9.0 + '@grpc/grpc-js@1.12.2': dependencies: '@grpc/proto-loader': 0.7.13 @@ -12790,6 +15549,23 @@ snapshots: hono: 4.6.7 zod: 3.23.8 + '@huggingface/inference@2.8.1': + dependencies: + '@huggingface/tasks': 0.12.30 + + '@huggingface/jinja@0.1.3': {} + + '@huggingface/jinja@0.3.2': {} + + '@huggingface/tasks@0.12.30': {} + + '@huggingface/transformers@3.1.0': + dependencies: + '@huggingface/jinja': 0.3.2 + onnxruntime-node: 1.20.1 + onnxruntime-web: 1.20.1 + sharp: 0.33.5 + '@humanwhocodes/config-array@0.13.0': dependencies: '@humanwhocodes/object-schema': 2.0.3 @@ -12959,6 +15735,10 @@ snapshots: wrap-ansi: 8.1.0 wrap-ansi-cjs: wrap-ansi@7.0.0 + '@isaacs/fs-minipass@4.0.1': + dependencies: + minipass: 7.1.2 + '@isaacs/string-locale-compare@1.1.0': {} '@jest/schemas@29.6.3': @@ -12994,16 +15774,257 @@ snapshots: '@js-sdsl/ordered-map@4.4.2': {} - '@latitude-data/promptl@0.3.2': + '@langchain/core@0.3.19(openai@4.74.0(encoding@0.1.13)(zod@3.23.8))': dependencies: - acorn: 8.14.0 - code-red: 1.0.4 - locate-character: 3.0.0 + ansi-styles: 5.2.0 + camelcase: 6.3.0 + decamelize: 1.2.0 + js-tiktoken: 1.0.15 + langsmith: 0.2.8(openai@4.74.0(encoding@0.1.13)(zod@3.23.8)) + mustache: 4.2.0 + p-queue: 6.6.2 + p-retry: 4.6.2 + uuid: 10.0.0 + zod: 3.23.8 + zod-to-json-schema: 3.23.5(zod@3.23.8) + transitivePeerDependencies: + - openai + + '@langchain/openai@0.3.14(@langchain/core@0.3.19(openai@4.74.0(encoding@0.1.13)(zod@3.23.8)))(encoding@0.1.13)': + dependencies: + '@langchain/core': 0.3.19(openai@4.74.0(encoding@0.1.13)(zod@3.23.8)) + js-tiktoken: 1.0.15 + openai: 4.74.0(encoding@0.1.13)(zod@3.23.8) + zod: 3.23.8 + zod-to-json-schema: 3.23.5(zod@3.23.8) + transitivePeerDependencies: + - encoding + + '@langchain/textsplitters@0.1.0(@langchain/core@0.3.19(openai@4.74.0(encoding@0.1.13)(zod@3.23.8)))': + dependencies: + '@langchain/core': 0.3.19(openai@4.74.0(encoding@0.1.13)(zod@3.23.8)) + js-tiktoken: 1.0.15 + + '@latitude-data/promptl@0.3.2': + dependencies: + acorn: 8.14.0 + code-red: 1.0.4 + locate-character: 3.0.0 yaml: 2.6.0 zod: 3.23.8 '@leichtgewicht/ip-codec@2.0.5': {} + '@llamaindex/anthropic@0.0.26(@aws-crypto/sha256-js@5.2.0)(@huggingface/transformers@3.1.0)(encoding@0.1.13)(gpt-tokenizer@2.7.0)(js-tiktoken@1.0.15)(pathe@1.1.2)': + dependencies: + '@anthropic-ai/sdk': 0.32.1(encoding@0.1.13) + '@llamaindex/core': 0.4.17(@aws-crypto/sha256-js@5.2.0)(@huggingface/transformers@3.1.0)(gpt-tokenizer@2.7.0)(js-tiktoken@1.0.15)(pathe@1.1.2) + '@llamaindex/env': 0.1.24(@aws-crypto/sha256-js@5.2.0)(@huggingface/transformers@3.1.0)(gpt-tokenizer@2.7.0)(js-tiktoken@1.0.15)(pathe@1.1.2) + remeda: 2.17.4 + transitivePeerDependencies: + - '@aws-crypto/sha256-js' + - '@huggingface/transformers' + - encoding + - gpt-tokenizer + - js-tiktoken + - pathe + - tiktoken + + '@llamaindex/clip@0.0.26(@aws-crypto/sha256-js@5.2.0)(@huggingface/transformers@3.1.0)(encoding@0.1.13)(gpt-tokenizer@2.7.0)(js-tiktoken@1.0.15)(pathe@1.1.2)(zod@3.23.8)': + dependencies: + '@huggingface/transformers': 3.1.0 + '@llamaindex/core': 0.4.17(@aws-crypto/sha256-js@5.2.0)(@huggingface/transformers@3.1.0)(gpt-tokenizer@2.7.0)(js-tiktoken@1.0.15)(pathe@1.1.2) + '@llamaindex/env': 0.1.24(@aws-crypto/sha256-js@5.2.0)(@huggingface/transformers@3.1.0)(gpt-tokenizer@2.7.0)(js-tiktoken@1.0.15)(pathe@1.1.2) + '@llamaindex/openai': 0.1.42(@aws-crypto/sha256-js@5.2.0)(@huggingface/transformers@3.1.0)(encoding@0.1.13)(gpt-tokenizer@2.7.0)(js-tiktoken@1.0.15)(pathe@1.1.2)(zod@3.23.8) + transitivePeerDependencies: + - '@aws-crypto/sha256-js' + - encoding + - gpt-tokenizer + - js-tiktoken + - pathe + - tiktoken + - zod + + '@llamaindex/cloud@2.0.17(@llamaindex/core@0.4.17(@aws-crypto/sha256-js@5.2.0)(@huggingface/transformers@3.1.0)(gpt-tokenizer@2.7.0)(js-tiktoken@1.0.15)(pathe@1.1.2))(@llamaindex/env@0.1.24(@aws-crypto/sha256-js@5.2.0)(@huggingface/transformers@3.1.0)(gpt-tokenizer@2.7.0)(js-tiktoken@1.0.15)(pathe@1.1.2))': + dependencies: + '@llamaindex/core': 0.4.17(@aws-crypto/sha256-js@5.2.0)(@huggingface/transformers@3.1.0)(gpt-tokenizer@2.7.0)(js-tiktoken@1.0.15)(pathe@1.1.2) + '@llamaindex/env': 0.1.24(@aws-crypto/sha256-js@5.2.0)(@huggingface/transformers@3.1.0)(gpt-tokenizer@2.7.0)(js-tiktoken@1.0.15)(pathe@1.1.2) + + '@llamaindex/core@0.4.17(@aws-crypto/sha256-js@5.2.0)(@huggingface/transformers@3.1.0)(gpt-tokenizer@2.7.0)(js-tiktoken@1.0.15)(pathe@1.1.2)': + dependencies: + '@llamaindex/env': 0.1.24(@aws-crypto/sha256-js@5.2.0)(@huggingface/transformers@3.1.0)(gpt-tokenizer@2.7.0)(js-tiktoken@1.0.15)(pathe@1.1.2) + '@types/node': 22.10.1 + magic-bytes.js: 1.10.0 + zod: 3.23.8 + zod-to-json-schema: 3.23.5(zod@3.23.8) + transitivePeerDependencies: + - '@aws-crypto/sha256-js' + - '@huggingface/transformers' + - gpt-tokenizer + - js-tiktoken + - pathe + - tiktoken + + '@llamaindex/deepinfra@0.0.26(@aws-crypto/sha256-js@5.2.0)(@huggingface/transformers@3.1.0)(encoding@0.1.13)(gpt-tokenizer@2.7.0)(js-tiktoken@1.0.15)(pathe@1.1.2)(zod@3.23.8)': + dependencies: + '@llamaindex/core': 0.4.17(@aws-crypto/sha256-js@5.2.0)(@huggingface/transformers@3.1.0)(gpt-tokenizer@2.7.0)(js-tiktoken@1.0.15)(pathe@1.1.2) + '@llamaindex/env': 0.1.24(@aws-crypto/sha256-js@5.2.0)(@huggingface/transformers@3.1.0)(gpt-tokenizer@2.7.0)(js-tiktoken@1.0.15)(pathe@1.1.2) + '@llamaindex/openai': 0.1.42(@aws-crypto/sha256-js@5.2.0)(@huggingface/transformers@3.1.0)(encoding@0.1.13)(gpt-tokenizer@2.7.0)(js-tiktoken@1.0.15)(pathe@1.1.2)(zod@3.23.8) + transitivePeerDependencies: + - '@aws-crypto/sha256-js' + - '@huggingface/transformers' + - encoding + - gpt-tokenizer + - js-tiktoken + - pathe + - tiktoken + - zod + + '@llamaindex/env@0.1.24(@aws-crypto/sha256-js@5.2.0)(@huggingface/transformers@3.1.0)(gpt-tokenizer@2.7.0)(js-tiktoken@1.0.15)(pathe@1.1.2)': + dependencies: + gpt-tokenizer: 2.7.0 + optionalDependencies: + '@aws-crypto/sha256-js': 5.2.0 + '@huggingface/transformers': 3.1.0 + js-tiktoken: 1.0.15 + pathe: 1.1.2 + + '@llamaindex/groq@0.0.41(@aws-crypto/sha256-js@5.2.0)(@huggingface/transformers@3.1.0)(encoding@0.1.13)(gpt-tokenizer@2.7.0)(js-tiktoken@1.0.15)(pathe@1.1.2)(zod@3.23.8)': + dependencies: + '@llamaindex/env': 0.1.24(@aws-crypto/sha256-js@5.2.0)(@huggingface/transformers@3.1.0)(gpt-tokenizer@2.7.0)(js-tiktoken@1.0.15)(pathe@1.1.2) + '@llamaindex/openai': 0.1.42(@aws-crypto/sha256-js@5.2.0)(@huggingface/transformers@3.1.0)(encoding@0.1.13)(gpt-tokenizer@2.7.0)(js-tiktoken@1.0.15)(pathe@1.1.2)(zod@3.23.8) + groq-sdk: 0.8.0(encoding@0.1.13) + transitivePeerDependencies: + - '@aws-crypto/sha256-js' + - '@huggingface/transformers' + - encoding + - gpt-tokenizer + - js-tiktoken + - pathe + - tiktoken + - zod + + '@llamaindex/huggingface@0.0.26(@aws-crypto/sha256-js@5.2.0)(@huggingface/transformers@3.1.0)(encoding@0.1.13)(gpt-tokenizer@2.7.0)(js-tiktoken@1.0.15)(pathe@1.1.2)(zod@3.23.8)': + dependencies: + '@huggingface/inference': 2.8.1 + '@huggingface/transformers': 3.1.0 + '@llamaindex/core': 0.4.17(@aws-crypto/sha256-js@5.2.0)(@huggingface/transformers@3.1.0)(gpt-tokenizer@2.7.0)(js-tiktoken@1.0.15)(pathe@1.1.2) + '@llamaindex/env': 0.1.24(@aws-crypto/sha256-js@5.2.0)(@huggingface/transformers@3.1.0)(gpt-tokenizer@2.7.0)(js-tiktoken@1.0.15)(pathe@1.1.2) + '@llamaindex/openai': 0.1.42(@aws-crypto/sha256-js@5.2.0)(@huggingface/transformers@3.1.0)(encoding@0.1.13)(gpt-tokenizer@2.7.0)(js-tiktoken@1.0.15)(pathe@1.1.2)(zod@3.23.8) + transitivePeerDependencies: + - '@aws-crypto/sha256-js' + - encoding + - gpt-tokenizer + - js-tiktoken + - pathe + - tiktoken + - zod + + '@llamaindex/node-parser@0.0.18(@llamaindex/core@0.4.17(@aws-crypto/sha256-js@5.2.0)(@huggingface/transformers@3.1.0)(gpt-tokenizer@2.7.0)(js-tiktoken@1.0.15)(pathe@1.1.2))(@llamaindex/env@0.1.24(@aws-crypto/sha256-js@5.2.0)(@huggingface/transformers@3.1.0)(gpt-tokenizer@2.7.0)(js-tiktoken@1.0.15)(pathe@1.1.2))(tree-sitter@0.22.1)(web-tree-sitter@0.24.4)': + dependencies: + '@llamaindex/core': 0.4.17(@aws-crypto/sha256-js@5.2.0)(@huggingface/transformers@3.1.0)(gpt-tokenizer@2.7.0)(js-tiktoken@1.0.15)(pathe@1.1.2) + '@llamaindex/env': 0.1.24(@aws-crypto/sha256-js@5.2.0)(@huggingface/transformers@3.1.0)(gpt-tokenizer@2.7.0)(js-tiktoken@1.0.15)(pathe@1.1.2) + html-to-text: 9.0.5 + tree-sitter: 0.22.1 + web-tree-sitter: 0.24.4 + + '@llamaindex/ollama@0.0.33(@aws-crypto/sha256-js@5.2.0)(@huggingface/transformers@3.1.0)(gpt-tokenizer@2.7.0)(js-tiktoken@1.0.15)(pathe@1.1.2)': + dependencies: + '@llamaindex/core': 0.4.17(@aws-crypto/sha256-js@5.2.0)(@huggingface/transformers@3.1.0)(gpt-tokenizer@2.7.0)(js-tiktoken@1.0.15)(pathe@1.1.2) + '@llamaindex/env': 0.1.24(@aws-crypto/sha256-js@5.2.0)(@huggingface/transformers@3.1.0)(gpt-tokenizer@2.7.0)(js-tiktoken@1.0.15)(pathe@1.1.2) + ollama: 0.5.10 + remeda: 2.17.4 + transitivePeerDependencies: + - '@aws-crypto/sha256-js' + - '@huggingface/transformers' + - gpt-tokenizer + - js-tiktoken + - pathe + - tiktoken + + '@llamaindex/openai@0.1.42(@aws-crypto/sha256-js@5.2.0)(@huggingface/transformers@3.1.0)(encoding@0.1.13)(gpt-tokenizer@2.7.0)(js-tiktoken@1.0.15)(pathe@1.1.2)(zod@3.23.8)': + dependencies: + '@llamaindex/core': 0.4.17(@aws-crypto/sha256-js@5.2.0)(@huggingface/transformers@3.1.0)(gpt-tokenizer@2.7.0)(js-tiktoken@1.0.15)(pathe@1.1.2) + '@llamaindex/env': 0.1.24(@aws-crypto/sha256-js@5.2.0)(@huggingface/transformers@3.1.0)(gpt-tokenizer@2.7.0)(js-tiktoken@1.0.15)(pathe@1.1.2) + openai: 4.74.0(encoding@0.1.13)(zod@3.23.8) + transitivePeerDependencies: + - '@aws-crypto/sha256-js' + - '@huggingface/transformers' + - encoding + - gpt-tokenizer + - js-tiktoken + - pathe + - tiktoken + - zod + + '@llamaindex/portkey-ai@0.0.26(@aws-crypto/sha256-js@5.2.0)(@huggingface/transformers@3.1.0)(gpt-tokenizer@2.7.0)(js-tiktoken@1.0.15)(pathe@1.1.2)': + dependencies: + '@llamaindex/core': 0.4.17(@aws-crypto/sha256-js@5.2.0)(@huggingface/transformers@3.1.0)(gpt-tokenizer@2.7.0)(js-tiktoken@1.0.15)(pathe@1.1.2) + '@llamaindex/env': 0.1.24(@aws-crypto/sha256-js@5.2.0)(@huggingface/transformers@3.1.0)(gpt-tokenizer@2.7.0)(js-tiktoken@1.0.15)(pathe@1.1.2) + portkey-ai: 0.1.16 + remeda: 2.17.4 + transitivePeerDependencies: + - '@aws-crypto/sha256-js' + - '@huggingface/transformers' + - gpt-tokenizer + - js-tiktoken + - pathe + - tiktoken + + '@llamaindex/readers@1.0.19(@aws-sdk/credential-providers@3.699.0(@aws-sdk/client-sso-oidc@3.699.0(@aws-sdk/client-sts@3.699.0)))(@llamaindex/core@0.4.17(@aws-crypto/sha256-js@5.2.0)(@huggingface/transformers@3.1.0)(gpt-tokenizer@2.7.0)(js-tiktoken@1.0.15)(pathe@1.1.2))(@llamaindex/env@0.1.24(@aws-crypto/sha256-js@5.2.0)(@huggingface/transformers@3.1.0)(gpt-tokenizer@2.7.0)(js-tiktoken@1.0.15)(pathe@1.1.2))(encoding@0.1.13)(socks@2.8.3)': + dependencies: + '@azure/cosmos': 4.2.0 + '@discordjs/rest': 2.4.0 + '@discoveryjs/json-ext': 0.6.3 + '@llamaindex/core': 0.4.17(@aws-crypto/sha256-js@5.2.0)(@huggingface/transformers@3.1.0)(gpt-tokenizer@2.7.0)(js-tiktoken@1.0.15)(pathe@1.1.2) + '@llamaindex/env': 0.1.24(@aws-crypto/sha256-js@5.2.0)(@huggingface/transformers@3.1.0)(gpt-tokenizer@2.7.0)(js-tiktoken@1.0.15)(pathe@1.1.2) + assemblyai: 4.8.0 + csv-parse: 5.5.6 + discord-api-types: 0.37.110 + mammoth: 1.8.0 + mongodb: 6.11.0(@aws-sdk/credential-providers@3.699.0(@aws-sdk/client-sso-oidc@3.699.0(@aws-sdk/client-sts@3.699.0)))(socks@2.8.3) + notion-md-crawler: 1.0.0(encoding@0.1.13) + papaparse: 5.4.1 + unpdf: 0.12.1(encoding@0.1.13) + transitivePeerDependencies: + - '@aws-sdk/credential-providers' + - '@mongodb-js/zstd' + - bufferutil + - encoding + - gcp-metadata + - kerberos + - mongodb-client-encryption + - snappy + - socks + - supports-color + - utf-8-validate + + '@llamaindex/replicate@0.0.26(@aws-crypto/sha256-js@5.2.0)(@huggingface/transformers@3.1.0)(gpt-tokenizer@2.7.0)(js-tiktoken@1.0.15)(pathe@1.1.2)': + dependencies: + '@llamaindex/core': 0.4.17(@aws-crypto/sha256-js@5.2.0)(@huggingface/transformers@3.1.0)(gpt-tokenizer@2.7.0)(js-tiktoken@1.0.15)(pathe@1.1.2) + '@llamaindex/env': 0.1.24(@aws-crypto/sha256-js@5.2.0)(@huggingface/transformers@3.1.0)(gpt-tokenizer@2.7.0)(js-tiktoken@1.0.15)(pathe@1.1.2) + replicate: 1.0.1 + transitivePeerDependencies: + - '@aws-crypto/sha256-js' + - '@huggingface/transformers' + - gpt-tokenizer + - js-tiktoken + - pathe + - tiktoken + + '@llamaindex/vllm@0.0.12(@aws-crypto/sha256-js@5.2.0)(@huggingface/transformers@3.1.0)(encoding@0.1.13)(gpt-tokenizer@2.7.0)(js-tiktoken@1.0.15)(pathe@1.1.2)(zod@3.23.8)': + dependencies: + '@llamaindex/openai': 0.1.42(@aws-crypto/sha256-js@5.2.0)(@huggingface/transformers@3.1.0)(encoding@0.1.13)(gpt-tokenizer@2.7.0)(js-tiktoken@1.0.15)(pathe@1.1.2)(zod@3.23.8) + transitivePeerDependencies: + - '@aws-crypto/sha256-js' + - '@huggingface/transformers' + - encoding + - gpt-tokenizer + - js-tiktoken + - pathe + - tiktoken + - zod + '@logdna/tail-file@2.2.0': {} '@lucia-auth/adapter-drizzle@1.1.0(drizzle-orm@0.33.0(@opentelemetry/api@1.9.0)(@types/pg@8.11.10)(@types/react@18.3.0)(pg@8.13.1)(react@19.0.0-rc-5d19e1c8-20240923))(lucia@3.2.2)': @@ -13013,6 +16034,22 @@ snapshots: '@lukeed/ms@2.0.2': {} + '@mapbox/node-pre-gyp@1.0.11(encoding@0.1.13)': + dependencies: + detect-libc: 2.0.3 + https-proxy-agent: 5.0.1 + make-dir: 3.1.0 + node-fetch: 2.7.0(encoding@0.1.13) + nopt: 5.0.0 + npmlog: 5.0.1 + rimraf: 3.0.2 + semver: 7.6.3 + tar: 6.2.1 + transitivePeerDependencies: + - encoding + - supports-color + optional: true + '@mdx-js/mdx@2.3.0': dependencies: '@types/estree-jsx': 1.0.5 @@ -13162,7 +16199,7 @@ snapshots: '@mintlify/models@0.0.139': dependencies: - axios: 1.7.7 + axios: 1.7.8 openapi-types: 12.1.3 transitivePeerDependencies: - debug @@ -13182,7 +16219,7 @@ snapshots: '@mintlify/openapi-parser': 0.0.0 '@mintlify/scraping': 4.0.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) '@mintlify/validation': 0.1.208 - axios: 1.7.7 + axios: 1.7.8 chalk: 5.3.0 favicons: 7.2.0 fs-extra: 11.2.0 @@ -13273,6 +16310,21 @@ snapshots: transitivePeerDependencies: - debug + '@mistralai/mistralai@1.3.4(zod@3.23.8)': + dependencies: + zod: 3.23.8 + + '@mixedbread-ai/sdk@2.2.11(encoding@0.1.13)': + dependencies: + form-data: 4.0.0 + formdata-node: 6.0.3 + js-base64: 3.7.2 + node-fetch: 2.7.0(encoding@0.1.13) + qs: 6.11.2 + url-join: 4.0.1 + transitivePeerDependencies: + - encoding + '@monaco-editor/loader@1.4.0(monaco-editor@0.50.0)': dependencies: monaco-editor: 0.50.0 @@ -13299,6 +16351,10 @@ snapshots: react: 19.0.0-rc-5d19e1c8-20240923 react-dom: 19.0.0-rc-5d19e1c8-20240923(react@19.0.0-rc-5d19e1c8-20240923) + '@mongodb-js/saslprep@1.1.9': + dependencies: + sparse-bitfield: 3.0.3 + '@msgpackr-extract/msgpackr-extract-darwin-arm64@3.0.3': optional: true @@ -13574,6 +16630,13 @@ snapshots: '@nolyfill/is-core-module@1.0.39': {} + '@notionhq/client@2.2.15(encoding@0.1.13)': + dependencies: + '@types/node-fetch': 2.6.12 + node-fetch: 2.7.0(encoding@0.1.13) + transitivePeerDependencies: + - encoding + '@npmcli/agent@2.2.2': dependencies: agent-base: 7.1.1 @@ -13796,6 +16859,10 @@ snapshots: '@open-draft/until@2.1.0': {} + '@opentelemetry/api-logs@0.49.1': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/api-logs@0.52.1': dependencies: '@opentelemetry/api': 1.9.0 @@ -13804,12 +16871,25 @@ snapshots: dependencies: '@opentelemetry/api': 1.9.0 + '@opentelemetry/api-logs@0.55.0': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/api@1.9.0': {} '@opentelemetry/context-async-hooks@1.27.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 + '@opentelemetry/context-async-hooks@1.28.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + + '@opentelemetry/core@1.22.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/semantic-conventions': 1.22.0 + '@opentelemetry/core@1.26.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -13820,6 +16900,68 @@ snapshots: '@opentelemetry/api': 1.9.0 '@opentelemetry/semantic-conventions': 1.27.0 + '@opentelemetry/core@1.28.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/semantic-conventions': 1.27.0 + + '@opentelemetry/exporter-logs-otlp-grpc@0.55.0(@opentelemetry/api@1.9.0)': + dependencies: + '@grpc/grpc-js': 1.12.2 + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.28.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-grpc-exporter-base': 0.55.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-transformer': 0.55.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-logs': 0.55.0(@opentelemetry/api@1.9.0) + + '@opentelemetry/exporter-logs-otlp-http@0.55.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/api-logs': 0.55.0 + '@opentelemetry/core': 1.28.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-exporter-base': 0.55.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-transformer': 0.55.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-logs': 0.55.0(@opentelemetry/api@1.9.0) + + '@opentelemetry/exporter-logs-otlp-proto@0.55.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/api-logs': 0.55.0 + '@opentelemetry/core': 1.28.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-exporter-base': 0.55.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-transformer': 0.55.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 1.28.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-logs': 0.55.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-base': 1.28.0(@opentelemetry/api@1.9.0) + + '@opentelemetry/exporter-trace-otlp-grpc@0.55.0(@opentelemetry/api@1.9.0)': + dependencies: + '@grpc/grpc-js': 1.12.2 + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.28.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-grpc-exporter-base': 0.55.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-transformer': 0.55.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 1.28.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-base': 1.28.0(@opentelemetry/api@1.9.0) + + '@opentelemetry/exporter-trace-otlp-http@0.55.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.28.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-exporter-base': 0.55.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-transformer': 0.55.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 1.28.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-base': 1.28.0(@opentelemetry/api@1.9.0) + + '@opentelemetry/exporter-trace-otlp-proto@0.55.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.28.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-exporter-base': 0.55.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-transformer': 0.55.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 1.28.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-base': 1.28.0(@opentelemetry/api@1.9.0) + '@opentelemetry/exporter-zipkin@1.27.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -13828,6 +16970,14 @@ snapshots: '@opentelemetry/sdk-trace-base': 1.27.0(@opentelemetry/api@1.9.0) '@opentelemetry/semantic-conventions': 1.27.0 + '@opentelemetry/exporter-zipkin@1.28.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.28.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 1.28.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-base': 1.28.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.27.0 + '@opentelemetry/instrumentation-amqplib@0.42.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -14050,30 +17200,160 @@ snapshots: transitivePeerDependencies: - supports-color + '@opentelemetry/instrumentation@0.55.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/api-logs': 0.55.0 + '@types/shimmer': 1.2.0 + import-in-the-middle: 1.11.2 + require-in-the-middle: 7.4.0 + semver: 7.6.3 + shimmer: 1.2.1 + transitivePeerDependencies: + - supports-color + + '@opentelemetry/otlp-exporter-base@0.49.1(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.22.0(@opentelemetry/api@1.9.0) + + '@opentelemetry/otlp-exporter-base@0.55.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.28.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-transformer': 0.55.0(@opentelemetry/api@1.9.0) + + '@opentelemetry/otlp-grpc-exporter-base@0.55.0(@opentelemetry/api@1.9.0)': + dependencies: + '@grpc/grpc-js': 1.12.2 + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.28.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-exporter-base': 0.55.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-transformer': 0.55.0(@opentelemetry/api@1.9.0) + + '@opentelemetry/otlp-transformer@0.49.1(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/api-logs': 0.49.1 + '@opentelemetry/core': 1.22.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 1.22.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-logs': 0.49.1(@opentelemetry/api-logs@0.49.1)(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-metrics': 1.22.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-base': 1.22.0(@opentelemetry/api@1.9.0) + + '@opentelemetry/otlp-transformer@0.55.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/api-logs': 0.55.0 + '@opentelemetry/core': 1.28.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 1.28.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-logs': 0.55.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-metrics': 1.28.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-base': 1.28.0(@opentelemetry/api@1.9.0) + protobufjs: 7.4.0 + '@opentelemetry/propagator-b3@1.27.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 '@opentelemetry/core': 1.27.0(@opentelemetry/api@1.9.0) + '@opentelemetry/propagator-b3@1.28.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.28.0(@opentelemetry/api@1.9.0) + '@opentelemetry/propagator-jaeger@1.27.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 '@opentelemetry/core': 1.27.0(@opentelemetry/api@1.9.0) + '@opentelemetry/propagator-jaeger@1.28.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.28.0(@opentelemetry/api@1.9.0) + '@opentelemetry/redis-common@0.36.2': {} + '@opentelemetry/resources@1.22.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.22.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.22.0 + '@opentelemetry/resources@1.27.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 '@opentelemetry/core': 1.27.0(@opentelemetry/api@1.9.0) '@opentelemetry/semantic-conventions': 1.27.0 + '@opentelemetry/resources@1.28.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.28.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.27.0 + + '@opentelemetry/sdk-logs@0.49.1(@opentelemetry/api-logs@0.49.1)(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/api-logs': 0.49.1 + '@opentelemetry/core': 1.22.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 1.22.0(@opentelemetry/api@1.9.0) + + '@opentelemetry/sdk-logs@0.55.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/api-logs': 0.55.0 + '@opentelemetry/core': 1.28.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 1.28.0(@opentelemetry/api@1.9.0) + + '@opentelemetry/sdk-metrics@1.22.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.22.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 1.22.0(@opentelemetry/api@1.9.0) + lodash.merge: 4.6.2 + '@opentelemetry/sdk-metrics@1.27.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 '@opentelemetry/core': 1.27.0(@opentelemetry/api@1.9.0) '@opentelemetry/resources': 1.27.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-metrics@1.28.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.28.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 1.28.0(@opentelemetry/api@1.9.0) + + '@opentelemetry/sdk-node@0.55.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/api-logs': 0.55.0 + '@opentelemetry/core': 1.28.0(@opentelemetry/api@1.9.0) + '@opentelemetry/exporter-logs-otlp-grpc': 0.55.0(@opentelemetry/api@1.9.0) + '@opentelemetry/exporter-logs-otlp-http': 0.55.0(@opentelemetry/api@1.9.0) + '@opentelemetry/exporter-logs-otlp-proto': 0.55.0(@opentelemetry/api@1.9.0) + '@opentelemetry/exporter-trace-otlp-grpc': 0.55.0(@opentelemetry/api@1.9.0) + '@opentelemetry/exporter-trace-otlp-http': 0.55.0(@opentelemetry/api@1.9.0) + '@opentelemetry/exporter-trace-otlp-proto': 0.55.0(@opentelemetry/api@1.9.0) + '@opentelemetry/exporter-zipkin': 1.28.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.55.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 1.28.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-logs': 0.55.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-metrics': 1.28.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-base': 1.28.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-node': 1.28.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.27.0 + transitivePeerDependencies: + - supports-color + + '@opentelemetry/sdk-trace-base@1.22.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.22.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 1.22.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.22.0 + '@opentelemetry/sdk-trace-base@1.27.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -14081,6 +17361,13 @@ snapshots: '@opentelemetry/resources': 1.27.0(@opentelemetry/api@1.9.0) '@opentelemetry/semantic-conventions': 1.27.0 + '@opentelemetry/sdk-trace-base@1.28.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.28.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 1.28.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.27.0 + '@opentelemetry/sdk-trace-node@1.27.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -14091,6 +17378,18 @@ snapshots: '@opentelemetry/sdk-trace-base': 1.27.0(@opentelemetry/api@1.9.0) semver: 7.6.3 + '@opentelemetry/sdk-trace-node@1.28.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/context-async-hooks': 1.28.0(@opentelemetry/api@1.9.0) + '@opentelemetry/core': 1.28.0(@opentelemetry/api@1.9.0) + '@opentelemetry/propagator-b3': 1.28.0(@opentelemetry/api@1.9.0) + '@opentelemetry/propagator-jaeger': 1.28.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-base': 1.28.0(@opentelemetry/api@1.9.0) + semver: 7.6.3 + + '@opentelemetry/semantic-conventions@1.22.0': {} + '@opentelemetry/semantic-conventions@1.25.1': {} '@opentelemetry/semantic-conventions@1.27.0': {} @@ -14113,6 +17412,8 @@ snapshots: '@oslojs/encoding@1.1.0': {} + '@petamoriken/float16@3.9.0': {} + '@phc/format@1.0.0': {} '@pinecone-database/pinecone@4.0.0': @@ -14277,6 +17578,15 @@ snapshots: transitivePeerDependencies: - supports-color + '@qdrant/js-client-rest@1.12.0(typescript@5.7.2)': + dependencies: + '@qdrant/openapi-typescript-fetch': 1.2.6 + '@sevinf/maybe': 0.5.0 + typescript: 5.7.2 + undici: 5.28.4 + + '@qdrant/openapi-typescript-fetch@1.2.6': {} + '@radix-ui/number@1.1.0': {} '@radix-ui/primitive@1.1.0': {} @@ -15351,6 +18661,10 @@ snapshots: '@rushstack/eslint-patch@1.10.4': {} + '@sapphire/async-queue@1.5.5': {} + + '@sapphire/snowflake@3.5.5': {} + '@selderee/plugin-htmlparser2@0.11.0': dependencies: domhandler: 5.0.3 @@ -15453,7 +18767,7 @@ snapshots: '@sentry/types': 8.35.0 '@sentry/utils': 8.35.0 - '@sentry/nextjs@8.35.0(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.27.0(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.53.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.27.0(@opentelemetry/api@1.9.0))(encoding@0.1.13)(next@15.0.3(@opentelemetry/api@1.9.0)(react-dom@19.0.0-rc-5d19e1c8-20240923(react@19.0.0-rc-5d19e1c8-20240923))(react@19.0.0-rc-5d19e1c8-20240923))(react@19.0.0-rc-5d19e1c8-20240923)(webpack@5.95.0(esbuild@0.19.12))': + '@sentry/nextjs@8.35.0(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.28.0(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.55.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.28.0(@opentelemetry/api@1.9.0))(encoding@0.1.13)(next@15.0.3(@opentelemetry/api@1.9.0)(react-dom@19.0.0-rc-5d19e1c8-20240923(react@19.0.0-rc-5d19e1c8-20240923))(react@19.0.0-rc-5d19e1c8-20240923))(react@19.0.0-rc-5d19e1c8-20240923)(webpack@5.95.0(esbuild@0.19.12))': dependencies: '@opentelemetry/instrumentation-http': 0.53.0(@opentelemetry/api@1.9.0) '@opentelemetry/semantic-conventions': 1.27.0 @@ -15461,7 +18775,7 @@ snapshots: '@sentry-internal/browser-utils': 8.35.0 '@sentry/core': 8.35.0 '@sentry/node': 8.35.0 - '@sentry/opentelemetry': 8.35.0(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.27.0(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.53.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.27.0(@opentelemetry/api@1.9.0))(@opentelemetry/semantic-conventions@1.27.0) + '@sentry/opentelemetry': 8.35.0(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.28.0(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.55.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.28.0(@opentelemetry/api@1.9.0))(@opentelemetry/semantic-conventions@1.27.0) '@sentry/react': 8.35.0(react@19.0.0-rc-5d19e1c8-20240923) '@sentry/types': 8.35.0 '@sentry/utils': 8.35.0 @@ -15534,6 +18848,17 @@ snapshots: '@sentry/types': 8.35.0 '@sentry/utils': 8.35.0 + '@sentry/opentelemetry@8.35.0(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.28.0(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.55.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.28.0(@opentelemetry/api@1.9.0))(@opentelemetry/semantic-conventions@1.27.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.28.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.55.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-base': 1.28.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.27.0 + '@sentry/core': 8.35.0 + '@sentry/types': 8.35.0 + '@sentry/utils': 8.35.0 + '@sentry/react@8.35.0(react@19.0.0-rc-5d19e1c8-20240923)': dependencies: '@sentry/browser': 8.35.0 @@ -15565,6 +18890,8 @@ snapshots: - encoding - supports-color + '@sevinf/maybe@0.5.0': {} + '@sigstore/bundle@2.3.2': dependencies: '@sigstore/protobuf-specs': 0.3.2 @@ -15617,6 +18944,11 @@ snapshots: '@smithy/types': 3.6.0 tslib: 2.8.0 + '@smithy/abort-controller@3.1.8': + dependencies: + '@smithy/types': 3.7.1 + tslib: 2.8.0 + '@smithy/chunked-blob-reader-native@3.0.1': dependencies: '@smithy/util-base64': 3.0.0 @@ -15634,6 +18966,14 @@ snapshots: '@smithy/util-middleware': 3.0.8 tslib: 2.8.0 + '@smithy/config-resolver@3.0.12': + dependencies: + '@smithy/node-config-provider': 3.1.11 + '@smithy/types': 3.7.1 + '@smithy/util-config-provider': 3.0.0 + '@smithy/util-middleware': 3.0.10 + tslib: 2.8.0 + '@smithy/core@2.5.1': dependencies: '@smithy/middleware-serde': 3.0.8 @@ -15645,6 +18985,17 @@ snapshots: '@smithy/util-utf8': 3.0.0 tslib: 2.8.0 + '@smithy/core@2.5.4': + dependencies: + '@smithy/middleware-serde': 3.0.10 + '@smithy/protocol-http': 4.1.7 + '@smithy/types': 3.7.1 + '@smithy/util-body-length-browser': 3.0.0 + '@smithy/util-middleware': 3.0.10 + '@smithy/util-stream': 3.3.1 + '@smithy/util-utf8': 3.0.0 + tslib: 2.8.0 + '@smithy/credential-provider-imds@3.2.5': dependencies: '@smithy/node-config-provider': 3.1.9 @@ -15653,10 +19004,32 @@ snapshots: '@smithy/url-parser': 3.0.8 tslib: 2.8.0 + '@smithy/credential-provider-imds@3.2.7': + dependencies: + '@smithy/node-config-provider': 3.1.11 + '@smithy/property-provider': 3.1.10 + '@smithy/types': 3.7.1 + '@smithy/url-parser': 3.0.10 + tslib: 2.8.0 + + '@smithy/eventstream-codec@1.1.0': + dependencies: + '@aws-crypto/crc32': 3.0.0 + '@smithy/types': 1.2.0 + '@smithy/util-hex-encoding': 1.1.0 + tslib: 2.8.0 + '@smithy/eventstream-codec@3.1.7': dependencies: '@aws-crypto/crc32': 5.2.0 - '@smithy/types': 3.6.0 + '@smithy/types': 3.7.1 + '@smithy/util-hex-encoding': 3.0.0 + tslib: 2.8.0 + + '@smithy/eventstream-codec@3.1.9': + dependencies: + '@aws-crypto/crc32': 5.2.0 + '@smithy/types': 3.7.1 '@smithy/util-hex-encoding': 3.0.0 tslib: 2.8.0 @@ -15666,6 +19039,17 @@ snapshots: '@smithy/types': 3.6.0 tslib: 2.8.0 + '@smithy/eventstream-serde-browser@3.0.13': + dependencies: + '@smithy/eventstream-serde-universal': 3.0.12 + '@smithy/types': 3.7.1 + tslib: 2.8.0 + + '@smithy/eventstream-serde-config-resolver@3.0.10': + dependencies: + '@smithy/types': 3.7.1 + tslib: 2.8.0 + '@smithy/eventstream-serde-config-resolver@3.0.8': dependencies: '@smithy/types': 3.6.0 @@ -15677,12 +19061,24 @@ snapshots: '@smithy/types': 3.6.0 tslib: 2.8.0 + '@smithy/eventstream-serde-node@3.0.12': + dependencies: + '@smithy/eventstream-serde-universal': 3.0.12 + '@smithy/types': 3.7.1 + tslib: 2.8.0 + '@smithy/eventstream-serde-universal@3.0.10': dependencies: '@smithy/eventstream-codec': 3.1.7 '@smithy/types': 3.6.0 tslib: 2.8.0 + '@smithy/eventstream-serde-universal@3.0.12': + dependencies: + '@smithy/eventstream-codec': 3.1.9 + '@smithy/types': 3.7.1 + tslib: 2.8.0 + '@smithy/fetch-http-handler@3.2.9': dependencies: '@smithy/protocol-http': 4.1.5 @@ -15699,6 +19095,14 @@ snapshots: '@smithy/util-base64': 3.0.0 tslib: 2.8.0 + '@smithy/fetch-http-handler@4.1.1': + dependencies: + '@smithy/protocol-http': 4.1.7 + '@smithy/querystring-builder': 3.0.10 + '@smithy/types': 3.7.1 + '@smithy/util-base64': 3.0.0 + tslib: 2.8.0 + '@smithy/hash-blob-browser@3.1.7': dependencies: '@smithy/chunked-blob-reader': 4.0.0 @@ -15706,6 +19110,13 @@ snapshots: '@smithy/types': 3.6.0 tslib: 2.8.0 + '@smithy/hash-node@3.0.10': + dependencies: + '@smithy/types': 3.7.1 + '@smithy/util-buffer-from': 3.0.0 + '@smithy/util-utf8': 3.0.0 + tslib: 2.8.0 + '@smithy/hash-node@3.0.8': dependencies: '@smithy/types': 3.6.0 @@ -15719,11 +19130,20 @@ snapshots: '@smithy/util-utf8': 3.0.0 tslib: 2.8.0 + '@smithy/invalid-dependency@3.0.10': + dependencies: + '@smithy/types': 3.7.1 + tslib: 2.8.0 + '@smithy/invalid-dependency@3.0.8': dependencies: '@smithy/types': 3.6.0 tslib: 2.8.0 + '@smithy/is-array-buffer@1.1.0': + dependencies: + tslib: 2.8.0 + '@smithy/is-array-buffer@2.2.0': dependencies: tslib: 2.8.0 @@ -15744,6 +19164,12 @@ snapshots: '@smithy/types': 3.6.0 tslib: 2.8.0 + '@smithy/middleware-content-length@3.0.12': + dependencies: + '@smithy/protocol-http': 4.1.7 + '@smithy/types': 3.7.1 + tslib: 2.8.0 + '@smithy/middleware-endpoint@3.2.1': dependencies: '@smithy/core': 2.5.1 @@ -15755,6 +19181,17 @@ snapshots: '@smithy/util-middleware': 3.0.8 tslib: 2.8.0 + '@smithy/middleware-endpoint@3.2.4': + dependencies: + '@smithy/core': 2.5.4 + '@smithy/middleware-serde': 3.0.10 + '@smithy/node-config-provider': 3.1.11 + '@smithy/shared-ini-file-loader': 3.1.11 + '@smithy/types': 3.7.1 + '@smithy/url-parser': 3.0.10 + '@smithy/util-middleware': 3.0.10 + tslib: 2.8.0 + '@smithy/middleware-retry@3.0.25': dependencies: '@smithy/node-config-provider': 3.1.9 @@ -15767,16 +19204,45 @@ snapshots: tslib: 2.8.0 uuid: 9.0.1 + '@smithy/middleware-retry@3.0.28': + dependencies: + '@smithy/node-config-provider': 3.1.11 + '@smithy/protocol-http': 4.1.7 + '@smithy/service-error-classification': 3.0.10 + '@smithy/smithy-client': 3.4.5 + '@smithy/types': 3.7.1 + '@smithy/util-middleware': 3.0.10 + '@smithy/util-retry': 3.0.10 + tslib: 2.8.0 + uuid: 9.0.1 + + '@smithy/middleware-serde@3.0.10': + dependencies: + '@smithy/types': 3.7.1 + tslib: 2.8.0 + '@smithy/middleware-serde@3.0.8': dependencies: '@smithy/types': 3.6.0 tslib: 2.8.0 + '@smithy/middleware-stack@3.0.10': + dependencies: + '@smithy/types': 3.7.1 + tslib: 2.8.0 + '@smithy/middleware-stack@3.0.8': dependencies: '@smithy/types': 3.6.0 tslib: 2.8.0 + '@smithy/node-config-provider@3.1.11': + dependencies: + '@smithy/property-provider': 3.1.10 + '@smithy/shared-ini-file-loader': 3.1.11 + '@smithy/types': 3.7.1 + tslib: 2.8.0 + '@smithy/node-config-provider@3.1.9': dependencies: '@smithy/property-provider': 3.1.8 @@ -15792,36 +19258,90 @@ snapshots: '@smithy/types': 3.6.0 tslib: 2.8.0 + '@smithy/node-http-handler@3.3.1': + dependencies: + '@smithy/abort-controller': 3.1.8 + '@smithy/protocol-http': 4.1.7 + '@smithy/querystring-builder': 3.0.10 + '@smithy/types': 3.7.1 + tslib: 2.8.0 + + '@smithy/property-provider@3.1.10': + dependencies: + '@smithy/types': 3.7.1 + tslib: 2.8.0 + '@smithy/property-provider@3.1.8': dependencies: '@smithy/types': 3.6.0 tslib: 2.8.0 + '@smithy/protocol-http@1.2.0': + dependencies: + '@smithy/types': 1.2.0 + tslib: 2.8.0 + '@smithy/protocol-http@4.1.5': dependencies: '@smithy/types': 3.6.0 tslib: 2.8.0 + '@smithy/protocol-http@4.1.7': + dependencies: + '@smithy/types': 3.7.1 + tslib: 2.8.0 + + '@smithy/querystring-builder@3.0.10': + dependencies: + '@smithy/types': 3.7.1 + '@smithy/util-uri-escape': 3.0.0 + tslib: 2.8.0 + '@smithy/querystring-builder@3.0.8': dependencies: '@smithy/types': 3.6.0 '@smithy/util-uri-escape': 3.0.0 tslib: 2.8.0 + '@smithy/querystring-parser@3.0.10': + dependencies: + '@smithy/types': 3.7.1 + tslib: 2.8.0 + '@smithy/querystring-parser@3.0.8': dependencies: '@smithy/types': 3.6.0 tslib: 2.8.0 + '@smithy/service-error-classification@3.0.10': + dependencies: + '@smithy/types': 3.7.1 + '@smithy/service-error-classification@3.0.8': dependencies: '@smithy/types': 3.6.0 + '@smithy/shared-ini-file-loader@3.1.11': + dependencies: + '@smithy/types': 3.7.1 + tslib: 2.8.0 + '@smithy/shared-ini-file-loader@3.1.9': dependencies: '@smithy/types': 3.6.0 tslib: 2.8.0 + '@smithy/signature-v4@1.1.0': + dependencies: + '@smithy/eventstream-codec': 1.1.0 + '@smithy/is-array-buffer': 1.1.0 + '@smithy/types': 1.2.0 + '@smithy/util-hex-encoding': 1.1.0 + '@smithy/util-middleware': 1.1.0 + '@smithy/util-uri-escape': 1.1.0 + '@smithy/util-utf8': 1.1.0 + tslib: 2.8.0 + '@smithy/signature-v4@4.2.1': dependencies: '@smithy/is-array-buffer': 3.0.0 @@ -15833,6 +19353,17 @@ snapshots: '@smithy/util-utf8': 3.0.0 tslib: 2.8.0 + '@smithy/signature-v4@4.2.3': + dependencies: + '@smithy/is-array-buffer': 3.0.0 + '@smithy/protocol-http': 4.1.7 + '@smithy/types': 3.7.1 + '@smithy/util-hex-encoding': 3.0.0 + '@smithy/util-middleware': 3.0.10 + '@smithy/util-uri-escape': 3.0.0 + '@smithy/util-utf8': 3.0.0 + tslib: 2.8.0 + '@smithy/smithy-client@3.4.2': dependencies: '@smithy/core': 2.5.1 @@ -15843,10 +19374,34 @@ snapshots: '@smithy/util-stream': 3.2.1 tslib: 2.8.0 + '@smithy/smithy-client@3.4.5': + dependencies: + '@smithy/core': 2.5.4 + '@smithy/middleware-endpoint': 3.2.4 + '@smithy/middleware-stack': 3.0.10 + '@smithy/protocol-http': 4.1.7 + '@smithy/types': 3.7.1 + '@smithy/util-stream': 3.3.1 + tslib: 2.8.0 + + '@smithy/types@1.2.0': + dependencies: + tslib: 2.8.0 + '@smithy/types@3.6.0': dependencies: tslib: 2.8.0 + '@smithy/types@3.7.1': + dependencies: + tslib: 2.8.0 + + '@smithy/url-parser@3.0.10': + dependencies: + '@smithy/querystring-parser': 3.0.10 + '@smithy/types': 3.7.1 + tslib: 2.8.0 + '@smithy/url-parser@3.0.8': dependencies: '@smithy/querystring-parser': 3.0.8 @@ -15867,6 +19422,11 @@ snapshots: dependencies: tslib: 2.8.0 + '@smithy/util-buffer-from@1.1.0': + dependencies: + '@smithy/is-array-buffer': 1.1.0 + tslib: 2.8.0 + '@smithy/util-buffer-from@2.2.0': dependencies: '@smithy/is-array-buffer': 2.2.0 @@ -15889,6 +19449,14 @@ snapshots: bowser: 2.11.0 tslib: 2.8.0 + '@smithy/util-defaults-mode-browser@3.0.28': + dependencies: + '@smithy/property-provider': 3.1.10 + '@smithy/smithy-client': 3.4.5 + '@smithy/types': 3.7.1 + bowser: 2.11.0 + tslib: 2.8.0 + '@smithy/util-defaults-mode-node@3.0.25': dependencies: '@smithy/config-resolver': 3.0.10 @@ -15899,21 +19467,56 @@ snapshots: '@smithy/types': 3.6.0 tslib: 2.8.0 + '@smithy/util-defaults-mode-node@3.0.28': + dependencies: + '@smithy/config-resolver': 3.0.12 + '@smithy/credential-provider-imds': 3.2.7 + '@smithy/node-config-provider': 3.1.11 + '@smithy/property-provider': 3.1.10 + '@smithy/smithy-client': 3.4.5 + '@smithy/types': 3.7.1 + tslib: 2.8.0 + '@smithy/util-endpoints@2.1.4': dependencies: '@smithy/node-config-provider': 3.1.9 '@smithy/types': 3.6.0 tslib: 2.8.0 + '@smithy/util-endpoints@2.1.6': + dependencies: + '@smithy/node-config-provider': 3.1.11 + '@smithy/types': 3.7.1 + tslib: 2.8.0 + + '@smithy/util-hex-encoding@1.1.0': + dependencies: + tslib: 2.8.0 + '@smithy/util-hex-encoding@3.0.0': dependencies: tslib: 2.8.0 + '@smithy/util-middleware@1.1.0': + dependencies: + tslib: 2.8.0 + + '@smithy/util-middleware@3.0.10': + dependencies: + '@smithy/types': 3.7.1 + tslib: 2.8.0 + '@smithy/util-middleware@3.0.8': dependencies: '@smithy/types': 3.6.0 tslib: 2.8.0 + '@smithy/util-retry@3.0.10': + dependencies: + '@smithy/service-error-classification': 3.0.10 + '@smithy/types': 3.7.1 + tslib: 2.8.0 + '@smithy/util-retry@3.0.8': dependencies: '@smithy/service-error-classification': 3.0.8 @@ -15931,10 +19534,30 @@ snapshots: '@smithy/util-utf8': 3.0.0 tslib: 2.8.0 + '@smithy/util-stream@3.3.1': + dependencies: + '@smithy/fetch-http-handler': 4.1.1 + '@smithy/node-http-handler': 3.3.1 + '@smithy/types': 3.7.1 + '@smithy/util-base64': 3.0.0 + '@smithy/util-buffer-from': 3.0.0 + '@smithy/util-hex-encoding': 3.0.0 + '@smithy/util-utf8': 3.0.0 + tslib: 2.8.0 + + '@smithy/util-uri-escape@1.1.0': + dependencies: + tslib: 2.8.0 + '@smithy/util-uri-escape@3.0.0': dependencies: tslib: 2.8.0 + '@smithy/util-utf8@1.1.0': + dependencies: + '@smithy/util-buffer-from': 1.1.0 + tslib: 2.8.0 + '@smithy/util-utf8@2.3.0': dependencies: '@smithy/util-buffer-from': 2.2.0 @@ -15951,6 +19574,12 @@ snapshots: '@smithy/types': 3.6.0 tslib: 2.8.0 + '@smithy/util-waiter@3.1.9': + dependencies: + '@smithy/abort-controller': 3.1.8 + '@smithy/types': 3.7.1 + tslib: 2.8.0 + '@socket.io/component-emitter@3.1.2': {} '@swc/counter@0.1.3': {} @@ -16003,58 +19632,186 @@ snapshots: optionalDependencies: typescript: 5.7.2 - '@testing-library/dom@10.4.0': + '@testing-library/dom@10.4.0': + dependencies: + '@babel/code-frame': 7.26.0 + '@babel/runtime': 7.26.0 + '@types/aria-query': 5.0.4 + aria-query: 5.3.0 + chalk: 4.1.2 + dom-accessibility-api: 0.5.16 + lz-string: 1.5.0 + pretty-format: 27.5.1 + + '@testing-library/react-hooks@8.0.1(@types/react@18.3.0)(react-dom@18.3.0(react@18.3.0))(react@18.3.0)': + dependencies: + '@babel/runtime': 7.26.0 + react: 18.3.0 + react-error-boundary: 3.1.4(react@18.3.0) + optionalDependencies: + '@types/react': 18.3.0 + react-dom: 18.3.0(react@18.3.0) + + '@testing-library/react-hooks@8.0.1(@types/react@18.3.0)(react-dom@19.0.0-rc-5d19e1c8-20240923(react@19.0.0-rc-5d19e1c8-20240923))(react@19.0.0-rc-5d19e1c8-20240923)': + dependencies: + '@babel/runtime': 7.26.0 + react: 19.0.0-rc-5d19e1c8-20240923 + react-error-boundary: 3.1.4(react@19.0.0-rc-5d19e1c8-20240923) + optionalDependencies: + '@types/react': 18.3.0 + react-dom: 19.0.0-rc-5d19e1c8-20240923(react@19.0.0-rc-5d19e1c8-20240923) + + '@testing-library/react@16.0.1(@testing-library/dom@10.4.0)(@types/react-dom@18.3.0)(@types/react@18.3.0)(react-dom@18.3.0(react@18.3.0))(react@18.3.0)': + dependencies: + '@babel/runtime': 7.26.0 + '@testing-library/dom': 10.4.0 + react: 18.3.0 + react-dom: 18.3.0(react@18.3.0) + optionalDependencies: + '@types/react': 18.3.0 + '@types/react-dom': 18.3.0 + + '@testing-library/react@16.0.1(@testing-library/dom@10.4.0)(@types/react-dom@18.3.0)(@types/react@18.3.0)(react-dom@19.0.0-rc-5d19e1c8-20240923(react@19.0.0-rc-5d19e1c8-20240923))(react@19.0.0-rc-5d19e1c8-20240923)': + dependencies: + '@babel/runtime': 7.26.0 + '@testing-library/dom': 10.4.0 + react: 19.0.0-rc-5d19e1c8-20240923 + react-dom: 19.0.0-rc-5d19e1c8-20240923(react@19.0.0-rc-5d19e1c8-20240923) + optionalDependencies: + '@types/react': 18.3.0 + '@types/react-dom': 18.3.0 + + '@tokenizer/token@0.3.0': {} + + '@tootallnate/once@2.0.0': {} + + '@tootallnate/quickjs-emscripten@0.23.0': {} + + '@traceloop/ai-semantic-conventions@0.11.0': + dependencies: + '@opentelemetry/api': 1.9.0 + + '@traceloop/instrumentation-anthropic@0.11.1(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/core': 1.27.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.53.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.27.0 + '@traceloop/ai-semantic-conventions': 0.11.0 + tslib: 2.8.0 + transitivePeerDependencies: + - '@opentelemetry/api' + - supports-color + + '@traceloop/instrumentation-azure@0.11.1(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/core': 1.27.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.53.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.27.0 + '@traceloop/ai-semantic-conventions': 0.11.0 + tslib: 2.8.0 + transitivePeerDependencies: + - '@opentelemetry/api' + - supports-color + + '@traceloop/instrumentation-bedrock@0.11.1(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/core': 1.27.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.53.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.27.0 + '@traceloop/ai-semantic-conventions': 0.11.0 + tslib: 2.8.0 + transitivePeerDependencies: + - '@opentelemetry/api' + - supports-color + + '@traceloop/instrumentation-chromadb@0.11.3(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/core': 1.27.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.53.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.27.0 + '@traceloop/ai-semantic-conventions': 0.11.0 + tslib: 2.8.0 + transitivePeerDependencies: + - '@opentelemetry/api' + - supports-color + + '@traceloop/instrumentation-cohere@0.11.1(@opentelemetry/api@1.9.0)': dependencies: - '@babel/code-frame': 7.26.0 - '@babel/runtime': 7.26.0 - '@types/aria-query': 5.0.4 - aria-query: 5.3.0 - chalk: 4.1.2 - dom-accessibility-api: 0.5.16 - lz-string: 1.5.0 - pretty-format: 27.5.1 + '@opentelemetry/core': 1.27.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.53.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.27.0 + '@traceloop/ai-semantic-conventions': 0.11.0 + tslib: 2.8.0 + transitivePeerDependencies: + - '@opentelemetry/api' + - supports-color - '@testing-library/react-hooks@8.0.1(@types/react@18.3.0)(react-dom@18.3.0(react@18.3.0))(react@18.3.0)': + '@traceloop/instrumentation-langchain@0.11.4(@opentelemetry/api@1.9.0)': dependencies: - '@babel/runtime': 7.26.0 - react: 18.3.0 - react-error-boundary: 3.1.4(react@18.3.0) - optionalDependencies: - '@types/react': 18.3.0 - react-dom: 18.3.0(react@18.3.0) + '@opentelemetry/core': 1.27.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.53.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.27.0 + '@traceloop/ai-semantic-conventions': 0.11.0 + tslib: 2.8.0 + transitivePeerDependencies: + - '@opentelemetry/api' + - supports-color - '@testing-library/react-hooks@8.0.1(@types/react@18.3.0)(react-dom@19.0.0-rc-5d19e1c8-20240923(react@19.0.0-rc-5d19e1c8-20240923))(react@19.0.0-rc-5d19e1c8-20240923)': + '@traceloop/instrumentation-llamaindex@0.11.1(@opentelemetry/api@1.9.0)': dependencies: - '@babel/runtime': 7.26.0 - react: 19.0.0-rc-5d19e1c8-20240923 - react-error-boundary: 3.1.4(react@19.0.0-rc-5d19e1c8-20240923) - optionalDependencies: - '@types/react': 18.3.0 - react-dom: 19.0.0-rc-5d19e1c8-20240923(react@19.0.0-rc-5d19e1c8-20240923) + '@opentelemetry/core': 1.27.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.53.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.27.0 + '@traceloop/ai-semantic-conventions': 0.11.0 + lodash: 4.17.21 + tslib: 2.8.0 + transitivePeerDependencies: + - '@opentelemetry/api' + - supports-color - '@testing-library/react@16.0.1(@testing-library/dom@10.4.0)(@types/react-dom@18.3.0)(@types/react@18.3.0)(react-dom@18.3.0(react@18.3.0))(react@18.3.0)': + '@traceloop/instrumentation-openai@0.11.3(@opentelemetry/api@1.9.0)': dependencies: - '@babel/runtime': 7.26.0 - '@testing-library/dom': 10.4.0 - react: 18.3.0 - react-dom: 18.3.0(react@18.3.0) - optionalDependencies: - '@types/react': 18.3.0 - '@types/react-dom': 18.3.0 + '@opentelemetry/core': 1.27.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.53.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.27.0 + '@traceloop/ai-semantic-conventions': 0.11.0 + js-tiktoken: 1.0.15 + tslib: 2.8.0 + transitivePeerDependencies: + - '@opentelemetry/api' + - supports-color - '@testing-library/react@16.0.1(@testing-library/dom@10.4.0)(@types/react-dom@18.3.0)(@types/react@18.3.0)(react-dom@19.0.0-rc-5d19e1c8-20240923(react@19.0.0-rc-5d19e1c8-20240923))(react@19.0.0-rc-5d19e1c8-20240923)': + '@traceloop/instrumentation-pinecone@0.11.1(@opentelemetry/api@1.9.0)': dependencies: - '@babel/runtime': 7.26.0 - '@testing-library/dom': 10.4.0 - react: 19.0.0-rc-5d19e1c8-20240923 - react-dom: 19.0.0-rc-5d19e1c8-20240923(react@19.0.0-rc-5d19e1c8-20240923) - optionalDependencies: - '@types/react': 18.3.0 - '@types/react-dom': 18.3.0 + '@opentelemetry/core': 1.27.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.53.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.27.0 + '@traceloop/ai-semantic-conventions': 0.11.0 + tslib: 2.8.0 + transitivePeerDependencies: + - '@opentelemetry/api' + - supports-color - '@tokenizer/token@0.3.0': {} + '@traceloop/instrumentation-qdrant@0.11.1(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/core': 1.27.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.53.0(@opentelemetry/api@1.9.0) + '@traceloop/ai-semantic-conventions': 0.11.0 + tslib: 2.8.0 + transitivePeerDependencies: + - '@opentelemetry/api' + - supports-color - '@tootallnate/quickjs-emscripten@0.23.0': {} + '@traceloop/instrumentation-vertexai@0.11.4(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/core': 1.27.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.53.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.27.0 + '@traceloop/ai-semantic-conventions': 0.11.0 + tslib: 2.8.0 + transitivePeerDependencies: + - '@opentelemetry/api' + - supports-color '@tsconfig/node10@1.0.11': {} @@ -16098,6 +19855,8 @@ snapshots: '@types/node': 22.8.1 '@types/responselike': 1.0.3 + '@types/caseless@0.12.5': {} + '@types/connect@3.4.36': dependencies: '@types/node': 22.8.1 @@ -16159,7 +19918,7 @@ snapshots: '@types/express-serve-static-core@4.19.6': dependencies: '@types/node': 22.8.1 - '@types/qs': 6.9.16 + '@types/qs': 6.9.17 '@types/range-parser': 1.2.7 '@types/send': 0.17.4 @@ -16167,7 +19926,7 @@ snapshots: dependencies: '@types/body-parser': 1.19.5 '@types/express-serve-static-core': 4.19.6 - '@types/qs': 6.9.16 + '@types/qs': 6.9.17 '@types/serve-static': 1.15.7 '@types/google-protobuf@3.15.12': {} @@ -16210,6 +19969,8 @@ snapshots: '@types/lodash@4.17.12': {} + '@types/long@4.0.2': {} + '@types/mdast@3.0.15': dependencies: '@types/unist': 2.0.11 @@ -16222,6 +19983,10 @@ snapshots: '@types/mime@1.3.5': {} + '@types/morgan@1.9.9': + dependencies: + '@types/node': 22.8.1 + '@types/ms@0.7.34': {} '@types/mysql@2.15.26': @@ -16237,14 +20002,31 @@ snapshots: '@types/node': 22.8.1 form-data: 4.0.1 + '@types/node-fetch@2.6.12': + dependencies: + '@types/node': 22.8.1 + form-data: 4.0.1 + '@types/node@18.19.59': dependencies: undici-types: 5.26.5 + '@types/node@18.19.67': + dependencies: + undici-types: 5.26.5 + '@types/node@20.17.1': dependencies: undici-types: 6.19.8 + '@types/node@20.17.9': + dependencies: + undici-types: 6.19.8 + + '@types/node@22.10.1': + dependencies: + undici-types: 6.20.0 + '@types/node@22.8.1': dependencies: undici-types: 6.19.8 @@ -16290,7 +20072,7 @@ snapshots: '@types/prop-types@15.7.13': {} - '@types/qs@6.9.16': {} + '@types/qs@6.9.17': {} '@types/range-parser@1.2.7': {} @@ -16311,12 +20093,21 @@ snapshots: '@types/prop-types': 15.7.13 csstype: 3.1.3 + '@types/request@2.48.12': + dependencies: + '@types/caseless': 0.12.5 + '@types/node': 22.8.1 + '@types/tough-cookie': 4.0.5 + form-data: 2.5.2 + '@types/resolve@1.20.2': {} '@types/responselike@1.0.3': dependencies: '@types/node': 22.8.1 + '@types/retry@0.12.0': {} + '@types/semver@7.5.8': {} '@types/send@0.17.4': @@ -16338,6 +20129,8 @@ snapshots: '@types/tough-cookie@4.0.5': {} + '@types/triple-beam@1.3.5': {} + '@types/unist@2.0.11': {} '@types/unist@3.0.3': {} @@ -16346,6 +20139,12 @@ snapshots: '@types/uuid@9.0.8': {} + '@types/webidl-conversions@7.0.3': {} + + '@types/whatwg-url@11.0.5': + dependencies: + '@types/webidl-conversions': 7.0.3 + '@types/yauzl@2.10.3': dependencies: '@types/node': 22.8.1 @@ -16561,6 +20360,15 @@ snapshots: '@ungap/structured-clone@1.2.0': {} + '@upstash/vector@1.1.7': {} + + '@vercel/otel@1.10.0(@opentelemetry/api@1.9.0)(@opentelemetry/resources@1.28.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-metrics@1.28.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.28.0(@opentelemetry/api@1.9.0))': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/resources': 1.28.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-metrics': 1.28.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-base': 1.28.0(@opentelemetry/api@1.9.0) + '@vercel/style-guide@5.2.0(@next/eslint-plugin-next@14.2.16)(eslint@8.57.1)(prettier@3.3.3)(typescript@5.7.2)': dependencies: '@babel/core': 7.26.0 @@ -16682,6 +20490,8 @@ snapshots: loupe: 3.1.2 tinyrainbow: 1.2.0 + '@vladfrangu/async_event_emitter@2.4.6': {} + '@vue/compiler-core@3.5.12': dependencies: '@babel/parser': 7.26.1 @@ -16824,8 +20634,27 @@ snapshots: '@xtuc/long@4.2.2': {} + '@zilliz/milvus2-sdk-node@2.5.1': + dependencies: + '@grpc/grpc-js': 1.12.2 + '@grpc/proto-loader': 0.7.13 + '@petamoriken/float16': 3.9.0 + dayjs: 1.11.13 + generic-pool: 3.9.0 + lru-cache: 9.1.2 + protobufjs: 7.4.0 + winston: 3.17.0 + + a-sync-waterfall@1.0.1: + optional: true + + abbrev@1.1.1: + optional: true + abbrev@2.0.0: {} + abort-controller-x@0.4.3: {} + abort-controller@3.0.0: dependencies: event-target-shim: 5.0.1 @@ -16877,12 +20706,12 @@ snapshots: clean-stack: 4.2.0 indent-string: 5.0.0 - ai@3.4.23(openai@4.68.4(encoding@0.1.13)(zod@3.23.8))(react@18.3.1)(sswr@2.1.0(svelte@4.2.19))(svelte@4.2.19)(vue@3.5.12(typescript@5.6.3))(zod@3.23.8): + ai@3.4.23(openai@4.74.0(encoding@0.1.13)(zod@3.23.8))(react@18.3.1)(solid-js@1.9.3)(sswr@2.1.0(svelte@4.2.19))(svelte@4.2.19)(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) '@ai-sdk/react': 0.0.68(react@18.3.1)(zod@3.23.8) - '@ai-sdk/solid': 0.0.53(zod@3.23.8) + '@ai-sdk/solid': 0.0.53(solid-js@1.9.3)(zod@3.23.8) '@ai-sdk/svelte': 0.0.55(svelte@4.2.19)(zod@3.23.8) '@ai-sdk/ui-utils': 0.0.49(zod@3.23.8) '@ai-sdk/vue': 0.0.58(vue@3.5.12(typescript@5.6.3))(zod@3.23.8) @@ -16893,7 +20722,7 @@ snapshots: secure-json-parse: 2.7.0 zod-to-json-schema: 3.23.5(zod@3.23.8) optionalDependencies: - openai: 4.68.4(encoding@0.1.13)(zod@3.23.8) + openai: 4.74.0(encoding@0.1.13)(zod@3.23.8) react: 18.3.1 sswr: 2.1.0(svelte@4.2.19) svelte: 4.2.19 @@ -16902,12 +20731,12 @@ snapshots: - solid-js - vue - ai@3.4.23(openai@4.68.4(encoding@0.1.13)(zod@3.23.8))(react@18.3.1)(sswr@2.1.0(svelte@4.2.19))(svelte@4.2.19)(vue@3.5.12(typescript@5.7.2))(zod@3.23.8): + ai@3.4.23(openai@4.74.0(encoding@0.1.13)(zod@3.23.8))(react@18.3.1)(solid-js@1.9.3)(sswr@2.1.0(svelte@4.2.19))(svelte@4.2.19)(vue@3.5.12(typescript@5.7.2))(zod@3.23.8): dependencies: '@ai-sdk/provider': 0.0.26 '@ai-sdk/provider-utils': 1.0.22(zod@3.23.8) '@ai-sdk/react': 0.0.68(react@18.3.1)(zod@3.23.8) - '@ai-sdk/solid': 0.0.53(zod@3.23.8) + '@ai-sdk/solid': 0.0.53(solid-js@1.9.3)(zod@3.23.8) '@ai-sdk/svelte': 0.0.55(svelte@4.2.19)(zod@3.23.8) '@ai-sdk/ui-utils': 0.0.49(zod@3.23.8) '@ai-sdk/vue': 0.0.58(vue@3.5.12(typescript@5.7.2))(zod@3.23.8) @@ -16918,7 +20747,7 @@ snapshots: secure-json-parse: 2.7.0 zod-to-json-schema: 3.23.5(zod@3.23.8) optionalDependencies: - openai: 4.68.4(encoding@0.1.13)(zod@3.23.8) + openai: 4.74.0(encoding@0.1.13)(zod@3.23.8) react: 18.3.1 sswr: 2.1.0(svelte@4.2.19) svelte: 4.2.19 @@ -16927,12 +20756,12 @@ snapshots: - solid-js - vue - ai@3.4.23(openai@4.68.4(encoding@0.1.13)(zod@3.23.8))(react@19.0.0-rc-5d19e1c8-20240923)(sswr@2.1.0(svelte@4.2.19))(svelte@4.2.19)(vue@3.5.12(typescript@5.7.2))(zod@3.23.8): + ai@3.4.23(openai@4.74.0(encoding@0.1.13)(zod@3.23.8))(react@19.0.0-rc-5d19e1c8-20240923)(solid-js@1.9.3)(sswr@2.1.0(svelte@4.2.19))(svelte@4.2.19)(vue@3.5.12(typescript@5.7.2))(zod@3.23.8): dependencies: '@ai-sdk/provider': 0.0.26 '@ai-sdk/provider-utils': 1.0.22(zod@3.23.8) '@ai-sdk/react': 0.0.68(react@19.0.0-rc-5d19e1c8-20240923)(zod@3.23.8) - '@ai-sdk/solid': 0.0.53(zod@3.23.8) + '@ai-sdk/solid': 0.0.53(solid-js@1.9.3)(zod@3.23.8) '@ai-sdk/svelte': 0.0.55(svelte@4.2.19)(zod@3.23.8) '@ai-sdk/ui-utils': 0.0.49(zod@3.23.8) '@ai-sdk/vue': 0.0.58(vue@3.5.12(typescript@5.7.2))(zod@3.23.8) @@ -16943,7 +20772,7 @@ snapshots: secure-json-parse: 2.7.0 zod-to-json-schema: 3.23.5(zod@3.23.8) optionalDependencies: - openai: 4.68.4(encoding@0.1.13)(zod@3.23.8) + openai: 4.74.0(encoding@0.1.13)(zod@3.23.8) react: 19.0.0-rc-5d19e1c8-20240923 sswr: 2.1.0(svelte@4.2.19) svelte: 4.2.19 @@ -16952,6 +20781,45 @@ snapshots: - solid-js - vue + ai@4.0.10(react@19.0.0-rc-5d19e1c8-20240923)(zod@3.23.8): + dependencies: + '@ai-sdk/provider': 1.0.1 + '@ai-sdk/provider-utils': 2.0.2(zod@3.23.8) + '@ai-sdk/react': 1.0.3(react@19.0.0-rc-5d19e1c8-20240923)(zod@3.23.8) + '@ai-sdk/ui-utils': 1.0.2(zod@3.23.8) + '@opentelemetry/api': 1.9.0 + jsondiffpatch: 0.6.0 + zod-to-json-schema: 3.23.5(zod@3.23.8) + optionalDependencies: + react: 19.0.0-rc-5d19e1c8-20240923 + zod: 3.23.8 + + ai@4.0.7(react@19.0.0-rc-5d19e1c8-20240923)(zod@3.23.8): + dependencies: + '@ai-sdk/provider': 1.0.1 + '@ai-sdk/provider-utils': 2.0.2(zod@3.23.8) + '@ai-sdk/react': 1.0.3(react@19.0.0-rc-5d19e1c8-20240923)(zod@3.23.8) + '@ai-sdk/ui-utils': 1.0.2(zod@3.23.8) + '@opentelemetry/api': 1.9.0 + jsondiffpatch: 0.6.0 + zod-to-json-schema: 3.23.5(zod@3.23.8) + optionalDependencies: + react: 19.0.0-rc-5d19e1c8-20240923 + zod: 3.23.8 + + ai@4.0.9(react@19.0.0-rc-5d19e1c8-20240923)(zod@3.23.8): + dependencies: + '@ai-sdk/provider': 1.0.1 + '@ai-sdk/provider-utils': 2.0.2(zod@3.23.8) + '@ai-sdk/react': 1.0.3(react@19.0.0-rc-5d19e1c8-20240923)(zod@3.23.8) + '@ai-sdk/ui-utils': 1.0.2(zod@3.23.8) + '@opentelemetry/api': 1.9.0 + jsondiffpatch: 0.6.0 + zod-to-json-schema: 3.23.5(zod@3.23.8) + optionalDependencies: + react: 19.0.0-rc-5d19e1c8-20240923 + zod: 3.23.8 + ajv-draft-04@1.0.0(ajv@8.17.1): optionalDependencies: ajv: 8.17.1 @@ -16978,6 +20846,8 @@ snapshots: json-schema-traverse: 1.0.0 require-from-string: 2.0.2 + already@2.2.1: {} + ansi-escapes@4.3.2: dependencies: type-fest: 0.21.3 @@ -17001,6 +20871,15 @@ snapshots: normalize-path: 3.0.0 picomatch: 2.3.1 + aproba@2.0.0: + optional: true + + are-we-there-yet@2.0.0: + dependencies: + delegates: 1.0.0 + readable-stream: 3.6.2 + optional: true + arg@4.1.3: {} arg@5.0.2: {} @@ -17100,6 +20979,13 @@ snapshots: asap@2.0.6: {} + assemblyai@4.8.0: + dependencies: + ws: 8.18.0 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + assertion-error@1.1.0: {} assertion-error@2.0.1: {} @@ -17116,6 +21002,8 @@ snapshots: astring@1.9.0: {} + async@3.2.6: {} + asynckit@0.4.0: {} autoprefixer@10.4.20(postcss@8.4.47): @@ -17147,7 +21035,7 @@ snapshots: axe-core@4.10.2: {} - axios@1.7.7: + axios@1.7.8: dependencies: follow-redirects: 1.15.9 form-data: 4.0.1 @@ -17192,6 +21080,10 @@ snapshots: base64id@2.0.0: {} + basic-auth@2.0.1: + dependencies: + safe-buffer: 5.1.2 + basic-ftp@5.0.5: {} before-after-hook@2.2.3: {} @@ -17200,6 +21092,8 @@ snapshots: dependencies: open: 8.4.2 + bignumber.js@9.1.2: {} + bin-links@4.0.4: dependencies: cmd-shim: 6.0.3 @@ -17225,6 +21119,8 @@ snapshots: inherits: 2.0.4 readable-stream: 3.6.2 + bluebird@3.4.7: {} + bluebird@3.7.2: {} body-parser@1.20.3: @@ -17266,8 +21162,12 @@ snapshots: node-releases: 2.0.18 update-browserslist-db: 1.1.1(browserslist@4.24.2) + bson@6.10.0: {} + buffer-crc32@0.2.13: {} + buffer-equal-constant-time@1.0.1: {} + buffer-from@1.1.2: {} buffer@4.9.2: @@ -17362,12 +21262,28 @@ snapshots: get-intrinsic: 1.2.4 set-function-length: 1.2.2 + callguard@2.0.0: {} + callsites@3.1.0: {} camelcase-css@2.0.1: {} + camelcase@4.1.0: {} + + camelcase@6.3.0: {} + caniuse-lite@1.0.30001673: {} + canvas@2.11.2(encoding@0.1.13): + dependencies: + '@mapbox/node-pre-gyp': 1.0.11(encoding@0.1.13) + nan: 2.22.0 + simple-get: 3.1.1 + transitivePeerDependencies: + - encoding + - supports-color + optional: true + case-anything@3.1.0: {} ccount@2.0.1: {} @@ -17438,8 +21354,42 @@ snapshots: dependencies: readdirp: 4.0.2 + chownr@1.1.4: {} + chownr@2.0.0: {} + chownr@3.0.0: {} + + chromadb-default-embed@2.13.2: + dependencies: + '@huggingface/jinja': 0.1.3 + onnxruntime-web: 1.14.0 + sharp: 0.32.6 + optionalDependencies: + onnxruntime-node: 1.14.0 + + chromadb@1.9.2(@google/generative-ai@0.21.0)(cohere-ai@7.14.0(@aws-sdk/client-sso-oidc@3.699.0(@aws-sdk/client-sts@3.699.0))(encoding@0.1.13))(encoding@0.1.13)(openai@4.74.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.21.0 + cohere-ai: 7.14.0(@aws-sdk/client-sso-oidc@3.699.0(@aws-sdk/client-sts@3.699.0))(encoding@0.1.13) + openai: 4.74.0(encoding@0.1.13)(zod@3.23.8) + transitivePeerDependencies: + - encoding + + chromadb@1.9.4(@google/generative-ai@0.21.0)(cohere-ai@7.14.0(@aws-sdk/client-sso-oidc@3.699.0(@aws-sdk/client-sts@3.699.0))(encoding@0.1.13))(encoding@0.1.13)(openai@4.74.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.21.0 + cohere-ai: 7.14.0(@aws-sdk/client-sso-oidc@3.699.0(@aws-sdk/client-sts@3.699.0))(encoding@0.1.13) + openai: 4.74.0(encoding@0.1.13)(zod@3.23.8) + transitivePeerDependencies: + - encoding + chrome-trace-event@1.0.4: {} chromium-bidi@0.6.3(devtools-protocol@0.0.1312386): @@ -17511,10 +21461,35 @@ snapshots: estree-walker: 3.0.3 periscopic: 3.1.0 + cohere-ai@7.14.0(@aws-sdk/client-sso-oidc@3.699.0(@aws-sdk/client-sts@3.699.0))(encoding@0.1.13): + dependencies: + '@aws-sdk/client-sagemaker': 3.699.0 + '@aws-sdk/credential-providers': 3.699.0(@aws-sdk/client-sso-oidc@3.699.0(@aws-sdk/client-sts@3.699.0)) + '@aws-sdk/protocol-http': 3.374.0 + '@aws-sdk/signature-v4': 3.374.0 + form-data: 4.0.1 + form-data-encoder: 4.0.2 + formdata-node: 6.0.3 + js-base64: 3.7.2 + node-fetch: 2.7.0(encoding@0.1.13) + qs: 6.11.2 + readable-stream: 4.5.2 + url-join: 4.0.1 + transitivePeerDependencies: + - '@aws-sdk/client-sso-oidc' + - aws-crt + - encoding + + color-convert@1.9.3: + dependencies: + color-name: 1.1.3 + color-convert@2.0.1: dependencies: color-name: 1.1.4 + color-name@1.1.3: {} + color-name@1.1.4: {} color-string@1.9.1: @@ -17522,11 +21497,24 @@ snapshots: color-name: 1.1.4 simple-swizzle: 0.2.2 + color-support@1.1.3: + optional: true + + color@3.2.1: + dependencies: + color-convert: 1.9.3 + color-string: 1.9.1 + color@4.2.3: dependencies: color-convert: 2.0.1 color-string: 1.9.1 + colorspace@1.1.4: + dependencies: + color: 3.2.1 + text-hex: 1.0.0 + combined-stream@1.0.8: dependencies: delayed-stream: 1.0.0 @@ -17543,6 +21531,9 @@ snapshots: commander@4.1.1: {} + commander@5.1.0: + optional: true + commander@8.3.0: {} common-ancestor-path@1.0.1: {} @@ -17569,13 +21560,18 @@ snapshots: consola@3.2.3: {} - consolidate@0.15.1(lodash@4.17.21)(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + console-control-strings@1.1.0: + optional: true + + consolidate@0.15.1(lodash@4.17.21)(nunjucks@3.2.4(chokidar@3.6.0))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(underscore@1.13.7): dependencies: bluebird: 3.7.2 optionalDependencies: lodash: 4.17.21 + nunjucks: 3.2.4(chokidar@3.6.0) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + underscore: 1.13.7 content-disposition@0.5.4: dependencies: @@ -17602,6 +21598,8 @@ snapshots: core-js@3.38.1: {} + core-util-is@1.0.3: {} + cors@2.8.5: dependencies: object-assign: 4.1.1 @@ -17622,6 +21620,12 @@ snapshots: dependencies: luxon: 3.5.0 + cross-fetch@3.1.8(encoding@0.1.13): + dependencies: + node-fetch: 2.7.0(encoding@0.1.13) + transitivePeerDependencies: + - encoding + cross-spawn@7.0.3: dependencies: path-key: 3.1.1 @@ -17712,6 +21716,8 @@ snapshots: date-fns@3.6.0: {} + dayjs@1.11.13: {} + debounce@2.0.0: {} debug@2.6.9: @@ -17726,6 +21732,8 @@ snapshots: dependencies: ms: 2.1.3 + decamelize@1.2.0: {} + decimal.js-light@2.5.1: {} decimal.js@10.4.3: {} @@ -17734,6 +21742,11 @@ snapshots: dependencies: character-entities: 2.0.2 + decompress-response@4.2.1: + dependencies: + mimic-response: 2.1.0 + optional: true + decompress-response@6.0.0: dependencies: mimic-response: 3.1.0 @@ -17744,6 +21757,8 @@ snapshots: deep-eql@5.0.2: {} + deep-extend@0.6.0: {} + deep-is@0.1.4: {} deepmerge@4.3.1: {} @@ -17776,6 +21791,9 @@ snapshots: delayed-stream@1.0.0: {} + delegates@1.0.0: + optional: true + denque@2.1.0: {} depd@1.1.2: {} @@ -17824,10 +21842,16 @@ snapshots: diff@5.2.0: {} + dingbat-to-unicode@1.0.1: {} + dir-glob@3.0.1: dependencies: path-type: 4.0.0 + discord-api-types@0.37.110: {} + + discord-api-types@0.37.97: {} + dlv@1.1.3: {} dns-packet@5.6.1: @@ -17915,8 +21939,23 @@ snapshots: pg: 8.13.1 react: 19.0.0-rc-5d19e1c8-20240923 + duck@0.1.12: + dependencies: + underscore: 1.13.7 + + duplexify@4.1.3: + dependencies: + end-of-stream: 1.4.4 + inherits: 2.0.4 + readable-stream: 3.6.2 + stream-shift: 1.0.3 + eastasianwidth@0.2.0: {} + ecdsa-sig-formatter@1.0.11: + dependencies: + safe-buffer: 5.2.1 + editions@6.21.0: dependencies: version-range: 4.14.0 @@ -17936,6 +21975,8 @@ snapshots: emoji-regex@9.2.2: {} + enabled@2.0.0: {} + encodeurl@1.0.2: {} encodeurl@2.0.0: {} @@ -18029,7 +22070,7 @@ snapshots: is-string: 1.0.7 is-typed-array: 1.1.13 is-weakref: 1.0.2 - object-inspect: 1.13.2 + object-inspect: 1.13.3 object-keys: 1.1.1 object.assign: 4.1.5 regexp.prototype.flags: 1.5.3 @@ -18620,6 +22661,8 @@ snapshots: eventsource-parser@2.0.1: {} + eventsource-parser@3.0.0: {} + execa@5.1.1: dependencies: cross-spawn: 7.0.3 @@ -18644,6 +22687,8 @@ snapshots: signal-exit: 4.1.0 strip-final-newline: 3.0.0 + expand-template@2.0.3: {} + expect-type@1.1.0: {} exponential-backoff@3.1.1: {} @@ -18758,11 +22803,23 @@ snapshots: optionalDependencies: picomatch: 4.0.2 + fecha@4.2.3: {} + fetch-blob@3.2.0: dependencies: node-domexception: 1.0.0 web-streams-polyfill: 3.3.3 + fetch-h2@3.0.2: + dependencies: + '@types/tough-cookie': 4.0.5 + already: 2.2.1 + callguard: 2.0.0 + get-stream: 6.0.1 + through2: 4.0.2 + to-arraybuffer: 1.0.1 + tough-cookie: 4.1.4 + fflate@0.4.8: {} file-entry-cache@6.0.1: @@ -18812,6 +22869,8 @@ snapshots: keyv: 4.5.4 rimraf: 3.0.2 + flatbuffers@1.12.0: {} + flatted@3.3.1: {} flattie@1.1.1: {} @@ -18826,6 +22885,8 @@ snapshots: '@aws-sdk/client-s3': 3.679.0 '@aws-sdk/s3-request-presigner': 3.679.0 + fn.name@1.1.0: {} + follow-redirects@1.15.9: {} for-each@0.3.3: @@ -18841,6 +22902,21 @@ snapshots: form-data-encoder@2.1.4: {} + form-data-encoder@4.0.2: {} + + form-data@2.5.2: + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + mime-types: 2.1.35 + safe-buffer: 5.2.1 + + form-data@4.0.0: + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + mime-types: 2.1.35 + form-data@4.0.1: dependencies: asynckit: 0.4.0 @@ -18854,6 +22930,8 @@ snapshots: node-domexception: 1.0.0 web-streams-polyfill: 4.0.0-beta.3 + formdata-node@6.0.3: {} + formdata-polyfill@4.0.10: dependencies: fetch-blob: 3.2.0 @@ -18870,12 +22948,19 @@ snapshots: fresh@0.5.2: {} + fs-constants@1.0.0: {} + fs-extra@11.2.0: dependencies: graceful-fs: 4.2.11 jsonfile: 6.1.0 universalify: 2.0.1 + fs-extra@2.1.2: + dependencies: + graceful-fs: 4.2.11 + jsonfile: 2.4.0 + fs-minipass@2.1.0: dependencies: minipass: 3.3.6 @@ -18887,6 +22972,13 @@ snapshots: fs-monkey@1.0.6: optional: true + fs-promise@2.0.3: + dependencies: + any-promise: 1.3.0 + fs-extra: 2.1.2 + mz: 2.7.0 + thenify-all: 1.6.0 + fs.realpath@1.0.0: {} fsevents@2.3.3: @@ -18903,8 +22995,42 @@ snapshots: functions-have-names@1.2.3: {} + gauge@3.0.2: + dependencies: + aproba: 2.0.0 + color-support: 1.1.3 + console-control-strings: 1.1.0 + has-unicode: 2.0.1 + object-assign: 4.1.1 + signal-exit: 3.0.7 + string-width: 4.2.3 + strip-ansi: 6.0.1 + wide-align: 1.1.5 + optional: true + + gaxios@6.7.1(encoding@0.1.13): + dependencies: + extend: 3.0.2 + https-proxy-agent: 7.0.5 + is-stream: 2.0.1 + node-fetch: 2.7.0(encoding@0.1.13) + uuid: 9.0.1 + transitivePeerDependencies: + - encoding + - supports-color + gcd@0.0.1: {} + gcp-metadata@6.1.0(encoding@0.1.13): + dependencies: + gaxios: 6.7.1(encoding@0.1.13) + json-bigint: 1.0.0 + transitivePeerDependencies: + - encoding + - supports-color + + generic-pool@3.9.0: {} + gensync@1.0.0-beta.2: {} get-caller-file@2.0.5: {} @@ -18952,6 +23078,8 @@ snapshots: git-hooks-list@3.1.0: {} + github-from-package@0.0.0: {} + glob-parent@5.1.2: dependencies: is-glob: 4.0.3 @@ -19040,6 +23168,36 @@ snapshots: merge2: 1.4.1 slash: 4.0.0 + google-auth-library@9.15.0(encoding@0.1.13): + dependencies: + base64-js: 1.5.1 + ecdsa-sig-formatter: 1.0.11 + gaxios: 6.7.1(encoding@0.1.13) + gcp-metadata: 6.1.0(encoding@0.1.13) + gtoken: 7.1.0(encoding@0.1.13) + jws: 4.0.0 + transitivePeerDependencies: + - encoding + - supports-color + + google-gax@4.4.1(encoding@0.1.13): + dependencies: + '@grpc/grpc-js': 1.12.2 + '@grpc/proto-loader': 0.7.13 + '@types/long': 4.0.2 + abort-controller: 3.0.0 + duplexify: 4.1.3 + google-auth-library: 9.15.0(encoding@0.1.13) + node-fetch: 2.7.0(encoding@0.1.13) + object-hash: 3.0.0 + proto3-json-serializer: 2.0.2 + protobufjs: 7.4.0 + retry-request: 7.0.2(encoding@0.1.13) + uuid: 9.0.1 + transitivePeerDependencies: + - encoding + - supports-color + google-protobuf@3.21.4: {} gopd@1.0.1: @@ -19088,10 +23246,20 @@ snapshots: p-cancelable: 3.0.0 responselike: 3.0.0 + gpt-tokenizer@2.7.0: {} + graceful-fs@4.2.11: {} graphemer@1.4.0: {} + graphql-request@6.1.0(encoding@0.1.13)(graphql@16.9.0): + dependencies: + '@graphql-typed-document-node/core': 3.2.0(graphql@16.9.0) + cross-fetch: 3.1.8(encoding@0.1.13) + graphql: 16.9.0 + transitivePeerDependencies: + - encoding + graphql@16.9.0: {} gray-matter@4.0.3: @@ -19101,6 +23269,28 @@ snapshots: section-matter: 1.0.0 strip-bom-string: 1.0.0 + groq-sdk@0.8.0(encoding@0.1.13): + dependencies: + '@types/node': 18.19.67 + '@types/node-fetch': 2.6.12 + 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) + transitivePeerDependencies: + - encoding + + gtoken@7.1.0(encoding@0.1.13): + dependencies: + gaxios: 6.7.1(encoding@0.1.13) + jws: 4.0.0 + transitivePeerDependencies: + - encoding + - supports-color + + guid-typescript@1.0.9: {} + has-bigints@1.0.2: {} has-flag@4.0.0: {} @@ -19117,6 +23307,9 @@ snapshots: dependencies: has-symbols: 1.0.3 + has-unicode@2.0.1: + optional: true + hasown@2.0.2: dependencies: function-bind: 1.1.2 @@ -19445,6 +23638,14 @@ snapshots: statuses: 2.0.1 toidentifier: 1.0.1 + http-proxy-agent@5.0.0: + dependencies: + '@tootallnate/once': 2.0.0 + agent-base: 6.0.2 + debug: 4.3.7 + transitivePeerDependencies: + - supports-color + http-proxy-agent@7.0.2: dependencies: agent-base: 7.1.1 @@ -19502,6 +23703,8 @@ snapshots: ignore@5.3.2: {} + immediate@3.0.6: {} + import-fresh@3.3.0: dependencies: parent-module: 1.0.1 @@ -19525,6 +23728,10 @@ snapshots: once: 1.4.0 wrappy: 1.0.2 + infobox-parser@3.6.4: + dependencies: + camelcase: 4.1.0 + inherits@2.0.4: {} ini@1.3.8: {} @@ -19770,6 +23977,13 @@ snapshots: isexe@3.1.1: {} + isomorphic-fetch@3.0.0(encoding@0.1.13): + dependencies: + node-fetch: 2.7.0(encoding@0.1.13) + whatwg-fetch: 3.6.20 + transitivePeerDependencies: + - encoding + istextorbinary@9.5.0: dependencies: binaryextensions: 6.11.0 @@ -19802,7 +24016,7 @@ snapshots: jest-worker@27.5.1: dependencies: - '@types/node': 22.8.1 + '@types/node': 22.10.1 merge-stream: 2.0.0 supports-color: 8.1.1 @@ -19816,6 +24030,8 @@ snapshots: joycon@3.1.1: {} + js-base64@3.7.2: {} + js-beautify@1.15.1: dependencies: config-chain: 1.1.13 @@ -19826,6 +24042,10 @@ snapshots: js-cookie@3.0.5: {} + js-tiktoken@1.0.15: + dependencies: + base64-js: 1.5.1 + js-tokens@4.0.0: {} js-tokens@9.0.0: {} @@ -19839,9 +24059,11 @@ snapshots: dependencies: argparse: 2.0.1 + jsbi@4.3.0: {} + jsbn@1.1.0: {} - jsdom@24.1.3: + jsdom@24.1.3(canvas@2.11.2(encoding@0.1.13)): dependencies: cssstyle: 4.1.0 data-urls: 5.0.0 @@ -19864,6 +24086,8 @@ snapshots: whatwg-url: 14.0.0 ws: 8.18.0 xml-name-validator: 5.0.0 + optionalDependencies: + canvas: 2.11.2(encoding@0.1.13) transitivePeerDependencies: - bufferutil - supports-color @@ -19873,6 +24097,10 @@ snapshots: jsesc@3.0.2: {} + json-bigint@1.0.0: + dependencies: + bignumber.js: 9.1.2 + json-buffer@3.0.1: {} json-parse-even-better-errors@2.3.1: {} @@ -19901,6 +24129,10 @@ snapshots: chalk: 5.3.0 diff-match-patch: 1.0.5 + jsonfile@2.4.0: + optionalDependencies: + graceful-fs: 4.2.11 + jsonfile@6.1.0: dependencies: universalify: 2.0.1 @@ -19911,6 +24143,19 @@ snapshots: jsonpointer@5.0.1: {} + jsonwebtoken@9.0.2: + dependencies: + jws: 3.2.2 + lodash.includes: 4.3.0 + lodash.isboolean: 3.0.3 + lodash.isinteger: 4.0.4 + lodash.isnumber: 3.0.3 + lodash.isplainobject: 4.0.6 + lodash.isstring: 4.0.1 + lodash.once: 4.1.1 + ms: 2.1.3 + semver: 7.6.3 + jsx-ast-utils@3.3.5: dependencies: array-includes: 3.1.8 @@ -19918,10 +24163,39 @@ snapshots: object.assign: 4.1.5 object.values: 1.2.0 + jszip@3.10.1: + dependencies: + lie: 3.3.0 + pako: 1.0.11 + readable-stream: 2.3.8 + setimmediate: 1.0.5 + just-diff-apply@5.5.0: {} just-diff@6.0.2: {} + jwa@1.4.1: + dependencies: + buffer-equal-constant-time: 1.0.1 + ecdsa-sig-formatter: 1.0.11 + safe-buffer: 5.2.1 + + jwa@2.0.0: + dependencies: + buffer-equal-constant-time: 1.0.1 + ecdsa-sig-formatter: 1.0.11 + safe-buffer: 5.2.1 + + jws@3.2.2: + dependencies: + jwa: 1.4.1 + safe-buffer: 5.2.1 + + jws@4.0.0: + dependencies: + jwa: 2.0.0 + safe-buffer: 5.2.1 + katex@0.16.11: dependencies: commander: 8.3.0 @@ -19934,6 +24208,40 @@ snapshots: kleur@4.1.5: {} + kuler@2.0.0: {} + + langchain@0.3.6(@langchain/core@0.3.19(openai@4.74.0(encoding@0.1.13)(zod@3.23.8)))(axios@1.7.8)(encoding@0.1.13)(openai@4.74.0(encoding@0.1.13)(zod@3.23.8)): + dependencies: + '@langchain/core': 0.3.19(openai@4.74.0(encoding@0.1.13)(zod@3.23.8)) + '@langchain/openai': 0.3.14(@langchain/core@0.3.19(openai@4.74.0(encoding@0.1.13)(zod@3.23.8)))(encoding@0.1.13) + '@langchain/textsplitters': 0.1.0(@langchain/core@0.3.19(openai@4.74.0(encoding@0.1.13)(zod@3.23.8))) + js-tiktoken: 1.0.15 + js-yaml: 4.1.0 + jsonpointer: 5.0.1 + langsmith: 0.2.8(openai@4.74.0(encoding@0.1.13)(zod@3.23.8)) + openapi-types: 12.1.3 + p-retry: 4.6.2 + uuid: 10.0.0 + yaml: 2.6.0 + zod: 3.23.8 + zod-to-json-schema: 3.23.5(zod@3.23.8) + optionalDependencies: + axios: 1.7.8 + transitivePeerDependencies: + - encoding + - openai + + langsmith@0.2.8(openai@4.74.0(encoding@0.1.13)(zod@3.23.8)): + dependencies: + '@types/uuid': 10.0.0 + commander: 10.0.1 + p-queue: 6.6.2 + p-retry: 4.6.2 + semver: 7.6.3 + uuid: 10.0.0 + optionalDependencies: + openai: 4.74.0(encoding@0.1.13)(zod@3.23.8) + language-subtag-registry@0.3.23: {} language-tags@1.0.9: @@ -19953,12 +24261,93 @@ snapshots: prelude-ls: 1.2.1 type-check: 0.4.0 + lie@3.3.0: + dependencies: + immediate: 3.0.6 + lilconfig@2.1.0: {} lilconfig@3.1.2: {} lines-and-columns@1.2.4: {} + llamaindex@0.8.26(@aws-sdk/client-sts@3.699.0)(@aws-sdk/credential-providers@3.699.0(@aws-sdk/client-sso-oidc@3.699.0(@aws-sdk/client-sts@3.699.0)))(@huggingface/transformers@3.1.0)(encoding@0.1.13)(pg@8.13.1)(socks@2.8.3)(tree-sitter@0.22.1)(typescript@5.7.2)(web-tree-sitter@0.24.4): + dependencies: + '@anthropic-ai/sdk': 0.32.1(encoding@0.1.13) + '@aws-crypto/sha256-js': 5.2.0 + '@aws-sdk/client-sso-oidc': 3.699.0(@aws-sdk/client-sts@3.699.0) + '@azure/cosmos': 4.2.0 + '@azure/identity': 4.5.0 + '@datastax/astra-db-ts': 1.5.0 + '@discoveryjs/json-ext': 0.6.3 + '@google-cloud/vertexai': 1.9.0(encoding@0.1.13) + '@google/generative-ai': 0.21.0 + '@grpc/grpc-js': 1.12.2 + '@llamaindex/anthropic': 0.0.26(@aws-crypto/sha256-js@5.2.0)(@huggingface/transformers@3.1.0)(encoding@0.1.13)(gpt-tokenizer@2.7.0)(js-tiktoken@1.0.15)(pathe@1.1.2) + '@llamaindex/clip': 0.0.26(@aws-crypto/sha256-js@5.2.0)(@huggingface/transformers@3.1.0)(encoding@0.1.13)(gpt-tokenizer@2.7.0)(js-tiktoken@1.0.15)(pathe@1.1.2)(zod@3.23.8) + '@llamaindex/cloud': 2.0.17(@llamaindex/core@0.4.17(@aws-crypto/sha256-js@5.2.0)(@huggingface/transformers@3.1.0)(gpt-tokenizer@2.7.0)(js-tiktoken@1.0.15)(pathe@1.1.2))(@llamaindex/env@0.1.24(@aws-crypto/sha256-js@5.2.0)(@huggingface/transformers@3.1.0)(gpt-tokenizer@2.7.0)(js-tiktoken@1.0.15)(pathe@1.1.2)) + '@llamaindex/core': 0.4.17(@aws-crypto/sha256-js@5.2.0)(@huggingface/transformers@3.1.0)(gpt-tokenizer@2.7.0)(js-tiktoken@1.0.15)(pathe@1.1.2) + '@llamaindex/deepinfra': 0.0.26(@aws-crypto/sha256-js@5.2.0)(@huggingface/transformers@3.1.0)(encoding@0.1.13)(gpt-tokenizer@2.7.0)(js-tiktoken@1.0.15)(pathe@1.1.2)(zod@3.23.8) + '@llamaindex/env': 0.1.24(@aws-crypto/sha256-js@5.2.0)(@huggingface/transformers@3.1.0)(gpt-tokenizer@2.7.0)(js-tiktoken@1.0.15)(pathe@1.1.2) + '@llamaindex/groq': 0.0.41(@aws-crypto/sha256-js@5.2.0)(@huggingface/transformers@3.1.0)(encoding@0.1.13)(gpt-tokenizer@2.7.0)(js-tiktoken@1.0.15)(pathe@1.1.2)(zod@3.23.8) + '@llamaindex/huggingface': 0.0.26(@aws-crypto/sha256-js@5.2.0)(@huggingface/transformers@3.1.0)(encoding@0.1.13)(gpt-tokenizer@2.7.0)(js-tiktoken@1.0.15)(pathe@1.1.2)(zod@3.23.8) + '@llamaindex/node-parser': 0.0.18(@llamaindex/core@0.4.17(@aws-crypto/sha256-js@5.2.0)(@huggingface/transformers@3.1.0)(gpt-tokenizer@2.7.0)(js-tiktoken@1.0.15)(pathe@1.1.2))(@llamaindex/env@0.1.24(@aws-crypto/sha256-js@5.2.0)(@huggingface/transformers@3.1.0)(gpt-tokenizer@2.7.0)(js-tiktoken@1.0.15)(pathe@1.1.2))(tree-sitter@0.22.1)(web-tree-sitter@0.24.4) + '@llamaindex/ollama': 0.0.33(@aws-crypto/sha256-js@5.2.0)(@huggingface/transformers@3.1.0)(gpt-tokenizer@2.7.0)(js-tiktoken@1.0.15)(pathe@1.1.2) + '@llamaindex/openai': 0.1.42(@aws-crypto/sha256-js@5.2.0)(@huggingface/transformers@3.1.0)(encoding@0.1.13)(gpt-tokenizer@2.7.0)(js-tiktoken@1.0.15)(pathe@1.1.2)(zod@3.23.8) + '@llamaindex/portkey-ai': 0.0.26(@aws-crypto/sha256-js@5.2.0)(@huggingface/transformers@3.1.0)(gpt-tokenizer@2.7.0)(js-tiktoken@1.0.15)(pathe@1.1.2) + '@llamaindex/readers': 1.0.19(@aws-sdk/credential-providers@3.699.0(@aws-sdk/client-sso-oidc@3.699.0(@aws-sdk/client-sts@3.699.0)))(@llamaindex/core@0.4.17(@aws-crypto/sha256-js@5.2.0)(@huggingface/transformers@3.1.0)(gpt-tokenizer@2.7.0)(js-tiktoken@1.0.15)(pathe@1.1.2))(@llamaindex/env@0.1.24(@aws-crypto/sha256-js@5.2.0)(@huggingface/transformers@3.1.0)(gpt-tokenizer@2.7.0)(js-tiktoken@1.0.15)(pathe@1.1.2))(encoding@0.1.13)(socks@2.8.3) + '@llamaindex/replicate': 0.0.26(@aws-crypto/sha256-js@5.2.0)(@huggingface/transformers@3.1.0)(gpt-tokenizer@2.7.0)(js-tiktoken@1.0.15)(pathe@1.1.2) + '@llamaindex/vllm': 0.0.12(@aws-crypto/sha256-js@5.2.0)(@huggingface/transformers@3.1.0)(encoding@0.1.13)(gpt-tokenizer@2.7.0)(js-tiktoken@1.0.15)(pathe@1.1.2)(zod@3.23.8) + '@mistralai/mistralai': 1.3.4(zod@3.23.8) + '@mixedbread-ai/sdk': 2.2.11(encoding@0.1.13) + '@pinecone-database/pinecone': 4.0.0 + '@qdrant/js-client-rest': 1.12.0(typescript@5.7.2) + '@types/lodash': 4.17.12 + '@types/node': 22.10.1 + '@types/pg': 8.11.10 + '@upstash/vector': 1.1.7 + '@zilliz/milvus2-sdk-node': 2.5.1 + ajv: 8.17.1 + assemblyai: 4.8.0 + chromadb: 1.9.2(@google/generative-ai@0.21.0)(cohere-ai@7.14.0(@aws-sdk/client-sso-oidc@3.699.0(@aws-sdk/client-sts@3.699.0))(encoding@0.1.13))(encoding@0.1.13)(openai@4.74.0(encoding@0.1.13)(zod@3.23.8)) + chromadb-default-embed: 2.13.2 + cohere-ai: 7.14.0(@aws-sdk/client-sso-oidc@3.699.0(@aws-sdk/client-sts@3.699.0))(encoding@0.1.13) + gpt-tokenizer: 2.7.0 + groq-sdk: 0.8.0(encoding@0.1.13) + js-tiktoken: 1.0.15 + lodash: 4.17.21 + magic-bytes.js: 1.10.0 + mongodb: 6.11.0(@aws-sdk/credential-providers@3.699.0(@aws-sdk/client-sso-oidc@3.699.0(@aws-sdk/client-sts@3.699.0)))(socks@2.8.3) + openai: 4.74.0(encoding@0.1.13)(zod@3.23.8) + pathe: 1.1.2 + rake-modified: 1.0.8 + weaviate-client: 3.2.5(encoding@0.1.13) + wikipedia: 2.1.2 + wink-nlp: 2.3.2 + zod: 3.23.8 + optionalDependencies: + pg: 8.13.1 + transitivePeerDependencies: + - '@aws-sdk/client-sts' + - '@aws-sdk/credential-providers' + - '@huggingface/transformers' + - '@mongodb-js/zstd' + - aws-crt + - bufferutil + - debug + - encoding + - gcp-metadata + - kerberos + - mongodb-client-encryption + - snappy + - socks + - supports-color + - tiktoken + - tree-sitter + - typescript + - utf-8-validate + - web-tree-sitter + load-tsconfig@0.2.5: {} loader-runner@4.3.0: {} @@ -19988,10 +24377,24 @@ snapshots: lodash.defaults@4.2.0: {} + lodash.includes@4.3.0: {} + lodash.isarguments@3.1.0: {} + lodash.isboolean@3.0.3: {} + + lodash.isinteger@4.0.4: {} + + lodash.isnumber@3.0.3: {} + + lodash.isplainobject@4.0.6: {} + + lodash.isstring@4.0.1: {} + lodash.merge@4.6.2: {} + lodash.once@4.1.1: {} + lodash.sortby@4.7.0: {} lodash@4.17.21: {} @@ -20006,6 +24409,19 @@ snapshots: chalk: 5.3.0 is-unicode-supported: 1.3.0 + logform@2.7.0: + dependencies: + '@colors/colors': 1.6.0 + '@types/triple-beam': 1.3.5 + fecha: 4.2.3 + ms: 2.1.3 + safe-stable-stringify: 2.5.0 + triple-beam: 1.4.1 + + long@1.1.5: {} + + long@4.0.0: {} + long@5.2.3: {} longest-streak@3.1.0: {} @@ -20016,6 +24432,12 @@ snapshots: dependencies: js-tokens: 4.0.0 + lop@0.4.2: + dependencies: + duck: 0.1.12 + option: 0.2.4 + underscore: 1.13.7 + loupe@2.3.7: dependencies: get-func-name: 2.0.2 @@ -20041,6 +24463,8 @@ snapshots: lru-cache@7.18.3: {} + lru-cache@9.1.2: {} + lucia@3.2.2: dependencies: '@oslojs/crypto': 1.0.1 @@ -20058,6 +24482,8 @@ snapshots: lz-string@1.5.0: {} + magic-bytes.js@1.10.0: {} + magic-string@0.30.12: dependencies: '@jridgewell/sourcemap-codec': 1.5.0 @@ -20068,12 +24494,17 @@ snapshots: mailgun.js@8.2.2: dependencies: - axios: 1.7.7 + axios: 1.7.8 base-64: 1.0.0 url-join: 4.0.1 transitivePeerDependencies: - debug + make-dir@3.1.0: + dependencies: + semver: 6.3.1 + optional: true + make-error@1.3.6: {} make-fetch-happen@13.0.1: @@ -20093,6 +24524,19 @@ snapshots: transitivePeerDependencies: - supports-color + mammoth@1.8.0: + dependencies: + '@xmldom/xmldom': 0.8.10 + argparse: 1.0.10 + base64-js: 1.5.1 + bluebird: 3.4.7 + dingbat-to-unicode: 1.0.1 + jszip: 3.10.1 + lop: 0.4.2 + path-is-absolute: 1.0.1 + underscore: 1.13.7 + xmlbuilder: 10.1.1 + markdown-extensions@1.1.1: {} markdown-table@3.0.4: {} @@ -20104,6 +24548,8 @@ snapshots: marked: 7.0.4 react: 18.3.1 + md-utils-ts@2.0.0: {} + mdast-util-definitions@5.1.2: dependencies: '@types/mdast': 3.0.15 @@ -20446,6 +24892,8 @@ snapshots: fs-monkey: 1.0.6 optional: true + memory-pager@1.5.0: {} + merge-descriptors@1.0.3: {} merge-stream@2.0.0: {} @@ -21022,6 +25470,9 @@ snapshots: mimic-response@1.0.1: {} + mimic-response@2.1.0: + optional: true + mimic-response@3.1.0: {} mimic-response@4.0.0: {} @@ -21093,6 +25544,11 @@ snapshots: minipass: 3.3.6 yallist: 4.0.0 + minizlib@3.0.1: + dependencies: + minipass: 7.1.2 + rimraf: 5.0.10 + mintlify@4.0.256(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3): dependencies: '@mintlify/cli': 4.0.256(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) @@ -21108,8 +25564,12 @@ snapshots: mitt@3.0.1: {} + mkdirp-classic@0.5.3: {} + mkdirp@1.0.4: {} + mkdirp@3.0.1: {} + mlly@1.7.2: dependencies: acorn: 8.14.0 @@ -21121,6 +25581,30 @@ snapshots: monaco-editor@0.50.0: {} + mongodb-connection-string-url@3.0.1: + dependencies: + '@types/whatwg-url': 11.0.5 + whatwg-url: 13.0.0 + + mongodb@6.11.0(@aws-sdk/credential-providers@3.699.0(@aws-sdk/client-sso-oidc@3.699.0(@aws-sdk/client-sts@3.699.0)))(socks@2.8.3): + dependencies: + '@mongodb-js/saslprep': 1.1.9 + bson: 6.10.0 + mongodb-connection-string-url: 3.0.1 + optionalDependencies: + '@aws-sdk/credential-providers': 3.699.0(@aws-sdk/client-sso-oidc@3.699.0(@aws-sdk/client-sts@3.699.0)) + socks: 2.8.3 + + morgan@1.10.0: + dependencies: + basic-auth: 2.0.1 + debug: 2.6.9 + depd: 2.0.0 + on-finished: 2.3.0 + on-headers: 1.0.2 + transitivePeerDependencies: + - supports-color + mri@1.2.0: {} ms@2.0.0: {} @@ -21217,6 +25701,8 @@ snapshots: - '@types/node' optional: true + mustache@4.2.0: {} + mute-stream@2.0.0: {} mz@2.7.0: @@ -21225,12 +25711,19 @@ snapshots: object-assign: 4.1.1 thenify-all: 1.6.0 + nan@2.22.0: + optional: true + nanoid@3.3.6: {} nanoid@3.3.7: {} + nanoid@3.3.8: {} + nanoid@5.0.8: {} + napi-build-utils@1.0.2: {} + natural-compare@1.4.0: {} negotiator@0.6.3: {} @@ -21322,12 +25815,33 @@ snapshots: react: 19.0.0-rc-5d19e1c8-20240923 react-dom: 19.0.0-rc-5d19e1c8-20240923(react@19.0.0-rc-5d19e1c8-20240923) + nice-grpc-client-middleware-retry@3.1.9: + dependencies: + abort-controller-x: 0.4.3 + nice-grpc-common: 2.0.2 + + nice-grpc-common@2.0.2: + dependencies: + ts-error: 1.0.6 + + nice-grpc@2.1.10: + dependencies: + '@grpc/grpc-js': 1.12.2 + abort-controller-x: 0.4.3 + nice-grpc-common: 2.0.2 + nlcst-to-string@3.1.1: dependencies: '@types/nlcst': 1.0.4 + node-abi@3.71.0: + dependencies: + semver: 7.6.3 + node-abort-controller@3.1.1: {} + node-addon-api@6.1.0: {} + node-addon-api@8.2.1: {} node-domexception@1.0.0: {} @@ -21390,9 +25904,9 @@ snapshots: dependencies: html-to-text: 7.1.1 - nodemailer-mailgun-transport@2.1.5(lodash@4.17.21)(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + nodemailer-mailgun-transport@2.1.5(lodash@4.17.21)(nunjucks@3.2.4(chokidar@3.6.0))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(underscore@1.13.7): dependencies: - consolidate: 0.15.1(lodash@4.17.21)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + consolidate: 0.15.1(lodash@4.17.21)(nunjucks@3.2.4(chokidar@3.6.0))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(underscore@1.13.7) form-data: 4.0.1 mailgun.js: 8.2.2 transitivePeerDependencies: @@ -21453,6 +25967,11 @@ snapshots: nodemailer@6.9.16: {} + nopt@5.0.0: + dependencies: + abbrev: 1.1.1 + optional: true + nopt@7.2.1: dependencies: abbrev: 2.0.0 @@ -21478,6 +25997,13 @@ snapshots: normalize-url@8.0.1: {} + notion-md-crawler@1.0.0(encoding@0.1.13): + dependencies: + '@notionhq/client': 2.2.15(encoding@0.1.13) + md-utils-ts: 2.0.0 + transitivePeerDependencies: + - encoding + npm-bundled@3.0.1: dependencies: npm-normalize-package-bin: 3.0.1 @@ -21527,15 +26053,32 @@ snapshots: dependencies: path-key: 4.0.0 + npmlog@5.0.1: + dependencies: + are-we-there-yet: 2.0.0 + console-control-strings: 1.1.0 + gauge: 3.0.2 + set-blocking: 2.0.0 + optional: true + nprogress@0.2.0: {} + nunjucks@3.2.4(chokidar@3.6.0): + dependencies: + a-sync-waterfall: 1.0.1 + asap: 2.0.6 + commander: 5.1.0 + optionalDependencies: + chokidar: 3.6.0 + optional: true + nwsapi@2.2.13: {} object-assign@4.1.1: {} object-hash@3.0.0: {} - object-inspect@1.13.2: {} + object-inspect@1.13.3: {} object-keys@1.1.1: {} @@ -21581,14 +26124,28 @@ snapshots: node-ensure: 0.0.0 yauzl: 3.2.0 + ollama@0.5.10: + dependencies: + whatwg-fetch: 3.6.20 + + on-finished@2.3.0: + dependencies: + ee-first: 1.1.1 + on-finished@2.4.1: dependencies: ee-first: 1.1.1 + on-headers@1.0.2: {} + once@1.4.0: dependencies: wrappy: 1.0.2 + one-time@1.0.0: + dependencies: + fn.name: 1.1.0 + onetime@5.1.2: dependencies: mimic-fn: 2.1.0 @@ -21597,6 +26154,42 @@ snapshots: dependencies: mimic-fn: 4.0.0 + onnx-proto@4.0.4: + dependencies: + protobufjs: 6.11.4 + + onnxruntime-common@1.14.0: {} + + onnxruntime-common@1.20.1: {} + + onnxruntime-node@1.14.0: + dependencies: + onnxruntime-common: 1.14.0 + optional: true + + onnxruntime-node@1.20.1: + dependencies: + onnxruntime-common: 1.20.1 + tar: 7.4.3 + + onnxruntime-web@1.14.0: + dependencies: + flatbuffers: 1.12.0 + guid-typescript: 1.0.9 + long: 4.0.0 + onnx-proto: 4.0.4 + onnxruntime-common: 1.14.0 + platform: 1.3.6 + + onnxruntime-web@1.20.1: + dependencies: + flatbuffers: 1.12.0 + guid-typescript: 1.0.9 + long: 5.2.3 + onnxruntime-common: 1.20.1 + platform: 1.3.6 + protobufjs: 7.4.0 + open@8.4.2: dependencies: define-lazy-prop: 2.0.0 @@ -21605,7 +26198,7 @@ snapshots: openai@4.68.4(encoding@0.1.13)(zod@3.23.8): dependencies: - '@types/node': 18.19.59 + '@types/node': 18.19.67 '@types/node-fetch': 2.6.11 abort-controller: 3.0.0 agentkeepalive: 4.5.0 @@ -21617,8 +26210,38 @@ snapshots: transitivePeerDependencies: - encoding + openai@4.73.1(encoding@0.1.13)(zod@3.23.8): + dependencies: + '@types/node': 18.19.67 + '@types/node-fetch': 2.6.12 + 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 + + openai@4.74.0(encoding@0.1.13)(zod@3.23.8): + dependencies: + '@types/node': 18.19.67 + '@types/node-fetch': 2.6.12 + 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 + openapi-types@12.1.3: {} + option@0.2.4: {} + optionator@0.9.4: dependencies: deep-is: 0.1.4 @@ -21668,6 +26291,8 @@ snapshots: p-cancelable@3.0.0: {} + p-finally@1.0.0: {} + p-limit@2.3.0: dependencies: p-try: 2.2.0 @@ -21700,11 +26325,25 @@ snapshots: dependencies: aggregate-error: 3.1.0 + p-queue@6.6.2: + dependencies: + eventemitter3: 4.0.7 + p-timeout: 3.2.0 + + p-retry@4.6.2: + dependencies: + '@types/retry': 0.12.0 + retry: 0.13.1 + p-some@6.0.0: dependencies: aggregate-error: 4.0.1 p-cancelable: 3.0.0 + p-timeout@3.2.0: + dependencies: + p-finally: 1.0.0 + p-timeout@5.1.0: {} p-try@2.2.0: {} @@ -21752,6 +26391,10 @@ snapshots: - bluebird - supports-color + pako@1.0.11: {} + + papaparse@5.4.1: {} + parent-module@1.0.1: dependencies: callsites: 3.1.0 @@ -21933,8 +26576,14 @@ snapshots: mlly: 1.7.2 pathe: 1.1.2 + platform@1.3.6: {} + pluralize@8.0.0: {} + portkey-ai@0.1.16: + dependencies: + agentkeepalive: 4.5.0 + possible-typed-array-names@1.0.0: {} postcss-import@15.1.0(postcss@8.4.47): @@ -22037,13 +26686,28 @@ snapshots: posthog-node@4.2.1: dependencies: - axios: 1.7.7 + axios: 1.7.8 rusha: 0.8.14 transitivePeerDependencies: - debug preact@10.24.3: {} + prebuild-install@7.1.2: + dependencies: + detect-libc: 2.0.3 + expand-template: 2.0.3 + github-from-package: 0.0.0 + minimist: 1.2.8 + mkdirp-classic: 0.5.3 + napi-build-utils: 1.0.2 + node-abi: 3.71.0 + pump: 3.0.2 + rc: 1.2.8 + simple-get: 4.0.1 + tar-fs: 2.1.1 + tunnel-agent: 0.6.0 + prelude-ls@1.2.1: {} prettier-plugin-packagejson@2.5.3(prettier@3.3.3): @@ -22067,12 +26731,18 @@ snapshots: ansi-styles: 5.2.0 react-is: 18.3.1 + priorityqueuejs@2.0.0: {} + prismjs@1.27.0: {} prismjs@1.29.0: {} proc-log@4.2.0: {} + process-nextick-args@2.0.1: {} + + process@0.11.10: {} + proggy@2.0.0: {} progress@2.0.3: {} @@ -22102,6 +26772,30 @@ snapshots: proto-list@1.2.4: {} + proto3-json-serializer@2.0.2: + dependencies: + protobufjs: 7.4.0 + + protobuf.js@1.1.2: + dependencies: + long: 1.1.5 + + protobufjs@6.11.4: + dependencies: + '@protobufjs/aspromise': 1.1.2 + '@protobufjs/base64': 1.1.2 + '@protobufjs/codegen': 2.0.4 + '@protobufjs/eventemitter': 1.1.0 + '@protobufjs/fetch': 1.1.0 + '@protobufjs/float': 1.0.2 + '@protobufjs/inquire': 1.1.0 + '@protobufjs/path': 1.1.2 + '@protobufjs/pool': 1.1.0 + '@protobufjs/utf8': 1.1.0 + '@types/long': 4.0.2 + '@types/node': 22.10.1 + long: 4.0.0 + protobufjs@7.4.0: dependencies: '@protobufjs/aspromise': 1.1.2 @@ -22178,6 +26872,10 @@ snapshots: - typescript - utf-8-validate + qs@6.11.2: + dependencies: + side-channel: 1.0.6 + qs@6.13.0: dependencies: side-channel: 1.0.6 @@ -22192,6 +26890,11 @@ snapshots: quick-lru@5.1.1: {} + rake-modified@1.0.8: + dependencies: + fs-promise: 2.0.3 + lodash: 4.17.21 + randombytes@2.1.0: dependencies: safe-buffer: 5.2.1 @@ -22207,6 +26910,13 @@ snapshots: iconv-lite: 0.4.24 unpipe: 1.0.0 + rc@1.2.8: + dependencies: + deep-extend: 0.6.0 + ini: 1.3.8 + minimist: 1.2.8 + strip-json-comments: 2.0.1 + react-day-picker@8.10.1(date-fns@3.6.0)(react@18.3.0): dependencies: date-fns: 3.6.0 @@ -22458,12 +27168,30 @@ snapshots: parse-json: 5.2.0 type-fest: 0.6.0 + readable-stream@2.3.8: + dependencies: + core-util-is: 1.0.3 + inherits: 2.0.4 + isarray: 1.0.0 + process-nextick-args: 2.0.1 + safe-buffer: 5.1.2 + string_decoder: 1.1.1 + util-deprecate: 1.0.2 + readable-stream@3.6.2: dependencies: inherits: 2.0.4 string_decoder: 1.3.0 util-deprecate: 1.0.2 + readable-stream@4.5.2: + dependencies: + abort-controller: 3.0.0 + buffer: 6.0.3 + events: 3.3.0 + process: 0.11.10 + string_decoder: 1.3.0 + readable-web-to-node-stream@3.0.2: dependencies: readable-stream: 3.6.2 @@ -22675,6 +27403,14 @@ snapshots: transitivePeerDependencies: - supports-color + remeda@2.17.4: + dependencies: + type-fest: 4.30.0 + + replicate@1.0.1: + optionalDependencies: + readable-stream: 4.5.2 + require-directory@2.1.1: {} require-from-string@2.0.2: {} @@ -22759,14 +27495,29 @@ snapshots: retext-stringify: 3.1.0 unified: 10.1.2 + retry-request@7.0.2(encoding@0.1.13): + dependencies: + '@types/request': 2.48.12 + extend: 3.0.2 + teeny-request: 9.0.0(encoding@0.1.13) + transitivePeerDependencies: + - encoding + - supports-color + retry@0.12.0: {} + retry@0.13.1: {} + reusify@1.0.4: {} rimraf@3.0.2: dependencies: glob: 7.2.3 + rimraf@5.0.10: + dependencies: + glob: 10.4.5 + rollup-plugin-dts@6.1.1(rollup@4.24.2)(typescript@5.6.3): dependencies: magic-string: 0.30.12 @@ -22819,6 +27570,11 @@ snapshots: rusha@0.8.14: {} + rxjs@7.8.1: + dependencies: + tslib: 2.8.0 + optional: true + sade@1.8.1: dependencies: mri: 1.2.0 @@ -22830,6 +27586,8 @@ snapshots: has-symbols: 1.0.3 isarray: 2.0.5 + safe-buffer@5.1.2: {} + safe-buffer@5.2.1: {} safe-regex-test@1.0.3: @@ -22871,6 +27629,8 @@ snapshots: dependencies: parseley: 0.12.1 + semaphore@1.1.0: {} + semver@5.7.2: {} semver@6.3.1: {} @@ -22899,6 +27659,14 @@ snapshots: dependencies: randombytes: 2.1.0 + seroval-plugins@1.1.1(seroval@1.1.1): + dependencies: + seroval: 1.1.1 + optional: true + + seroval@1.1.1: + optional: true + serve-static@1.16.2: dependencies: encodeurl: 2.0.0 @@ -22908,6 +27676,9 @@ snapshots: transitivePeerDependencies: - supports-color + set-blocking@2.0.0: + optional: true + set-function-length@1.2.2: dependencies: define-data-property: 1.1.4 @@ -22924,8 +27695,21 @@ snapshots: functions-have-names: 1.2.3 has-property-descriptors: 1.0.2 + setimmediate@1.0.5: {} + setprototypeof@1.2.0: {} + sharp@0.32.6: + dependencies: + color: 4.2.3 + detect-libc: 2.0.3 + node-addon-api: 6.1.0 + prebuild-install: 7.1.2 + semver: 7.6.3 + simple-get: 4.0.1 + tar-fs: 3.0.6 + tunnel-agent: 0.6.0 + sharp@0.33.5: dependencies: color: 4.2.3 @@ -22965,7 +27749,7 @@ snapshots: call-bind: 1.0.7 es-errors: 1.3.0 get-intrinsic: 1.2.4 - object-inspect: 1.13.2 + object-inspect: 1.13.3 siginfo@2.0.0: {} @@ -22984,6 +27768,21 @@ snapshots: transitivePeerDependencies: - supports-color + simple-concat@1.0.1: {} + + simple-get@3.1.1: + dependencies: + decompress-response: 4.2.1 + once: 1.4.0 + simple-concat: 1.0.1 + optional: true + + simple-get@4.0.1: + dependencies: + decompress-response: 6.0.0 + once: 1.4.0 + simple-concat: 1.0.1 + simple-swizzle@0.2.2: dependencies: is-arrayish: 0.3.2 @@ -23082,6 +27881,13 @@ snapshots: ip-address: 9.0.5 smart-buffer: 4.2.0 + solid-js@1.9.3: + dependencies: + csstype: 3.1.3 + seroval: 1.1.1 + seroval-plugins: 1.1.1(seroval@1.1.1) + optional: true + sort-object-keys@1.1.3: {} sort-package-json@2.10.1: @@ -23114,6 +27920,10 @@ snapshots: space-separated-tokens@2.0.2: {} + sparse-bitfield@3.0.3: + dependencies: + memory-pager: 1.5.0 + spdx-correct@3.2.0: dependencies: spdx-expression-parse: 3.0.1 @@ -23145,6 +27955,8 @@ snapshots: stable-hash@0.0.3: {} + stack-trace@0.0.10: {} + stackback@0.0.2: {} stacktrace-parser@0.1.10: @@ -23163,6 +27975,14 @@ snapshots: dependencies: bl: 5.1.0 + stoppable@1.1.0: {} + + stream-events@1.0.5: + dependencies: + stubs: 3.0.0 + + stream-shift@1.0.3: {} + streamsearch@1.1.0: {} streamx@2.20.1: @@ -23232,6 +28052,10 @@ snapshots: define-properties: 1.2.1 es-object-atoms: 1.0.0 + string_decoder@1.1.1: + dependencies: + safe-buffer: 5.1.2 + string_decoder@1.3.0: dependencies: safe-buffer: 5.2.1 @@ -23261,6 +28085,8 @@ snapshots: dependencies: min-indent: 1.0.1 + strip-json-comments@2.0.1: {} + strip-json-comments@3.1.1: {} strip-literal@2.1.0: @@ -23274,6 +28100,8 @@ snapshots: '@tokenizer/token': 0.3.0 peek-readable: 4.1.0 + stubs@3.0.0: {} + style-to-object@0.4.4: dependencies: inline-style-parser: 0.1.1 @@ -23470,6 +28298,13 @@ snapshots: tapable@2.2.1: {} + tar-fs@2.1.1: + dependencies: + chownr: 1.1.4 + mkdirp-classic: 0.5.3 + pump: 3.0.2 + tar-stream: 2.2.0 + tar-fs@3.0.6: dependencies: pump: 3.0.2 @@ -23478,6 +28313,14 @@ snapshots: bare-fs: 2.3.5 bare-path: 2.1.3 + tar-stream@2.2.0: + dependencies: + bl: 4.1.0 + end-of-stream: 1.4.4 + fs-constants: 1.0.0 + inherits: 2.0.4 + readable-stream: 3.6.2 + tar-stream@3.1.7: dependencies: b4a: 1.6.7 @@ -23493,6 +28336,26 @@ snapshots: mkdirp: 1.0.4 yallist: 4.0.0 + tar@7.4.3: + dependencies: + '@isaacs/fs-minipass': 4.0.1 + chownr: 3.0.0 + minipass: 7.1.2 + minizlib: 3.0.1 + mkdirp: 3.0.1 + yallist: 5.0.0 + + teeny-request@9.0.0(encoding@0.1.13): + dependencies: + http-proxy-agent: 5.0.0 + https-proxy-agent: 5.0.1 + node-fetch: 2.7.0(encoding@0.1.13) + stream-events: 1.0.5 + uuid: 9.0.1 + transitivePeerDependencies: + - encoding + - supports-color + terser-webpack-plugin@5.3.10(esbuild@0.19.12)(webpack@5.95.0(esbuild@0.19.12)): dependencies: '@jridgewell/trace-mapping': 0.3.25 @@ -23513,6 +28376,8 @@ snapshots: text-decoder@1.2.1: {} + text-hex@1.0.0: {} + text-table@0.2.0: {} textextensions@6.11.0: @@ -23527,6 +28392,12 @@ snapshots: dependencies: any-promise: 1.3.0 + throttleit@2.1.0: {} + + through2@4.0.2: + dependencies: + readable-stream: 3.6.2 + through@2.3.8: {} tiny-invariant@1.3.3: {} @@ -23552,6 +28423,8 @@ snapshots: tmp@0.2.3: {} + to-arraybuffer@1.0.1: {} + to-regex-range@5.0.1: dependencies: is-number: 7.0.0 @@ -23576,6 +28449,10 @@ snapshots: dependencies: punycode: 2.3.1 + tr46@4.1.1: + dependencies: + punycode: 2.3.1 + tr46@5.0.0: dependencies: punycode: 2.3.1 @@ -23588,12 +28465,19 @@ snapshots: tree-kill@1.2.2: {} + tree-sitter@0.22.1: + dependencies: + node-addon-api: 8.2.1 + node-gyp-build: 4.8.2 + treeverse@3.0.0: {} trim-lines@3.0.1: {} trim-trailing-lines@2.1.0: {} + triple-beam@1.4.1: {} + trough@2.2.0: {} truncatise@0.0.8: {} @@ -23602,6 +28486,8 @@ snapshots: dependencies: typescript: 5.7.2 + ts-error@1.0.6: {} + ts-interface-checker@0.1.13: {} ts-node@10.9.2(@types/node@18.19.59)(typescript@5.7.2): @@ -23743,6 +28629,10 @@ snapshots: transitivePeerDependencies: - supports-color + tunnel-agent@0.6.0: + dependencies: + safe-buffer: 5.2.1 + turbo-darwin-64@2.2.3: optional: true @@ -23788,6 +28678,8 @@ snapshots: type-fest@4.26.1: {} + type-fest@4.30.0: {} + type-is@1.6.18: dependencies: media-typer: 0.3.0 @@ -23825,6 +28717,10 @@ snapshots: is-typed-array: 1.1.13 possible-typed-array-names: 1.0.0 + typed-emitter@2.1.0: + optionalDependencies: + rxjs: 7.8.1 + typedarray.prototype.slice@1.0.3: dependencies: call-bind: 1.0.7 @@ -23854,10 +28750,20 @@ snapshots: buffer: 5.7.1 through: 2.3.8 + underscore@1.13.7: {} + undici-types@5.26.5: {} undici-types@6.19.8: {} + undici-types@6.20.0: {} + + undici@5.28.4: + dependencies: + '@fastify/busboy': 2.1.1 + + undici@6.19.8: {} + unherit@3.0.1: {} unified@10.1.2: @@ -23993,6 +28899,13 @@ snapshots: universalify@2.0.1: {} + unpdf@0.12.1(encoding@0.1.13): + optionalDependencies: + canvas: 2.11.2(encoding@0.1.13) + transitivePeerDependencies: + - encoding + - supports-color + unpipe@1.0.0: {} unplugin@1.0.1: @@ -24132,8 +29045,12 @@ snapshots: uuid@8.0.0: {} + uuid@8.3.2: {} + uuid@9.0.1: {} + uuidv7@0.6.3: {} + uvu@0.5.6: dependencies: dequal: 2.0.3 @@ -24281,7 +29198,7 @@ snapshots: fsevents: 2.3.3 terser: 5.36.0 - vitest@1.6.0(@types/node@20.17.1)(jsdom@24.1.3)(terser@5.36.0): + vitest@1.6.0(@types/node@20.17.1)(jsdom@24.1.3(canvas@2.11.2(encoding@0.1.13)))(terser@5.36.0): dependencies: '@vitest/expect': 1.6.0 '@vitest/runner': 1.6.0 @@ -24305,7 +29222,7 @@ snapshots: why-is-node-running: 2.3.0 optionalDependencies: '@types/node': 20.17.1 - jsdom: 24.1.3 + jsdom: 24.1.3(canvas@2.11.2(encoding@0.1.13)) transitivePeerDependencies: - less - lightningcss @@ -24316,7 +29233,7 @@ snapshots: - supports-color - terser - vitest@2.1.4(@types/node@20.17.1)(jsdom@24.1.3)(msw@2.5.2(@types/node@20.17.1)(typescript@5.7.2))(terser@5.36.0): + vitest@2.1.4(@types/node@20.17.1)(jsdom@24.1.3(canvas@2.11.2(encoding@0.1.13)))(msw@2.5.2(@types/node@20.17.1)(typescript@5.7.2))(terser@5.36.0): dependencies: '@vitest/expect': 2.1.4 '@vitest/mocker': 2.1.4(msw@2.5.2(@types/node@20.17.1)(typescript@5.7.2))(vite@5.4.10(@types/node@20.17.1)(terser@5.36.0)) @@ -24340,7 +29257,7 @@ snapshots: why-is-node-running: 2.3.0 optionalDependencies: '@types/node': 20.17.1 - jsdom: 24.1.3 + jsdom: 24.1.3(canvas@2.11.2(encoding@0.1.13)) transitivePeerDependencies: - less - lightningcss @@ -24352,7 +29269,7 @@ snapshots: - supports-color - terser - vitest@2.1.4(@types/node@22.8.1)(jsdom@24.1.3)(msw@2.5.2(@types/node@22.8.1)(typescript@5.6.3))(terser@5.36.0): + vitest@2.1.4(@types/node@22.8.1)(jsdom@24.1.3(canvas@2.11.2(encoding@0.1.13)))(msw@2.5.2(@types/node@22.8.1)(typescript@5.6.3))(terser@5.36.0): dependencies: '@vitest/expect': 2.1.4 '@vitest/mocker': 2.1.4(msw@2.5.2(@types/node@22.8.1)(typescript@5.6.3))(vite@5.4.10(@types/node@22.8.1)(terser@5.36.0)) @@ -24376,7 +29293,7 @@ snapshots: why-is-node-running: 2.3.0 optionalDependencies: '@types/node': 22.8.1 - jsdom: 24.1.3 + jsdom: 24.1.3(canvas@2.11.2(encoding@0.1.13)) transitivePeerDependencies: - less - lightningcss @@ -24388,7 +29305,7 @@ snapshots: - supports-color - terser - vitest@2.1.4(@types/node@22.8.1)(jsdom@24.1.3)(msw@2.5.2(@types/node@22.8.1)(typescript@5.7.2))(terser@5.36.0): + vitest@2.1.4(@types/node@22.8.1)(jsdom@24.1.3(canvas@2.11.2(encoding@0.1.13)))(msw@2.5.2(@types/node@22.8.1)(typescript@5.7.2))(terser@5.36.0): dependencies: '@vitest/expect': 2.1.4 '@vitest/mocker': 2.1.4(msw@2.5.2(@types/node@22.8.1)(typescript@5.7.2))(vite@5.4.10(@types/node@22.8.1)(terser@5.36.0)) @@ -24412,7 +29329,7 @@ snapshots: why-is-node-running: 2.3.0 optionalDependencies: '@types/node': 22.8.1 - jsdom: 24.1.3 + jsdom: 24.1.3(canvas@2.11.2(encoding@0.1.13)) transitivePeerDependencies: - less - lightningcss @@ -24459,12 +29376,27 @@ snapshots: dependencies: defaults: 1.0.4 + weaviate-client@3.2.5(encoding@0.1.13): + dependencies: + abort-controller-x: 0.4.3 + graphql: 16.9.0 + graphql-request: 6.1.0(encoding@0.1.13)(graphql@16.9.0) + long: 5.2.3 + nice-grpc: 2.1.10 + nice-grpc-client-middleware-retry: 3.1.9 + nice-grpc-common: 2.0.2 + uuid: 9.0.1 + transitivePeerDependencies: + - encoding + web-namespaces@2.0.1: {} web-streams-polyfill@3.3.3: {} web-streams-polyfill@4.0.0-beta.3: {} + web-tree-sitter@0.24.4: {} + web-vitals@4.2.4: {} webidl-conversions@3.0.1: {} @@ -24511,8 +29443,15 @@ snapshots: dependencies: iconv-lite: 0.6.3 + whatwg-fetch@3.6.20: {} + whatwg-mimetype@4.0.0: {} + whatwg-url@13.0.0: + dependencies: + tr46: 4.1.1 + webidl-conversions: 7.0.0 + whatwg-url@14.0.0: dependencies: tr46: 5.0.0 @@ -24580,6 +29519,40 @@ snapshots: siginfo: 2.0.0 stackback: 0.0.2 + wide-align@1.1.5: + dependencies: + string-width: 4.2.3 + optional: true + + wikipedia@2.1.2: + dependencies: + axios: 1.7.8 + infobox-parser: 3.6.4 + transitivePeerDependencies: + - debug + + wink-nlp@2.3.2: {} + + winston-transport@4.9.0: + dependencies: + logform: 2.7.0 + readable-stream: 3.6.2 + triple-beam: 1.4.1 + + winston@3.17.0: + dependencies: + '@colors/colors': 1.6.0 + '@dabh/diagnostics': 2.0.3 + async: 3.2.6 + is-stream: 2.0.1 + logform: 2.7.0 + one-time: 1.0.0 + readable-stream: 3.6.2 + safe-stable-stringify: 2.5.0 + stack-trace: 0.0.10 + triple-beam: 1.4.1 + winston-transport: 4.9.0 + word-wrap@1.2.5: {} wrap-ansi@6.2.0: @@ -24618,6 +29591,8 @@ snapshots: sax: 1.2.1 xmlbuilder: 11.0.1 + xmlbuilder@10.1.1: {} + xmlbuilder@11.0.1: {} xmlchars@2.2.0: {} @@ -24632,6 +29607,8 @@ snapshots: yallist@4.0.0: {} + yallist@5.0.0: {} + yaml@2.6.0: {} yargs-parser@21.1.1: {} diff --git a/turbo.json b/turbo.json index 66e57e7e7..9b6880791 100644 --- a/turbo.json +++ b/turbo.json @@ -40,7 +40,8 @@ "SUPPORT_APP_SECRET_KEY", "DEFAULT_PROVIDER_API_KEY", "KEEP_ALIVE_TIMEOUT", - "LOOPS_API_KEY" + "LOOPS_API_KEY", + "npm_package_name" ], "$schema": "https://turbo.build/schema.json", "globalDependencies": ["**/.env.*local"],