Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions web/eslint.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -157,6 +157,7 @@ export default [
...hooksPlugin.configs.recommended.rules,
...baseRules,
'import/no-default-export': 'error',
'no-console': 'error',
'no-restricted-imports': [
'warn',
{
Expand Down
1 change: 1 addition & 0 deletions web/packages/studio/e2e-tests/pages/project-datasets.ts
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ export class ProjectDatasetsPage {
).toBeVisible();
}
} catch (e) {
// eslint-disable-next-line no-console
console.error(e);
}
}
Expand Down
1 change: 1 addition & 0 deletions web/packages/studio/scripts/fetch-styles.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
// SPDX-FileCopyrightText: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
// SPDX-License-Identifier: Apache-2.0

/* eslint-disable no-console -- CLI script */
/**
* Fetches base-external.css + components.css from the Kaizen UI Foundations CDN
* for the version of @nvidia/foundations-react-core pinned in pnpm-workspace.yaml,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import type { EntityIdentifier } from '@studio/api/common/types';
import { getDatasetFileContentQueryKey } from '@studio/api/datasets/invalidateDatasetCaches';
import { PLATFORM_BASE_URL } from '@studio/constants/environment';
import { isBinaryExtension } from '@studio/util/binaryFile';
import { websiteLogger } from '@studio/util/logger';
import { queryOptions, useQuery, UseQueryOptions, useSuspenseQuery } from '@tanstack/react-query';
import axios from 'axios';
import { parquetRead } from 'hyparquet';
Expand Down Expand Up @@ -87,7 +88,7 @@ export const datasetFileContentQueryOptions = ({
});
return data;
} catch (err) {
console.error(err);
websiteLogger.error('Invalid response while downloading parquet file', err);
throw new Error('Invalid response while downloading parquet file');
}
} else {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ import type {
import { useDatasetInputFileReducer } from '@studio/components/DatasetInputFile/useDatasetInputFileReducer';
import { useWorkspaceFromPath } from '@studio/hooks/useWorkspaceFromPath';
import { getDatasetDisplayNameFromFilesUrl } from '@studio/util/files';
import { websiteLogger } from '@studio/util/logger';
import { useQueryClient } from '@tanstack/react-query';
import { Plus, CircleCheck, CircleHelp, Eye, File as FileIcon, Trash2 } from 'lucide-react';
import { FC, useCallback, useEffect, useRef } from 'react';
Expand Down Expand Up @@ -126,7 +127,9 @@ export const DatasetInputFile: FC<DatasetInputFileProps> = ({
const datasetWorkspace = file.dataset?.workspace;
const datasetName = file.dataset?.name;
if (!datasetWorkspace || !datasetName) {
console.error('Cannot load dataset file: missing workspace or name', file.dataset);
websiteLogger.error(
`Cannot load dataset file: missing workspace or name: ${JSON.stringify(file.dataset)}`
);
return;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ import { invalidateDatasetCaches } from '@studio/api/datasets/invalidateDatasetC
import { DatasetCreateModal } from '@studio/components/DatasetCreateModal';
import { DatasetCreateModalMode } from '@studio/components/DatasetCreateModal/constants';
import { DeleteConfirmationModal } from '@studio/components/DeleteConfirmationModal';
import { websiteLogger } from '@studio/util/logger';
import { EllipsisVertical } from 'lucide-react';
import { type FC, useState } from 'react';

Expand Down Expand Up @@ -49,7 +50,7 @@ export const FilesetActionMenu: FC<FilesetActionMenuProps> = ({
onFilesetDeleted?.(fileset);
return true;
} catch (error) {
console.error('Failed to delete fileset:', error);
websiteLogger.error('Failed to delete fileset', error);
return false;
}
};
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ import { Button, Flex, Modal, Stack, Text } from '@nvidia/foundations-react-core
import { DatasetInputFile, type DatasetInputFileResult } from '@studio/components/DatasetInputFile';
import { FileSamplingMethodSelect } from '@studio/components/FileSamplingSnippet/FileSamplingMethodSelect';
import type { SharedModelEntry } from '@studio/routes/ModelCompareRoute/types';
import { websiteLogger } from '@studio/util/logger';
import { Loader2, Maximize2, Play, Trash2 } from 'lucide-react';
import { type FC, useCallback, useEffect, useMemo, useRef, useState } from 'react';

Expand Down Expand Up @@ -178,7 +179,7 @@ export const ModelComparePrompts: FC<ModelComparePromptsProps> = ({
writeCell(row.sourceIndex, model.id, content);
})
.catch((error) => {
console.error('Inference request failed:', error);
websiteLogger.error('Inference request failed', error);
writeCell(row.sourceIndex, model.id, null);
})
);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ import { useRecentWorkspaces } from '@studio/components/WorkspaceDropdown/useRec
import { DEFAULT_LARGE_PAGE_SIZE } from '@studio/constants/constants';
import { getWorkspaceDetailsDefaultRoute } from '@studio/routes/utils';
import { useBoolean } from '@studio/util/hooks/useBoolean';
import { websiteLogger } from '@studio/util/logger';
import cn from 'classnames';
import { Plus, Filter } from 'lucide-react';
import { ChangeEvent, FC, lazy, useMemo, useState } from 'react';
Expand Down Expand Up @@ -117,7 +118,7 @@ export const WorkspaceDropdown: FC<Props> = ({ onValueChange }) => {
// Open modal for new workspace
openModal();
} else {
console.error('Workspace selected without name:', newWorkspace);
websiteLogger.error(`Workspace selected without name: ${JSON.stringify(newWorkspace)}`);
}
return;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ import {
import { useFileValidation } from '@studio/hooks/evaluation/useFileValidation';
import { useWorkspaceFromPath } from '@studio/hooks/useWorkspaceFromPath';
import { getDatasetDisplayNameFromFilesUrl } from '@studio/util/files';
import { websiteLogger } from '@studio/util/logger';
import { useQueryClient } from '@tanstack/react-query';
import { Plus, CircleCheck, CircleHelp, File as FileIcon } from 'lucide-react';
import { FC, useState, useCallback, useEffect, useMemo } from 'react';
Expand Down Expand Up @@ -406,7 +407,7 @@ export const InputFile: FC<InputFileProps> = ({
updateFormFromFile(validationResult, undefined);
}
} catch (error) {
console.error('Failed to validate selected file:', error);
websiteLogger.error('Failed to validate selected file', error);
// Create error validation result
const errorResult: FileValidationResult = {
isValid: false,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -216,10 +216,7 @@ describe('ActionMenu', () => {
const confirmButton = await screen.findByRole('button', { name: 'Delete' });
await user.click(confirmButton);

expect(consoleSpy).toHaveBeenCalledWith(
'Failed to delete evaluation job:',
expect.any(Error)
);
expect(consoleSpy).toHaveBeenCalledWith('Failed to delete evaluation job', expect.any(Error));
expect(mockOnJobDeleted).not.toHaveBeenCalled();

consoleSpy.mockRestore();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ import {
} from '@nvidia/foundations-react-core';
import { useWorkspaceFromPath } from '@studio/hooks/useWorkspaceFromPath';
import { getEvaluationJobName } from '@studio/selectors/evaluationJob';
import { websiteLogger } from '@studio/util/logger';
import { ArrowRight, EllipsisVertical, Trash } from 'lucide-react';
import { FC, useState } from 'react';

Expand Down Expand Up @@ -45,7 +46,7 @@ export const ActionMenu: FC<ActionMenuProps> = ({ job, onNavigateToDetails, onJo
onJobDeleted?.(job);
handleModalClose();
} catch (error) {
console.error('Failed to delete evaluation job:', error);
websiteLogger.error('Failed to delete evaluation job', error);
toast.error('Failed to delete evaluation job. Please try again.');
} finally {
setIsDeleting(false);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ import { Banner, Button, Flex, Modal, Panel, Stack, Text } from '@nvidia/foundat
import { ButtonLaunchEvaluation } from '@studio/components/evaluation/ButtonLaunchEvaluation';
import { StatusLogsContent } from '@studio/components/evaluation/Jobs/StatusLogsContent';
import { useWorkspaceFromPath } from '@studio/hooks/useWorkspaceFromPath';
import { websiteLogger } from '@studio/util/logger';
import { useQueryClient } from '@tanstack/react-query';
import { ChartBar, LayoutList, CircleX } from 'lucide-react';
import { useState } from 'react';
Expand Down Expand Up @@ -59,7 +60,7 @@ export const DetailsPanel = ({ evaluationJob, error }: DetailsPanelProps) => {

setCancelModalOpen(false);
} catch (error) {
console.error('Failed to cancel job:', error);
websiteLogger.error('Failed to cancel job', error);
toast.error('Failed to cancel job. Please try again.');
}
};
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -198,7 +198,7 @@ describe('EvaluationJobBulkDeleteModal', () => {

await waitFor(() => {
expect(consoleSpy).toHaveBeenCalledWith(
'Failed to delete evaluation jobs:',
'Failed to delete evaluation jobs',
expect.any(Error)
);
});
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import { useEvaluatorDeleteEvaluateJob } from '@nemo/sdk/generated/evaluator/api
import { Button, Flex, Modal } from '@nvidia/foundations-react-core';
import { useMutateMany } from '@studio/api/common/useMutateMany';
import { useWorkspaceFromPath } from '@studio/hooks/useWorkspaceFromPath';
import { websiteLogger } from '@studio/util/logger';
import { Trash } from 'lucide-react';
import { FC, useState } from 'react';

Expand Down Expand Up @@ -38,7 +39,7 @@ export const EvaluationJobBulkDeleteModal: FC<EvaluationJobBulkDeleteModalProps>
onConfirmSuccess();
setOpen(false);
} catch (error) {
console.error('Failed to delete evaluation jobs:', error);
websiteLogger.error('Failed to delete evaluation jobs', error);
toast.error('Failed to delete evaluation jobs. Please try again.');
}
};
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ import { FileSystemNode } from '@studio/components/FilesTable/utils';
import { useDatasetNavigator } from '@studio/hooks/useDatasetNavigator';
import { useWorkspaceFromPath } from '@studio/hooks/useWorkspaceFromPath';
import { getFilesetDetailsRoute } from '@studio/routes/utils';
import { websiteLogger } from '@studio/util/logger';
import { FolderOpen, Info } from 'lucide-react';
import { type FC, useMemo } from 'react';
import { useForm, useWatch } from 'react-hook-form';
Expand Down Expand Up @@ -178,7 +179,7 @@ export const AddToFolderModal: FC<AddToFolderModalProps> = ({

const navigateToParentFolder = () => {
if (!routeWorkspace) {
console.warn('AddToFolderModal: Cannot navigate - workspace context not available');
websiteLogger.warn('AddToFolderModal: Cannot navigate - workspace context not available');
return;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import { Button, Flex, Modal } from '@nvidia/foundations-react-core';
import { useDatasetFilesDelete } from '@studio/api/datasets/useDatasetFilesDelete';
import { extractFilePathsFromDirectory } from '@studio/components/filesets/FilesetFileExplorer/BulkDeleteModal/utils';
import { FileSystemNode } from '@studio/components/FilesTable/utils';
import { websiteLogger } from '@studio/util/logger';
import { Trash } from 'lucide-react';
import { FC, ReactNode, useState } from 'react';

Expand Down Expand Up @@ -56,7 +57,7 @@ export const BulkDeleteModal: FC<BulkDeleteModalProps> = ({
setOpen(false);
} catch (error) {
// Error handling is managed by the mutation hooks
console.error('Failed to delete items:', error);
websiteLogger.error('Failed to delete items', error);
}
};

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
// SPDX-License-Identifier: Apache-2.0

import { Block, Flex, Text } from '@nvidia/foundations-react-core';
import { websiteLogger } from '@studio/util/logger';
import { FC, useCallback, ReactNode } from 'react';
import { useDropzone, FileRejection } from 'react-dropzone';

Expand All @@ -27,14 +28,14 @@ export const DatasetFileDropzone: FC<DatasetFileDropzoneProps> = ({
onUpload(acceptedFiles);
}
} catch (error) {
console.error('Error handling accepted files:', error);
websiteLogger.error('Error handling accepted files', error);
}
},
[onUpload]
);

const handleDropRejected = useCallback((fileRejections: FileRejection[]) => {
console.error('Files rejected:', fileRejections);
websiteLogger.error(`Files rejected: ${JSON.stringify(fileRejections)}`);
}, []);

const {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import { triggerDownload } from '@nemo/common/src/utils/file';
import { useDownloadFileAsArrayBuffer } from '@studio/components/filesets/hooks/useDownloadFileAsArrayBuffer';
import { FileSystemFile } from '@studio/components/FilesTable/utils';
import { getFileNameFromPath } from '@studio/util/files';
import { websiteLogger } from '@studio/util/logger';
import { useCallback, useState } from 'react';

export interface UseBulkDownloadOptions {
Expand Down Expand Up @@ -70,7 +71,7 @@ export function useBulkDownload(options: UseBulkDownloadOptions): UseBulkDownloa
);
}
} catch (err) {
console.error('Bulk download failed', err);
websiteLogger.error('Bulk download failed', err);
toast.dismissToast(toastId);
toast.error(files.length === 1 ? 'Failed to download file' : 'Failed to download files');
} finally {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import { filesListFilesetFiles } from '@nemo/sdk/generated/platform/api';
import { useDatasetFilesUpload } from '@studio/api/datasets/useDatasetFilesUpload';
import { useDownloadFileAsArrayBuffer } from '@studio/components/filesets/hooks/useDownloadFileAsArrayBuffer';
import { FileSystemFile } from '@studio/components/FilesTable/utils';
import { websiteLogger } from '@studio/util/logger';
import { useCallback, useState } from 'react';

export interface UseBulkDuplicateOptions {
Expand Down Expand Up @@ -150,7 +151,7 @@ export function useBulkDuplicate(options: UseBulkDuplicateOptions): UseBulkDupli
return false;
}
} catch (err) {
console.error('Bulk duplicate failed', err);
websiteLogger.error('Bulk duplicate failed', err);
toast.dismissToast(toastId);
toast.error(files.length === 1 ? 'Failed to duplicate file' : 'Failed to duplicate files');
return false;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import type { AgentDeployment } from '@nemo/sdk/generated/agents/schema';
import type { PlatformJobLog } from '@nemo/sdk/generated/platform/schema';
import { Block, Select, Stack, Text } from '@nvidia/foundations-react-core';
import { PLATFORM_BASE_URL } from '@studio/constants/environment';
import { websiteLogger } from '@studio/util/logger';
import { streamSse } from '@studio/util/sseStream';
import { type FC, useEffect, useMemo, useState } from 'react';
import { useAuth } from 'react-oidc-context';
Expand Down Expand Up @@ -135,7 +136,10 @@ const LogsForDeployment: FC<LogsForDeploymentProps> = ({ workspace, deploymentNa
}
},
onError: (err) => {
console.warn(`Log stream interrupted for deployment ${deploymentName}; retrying.`, err);
websiteLogger.warn(
`Log stream interrupted for deployment ${deploymentName}; retrying`,
err
);
},
});
return () => controller.abort();
Expand Down
1 change: 1 addition & 0 deletions web/packages/studio/src/mocks/node.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
// SPDX-FileCopyrightText: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
// SPDX-License-Identifier: Apache-2.0

/* eslint-disable no-console */
import { handlers } from '@studio/mocks/handlers';
import { handlers as iconsHandlers } from '@studio/mocks/icons';
import { setupServer } from 'msw/node';
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ import {
HUGGING_FACE_DEPLOYMENT_SOURCE_VALUE,
huggingFaceSourceFilesetName,
} from '@studio/routes/DeploymentsListRoute/huggingFaceDeploymentArtifacts';
import { websiteLogger } from '@studio/util/logger';
import { type QueryClient, useMutation, useQueryClient } from '@tanstack/react-query';
import { useCallback } from 'react';

Expand Down Expand Up @@ -214,7 +215,7 @@ export function useDeleteDeploymentAndConfig(workspace: string) {

void deleteRelatedResourcesAfterDeploymentReleased(workspace, deployment)
.catch((error: unknown) => {
console.error('Failed to delete deployment related resources:', error);
websiteLogger.error('Failed to delete deployment related resources', error);
toast.error('Failed to delete related deployment resources. Please try again later.');
})
.finally(() => {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -314,10 +314,7 @@ describe('ActionMenu', () => {
await user.click(confirmDeleteButton);

await waitFor(() => {
expect(consoleErrorSpy).toHaveBeenCalledWith(
'Failed to delete dataset:',
expect.any(Error)
);
expect(consoleErrorSpy).toHaveBeenCalledWith('Failed to delete dataset', expect.any(Error));
});

expect(mockOnDatasetDeleted).not.toHaveBeenCalled();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ import { invalidateDatasetCaches } from '@studio/api/datasets/invalidateDatasetC
import { DatasetCreateModal } from '@studio/components/DatasetCreateModal';
import { DatasetCreateModalMode } from '@studio/components/DatasetCreateModal/constants';
import { DeleteConfirmationModal } from '@studio/components/DeleteConfirmationModal';
import { websiteLogger } from '@studio/util/logger';
import { EllipsisVertical } from 'lucide-react';
import { FC, useState } from 'react';

Expand Down Expand Up @@ -49,7 +50,7 @@ export const ActionMenu: FC<ActionMenuProps> = ({
onDatasetDeleted?.(dataset);
return true;
} catch (error) {
console.error('Failed to delete dataset:', error);
websiteLogger.error('Failed to delete dataset', error);
return false;
}
};
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -265,7 +265,7 @@ describe('DatasetBulkDeleteModal', () => {
// Wait for error handling
await waitFor(() => {
expect(consoleErrorSpy).toHaveBeenCalledWith(
'Failed to delete datasets:',
'Failed to delete datasets',
expect.any(Error)
);
});
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import { FilesetOutput } from '@nemo/sdk/generated/platform/schema';
import { Button, Flex, Modal } from '@nvidia/foundations-react-core';
import { useMutateMany } from '@studio/api/common/useMutateMany';
import { invalidateDatasetCaches } from '@studio/api/datasets/invalidateDatasetCaches';
import { websiteLogger } from '@studio/util/logger';
import { Trash } from 'lucide-react';
import { FC, ReactNode, useState } from 'react';

Expand Down Expand Up @@ -47,7 +48,7 @@ export const DatasetBulkDeleteModal: FC<DatasetBulkDeleteModalProps> = ({
onConfirmSuccess();
setOpen(false);
} catch (error) {
console.error('Failed to delete datasets:', error);
websiteLogger.error('Failed to delete datasets', error);
}
};

Expand Down
Loading
Loading