Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(ui): upload dataset from csv #3826

Merged
merged 1 commit into from
Mar 17, 2025
Merged

feat(ui): upload dataset from csv #3826

merged 1 commit into from
Mar 17, 2025

Conversation

bcsherma
Copy link
Contributor

@bcsherma bcsherma commented Mar 1, 2025

Description

Adds a "New dataset" button to the datasets page. Clicking the button opens a drawer which allows the user to upload a csv, make edits, and publish the result as a new dataset.

Screen.Recording.2025-03-04.at.1.42.18.PM.mov

This PR adds papaparse as a dependency for weave-js

Summary by CodeRabbit

  • New Features

    • Introduced an interactive drawer for creating datasets, enabling CSV file uploads, real-time dataset name validation, and clear error feedback.
    • Enhanced dataset views by allowing users to toggle row highlighting and optionally hide identifier columns.
    • Added a context provider for managing dataset creation state and actions.
  • Style

    • Updated the visual presentation and layout of notifications and drawer headers for improved clarity and responsiveness.
  • Refactor

    • Streamlined dataset name validation for clearer error messaging and a smoother user experience.
    • Improved the layout of the ResizableDrawer component to include header content.

Copy link
Contributor Author

bcsherma commented Mar 1, 2025

@circle-job-mirror
Copy link

circle-job-mirror bot commented Mar 1, 2025

@bcsherma bcsherma force-pushed the datasets-page-refactor branch from 2d19152 to 4bab296 Compare March 4, 2025 01:44
@bcsherma bcsherma force-pushed the datset-csv-upload branch 3 times, most recently from d4bafbb to e8e1081 Compare March 4, 2025 16:42
Copy link

socket-security bot commented Mar 4, 2025

New dependencies detected. Learn more about Socket for GitHub ↗︎

Package New capabilities Transitives Size Publisher
npm/@types/[email protected] None 0 24.1 kB types
npm/[email protected] None 0 263 kB pokoli

View full report↗︎

@bcsherma bcsherma force-pushed the datasets-page-refactor branch from 4bab296 to f6bf364 Compare March 4, 2025 19:18
@bcsherma bcsherma force-pushed the datset-csv-upload branch 6 times, most recently from 8f06e50 to 57969f5 Compare March 4, 2025 21:57
@@ -44,6 +44,7 @@ interface CellViewingRendererProps {
isNew?: boolean;
isEditing?: boolean;
serverValue?: any;
disableNewRowHighlight?: boolean;
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I thought the green highlight for "added rows" ruined this view, so I added a prop to disable.

@@ -118,6 +118,7 @@ export const ResizableDrawer: React.FC<ResizableDrawerProps> = ({
}}
onMouseDown={handleMouseDown}
/>
{headerContent}
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

header not being rendered here is an uncaught regression that this pr fixes

@bcsherma bcsherma force-pushed the datset-csv-upload branch from 57969f5 to 4682504 Compare March 4, 2025 21:58
@bcsherma bcsherma force-pushed the datasets-page-refactor branch from f6bf364 to 72ebfc6 Compare March 4, 2025 21:58
@bcsherma bcsherma marked this pull request as ready for review March 4, 2025 21:59
@bcsherma bcsherma requested review from a team as code owners March 4, 2025 21:59
@bcsherma bcsherma force-pushed the datset-csv-upload branch from 4682504 to 611a6e8 Compare March 5, 2025 19:10
Base automatically changed from datasets-page-refactor to master March 5, 2025 23:31
@bcsherma bcsherma force-pushed the datset-csv-upload branch from 611a6e8 to 2d09122 Compare March 6, 2025 18:38
Copy link
Contributor

coderabbitai bot commented Mar 6, 2025

Walkthrough

This pull request adds new dependencies and extends dataset-related functionality. It introduces a CSV utility module with comprehensive parsing and type detection functions alongside its test suite. New components and context for dataset creation have been implemented, including a resizable drawer with extended header content. Additionally, enhancements to cell rendering, dataset view configuration, dataset name validation, and styling updates have been applied. The changes also refactor certain functions to simplify validation logic and improve UI interactions on the datasets page.

Changes

File(s) Change Summary
weave-js/package.json Added new dependencies: @types/papaparse@^5.3.15 and papaparse@^5.5.2.
weave-js/src/.../datasets/CellRenderers.tsx
weave-js/src/.../datasets/EditableDatasetView.tsx
Added optional property disableNewRowHighlight (and hideIdColumn in EditableDatasetView) to control row highlighting and conditional column rendering.
weave-js/src/.../datasets/CreateDatasetDrawer.tsx
weave-js/src/.../datasets/CreateDatasetDrawerContext.tsx
Introduced new dataset creation UI components with a context provider for managing state and actions during dataset creation.
weave-js/src/.../datasets/datasetNameValidation.ts
weave-js/src/.../datasets/SelectDatasetStep.tsx
Refactored dataset name validation by introducing a dedicated validateDatasetName function and delegating validation logic from the component.
weave-js/src/.../datasets/csvUtils.ts
weave-js/src/.../datasets/__tests__/csvUtils.test.ts
Added new CSV utility functions for type detection, column analysis, data casting, and parsing; complemented with a comprehensive test suite.
weave-js/src/.../pages/DatasetsPage/DatasetsPage.tsx
weave-js/src/.../pages/common/ResizableDrawer.tsx
Enhanced the datasets page by integrating the CreateDatasetDrawer and updating ResizableDrawer to render custom header content.
weave-js/src/.../datasets/DatasetPublishToast.tsx Modified styling for improved layout, ensuring responsive width and proper text overflow handling.

Sequence Diagram(s)

sequenceDiagram
    participant U as User
    participant DP as DatasetsPage
    participant CD as CreateDatasetDrawer
    participant CTX as CreateDatasetProvider
    participant VN as validateDatasetName
    participant CSV as csvUtils

    U->>DP: Click "Create Dataset" button
    DP->>CD: Open the CreateDatasetDrawer
    CD->>CTX: Initialize dataset creation state
    U->>CD: Input dataset name and upload CSV
    CD->>VN: Validate dataset name
    VN-->>CD: Return validation result
    CD->>CSV: Parse the uploaded CSV file
    CSV-->>CD: Return parsed data
    CD->>CTX: Update state with dataset details
    CTX->>DP: Notify dataset save success
    DP->>U: Display confirmation toast
Loading

Suggested reviewers

  • gtarpenning
  • tssweeney

Poem

I hop through code in fields of change,
Each line a burrow, perfectly arranged.
CSVs and drawers, a lovely parade,
With every commit, new paths are laid.
Bugs run away as I dance through the night,
A coding rabbit’s cheer in pure delight!
🐇✨

✨ Finishing Touches
  • 📝 Generate Docstrings

🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Generate unit testing code for this file.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    • @coderabbitai generate unit testing code for this file.
    • @coderabbitai modularize this function.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read src/utils.ts and generate unit testing code.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.
    • @coderabbitai help me debug CodeRabbit configuration file.

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

CodeRabbit Commands (Invoked using PR comments)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai generate docstrings to generate docstrings for this PR.
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

Documentation and Community

  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

🧹 Nitpick comments (7)
weave-js/src/components/PagePanelComponents/Home/Browse3/datasets/datasetNameValidation.ts (1)

26-39: Consider adding a more explicit constraint message.

The error message for invalid characters is informative, but consider including the full list of allowed characters in the message to provide clearer guidance to users.

-      return {
-        isValid: false,
-        error: `Invalid characters found: ${invalidChars}`,
-      };
+      return {
+        isValid: false,
+        error: `Invalid characters found: ${invalidChars}. Only letters, numbers, hyphens, and underscores are allowed.`,
+      };
weave-js/src/components/PagePanelComponents/Home/Browse3/datasets/CreateDatasetDrawer.tsx (3)

117-133: Consider adding file size validation.

The file upload handling checks for CSV file type but doesn't validate file size. This could lead to performance issues or failures when processing very large CSV files.

  const handleDrop = useCallback(
    async (e: React.DragEvent<HTMLDivElement>) => {
      e.preventDefault();
      e.stopPropagation();
      setIsDragging(false);

      const files = e.dataTransfer.files;
      if (files.length > 0) {
        const file = files[0];
+       const MAX_FILE_SIZE = 10 * 1024 * 1024; // 10MB limit
        if (file.type === 'text/csv' || file.name.endsWith('.csv')) {
+         if (file.size > MAX_FILE_SIZE) {
+           toast.error('File too large. Please upload a CSV file smaller than 10MB');
+           return;
+         }
          await parseCSVFile(file);
        } else {
          toast.error('Please upload a CSV file');
        }
      }
    },
    [parseCSVFile]
  );

313-317: Add file size validation to input element.

Similar to the drag and drop handler, the file input should also have size validation.

  <input
    accept=".csv"
    id="csv-upload"
    type="file"
+   data-max-size="10485760"
    style={{display: 'none'}}
    onChange={handleFileChange}
    ref={fileInputRef}
  />

And update the handleFileChange function:

const handleFileChange = useCallback(
  async (event: React.ChangeEvent<HTMLInputElement>) => {
    const file = event.target.files?.[0];
    if (file) {
+     const MAX_FILE_SIZE = 10 * 1024 * 1024; // 10MB limit
+     if (file.size > MAX_FILE_SIZE) {
+       toast.error('File too large. Please upload a CSV file smaller than 10MB');
+       return;
+     }
      await parseCSVFile(file);
    }
  },
  [parseCSVFile]
);

364-366: Consider adding responsiveness for small screens.

The footer with the publish button is set with a fixed layout. Consider improving the responsiveness for mobile or narrow drawer views.

<Box
  sx={{
    py: 2,
    px: 0,
    borderTop: '1px solid',
    borderColor: 'divider',
    backgroundColor: 'background.paper',
    width: '100%',
    display: 'flex',
    flexShrink: 0,
+   flexDirection: {xs: 'column', sm: 'row'},
+   gap: 2,
  }}>
weave-js/src/components/PagePanelComponents/Home/Browse3/datasets/CreateDatasetDrawerContext.tsx (1)

131-205: CSV parsing is well-handled, but consider streaming for large files.
The parseCSVFile function correctly sets and clears error/loading states, and uses parseCSV from csvUtils. For very large CSV files, you might consider a streaming approach to avoid memory spikes.

weave-js/src/components/PagePanelComponents/Home/Browse3/pages/DatasetsPage/DatasetsPage.tsx (1)

81-146: Creation workflow is handled well, but remove debug logs in production.
The handleSaveDataset function is robust, handling success and errors with toast notifications. Consider removing or guarding console.log statements once debugging is complete.

- console.log('Saving dataset:', dataset);
+ // console.log('Saving dataset:', dataset); // Remove or guard for production
weave-js/src/components/PagePanelComponents/Home/Browse3/datasets/csvUtils.ts (1)

230-275: Parsing pipeline is straightforward, consider streaming for large files.
Reading the entire file into memory is simple and likely fine for moderate file sizes. Consider a streaming parse mode for extremely large files.

📜 Review details

Configuration used: .coderabbit.yaml
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 0892ed4 and 2d09122.

⛔ Files ignored due to path filters (1)
  • weave-js/yarn.lock is excluded by !**/yarn.lock, !**/*.lock
📒 Files selected for processing (12)
  • weave-js/package.json (2 hunks)
  • weave-js/src/components/PagePanelComponents/Home/Browse3/datasets/CellRenderers.tsx (7 hunks)
  • weave-js/src/components/PagePanelComponents/Home/Browse3/datasets/CreateDatasetDrawer.tsx (1 hunks)
  • weave-js/src/components/PagePanelComponents/Home/Browse3/datasets/CreateDatasetDrawerContext.tsx (1 hunks)
  • weave-js/src/components/PagePanelComponents/Home/Browse3/datasets/DatasetPublishToast.tsx (1 hunks)
  • weave-js/src/components/PagePanelComponents/Home/Browse3/datasets/EditableDatasetView.tsx (8 hunks)
  • weave-js/src/components/PagePanelComponents/Home/Browse3/datasets/SelectDatasetStep.tsx (2 hunks)
  • weave-js/src/components/PagePanelComponents/Home/Browse3/datasets/__tests__/csvUtils.test.ts (1 hunks)
  • weave-js/src/components/PagePanelComponents/Home/Browse3/datasets/csvUtils.ts (1 hunks)
  • weave-js/src/components/PagePanelComponents/Home/Browse3/datasets/datasetNameValidation.ts (1 hunks)
  • weave-js/src/components/PagePanelComponents/Home/Browse3/pages/DatasetsPage/DatasetsPage.tsx (6 hunks)
  • weave-js/src/components/PagePanelComponents/Home/Browse3/pages/common/ResizableDrawer.tsx (1 hunks)
🧰 Additional context used
📓 Path-based instructions (2)
`**/*.{js,jsx,ts,tsx}`: Focus on architectural and logical i...

**/*.{js,jsx,ts,tsx}: Focus on architectural and logical issues rather than style (assuming ESLint is in place).
Flag potential memory leaks and performance bottlenecks.
Check for proper error handling and async/await usage.
Avoid strict enforcement of try/catch blocks - accept Promise chains, early returns, and other clear error handling patterns. These are acceptable as long as they maintain clarity and predictability.
Ensure proper type usage in TypeScript files.
Look for security vulnerabilities in data handling.
Don't comment on formatting if prettier is configured.
Verify proper React hooks usage and component lifecycle.
Check for proper state management patterns.

  • weave-js/src/components/PagePanelComponents/Home/Browse3/pages/common/ResizableDrawer.tsx
  • weave-js/src/components/PagePanelComponents/Home/Browse3/datasets/DatasetPublishToast.tsx
  • weave-js/src/components/PagePanelComponents/Home/Browse3/datasets/SelectDatasetStep.tsx
  • weave-js/src/components/PagePanelComponents/Home/Browse3/datasets/__tests__/csvUtils.test.ts
  • weave-js/src/components/PagePanelComponents/Home/Browse3/datasets/CellRenderers.tsx
  • weave-js/src/components/PagePanelComponents/Home/Browse3/datasets/datasetNameValidation.ts
  • weave-js/src/components/PagePanelComponents/Home/Browse3/datasets/CreateDatasetDrawerContext.tsx
  • weave-js/src/components/PagePanelComponents/Home/Browse3/pages/DatasetsPage/DatasetsPage.tsx
  • weave-js/src/components/PagePanelComponents/Home/Browse3/datasets/EditableDatasetView.tsx
  • weave-js/src/components/PagePanelComponents/Home/Browse3/datasets/csvUtils.ts
  • weave-js/src/components/PagePanelComponents/Home/Browse3/datasets/CreateDatasetDrawer.tsx
`**/*.{yaml,yml,json,tf}`: Check for security best practices...

**/*.{yaml,yml,json,tf}: Check for security best practices.
Verify environment-specific configurations.
Look for hardcoded credentials or sensitive data.
Ensure proper resource limits and requests.
Verify proper versioning of dependencies.
Check for infrastructure best practices.

  • weave-js/package.json
🪛 Biome (1.9.4)
weave-js/src/components/PagePanelComponents/Home/Browse3/datasets/csvUtils.ts

[error] 156-156: Other switch clauses can erroneously access this declaration.
Wrap the declaration in a block to restrict its access to the switch clause.

The declaration is defined in this switch clause:

Unsafe fix: Wrap the declaration in a block.

(lint/correctness/noSwitchDeclarations)


[error] 194-194: Other switch clauses can erroneously access this declaration.
Wrap the declaration in a block to restrict its access to the switch clause.

The declaration is defined in this switch clause:

Unsafe fix: Wrap the declaration in a block.

(lint/correctness/noSwitchDeclarations)


[error] 198-198: Useless case clause.

because the default clause is present:

Unsafe fix: Remove the useless case.

(lint/complexity/noUselessSwitchCase)

⏰ Context from checks skipped due to timeout of 90000ms (3)
  • GitHub Check: publish-package
  • GitHub Check: Socket Security: Pull Request Alerts
  • GitHub Check: Build and Deploy to GitHub Pages
🔇 Additional comments (36)
weave-js/src/components/PagePanelComponents/Home/Browse3/pages/common/ResizableDrawer.tsx (1)

121-121: Fixed header rendering issue.

The change properly implements the rendering of the headerContent prop that was previously defined but not actually rendered in the component. This fixes the regression noted in the previous review.

weave-js/package.json (1)

66-66:

✅ Verification successful

Added PapaParse library and its TypeScript types.

Adding the CSV parsing library and its TypeScript type definitions is appropriate for implementing the CSV upload functionality. The version constraints use caret ranges which allow for compatible updates.

Also applies to: 101-101


🏁 Script executed:

#!/bin/bash
# Check for security advisories and latest versions of the papaparse library

# Check NPM for latest versions
echo "Latest papaparse version:"
npm view papaparse version

# Check for security advisories
echo "Security advisories for papaparse:"
npm audit --package=papaparse || echo "No vulnerabilities found or npm audit failed"

Length of output: 654


Dependency Update Verified

The addition of the PapaParse library along with its TypeScript definitions (@types/papaparse at ^5.3.15) has been confirmed as appropriate for supporting the CSV upload functionality. Verification shows that:

  • The latest papaparse version on NPM is 5.5.2.
  • There are no reported security vulnerabilities (the npm audit error is expected due to the absence of a lockfile).

This update meets the expected compatibility and safety requirements.

weave-js/src/components/PagePanelComponents/Home/Browse3/datasets/DatasetPublishToast.tsx (2)

24-31: Improved toast layout with explicit sizing.

The addition of width: '100%' and minWidth: '280px' ensures the toast has a consistent and appropriate size regardless of content.


34-42: Enhanced text overflow handling for better readability.

Adding whiteSpace: 'nowrap', overflow: 'hidden', and textOverflow: 'ellipsis' improves the visual presentation of potentially long dataset names by ensuring they don't wrap or overflow the container.

weave-js/src/components/PagePanelComponents/Home/Browse3/datasets/__tests__/csvUtils.test.ts (3)

3-42: Well-structured tests for detectDataType function.

The tests thoroughly cover different data type detection scenarios including:

  • Null values (null, undefined, empty string)
  • Numbers (integers, decimals, zero)
  • Booleans (various cases and capitalizations)
  • Dates (different formats)
  • Strings (including edge cases)

This comprehensive testing ensures the function will correctly identify column data types when parsing CSV files.


44-91: Comprehensive column analysis tests with good edge case coverage.

The analyzeColumns tests cover important scenarios:

  • Empty data handling
  • Simple column analysis with different data types
  • Mixed type handling in columns
  • Columns with all null values
  • Date column detection

This thorough testing will help ensure reliable column type inference when processing CSV files.


93-166: Thorough CSV parsing tests with diverse scenarios.

The tests for parseCSV function cover a wide range of use cases:

  • Basic CSV parsing with headers
  • Mixed data type handling
  • Empty CSV files
  • Missing values in cells
  • Different delimiters (comma, semicolon)
  • Malformed CSV error handling

The helper function for creating File objects from strings is an elegant way to simulate file uploads in the test environment.

weave-js/src/components/PagePanelComponents/Home/Browse3/datasets/SelectDatasetStep.tsx (2)

15-15: Nice extraction of validation logic.

Good refactoring to import and use the validateDatasetName function, which centralizes the validation logic and makes it more reusable across components.


201-206: Clean simplification of handleNameChange.

The refactoring greatly simplifies this function by delegating validation to the specialized validateDatasetName function. This approach makes the code more maintainable and consistent with other areas of the application.

weave-js/src/components/PagePanelComponents/Home/Browse3/datasets/CellRenderers.tsx (5)

47-47: Good addition of configurable row highlighting.

Adding the ability to disable new row highlighting provides better flexibility in different UI contexts.


103-105: Properly implemented conditional highlighting.

The conditional check for disableNewRowHighlight is correctly implemented in the background color logic.


641-641: Consistent prop implementation across components.

The disableNewRowHighlight prop is consistently implemented in both interface and component with proper default values.

Also applies to: 652-652


667-670: Correct implementation of conditional background styling.

The ternary operator correctly handles the background color based on the disableNewRowHighlight prop.


685-687: Proper condition chaining for background color logic.

Good use of nested conditional to determine the appropriate background color based on row state and highlight preferences.

weave-js/src/components/PagePanelComponents/Home/Browse3/datasets/datasetNameValidation.ts (2)

1-4: Well-defined validation result interface.

Clear and concise interface that properly represents the validation outcome with both a boolean flag and descriptive error message.


6-51: Robust dataset name validation implementation.

The validation function is well-structured with:

  • Empty input checking
  • Start character validation
  • Character set validation
  • Helpful error messages that identify specific invalid characters
  • Proper error handling with try/catch

This implementation ensures consistent validation across the application.

weave-js/src/components/PagePanelComponents/Home/Browse3/datasets/CreateDatasetDrawer.tsx (2)

15-15: Consistent validation approach.

Good integration of the shared validateDatasetName function, ensuring consistent validation behavior across the application.

Also applies to: 73-74


348-348: Consistent feature usage.

The component correctly passes the disableNewRowHighlight prop to EditableDatasetView, ensuring consistent visual behavior with the green highlight disabled.

weave-js/src/components/PagePanelComponents/Home/Browse3/datasets/EditableDatasetView.tsx (7)

49-49: Interfaces look good.
No issues found with the definition of DatasetObjectVal. The fields are clearly labeled and match the dataset conceptual model.


63-64: Optional props naming is consistent.
Adding hideIdColumn and disableNewRowHighlight as optional props is logical. The naming is consistent with existing props like hideRemoveForAddedRows.


73-79: Default prop values are reasonable.
Providing default values for hideIdColumn and disableNewRowHighlight ensures predictable behavior when these props are omitted.


341-345: Base columns creation logic is straightforward.
This separation of base columns from field columns makes the implementation easier to maintain.


345-390: Conditional ID column logic is clear.
Only rendering the ID column if hideIdColumn is false is an effective way to keep the component flexible. The code for highlighting and styling rows (deleted, new, etc.) is understandable and matches the expected UI behavior.


392-414: Controls column logic is well-structured.
Conditionally rendering the controls column for editing scenarios is clean. Passing disableNewRowHighlight to ControlCell is a good approach for consistent styling control.


490-491: Dependency array updated correctly.
Including hideIdColumn and disableNewRowHighlight ensures the memoized columns re-render when these props change.

weave-js/src/components/PagePanelComponents/Home/Browse3/datasets/CreateDatasetDrawerContext.tsx (3)

1-16: Context approach looks solid.
Defining a dedicated context for managing dataset creation state is clean and modular. The action constants and initial state are straightforward.


109-122: Provider composition is intuitive.
The outer DatasetEditProvider wrapping the inner CreateDatasetProviderInner simplifies the logic flow. This layered context approach clearly separates responsibilities.


214-235: Publish flow is functioning, but double-check error paths.
handlePublishDataset dispatches a reset immediately after calling onPublishDataset. If onPublishDataset can fail or is async, ensure that the state reset won’t obscure errors. If it’s always synchronous and guaranteed, this is fine.

weave-js/src/components/PagePanelComponents/Home/Browse3/pages/DatasetsPage/DatasetsPage.tsx (4)

10-16: Imports for toast notifications and new dataset functionality are appropriate.
The file now integrates toast-based notifications with create/publish actions, indicating a well-structured user feedback mechanism.


34-45: Local state management for dataset drawer is clear.
isCreateDrawerOpen and isCreatingDataset provide a straightforward approach to controlling the drawer’s visibility and the creation process.


73-79: Drawer open/close actions.
Straightforward logic to open and close the create drawer. No issues found.


155-155: Read-only logic is consistent.
Disabling dataset creation for users not in userInfo?.teams.includes(entity) is a valid approach. Confirm that admins can still override if needed.

weave-js/src/components/PagePanelComponents/Home/Browse3/datasets/csvUtils.ts (4)

1-8: Interfaces for parsed column data are helpful.
Defining explicit interfaces for ParsedColumn and ParseResult clarifies the CSV structure and reduces confusion in other modules.


21-64: Type detection logic is comprehensive.
The detectDataType function covers various edge cases, including Infinity and boolean-like strings.


66-134: Column analysis is robust.
Checking up to 100 non-null values is a good strategy. Thorough approach for potential boolean columns.


137-203: Type casting handles typical CSV conversions.
Covers null, boolean, numeric, date, and string conversions well. The switch approach is clear. The static analysis warnings about scoping are likely false positives (no fall-through).

🧰 Tools
🪛 Biome (1.9.4)

[error] 156-156: Other switch clauses can erroneously access this declaration.
Wrap the declaration in a block to restrict its access to the switch clause.

The declaration is defined in this switch clause:

Unsafe fix: Wrap the declaration in a block.

(lint/correctness/noSwitchDeclarations)


[error] 194-194: Other switch clauses can erroneously access this declaration.
Wrap the declaration in a block to restrict its access to the switch clause.

The declaration is defined in this switch clause:

Unsafe fix: Wrap the declaration in a block.

(lint/correctness/noSwitchDeclarations)


[error] 198-198: Useless case clause.

because the default clause is present:

Unsafe fix: Remove the useless case.

(lint/complexity/noUselessSwitchCase)

@bcsherma bcsherma force-pushed the datset-csv-upload branch from 2d09122 to fae70f2 Compare March 6, 2025 18:56
Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🧹 Nitpick comments (7)
weave-js/src/components/PagePanelComponents/Home/Browse3/datasets/__tests__/csvUtils.test.ts (3)

3-42: Comprehensive coverage of detectDataType
Good job ensuring coverage for various data types (null, number, boolean, date, string). As a nitpick, consider adding test cases for inputs that have leading/trailing whitespace (e.g., ' true ', ' 123 '), to confirm they’re detected appropriately.


44-91: Thorough analyzeColumns tests
The tests accurately verify handling of empty data, mixed types, and date columns. For completeness, you might add a scenario where numeric columns contain currency symbols or special characters (e.g., '$100'), ensuring the function degrades gracefully.


93-167: parseCSV test suite looks robust
You’ve covered empty data, missing values, different delimiters, and malformed CSV. As an additional good-to-have, consider adding test cases for multiline fields or quoted fields that contain the delimiter to ensure the parser behaves correctly in these edge cases.

weave-js/src/components/PagePanelComponents/Home/Browse3/datasets/CreateDatasetDrawer.tsx (1)

147-389: Consider splitting UI into smaller components
The main return statement is quite large, handling uploads, layout, and dataset editing. As a good-to-have refactor, extract the drag-and-drop section or the dataset editing area into separate components to enhance readability and maintainability.

weave-js/src/components/PagePanelComponents/Home/Browse3/datasets/CreateDatasetDrawerContext.tsx (1)

131-205: CSV parsing logic handles errors appropriately.

The parseCSVFile function includes proper error handling and state management during the CSV parsing process. However, there's an opportunity for optimization.

The state.datasetName dependency in the useCallback's dependency array (line 204) could cause unnecessary re-renders if the dataset name changes frequently. Since you're only accessing this value within the function body and it's not used in any closure, you could remove it from the dependency array and access it from state directly:

-  }, [dispatch, state.datasetName, editorContext]
+  }, [dispatch, editorContext]
weave-js/src/components/PagePanelComponents/Home/Browse3/pages/DatasetsPage/DatasetsPage.tsx (1)

81-146: Dataset saving logic could be extracted to improve maintainability.

The handleSaveDataset function contains significant logic for parsing, creating, and handling errors for dataset operations.

Consider extracting the dataset creation logic to a separate utility function to improve separation of concerns and testability:

// Extract to a separate utility function
const createAndNotifyDataset = async (dataset: any, params: {
  entity: string;
  project: string;
  tableCreate: any;
  objCreate: any;
  router: any;
}) => {
  const isPublish = dataset.publishNow === true;
  
  // Parse the rows from string back to array if provided as a string
  const rows = typeof dataset.rows === 'string' ? JSON.parse(dataset.rows) : dataset.rows;
  
  try {
    // Create the dataset using the actual API function
    const result = await createNewDataset({
      projectId: `${params.entity}/${params.project}`,
      entity: params.entity,
      project: params.project,
      datasetName: dataset.name,
      rows,
      tableCreate: params.tableCreate,
      objCreate: params.objCreate,
      router: params.router,
    });
    
    // Show success message with link to the new dataset
    toast(
      <DatasetPublishToast
        message={isPublish ? 'Dataset published successfully!' : 'Dataset created successfully!'}
        url={result.url}
      />,
      {
        position: 'top-right',
        autoClose: 5000,
        hideProgressBar: true,
        closeOnClick: true,
        pauseOnHover: true,
      }
    );
    
    return result;
  } catch (error: any) {
    console.error(`Failed to ${isPublish ? 'publish' : 'create'} dataset:`, error);
    toast.error(`Failed to ${isPublish ? 'publish' : 'create'} dataset: ${error.message}`);
    throw error;
  }
};

This would simplify the component code and improve testability.

weave-js/src/components/PagePanelComponents/Home/Browse3/datasets/csvUtils.ts (1)

197-201: Redundant case clause.

The 'null' case is followed by a 'string' case and default that both return String(value), making the string case redundant.

You can simplify by removing the redundant case:

case 'null':
  return null;
-case 'string':
default:
  return String(value);
🧰 Tools
🪛 Biome (1.9.4)

[error] 198-198: Useless case clause.

because the default clause is present:

Unsafe fix: Remove the useless case.

(lint/complexity/noUselessSwitchCase)

📜 Review details

Configuration used: .coderabbit.yaml
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 2d09122 and fae70f2.

⛔ Files ignored due to path filters (1)
  • weave-js/yarn.lock is excluded by !**/yarn.lock, !**/*.lock
📒 Files selected for processing (12)
  • weave-js/package.json (2 hunks)
  • weave-js/src/components/PagePanelComponents/Home/Browse3/datasets/CellRenderers.tsx (7 hunks)
  • weave-js/src/components/PagePanelComponents/Home/Browse3/datasets/CreateDatasetDrawer.tsx (1 hunks)
  • weave-js/src/components/PagePanelComponents/Home/Browse3/datasets/CreateDatasetDrawerContext.tsx (1 hunks)
  • weave-js/src/components/PagePanelComponents/Home/Browse3/datasets/DatasetPublishToast.tsx (1 hunks)
  • weave-js/src/components/PagePanelComponents/Home/Browse3/datasets/EditableDatasetView.tsx (8 hunks)
  • weave-js/src/components/PagePanelComponents/Home/Browse3/datasets/SelectDatasetStep.tsx (2 hunks)
  • weave-js/src/components/PagePanelComponents/Home/Browse3/datasets/__tests__/csvUtils.test.ts (1 hunks)
  • weave-js/src/components/PagePanelComponents/Home/Browse3/datasets/csvUtils.ts (1 hunks)
  • weave-js/src/components/PagePanelComponents/Home/Browse3/datasets/datasetNameValidation.ts (1 hunks)
  • weave-js/src/components/PagePanelComponents/Home/Browse3/pages/DatasetsPage/DatasetsPage.tsx (6 hunks)
  • weave-js/src/components/PagePanelComponents/Home/Browse3/pages/common/ResizableDrawer.tsx (1 hunks)
🚧 Files skipped from review as they are similar to previous changes (5)
  • weave-js/src/components/PagePanelComponents/Home/Browse3/pages/common/ResizableDrawer.tsx
  • weave-js/src/components/PagePanelComponents/Home/Browse3/datasets/DatasetPublishToast.tsx
  • weave-js/package.json
  • weave-js/src/components/PagePanelComponents/Home/Browse3/datasets/SelectDatasetStep.tsx
  • weave-js/src/components/PagePanelComponents/Home/Browse3/datasets/datasetNameValidation.ts
🧰 Additional context used
📓 Path-based instructions (1)
`**/*.{js,jsx,ts,tsx}`: Focus on architectural and logical i...

**/*.{js,jsx,ts,tsx}: Focus on architectural and logical issues rather than style (assuming ESLint is in place).
Flag potential memory leaks and performance bottlenecks.
Check for proper error handling and async/await usage.
Avoid strict enforcement of try/catch blocks - accept Promise chains, early returns, and other clear error handling patterns. These are acceptable as long as they maintain clarity and predictability.
Ensure proper type usage in TypeScript files.
Look for security vulnerabilities in data handling.
Don't comment on formatting if prettier is configured.
Verify proper React hooks usage and component lifecycle.
Check for proper state management patterns.

  • weave-js/src/components/PagePanelComponents/Home/Browse3/datasets/__tests__/csvUtils.test.ts
  • weave-js/src/components/PagePanelComponents/Home/Browse3/datasets/CellRenderers.tsx
  • weave-js/src/components/PagePanelComponents/Home/Browse3/datasets/EditableDatasetView.tsx
  • weave-js/src/components/PagePanelComponents/Home/Browse3/datasets/CreateDatasetDrawer.tsx
  • weave-js/src/components/PagePanelComponents/Home/Browse3/pages/DatasetsPage/DatasetsPage.tsx
  • weave-js/src/components/PagePanelComponents/Home/Browse3/datasets/CreateDatasetDrawerContext.tsx
  • weave-js/src/components/PagePanelComponents/Home/Browse3/datasets/csvUtils.ts
🪛 Biome (1.9.4)
weave-js/src/components/PagePanelComponents/Home/Browse3/datasets/csvUtils.ts

[error] 156-156: Other switch clauses can erroneously access this declaration.
Wrap the declaration in a block to restrict its access to the switch clause.

The declaration is defined in this switch clause:

Unsafe fix: Wrap the declaration in a block.

(lint/correctness/noSwitchDeclarations)


[error] 194-194: Other switch clauses can erroneously access this declaration.
Wrap the declaration in a block to restrict its access to the switch clause.

The declaration is defined in this switch clause:

Unsafe fix: Wrap the declaration in a block.

(lint/correctness/noSwitchDeclarations)


[error] 198-198: Useless case clause.

because the default clause is present:

Unsafe fix: Remove the useless case.

(lint/complexity/noUselessSwitchCase)

⏰ Context from checks skipped due to timeout of 90000ms (887)
  • GitHub Check: WeaveJS Lint and Compile
  • GitHub Check: Trace nox tests (3, 13, pandas-test)
  • GitHub Check: Trace nox tests (3, 13, scorers)
  • GitHub Check: Trace nox tests (3, 13, vertexai)
  • GitHub Check: Trace nox tests (3, 13, openai)
  • GitHub Check: Trace nox tests (3, 13, notdiamond)
  • GitHub Check: Trace nox tests (3, 13, mistral1)
  • GitHub Check: Trace nox tests (3, 13, mistral0)
  • GitHub Check: Trace nox tests (3, 13, llamaindex)
  • GitHub Check: Trace nox tests (3, 13, langchain)
  • GitHub Check: Trace nox tests (3, 13, instructor)
  • GitHub Check: Trace nox tests (3, 13, google_ai_studio)
  • GitHub Check: Trace nox tests (3, 13, huggingface)
  • GitHub Check: Trace nox tests (3, 13, groq)
  • GitHub Check: Trace nox tests (3, 13, dspy)
  • GitHub Check: Trace nox tests (3, 13, cerebras)
  • GitHub Check: Trace nox tests (3, 13, bedrock)
  • GitHub Check: Trace nox tests (3, 13, anthropic)
  • GitHub Check: Trace nox tests (3, 13, trace_server)
  • GitHub Check: Trace nox tests (3, 13, trace)
  • GitHub Check: Trace nox tests (3, 12, pandas-test)
  • GitHub Check: Trace nox tests (3, 12, scorers)
  • GitHub Check: Trace nox tests (3, 12, vertexai)
  • GitHub Check: Trace nox tests (3, 12, openai)
  • GitHub Check: Trace nox tests (3, 12, notdiamond)
  • GitHub Check: Trace nox tests (3, 12, mistral1)
  • GitHub Check: Trace nox tests (3, 12, mistral0)
  • GitHub Check: Trace nox tests (3, 12, llamaindex)
  • GitHub Check: Trace nox tests (3, 12, litellm)
  • GitHub Check: Trace nox tests (3, 12, langchain)
  • GitHub Check: Trace nox tests (3, 12, instructor)
  • GitHub Check: Trace nox tests (3, 12, google_ai_studio)
  • GitHub Check: Trace nox tests (3, 12, huggingface)
  • GitHub Check: Trace nox tests (3, 12, groq)
  • GitHub Check: Trace nox tests (3, 12, dspy)
  • GitHub Check: Trace nox tests (3, 12, cohere)
  • GitHub Check: Trace nox tests (3, 12, cerebras)
  • GitHub Check: Trace nox tests (3, 12, bedrock)
  • GitHub Check: Trace nox tests (3, 12, anthropic)
  • GitHub Check: Trace nox tests (3, 12, trace_server)
  • GitHub Check: Trace nox tests (3, 12, trace)
  • GitHub Check: Trace nox tests (3, 11, pandas-test)
  • GitHub Check: Trace nox tests (3, 11, scorers)
  • GitHub Check: Trace nox tests (3, 11, vertexai)
  • GitHub Check: Trace nox tests (3, 11, openai)
  • GitHub Check: Trace nox tests (3, 11, notdiamond)
  • GitHub Check: Trace nox tests (3, 11, mistral1)
  • GitHub Check: Trace nox tests (3, 11, mistral0)
  • GitHub Check: Trace nox tests (3, 11, llamaindex)
  • GitHub Check: Trace nox tests (3, 11, litellm)
  • GitHub Check: Trace nox tests (3, 11, langchain)
  • GitHub Check: Trace nox tests (3, 11, instructor)
  • GitHub Check: Trace nox tests (3, 11, google_ai_studio)
  • GitHub Check: Trace nox tests (3, 11, huggingface)
  • GitHub Check: Trace nox tests (3, 11, groq)
  • GitHub Check: Trace nox tests (3, 11, dspy)
  • GitHub Check: Trace nox tests (3, 11, cohere)
  • GitHub Check: Trace nox tests (3, 11, cerebras)
  • GitHub Check: Trace nox tests (3, 11, bedrock)
  • GitHub Check: Trace nox tests (3, 11, anthropic)
  • GitHub Check: Trace nox tests (3, 11, trace_server)
  • GitHub Check: Trace nox tests (3, 11, trace)
  • GitHub Check: Trace nox tests (3, 10, pandas-test)
  • GitHub Check: Trace nox tests (3, 10, scorers)
  • GitHub Check: Trace nox tests (3, 10, vertexai)
  • GitHub Check: Trace nox tests (3, 10, openai)
  • GitHub Check: Trace nox tests (3, 10, notdiamond)
  • GitHub Check: Trace nox tests (3, 10, mistral1)
  • GitHub Check: Trace nox tests (3, 10, mistral0)
  • GitHub Check: Trace nox tests (3, 10, llamaindex)
  • GitHub Check: Trace nox tests (3, 10, litellm)
  • GitHub Check: Trace nox tests (3, 10, langchain)
  • GitHub Check: Trace nox tests (3, 10, instructor)
  • GitHub Check: Trace nox tests (3, 10, google_ai_studio)
  • GitHub Check: Trace nox tests (3, 10, huggingface)
  • GitHub Check: Trace nox tests (3, 10, groq)
  • GitHub Check: Trace nox tests (3, 10, dspy)
  • GitHub Check: Trace nox tests (3, 10, cohere)
  • GitHub Check: Trace nox tests (3, 10, cerebras)
  • GitHub Check: Trace nox tests (3, 10, bedrock)
  • GitHub Check: Trace nox tests (3, 10, anthropic)
  • GitHub Check: Trace nox tests (3, 10, trace_server)
  • GitHub Check: Trace nox tests (3, 10, trace)
  • GitHub Check: Trace nox tests (3, 9, pandas-test)
  • GitHub Check: Trace nox tests (3, 9, scorers)
  • GitHub Check: Trace nox tests (3, 9, vertexai)
  • GitHub Check: Trace nox tests (3, 9, openai)
  • GitHub Check: Trace nox tests (3, 9, notdiamond)
  • GitHub Check: Trace nox tests (3, 9, mistral1)
  • GitHub Check: Trace nox tests (3, 9, mistral0)
  • GitHub Check: Trace nox tests (3, 9, llamaindex)
  • GitHub Check: Trace nox tests (3, 9, litellm)
  • GitHub Check: Trace nox tests (3, 9, langchain)
  • GitHub Check: WeaveJS Lint and Compile
  • GitHub Check: Trace nox tests (3, 13, pandas-test)
  • GitHub Check: Trace nox tests (3, 13, vertexai)
  • GitHub Check: Trace nox tests (3, 13, openai)
  • GitHub Check: Trace nox tests (3, 13, notdiamond)
  • GitHub Check: Trace nox tests (3, 13, mistral1)
  • GitHub Check: Trace nox tests (3, 13, mistral0)
  • GitHub Check: Trace nox tests (3, 13, llamaindex)
  • GitHub Check: Trace nox tests (3, 13, langchain)
  • GitHub Check: Trace nox tests (3, 13, instructor)
  • GitHub Check: Trace nox tests (3, 13, google_ai_studio)
  • GitHub Check: Trace nox tests (3, 13, huggingface)
  • GitHub Check: Trace nox tests (3, 13, groq)
  • GitHub Check: Trace nox tests (3, 13, dspy)
  • GitHub Check: Trace nox tests (3, 13, cerebras)
  • GitHub Check: Trace nox tests (3, 13, bedrock)
  • GitHub Check: Trace nox tests (3, 13, anthropic)
  • GitHub Check: Trace nox tests (3, 13, trace_server)
  • GitHub Check: Trace nox tests (3, 13, trace)
  • GitHub Check: Trace nox tests (3, 12, pandas-test)
  • GitHub Check: Trace nox tests (3, 12, scorers)
  • GitHub Check: Trace nox tests (3, 12, vertexai)
  • GitHub Check: Trace nox tests (3, 12, openai)
  • GitHub Check: Trace nox tests (3, 12, notdiamond)
  • GitHub Check: Trace nox tests (3, 12, mistral1)
  • GitHub Check: Trace nox tests (3, 12, mistral0)
  • GitHub Check: Trace nox tests (3, 12, llamaindex)
  • GitHub Check: Trace nox tests (3, 12, litellm)
  • GitHub Check: Trace nox tests (3, 12, langchain)
  • GitHub Check: Trace nox tests (3, 12, instructor)
  • GitHub Check: Trace nox tests (3, 12, google_ai_studio)
  • GitHub Check: Trace nox tests (3, 12, huggingface)
  • GitHub Check: Trace nox tests (3, 12, groq)
  • GitHub Check: Trace nox tests (3, 12, dspy)
  • GitHub Check: Trace nox tests (3, 12, cohere)
  • GitHub Check: Trace nox tests (3, 12, cerebras)
  • GitHub Check: Trace nox tests (3, 12, bedrock)
  • GitHub Check: Trace nox tests (3, 12, anthropic)
  • GitHub Check: Trace nox tests (3, 12, trace_server)
  • GitHub Check: Trace nox tests (3, 12, trace)
  • GitHub Check: Trace nox tests (3, 11, pandas-test)
  • GitHub Check: Trace nox tests (3, 11, scorers)
  • GitHub Check: Trace nox tests (3, 11, vertexai)
  • GitHub Check: Trace nox tests (3, 11, openai)
  • GitHub Check: Trace nox tests (3, 11, notdiamond)
  • GitHub Check: Trace nox tests (3, 11, mistral1)
  • GitHub Check: Trace nox tests (3, 11, mistral0)
  • GitHub Check: Trace nox tests (3, 11, llamaindex)
  • GitHub Check: Trace nox tests (3, 11, litellm)
  • GitHub Check: Trace nox tests (3, 11, langchain)
  • GitHub Check: Trace nox tests (3, 11, instructor)
  • GitHub Check: Trace nox tests (3, 11, google_ai_studio)
  • GitHub Check: Trace nox tests (3, 11, huggingface)
  • GitHub Check: Trace nox tests (3, 11, groq)
  • GitHub Check: Trace nox tests (3, 11, dspy)
  • GitHub Check: Trace nox tests (3, 11, cohere)
  • GitHub Check: Trace nox tests (3, 11, cerebras)
  • GitHub Check: Trace nox tests (3, 11, bedrock)
  • GitHub Check: Trace nox tests (3, 11, anthropic)
  • GitHub Check: Trace nox tests (3, 11, trace_server)
  • GitHub Check: Trace nox tests (3, 11, trace)
  • GitHub Check: Trace nox tests (3, 10, pandas-test)
  • GitHub Check: Trace nox tests (3, 10, scorers)
  • GitHub Check: Trace nox tests (3, 10, vertexai)
  • GitHub Check: Trace nox tests (3, 10, openai)
  • GitHub Check: Trace nox tests (3, 10, notdiamond)
  • GitHub Check: Trace nox tests (3, 10, mistral1)
  • GitHub Check: Trace nox tests (3, 10, mistral0)
  • GitHub Check: Trace nox tests (3, 10, llamaindex)
  • GitHub Check: Trace nox tests (3, 10, litellm)
  • GitHub Check: Trace nox tests (3, 10, langchain)
  • GitHub Check: Trace nox tests (3, 10, instructor)
  • GitHub Check: Trace nox tests (3, 10, google_ai_studio)
  • GitHub Check: Trace nox tests (3, 10, huggingface)
  • GitHub Check: Trace nox tests (3, 10, groq)
  • GitHub Check: Trace nox tests (3, 10, dspy)
  • GitHub Check: Trace nox tests (3, 10, cohere)
  • GitHub Check: Trace nox tests (3, 10, cerebras)
  • GitHub Check: Trace nox tests (3, 10, bedrock)
  • GitHub Check: Trace nox tests (3, 10, anthropic)
  • GitHub Check: Trace nox tests (3, 10, trace_server)
  • GitHub Check: Trace nox tests (3, 10, trace)
  • GitHub Check: Trace nox tests (3, 9, pandas-test)
  • GitHub Check: Trace nox tests (3, 9, scorers)
  • GitHub Check: Trace nox tests (3, 9, vertexai)
  • GitHub Check: Trace nox tests (3, 9, openai)
  • GitHub Check: Trace nox tests (3, 9, notdiamond)
  • GitHub Check: Trace nox tests (3, 9, mistral1)
  • GitHub Check: Trace nox tests (3, 9, mistral0)
  • GitHub Check: Trace nox tests (3, 9, llamaindex)
  • GitHub Check: Trace nox tests (3, 9, litellm)
  • GitHub Check: Trace nox tests (3, 9, langchain)
  • GitHub Check: WeaveJS Lint and Compile
  • GitHub Check: Trace nox tests (3, 13, pandas-test)
  • GitHub Check: Trace nox tests (3, 13, vertexai)
  • GitHub Check: Trace nox tests (3, 13, openai)
  • GitHub Check: Trace nox tests (3, 13, notdiamond)
  • GitHub Check: Trace nox tests (3, 13, mistral1)
  • GitHub Check: Trace nox tests (3, 13, mistral0)
  • GitHub Check: Trace nox tests (3, 13, llamaindex)
  • GitHub Check: Trace nox tests (3, 13, instructor)
  • GitHub Check: Trace nox tests (3, 13, google_ai_studio)
  • GitHub Check: Trace nox tests (3, 13, huggingface)
  • GitHub Check: Trace nox tests (3, 13, groq)
  • GitHub Check: Trace nox tests (3, 13, dspy)
  • GitHub Check: Trace nox tests (3, 13, cerebras)
  • GitHub Check: Trace nox tests (3, 13, bedrock)
  • GitHub Check: Trace nox tests (3, 13, trace_server)
  • GitHub Check: Trace nox tests (3, 13, trace)
  • GitHub Check: Trace nox tests (3, 12, pandas-test)
  • GitHub Check: Trace nox tests (3, 12, scorers)
  • GitHub Check: Trace nox tests (3, 12, vertexai)
  • GitHub Check: Trace nox tests (3, 12, openai)
  • GitHub Check: Trace nox tests (3, 12, notdiamond)
  • GitHub Check: Trace nox tests (3, 12, mistral1)
  • GitHub Check: Trace nox tests (3, 12, mistral0)
  • GitHub Check: Trace nox tests (3, 12, llamaindex)
  • GitHub Check: Trace nox tests (3, 12, litellm)
  • GitHub Check: Trace nox tests (3, 12, langchain)
  • GitHub Check: Trace nox tests (3, 12, instructor)
  • GitHub Check: Trace nox tests (3, 12, google_ai_studio)
  • GitHub Check: Trace nox tests (3, 12, huggingface)
  • GitHub Check: Trace nox tests (3, 12, groq)
  • GitHub Check: Trace nox tests (3, 12, dspy)
  • GitHub Check: Trace nox tests (3, 12, cohere)
  • GitHub Check: Trace nox tests (3, 12, cerebras)
  • GitHub Check: Trace nox tests (3, 12, bedrock)
  • GitHub Check: Trace nox tests (3, 12, anthropic)
  • GitHub Check: Trace nox tests (3, 12, trace_server)
  • GitHub Check: Trace nox tests (3, 12, trace)
  • GitHub Check: Trace nox tests (3, 11, pandas-test)
  • GitHub Check: Trace nox tests (3, 11, scorers)
  • GitHub Check: Trace nox tests (3, 11, vertexai)
  • GitHub Check: Trace nox tests (3, 11, openai)
  • GitHub Check: Trace nox tests (3, 11, notdiamond)
  • GitHub Check: Trace nox tests (3, 11, mistral1)
  • GitHub Check: Trace nox tests (3, 11, mistral0)
  • GitHub Check: Trace nox tests (3, 11, llamaindex)
  • GitHub Check: Trace nox tests (3, 11, litellm)
  • GitHub Check: Trace nox tests (3, 11, langchain)
  • GitHub Check: Trace nox tests (3, 11, instructor)
  • GitHub Check: Trace nox tests (3, 11, google_ai_studio)
  • GitHub Check: Trace nox tests (3, 11, huggingface)
  • GitHub Check: Trace nox tests (3, 11, groq)
  • GitHub Check: Trace nox tests (3, 11, dspy)
  • GitHub Check: Trace nox tests (3, 11, cohere)
  • GitHub Check: Trace nox tests (3, 11, cerebras)
  • GitHub Check: Trace nox tests (3, 11, bedrock)
  • GitHub Check: Trace nox tests (3, 11, anthropic)
  • GitHub Check: Trace nox tests (3, 11, trace_server)
  • GitHub Check: Trace nox tests (3, 11, trace)
  • GitHub Check: Trace nox tests (3, 10, pandas-test)
  • GitHub Check: Trace nox tests (3, 10, scorers)
  • GitHub Check: Trace nox tests (3, 10, vertexai)
  • GitHub Check: Trace nox tests (3, 10, openai)
  • GitHub Check: Trace nox tests (3, 10, notdiamond)
  • GitHub Check: Trace nox tests (3, 10, mistral1)
  • GitHub Check: Trace nox tests (3, 10, mistral0)
  • GitHub Check: Trace nox tests (3, 10, llamaindex)
  • GitHub Check: Trace nox tests (3, 10, litellm)
  • GitHub Check: Trace nox tests (3, 10, langchain)
  • GitHub Check: Trace nox tests (3, 10, instructor)
  • GitHub Check: Trace nox tests (3, 10, google_ai_studio)
  • GitHub Check: Trace nox tests (3, 10, huggingface)
  • GitHub Check: Trace nox tests (3, 10, groq)
  • GitHub Check: Trace nox tests (3, 10, dspy)
  • GitHub Check: Trace nox tests (3, 10, cohere)
  • GitHub Check: Trace nox tests (3, 10, cerebras)
  • GitHub Check: Trace nox tests (3, 10, bedrock)
  • GitHub Check: Trace nox tests (3, 10, anthropic)
  • GitHub Check: Trace nox tests (3, 10, trace_server)
  • GitHub Check: Trace nox tests (3, 10, trace)
  • GitHub Check: Trace nox tests (3, 9, pandas-test)
  • GitHub Check: Trace nox tests (3, 9, scorers)
  • GitHub Check: Trace nox tests (3, 9, vertexai)
  • GitHub Check: Trace nox tests (3, 9, openai)
  • GitHub Check: Trace nox tests (3, 9, notdiamond)
  • GitHub Check: Trace nox tests (3, 9, mistral1)
  • GitHub Check: Trace nox tests (3, 9, mistral0)
  • GitHub Check: Trace nox tests (3, 9, llamaindex)
  • GitHub Check: Trace nox tests (3, 9, litellm)
  • GitHub Check: Trace nox tests (3, 9, langchain)
  • GitHub Check: test-query-service-matrix-check
  • GitHub Check: WeaveJS Lint and Compile
  • GitHub Check: Trace nox tests (3, 13, pandas-test)
  • GitHub Check: Trace nox tests (3, 13, vertexai)
  • GitHub Check: Trace nox tests (3, 13, openai)
  • GitHub Check: Trace nox tests (3, 13, notdiamond)
  • GitHub Check: Trace nox tests (3, 13, mistral1)
  • GitHub Check: Trace nox tests (3, 13, mistral0)
  • GitHub Check: Trace nox tests (3, 13, llamaindex)
  • GitHub Check: Trace nox tests (3, 13, instructor)
  • GitHub Check: Trace nox tests (3, 13, huggingface)
  • GitHub Check: Trace nox tests (3, 13, groq)
  • GitHub Check: Trace nox tests (3, 13, dspy)
  • GitHub Check: Trace nox tests (3, 13, cerebras)
  • GitHub Check: Trace nox tests (3, 13, trace_server)
  • GitHub Check: Trace nox tests (3, 13, trace)
  • GitHub Check: Trace nox tests (3, 12, pandas-test)
  • GitHub Check: Trace nox tests (3, 12, scorers)
  • GitHub Check: Trace nox tests (3, 12, vertexai)
  • GitHub Check: Trace nox tests (3, 12, openai)
  • GitHub Check: Trace nox tests (3, 12, notdiamond)
  • GitHub Check: Trace nox tests (3, 12, mistral1)
  • GitHub Check: Trace nox tests (3, 12, mistral0)
  • GitHub Check: Trace nox tests (3, 12, llamaindex)
  • GitHub Check: Trace nox tests (3, 12, litellm)
  • GitHub Check: Trace nox tests (3, 12, langchain)
  • GitHub Check: Trace nox tests (3, 12, instructor)
  • GitHub Check: Trace nox tests (3, 12, google_ai_studio)
  • GitHub Check: Trace nox tests (3, 12, huggingface)
  • GitHub Check: Trace nox tests (3, 12, groq)
  • GitHub Check: Trace nox tests (3, 12, dspy)
  • GitHub Check: Trace nox tests (3, 12, cohere)
  • GitHub Check: Trace nox tests (3, 12, cerebras)
  • GitHub Check: Trace nox tests (3, 12, bedrock)
  • GitHub Check: Trace nox tests (3, 12, anthropic)
  • GitHub Check: Trace nox tests (3, 12, trace_server)
  • GitHub Check: Trace nox tests (3, 12, trace)
  • GitHub Check: Trace nox tests (3, 11, pandas-test)
  • GitHub Check: Trace nox tests (3, 11, scorers)
  • GitHub Check: Trace nox tests (3, 11, vertexai)
  • GitHub Check: Trace nox tests (3, 11, openai)
  • GitHub Check: Trace nox tests (3, 11, notdiamond)
  • GitHub Check: Trace nox tests (3, 11, mistral1)
  • GitHub Check: Trace nox tests (3, 11, mistral0)
  • GitHub Check: Trace nox tests (3, 11, llamaindex)
  • GitHub Check: Trace nox tests (3, 11, litellm)
  • GitHub Check: Trace nox tests (3, 11, langchain)
  • GitHub Check: Trace nox tests (3, 11, instructor)
  • GitHub Check: Trace nox tests (3, 11, google_ai_studio)
  • GitHub Check: Trace nox tests (3, 11, huggingface)
  • GitHub Check: Trace nox tests (3, 11, groq)
  • GitHub Check: Trace nox tests (3, 11, dspy)
  • GitHub Check: Trace nox tests (3, 11, cohere)
  • GitHub Check: Trace nox tests (3, 11, cerebras)
  • GitHub Check: Trace nox tests (3, 11, bedrock)
  • GitHub Check: Trace nox tests (3, 11, anthropic)
  • GitHub Check: Trace nox tests (3, 11, trace_server)
  • GitHub Check: Trace nox tests (3, 11, trace)
  • GitHub Check: Trace nox tests (3, 10, pandas-test)
  • GitHub Check: Trace nox tests (3, 10, scorers)
  • GitHub Check: Trace nox tests (3, 10, vertexai)
  • GitHub Check: Trace nox tests (3, 10, openai)
  • GitHub Check: Trace nox tests (3, 10, notdiamond)
  • GitHub Check: Trace nox tests (3, 10, mistral1)
  • GitHub Check: Trace nox tests (3, 10, mistral0)
  • GitHub Check: Trace nox tests (3, 10, llamaindex)
  • GitHub Check: Trace nox tests (3, 10, litellm)
  • GitHub Check: Trace nox tests (3, 10, langchain)
  • GitHub Check: Trace nox tests (3, 10, instructor)
  • GitHub Check: Trace nox tests (3, 10, google_ai_studio)
  • GitHub Check: Trace nox tests (3, 10, huggingface)
  • GitHub Check: Trace nox tests (3, 10, groq)
  • GitHub Check: Trace nox tests (3, 10, dspy)
  • GitHub Check: Trace nox tests (3, 10, cohere)
  • GitHub Check: Trace nox tests (3, 10, cerebras)
  • GitHub Check: Trace nox tests (3, 10, bedrock)
  • GitHub Check: Trace nox tests (3, 10, anthropic)
  • GitHub Check: Trace nox tests (3, 10, trace_server)
  • GitHub Check: Trace nox tests (3, 10, trace)
  • GitHub Check: Trace nox tests (3, 9, pandas-test)
  • GitHub Check: Trace nox tests (3, 9, scorers)
  • GitHub Check: Trace nox tests (3, 9, vertexai)
  • GitHub Check: Trace nox tests (3, 9, openai)
  • GitHub Check: Trace nox tests (3, 9, notdiamond)
  • GitHub Check: Trace nox tests (3, 9, mistral1)
  • GitHub Check: Trace nox tests (3, 9, mistral0)
  • GitHub Check: Trace nox tests (3, 9, llamaindex)
  • GitHub Check: Trace nox tests (3, 9, litellm)
  • GitHub Check: Trace nox tests (3, 9, langchain)
  • GitHub Check: test-query-service-matrix-check
  • GitHub Check: WeaveJS Lint and Compile
  • GitHub Check: Trace nox tests (3, 13, pandas-test)
  • GitHub Check: Trace nox tests (3, 13, vertexai)
  • GitHub Check: Trace nox tests (3, 13, openai)
  • GitHub Check: Trace nox tests (3, 13, notdiamond)
  • GitHub Check: Trace nox tests (3, 13, mistral1)
  • GitHub Check: Trace nox tests (3, 13, mistral0)
  • GitHub Check: Trace nox tests (3, 13, llamaindex)
  • GitHub Check: Trace nox tests (3, 13, instructor)
  • GitHub Check: Trace nox tests (3, 13, huggingface)
  • GitHub Check: Trace nox tests (3, 13, groq)
  • GitHub Check: Trace nox tests (3, 13, cerebras)
  • GitHub Check: Trace nox tests (3, 13, trace_server)
  • GitHub Check: Trace nox tests (3, 13, trace)
  • GitHub Check: Trace nox tests (3, 12, pandas-test)
  • GitHub Check: Trace nox tests (3, 12, scorers)
  • GitHub Check: Trace nox tests (3, 12, vertexai)
  • GitHub Check: Trace nox tests (3, 12, openai)
  • GitHub Check: Trace nox tests (3, 12, notdiamond)
  • GitHub Check: Trace nox tests (3, 12, mistral1)
  • GitHub Check: Trace nox tests (3, 12, mistral0)
  • GitHub Check: Trace nox tests (3, 12, llamaindex)
  • GitHub Check: Trace nox tests (3, 12, litellm)
  • GitHub Check: Trace nox tests (3, 12, langchain)
  • GitHub Check: Trace nox tests (3, 12, instructor)
  • GitHub Check: Trace nox tests (3, 12, google_ai_studio)
  • GitHub Check: Trace nox tests (3, 12, huggingface)
  • GitHub Check: Trace nox tests (3, 12, groq)
  • GitHub Check: Trace nox tests (3, 12, dspy)
  • GitHub Check: Trace nox tests (3, 12, cohere)
  • GitHub Check: Trace nox tests (3, 12, cerebras)
  • GitHub Check: Trace nox tests (3, 12, bedrock)
  • GitHub Check: Trace nox tests (3, 12, anthropic)
  • GitHub Check: Trace nox tests (3, 12, trace_server)
  • GitHub Check: Trace nox tests (3, 12, trace)
  • GitHub Check: Trace nox tests (3, 11, pandas-test)
  • GitHub Check: Trace nox tests (3, 11, scorers)
  • GitHub Check: Trace nox tests (3, 11, vertexai)
  • GitHub Check: Trace nox tests (3, 11, openai)
  • GitHub Check: Trace nox tests (3, 11, notdiamond)
  • GitHub Check: Trace nox tests (3, 11, mistral1)
  • GitHub Check: Trace nox tests (3, 11, mistral0)
  • GitHub Check: Trace nox tests (3, 11, llamaindex)
  • GitHub Check: Trace nox tests (3, 11, litellm)
  • GitHub Check: Trace nox tests (3, 11, langchain)
  • GitHub Check: Trace nox tests (3, 11, instructor)
  • GitHub Check: Trace nox tests (3, 11, google_ai_studio)
  • GitHub Check: Trace nox tests (3, 11, huggingface)
  • GitHub Check: Trace nox tests (3, 11, groq)
  • GitHub Check: Trace nox tests (3, 11, dspy)
  • GitHub Check: Trace nox tests (3, 11, cohere)
  • GitHub Check: Trace nox tests (3, 11, cerebras)
  • GitHub Check: Trace nox tests (3, 11, bedrock)
  • GitHub Check: Trace nox tests (3, 11, anthropic)
  • GitHub Check: Trace nox tests (3, 11, trace_server)
  • GitHub Check: Trace nox tests (3, 11, trace)
  • GitHub Check: Trace nox tests (3, 10, pandas-test)
  • GitHub Check: Trace nox tests (3, 10, scorers)
  • GitHub Check: Trace nox tests (3, 10, vertexai)
  • GitHub Check: Trace nox tests (3, 10, openai)
  • GitHub Check: Trace nox tests (3, 10, notdiamond)
  • GitHub Check: Trace nox tests (3, 10, mistral1)
  • GitHub Check: Trace nox tests (3, 10, mistral0)
  • GitHub Check: Trace nox tests (3, 10, llamaindex)
  • GitHub Check: Trace nox tests (3, 10, litellm)
  • GitHub Check: Trace nox tests (3, 10, langchain)
  • GitHub Check: Trace nox tests (3, 10, instructor)
  • GitHub Check: Trace nox tests (3, 10, google_ai_studio)
  • GitHub Check: Trace nox tests (3, 10, huggingface)
  • GitHub Check: Trace nox tests (3, 10, groq)
  • GitHub Check: Trace nox tests (3, 10, dspy)
  • GitHub Check: Trace nox tests (3, 10, cohere)
  • GitHub Check: Trace nox tests (3, 10, cerebras)
  • GitHub Check: Trace nox tests (3, 10, bedrock)
  • GitHub Check: Trace nox tests (3, 10, anthropic)
  • GitHub Check: Trace nox tests (3, 10, trace_server)
  • GitHub Check: Trace nox tests (3, 10, trace)
  • GitHub Check: Trace nox tests (3, 9, pandas-test)
  • GitHub Check: Trace nox tests (3, 9, scorers)
  • GitHub Check: Trace nox tests (3, 9, vertexai)
  • GitHub Check: Trace nox tests (3, 9, openai)
  • GitHub Check: Trace nox tests (3, 9, notdiamond)
  • GitHub Check: Trace nox tests (3, 9, mistral1)
  • GitHub Check: Trace nox tests (3, 9, mistral0)
  • GitHub Check: Trace nox tests (3, 9, llamaindex)
  • GitHub Check: Trace nox tests (3, 9, litellm)
  • GitHub Check: Trace nox tests (3, 9, langchain)
  • GitHub Check: WeaveJS Lint and Compile
  • GitHub Check: Trace nox tests (3, 13, pandas-test)
  • GitHub Check: Trace nox tests (3, 13, vertexai)
  • GitHub Check: Trace nox tests (3, 13, openai)
  • GitHub Check: Trace nox tests (3, 13, notdiamond)
  • GitHub Check: Trace nox tests (3, 13, mistral1)
  • GitHub Check: Trace nox tests (3, 13, mistral0)
  • GitHub Check: Trace nox tests (3, 13, llamaindex)
  • GitHub Check: Trace nox tests (3, 13, instructor)
  • GitHub Check: Trace nox tests (3, 13, huggingface)
  • GitHub Check: Trace nox tests (3, 13, groq)
  • GitHub Check: Trace nox tests (3, 13, cerebras)
  • GitHub Check: Trace nox tests (3, 13, trace_server)
  • GitHub Check: Trace nox tests (3, 13, trace)
  • GitHub Check: Trace nox tests (3, 12, pandas-test)
  • GitHub Check: Trace nox tests (3, 12, scorers)
  • GitHub Check: Trace nox tests (3, 12, vertexai)
  • GitHub Check: Trace nox tests (3, 12, openai)
  • GitHub Check: Trace nox tests (3, 12, notdiamond)
  • GitHub Check: Trace nox tests (3, 12, mistral1)
  • GitHub Check: Trace nox tests (3, 12, mistral0)
  • GitHub Check: Trace nox tests (3, 12, llamaindex)
  • GitHub Check: Trace nox tests (3, 12, litellm)
  • GitHub Check: Trace nox tests (3, 12, langchain)
  • GitHub Check: Trace nox tests (3, 12, instructor)
  • GitHub Check: Trace nox tests (3, 12, google_ai_studio)
  • GitHub Check: Trace nox tests (3, 12, huggingface)
  • GitHub Check: Trace nox tests (3, 12, groq)
  • GitHub Check: Trace nox tests (3, 12, dspy)
  • GitHub Check: Trace nox tests (3, 12, cohere)
  • GitHub Check: Trace nox tests (3, 12, cerebras)
  • GitHub Check: Trace nox tests (3, 12, bedrock)
  • GitHub Check: Trace nox tests (3, 12, anthropic)
  • GitHub Check: Trace nox tests (3, 12, trace_server)
  • GitHub Check: Trace nox tests (3, 12, trace)
  • GitHub Check: Trace nox tests (3, 11, pandas-test)
  • GitHub Check: Trace nox tests (3, 11, scorers)
  • GitHub Check: Trace nox tests (3, 11, vertexai)
  • GitHub Check: Trace nox tests (3, 11, openai)
  • GitHub Check: Trace nox tests (3, 11, notdiamond)
  • GitHub Check: Trace nox tests (3, 11, mistral1)
  • GitHub Check: Trace nox tests (3, 11, mistral0)
  • GitHub Check: Trace nox tests (3, 11, llamaindex)
  • GitHub Check: Trace nox tests (3, 11, litellm)
  • GitHub Check: Trace nox tests (3, 11, langchain)
  • GitHub Check: Trace nox tests (3, 11, instructor)
  • GitHub Check: Trace nox tests (3, 11, google_ai_studio)
  • GitHub Check: Trace nox tests (3, 11, huggingface)
  • GitHub Check: Trace nox tests (3, 11, groq)
  • GitHub Check: Trace nox tests (3, 11, dspy)
  • GitHub Check: Trace nox tests (3, 11, cohere)
  • GitHub Check: Trace nox tests (3, 11, cerebras)
  • GitHub Check: Trace nox tests (3, 11, bedrock)
  • GitHub Check: Trace nox tests (3, 11, anthropic)
  • GitHub Check: Trace nox tests (3, 11, trace_server)
  • GitHub Check: Trace nox tests (3, 11, trace)
  • GitHub Check: Trace nox tests (3, 10, pandas-test)
  • GitHub Check: Trace nox tests (3, 10, scorers)
  • GitHub Check: Trace nox tests (3, 10, vertexai)
  • GitHub Check: Trace nox tests (3, 10, openai)
  • GitHub Check: Trace nox tests (3, 10, notdiamond)
  • GitHub Check: Trace nox tests (3, 10, mistral1)
  • GitHub Check: Trace nox tests (3, 10, mistral0)
  • GitHub Check: Trace nox tests (3, 10, llamaindex)
  • GitHub Check: Trace nox tests (3, 10, litellm)
  • GitHub Check: Trace nox tests (3, 10, langchain)
  • GitHub Check: Trace nox tests (3, 10, instructor)
  • GitHub Check: Trace nox tests (3, 10, google_ai_studio)
  • GitHub Check: Trace nox tests (3, 10, huggingface)
  • GitHub Check: Trace nox tests (3, 10, groq)
  • GitHub Check: Trace nox tests (3, 10, dspy)
  • GitHub Check: Trace nox tests (3, 10, cohere)
  • GitHub Check: Trace nox tests (3, 10, cerebras)
  • GitHub Check: Trace nox tests (3, 10, bedrock)
  • GitHub Check: Trace nox tests (3, 10, anthropic)
  • GitHub Check: Trace nox tests (3, 10, trace_server)
  • GitHub Check: Trace nox tests (3, 10, trace)
  • GitHub Check: Trace nox tests (3, 9, pandas-test)
  • GitHub Check: Trace nox tests (3, 9, scorers)
  • GitHub Check: Trace nox tests (3, 9, vertexai)
  • GitHub Check: Trace nox tests (3, 9, openai)
  • GitHub Check: Trace nox tests (3, 9, notdiamond)
  • GitHub Check: Trace nox tests (3, 9, mistral1)
  • GitHub Check: Trace nox tests (3, 9, mistral0)
  • GitHub Check: Trace nox tests (3, 9, llamaindex)
  • GitHub Check: Trace nox tests (3, 9, litellm)
  • GitHub Check: Trace nox tests (3, 9, langchain)
  • GitHub Check: WeaveJS Lint and Compile
  • GitHub Check: Trace nox tests (3, 13, pandas-test)
  • GitHub Check: Trace nox tests (3, 13, vertexai)
  • GitHub Check: Trace nox tests (3, 13, openai)
  • GitHub Check: Trace nox tests (3, 13, notdiamond)
  • GitHub Check: Trace nox tests (3, 13, mistral1)
  • GitHub Check: Trace nox tests (3, 13, mistral0)
  • GitHub Check: Trace nox tests (3, 13, llamaindex)
  • GitHub Check: Trace nox tests (3, 13, instructor)
  • GitHub Check: Trace nox tests (3, 13, huggingface)
  • GitHub Check: Trace nox tests (3, 13, groq)
  • GitHub Check: Trace nox tests (3, 13, cerebras)
  • GitHub Check: Trace nox tests (3, 13, trace_server)
  • GitHub Check: Trace nox tests (3, 13, trace)
  • GitHub Check: Trace nox tests (3, 12, pandas-test)
  • GitHub Check: Trace nox tests (3, 12, scorers)
  • GitHub Check: Trace nox tests (3, 12, vertexai)
  • GitHub Check: Trace nox tests (3, 12, openai)
  • GitHub Check: Trace nox tests (3, 12, notdiamond)
  • GitHub Check: Trace nox tests (3, 12, mistral1)
  • GitHub Check: Trace nox tests (3, 12, mistral0)
  • GitHub Check: Trace nox tests (3, 12, llamaindex)
  • GitHub Check: Trace nox tests (3, 12, litellm)
  • GitHub Check: Trace nox tests (3, 12, langchain)
  • GitHub Check: Trace nox tests (3, 12, instructor)
  • GitHub Check: Trace nox tests (3, 12, google_ai_studio)
  • GitHub Check: Trace nox tests (3, 12, huggingface)
  • GitHub Check: Trace nox tests (3, 12, groq)
  • GitHub Check: Trace nox tests (3, 12, dspy)
  • GitHub Check: Trace nox tests (3, 12, cohere)
  • GitHub Check: Trace nox tests (3, 12, cerebras)
  • GitHub Check: Trace nox tests (3, 12, bedrock)
  • GitHub Check: Trace nox tests (3, 12, anthropic)
  • GitHub Check: Trace nox tests (3, 12, trace_server)
  • GitHub Check: Trace nox tests (3, 12, trace)
  • GitHub Check: Trace nox tests (3, 11, pandas-test)
  • GitHub Check: Trace nox tests (3, 11, scorers)
  • GitHub Check: Trace nox tests (3, 11, vertexai)
  • GitHub Check: Trace nox tests (3, 11, openai)
  • GitHub Check: Trace nox tests (3, 11, notdiamond)
  • GitHub Check: Trace nox tests (3, 11, mistral1)
  • GitHub Check: Trace nox tests (3, 11, mistral0)
  • GitHub Check: Trace nox tests (3, 11, llamaindex)
  • GitHub Check: Trace nox tests (3, 11, litellm)
  • GitHub Check: Trace nox tests (3, 11, langchain)
  • GitHub Check: Trace nox tests (3, 11, instructor)
  • GitHub Check: Trace nox tests (3, 11, google_ai_studio)
  • GitHub Check: Trace nox tests (3, 11, huggingface)
  • GitHub Check: Trace nox tests (3, 11, groq)
  • GitHub Check: Trace nox tests (3, 11, dspy)
  • GitHub Check: Trace nox tests (3, 11, cohere)
  • GitHub Check: Trace nox tests (3, 11, cerebras)
  • GitHub Check: Trace nox tests (3, 11, bedrock)
  • GitHub Check: Trace nox tests (3, 11, anthropic)
  • GitHub Check: Trace nox tests (3, 11, trace_server)
  • GitHub Check: Trace nox tests (3, 11, trace)
  • GitHub Check: Trace nox tests (3, 10, pandas-test)
  • GitHub Check: Trace nox tests (3, 10, scorers)
  • GitHub Check: Trace nox tests (3, 10, vertexai)
  • GitHub Check: Trace nox tests (3, 10, openai)
  • GitHub Check: Trace nox tests (3, 10, notdiamond)
  • GitHub Check: Trace nox tests (3, 10, mistral1)
  • GitHub Check: Trace nox tests (3, 10, mistral0)
  • GitHub Check: Trace nox tests (3, 10, llamaindex)
  • GitHub Check: Trace nox tests (3, 10, litellm)
  • GitHub Check: Trace nox tests (3, 10, langchain)
  • GitHub Check: Trace nox tests (3, 10, instructor)
  • GitHub Check: Trace nox tests (3, 10, google_ai_studio)
  • GitHub Check: Trace nox tests (3, 10, huggingface)
  • GitHub Check: Trace nox tests (3, 10, groq)
  • GitHub Check: Trace nox tests (3, 10, dspy)
  • GitHub Check: Trace nox tests (3, 10, cohere)
  • GitHub Check: Trace nox tests (3, 10, cerebras)
  • GitHub Check: Trace nox tests (3, 10, bedrock)
  • GitHub Check: Trace nox tests (3, 10, anthropic)
  • GitHub Check: Trace nox tests (3, 10, trace_server)
  • GitHub Check: Trace nox tests (3, 10, trace)
  • GitHub Check: Trace nox tests (3, 9, pandas-test)
  • GitHub Check: Trace nox tests (3, 9, scorers)
  • GitHub Check: Trace nox tests (3, 9, vertexai)
  • GitHub Check: Trace nox tests (3, 9, openai)
  • GitHub Check: Trace nox tests (3, 9, notdiamond)
  • GitHub Check: Trace nox tests (3, 9, mistral1)
  • GitHub Check: Trace nox tests (3, 9, mistral0)
  • GitHub Check: Trace nox tests (3, 9, llamaindex)
  • GitHub Check: Trace nox tests (3, 9, litellm)
  • GitHub Check: Trace nox tests (3, 9, langchain)
  • GitHub Check: WeaveJS Lint and Compile
  • GitHub Check: Trace nox tests (3, 13, pandas-test)
  • GitHub Check: Trace nox tests (3, 13, vertexai)
  • GitHub Check: Trace nox tests (3, 13, openai)
  • GitHub Check: Trace nox tests (3, 13, notdiamond)
  • GitHub Check: Trace nox tests (3, 13, mistral1)
  • GitHub Check: Trace nox tests (3, 13, mistral0)
  • GitHub Check: Trace nox tests (3, 13, llamaindex)
  • GitHub Check: Trace nox tests (3, 13, instructor)
  • GitHub Check: Trace nox tests (3, 13, huggingface)
  • GitHub Check: Trace nox tests (3, 13, groq)
  • GitHub Check: Trace nox tests (3, 13, cerebras)
  • GitHub Check: Trace nox tests (3, 13, trace_server)
  • GitHub Check: Trace nox tests (3, 13, trace)
  • GitHub Check: Trace nox tests (3, 12, pandas-test)
  • GitHub Check: Trace nox tests (3, 12, scorers)
  • GitHub Check: Trace nox tests (3, 12, vertexai)
  • GitHub Check: Trace nox tests (3, 12, openai)
  • GitHub Check: Trace nox tests (3, 12, notdiamond)
  • GitHub Check: Trace nox tests (3, 12, mistral1)
  • GitHub Check: Trace nox tests (3, 12, mistral0)
  • GitHub Check: Trace nox tests (3, 12, llamaindex)
  • GitHub Check: Trace nox tests (3, 12, litellm)
  • GitHub Check: Trace nox tests (3, 12, langchain)
  • GitHub Check: Trace nox tests (3, 12, instructor)
  • GitHub Check: Trace nox tests (3, 12, google_ai_studio)
  • GitHub Check: Trace nox tests (3, 12, huggingface)
  • GitHub Check: Trace nox tests (3, 12, groq)
  • GitHub Check: Trace nox tests (3, 12, dspy)
  • GitHub Check: Trace nox tests (3, 12, cohere)
  • GitHub Check: Trace nox tests (3, 12, cerebras)
  • GitHub Check: Trace nox tests (3, 12, bedrock)
  • GitHub Check: Trace nox tests (3, 12, anthropic)
  • GitHub Check: Trace nox tests (3, 12, trace_server)
  • GitHub Check: Trace nox tests (3, 12, trace)
  • GitHub Check: Trace nox tests (3, 11, pandas-test)
  • GitHub Check: Trace nox tests (3, 11, scorers)
  • GitHub Check: Trace nox tests (3, 11, vertexai)
  • GitHub Check: Trace nox tests (3, 11, openai)
  • GitHub Check: Trace nox tests (3, 11, notdiamond)
  • GitHub Check: Trace nox tests (3, 11, mistral1)
  • GitHub Check: Trace nox tests (3, 11, mistral0)
  • GitHub Check: Trace nox tests (3, 11, llamaindex)
  • GitHub Check: Trace nox tests (3, 11, litellm)
  • GitHub Check: Trace nox tests (3, 11, langchain)
  • GitHub Check: Trace nox tests (3, 11, instructor)
  • GitHub Check: Trace nox tests (3, 11, google_ai_studio)
  • GitHub Check: Trace nox tests (3, 11, huggingface)
  • GitHub Check: Trace nox tests (3, 11, groq)
  • GitHub Check: Trace nox tests (3, 11, dspy)
  • GitHub Check: Trace nox tests (3, 11, cohere)
  • GitHub Check: Trace nox tests (3, 11, cerebras)
  • GitHub Check: Trace nox tests (3, 11, bedrock)
  • GitHub Check: Trace nox tests (3, 11, anthropic)
  • GitHub Check: Trace nox tests (3, 11, trace_server)
  • GitHub Check: Trace nox tests (3, 11, trace)
  • GitHub Check: Trace nox tests (3, 10, pandas-test)
  • GitHub Check: Trace nox tests (3, 10, scorers)
  • GitHub Check: Trace nox tests (3, 10, vertexai)
  • GitHub Check: Trace nox tests (3, 10, openai)
  • GitHub Check: Trace nox tests (3, 10, notdiamond)
  • GitHub Check: Trace nox tests (3, 10, mistral1)
  • GitHub Check: Trace nox tests (3, 10, mistral0)
  • GitHub Check: Trace nox tests (3, 10, llamaindex)
  • GitHub Check: Trace nox tests (3, 10, litellm)
  • GitHub Check: Trace nox tests (3, 10, langchain)
  • GitHub Check: Trace nox tests (3, 10, instructor)
  • GitHub Check: Trace nox tests (3, 10, google_ai_studio)
  • GitHub Check: Trace nox tests (3, 10, huggingface)
  • GitHub Check: Trace nox tests (3, 10, groq)
  • GitHub Check: Trace nox tests (3, 10, dspy)
  • GitHub Check: Trace nox tests (3, 10, cohere)
  • GitHub Check: Trace nox tests (3, 10, cerebras)
  • GitHub Check: Trace nox tests (3, 10, bedrock)
  • GitHub Check: Trace nox tests (3, 10, anthropic)
  • GitHub Check: Trace nox tests (3, 10, trace_server)
  • GitHub Check: Trace nox tests (3, 10, trace)
  • GitHub Check: Trace nox tests (3, 9, pandas-test)
  • GitHub Check: Trace nox tests (3, 9, scorers)
  • GitHub Check: Trace nox tests (3, 9, vertexai)
  • GitHub Check: Trace nox tests (3, 9, openai)
  • GitHub Check: Trace nox tests (3, 9, notdiamond)
  • GitHub Check: Trace nox tests (3, 9, mistral1)
  • GitHub Check: Trace nox tests (3, 9, mistral0)
  • GitHub Check: Trace nox tests (3, 9, llamaindex)
  • GitHub Check: Trace nox tests (3, 9, litellm)
  • GitHub Check: Trace nox tests (3, 9, langchain)
  • GitHub Check: WeaveJS Lint and Compile
  • GitHub Check: Trace nox tests (3, 13, pandas-test)
  • GitHub Check: Trace nox tests (3, 13, vertexai)
  • GitHub Check: Trace nox tests (3, 13, openai)
  • GitHub Check: Trace nox tests (3, 13, notdiamond)
  • GitHub Check: Trace nox tests (3, 13, mistral1)
  • GitHub Check: Trace nox tests (3, 13, mistral0)
  • GitHub Check: Trace nox tests (3, 13, llamaindex)
  • GitHub Check: Trace nox tests (3, 13, instructor)
  • GitHub Check: Trace nox tests (3, 13, huggingface)
  • GitHub Check: Trace nox tests (3, 13, groq)
  • GitHub Check: Trace nox tests (3, 13, cerebras)
  • GitHub Check: Trace nox tests (3, 13, trace_server)
  • GitHub Check: Trace nox tests (3, 13, trace)
  • GitHub Check: Trace nox tests (3, 12, pandas-test)
  • GitHub Check: Trace nox tests (3, 12, scorers)
  • GitHub Check: Trace nox tests (3, 12, vertexai)
  • GitHub Check: Trace nox tests (3, 12, openai)
  • GitHub Check: Trace nox tests (3, 12, notdiamond)
  • GitHub Check: Trace nox tests (3, 12, mistral1)
  • GitHub Check: Trace nox tests (3, 12, mistral0)
  • GitHub Check: Trace nox tests (3, 12, llamaindex)
  • GitHub Check: Trace nox tests (3, 12, litellm)
  • GitHub Check: Trace nox tests (3, 12, langchain)
  • GitHub Check: Trace nox tests (3, 12, instructor)
  • GitHub Check: Trace nox tests (3, 12, google_ai_studio)
  • GitHub Check: Trace nox tests (3, 12, huggingface)
  • GitHub Check: Trace nox tests (3, 12, groq)
  • GitHub Check: Trace nox tests (3, 12, dspy)
  • GitHub Check: Trace nox tests (3, 12, cohere)
  • GitHub Check: Trace nox tests (3, 12, cerebras)
  • GitHub Check: Trace nox tests (3, 12, bedrock)
  • GitHub Check: Trace nox tests (3, 12, anthropic)
  • GitHub Check: Trace nox tests (3, 12, trace_server)
  • GitHub Check: Trace nox tests (3, 12, trace)
  • GitHub Check: Trace nox tests (3, 11, pandas-test)
  • GitHub Check: Trace nox tests (3, 11, scorers)
  • GitHub Check: Trace nox tests (3, 11, vertexai)
  • GitHub Check: Trace nox tests (3, 11, openai)
  • GitHub Check: Trace nox tests (3, 11, notdiamond)
  • GitHub Check: Trace nox tests (3, 11, mistral1)
  • GitHub Check: Trace nox tests (3, 11, mistral0)
  • GitHub Check: Trace nox tests (3, 11, llamaindex)
  • GitHub Check: Trace nox tests (3, 11, litellm)
  • GitHub Check: Trace nox tests (3, 11, langchain)
  • GitHub Check: Trace nox tests (3, 11, instructor)
  • GitHub Check: Trace nox tests (3, 11, google_ai_studio)
  • GitHub Check: Trace nox tests (3, 11, huggingface)
  • GitHub Check: Trace nox tests (3, 11, groq)
  • GitHub Check: Trace nox tests (3, 11, dspy)
  • GitHub Check: Trace nox tests (3, 11, cohere)
  • GitHub Check: Trace nox tests (3, 11, cerebras)
  • GitHub Check: Trace nox tests (3, 11, bedrock)
  • GitHub Check: Trace nox tests (3, 11, anthropic)
  • GitHub Check: Trace nox tests (3, 11, trace_server)
  • GitHub Check: Trace nox tests (3, 11, trace)
  • GitHub Check: Trace nox tests (3, 10, pandas-test)
  • GitHub Check: Trace nox tests (3, 10, scorers)
  • GitHub Check: Trace nox tests (3, 10, vertexai)
  • GitHub Check: Trace nox tests (3, 10, openai)
  • GitHub Check: Trace nox tests (3, 10, notdiamond)
  • GitHub Check: Trace nox tests (3, 10, mistral1)
  • GitHub Check: Trace nox tests (3, 10, mistral0)
  • GitHub Check: Trace nox tests (3, 10, llamaindex)
  • GitHub Check: Trace nox tests (3, 10, litellm)
  • GitHub Check: Trace nox tests (3, 10, langchain)
  • GitHub Check: Trace nox tests (3, 10, instructor)
  • GitHub Check: Trace nox tests (3, 10, google_ai_studio)
  • GitHub Check: Trace nox tests (3, 10, huggingface)
  • GitHub Check: Trace nox tests (3, 10, groq)
  • GitHub Check: Trace nox tests (3, 10, dspy)
  • GitHub Check: Trace nox tests (3, 10, cohere)
  • GitHub Check: Trace nox tests (3, 10, cerebras)
  • GitHub Check: Trace nox tests (3, 10, bedrock)
  • GitHub Check: Trace nox tests (3, 10, anthropic)
  • GitHub Check: Trace nox tests (3, 10, trace_server)
  • GitHub Check: Trace nox tests (3, 10, trace)
  • GitHub Check: Trace nox tests (3, 9, pandas-test)
  • GitHub Check: Trace nox tests (3, 9, scorers)
  • GitHub Check: Trace nox tests (3, 9, vertexai)
  • GitHub Check: Trace nox tests (3, 9, openai)
  • GitHub Check: Trace nox tests (3, 9, notdiamond)
  • GitHub Check: Trace nox tests (3, 9, mistral1)
  • GitHub Check: Trace nox tests (3, 9, mistral0)
  • GitHub Check: Trace nox tests (3, 9, llamaindex)
  • GitHub Check: Trace nox tests (3, 9, litellm)
  • GitHub Check: Trace nox tests (3, 9, langchain)
  • GitHub Check: WeaveJS Lint and Compile
  • GitHub Check: Trace nox tests (3, 13, pandas-test)
  • GitHub Check: Trace nox tests (3, 13, vertexai)
  • GitHub Check: Trace nox tests (3, 13, openai)
  • GitHub Check: Trace nox tests (3, 13, notdiamond)
  • GitHub Check: Trace nox tests (3, 13, mistral1)
  • GitHub Check: Trace nox tests (3, 13, mistral0)
  • GitHub Check: Trace nox tests (3, 13, llamaindex)
  • GitHub Check: Trace nox tests (3, 13, instructor)
  • GitHub Check: Trace nox tests (3, 13, huggingface)
  • GitHub Check: Trace nox tests (3, 13, groq)
  • GitHub Check: Trace nox tests (3, 13, cerebras)
  • GitHub Check: Trace nox tests (3, 13, trace_server)
  • GitHub Check: Trace nox tests (3, 13, trace)
  • GitHub Check: Trace nox tests (3, 12, pandas-test)
  • GitHub Check: Trace nox tests (3, 12, scorers)
  • GitHub Check: Trace nox tests (3, 12, vertexai)
  • GitHub Check: Trace nox tests (3, 12, openai)
  • GitHub Check: Trace nox tests (3, 12, notdiamond)
  • GitHub Check: Trace nox tests (3, 12, mistral1)
  • GitHub Check: Trace nox tests (3, 12, mistral0)
  • GitHub Check: Trace nox tests (3, 12, llamaindex)
  • GitHub Check: Trace nox tests (3, 12, litellm)
  • GitHub Check: Trace nox tests (3, 12, langchain)
  • GitHub Check: Trace nox tests (3, 12, instructor)
  • GitHub Check: Trace nox tests (3, 12, google_ai_studio)
  • GitHub Check: Trace nox tests (3, 12, huggingface)
  • GitHub Check: Trace nox tests (3, 12, groq)
  • GitHub Check: Trace nox tests (3, 12, dspy)
  • GitHub Check: Trace nox tests (3, 12, cohere)
  • GitHub Check: Trace nox tests (3, 12, cerebras)
  • GitHub Check: Trace nox tests (3, 12, bedrock)
  • GitHub Check: Trace nox tests (3, 12, anthropic)
  • GitHub Check: Trace nox tests (3, 12, trace_server)
  • GitHub Check: Trace nox tests (3, 12, trace)
  • GitHub Check: Trace nox tests (3, 11, pandas-test)
  • GitHub Check: Trace nox tests (3, 11, scorers)
  • GitHub Check: Trace nox tests (3, 11, vertexai)
  • GitHub Check: Trace nox tests (3, 11, openai)
  • GitHub Check: Trace nox tests (3, 11, notdiamond)
  • GitHub Check: Trace nox tests (3, 11, mistral1)
  • GitHub Check: Trace nox tests (3, 11, mistral0)
  • GitHub Check: Trace nox tests (3, 11, llamaindex)
  • GitHub Check: Trace nox tests (3, 11, litellm)
  • GitHub Check: Trace nox tests (3, 11, langchain)
  • GitHub Check: Trace nox tests (3, 11, instructor)
  • GitHub Check: Trace nox tests (3, 11, google_ai_studio)
  • GitHub Check: Trace nox tests (3, 11, huggingface)
  • GitHub Check: Trace nox tests (3, 11, groq)
  • GitHub Check: Trace nox tests (3, 11, dspy)
  • GitHub Check: Trace nox tests (3, 11, cohere)
  • GitHub Check: Trace nox tests (3, 11, cerebras)
  • GitHub Check: Trace nox tests (3, 11, bedrock)
  • GitHub Check: Trace nox tests (3, 11, anthropic)
  • GitHub Check: Trace nox tests (3, 11, trace_server)
  • GitHub Check: Trace nox tests (3, 11, trace)
  • GitHub Check: Trace nox tests (3, 10, pandas-test)
  • GitHub Check: Trace nox tests (3, 10, scorers)
  • GitHub Check: Trace nox tests (3, 10, vertexai)
  • GitHub Check: Trace nox tests (3, 10, openai)
  • GitHub Check: Trace nox tests (3, 10, notdiamond)
  • GitHub Check: Trace nox tests (3, 10, mistral1)
  • GitHub Check: Trace nox tests (3, 10, mistral0)
  • GitHub Check: Trace nox tests (3, 10, llamaindex)
  • GitHub Check: Trace nox tests (3, 10, litellm)
  • GitHub Check: Trace nox tests (3, 10, langchain)
  • GitHub Check: Trace nox tests (3, 10, instructor)
  • GitHub Check: Trace nox tests (3, 10, google_ai_studio)
  • GitHub Check: Trace nox tests (3, 10, huggingface)
  • GitHub Check: Trace nox tests (3, 10, groq)
  • GitHub Check: Trace nox tests (3, 10, dspy)
  • GitHub Check: Trace nox tests (3, 10, cohere)
  • GitHub Check: Trace nox tests (3, 10, cerebras)
  • GitHub Check: Trace nox tests (3, 10, bedrock)
  • GitHub Check: Trace nox tests (3, 10, anthropic)
  • GitHub Check: Trace nox tests (3, 10, trace_server)
  • GitHub Check: Trace nox tests (3, 10, trace)
  • GitHub Check: Trace nox tests (3, 9, pandas-test)
  • GitHub Check: Trace nox tests (3, 9, scorers)
  • GitHub Check: Trace nox tests (3, 9, vertexai)
  • GitHub Check: Trace nox tests (3, 9, openai)
  • GitHub Check: Trace nox tests (3, 9, notdiamond)
  • GitHub Check: Trace nox tests (3, 9, mistral1)
  • GitHub Check: Trace nox tests (3, 9, mistral0)
  • GitHub Check: Trace nox tests (3, 9, llamaindex)
  • GitHub Check: Trace nox tests (3, 9, litellm)
  • GitHub Check: Trace nox tests (3, 9, langchain)
🔇 Additional comments (30)
weave-js/src/components/PagePanelComponents/Home/Browse3/datasets/CellRenderers.tsx (7)

47-47: New prop to disable highlighting
Introducing disableNewRowHighlight in CellViewingRendererProps is a clean approach to controlling style behavior for newly added rows.


62-62: Default value alignment
Setting disableNewRowHighlight = false ensures the existing new-row highlight remains the default behavior, minimizing regressions.


103-103: Conditional background color
The updated check (isNew && !disableNewRowHighlight) neatly maintains highlight logic while allowing it to be turned off as needed.


641-641: ControlCellProps extension
Adding disableNewRowHighlight?: boolean; to ControlCellProps ensures consistent styling controls between viewing and control cells.

Also applies to: 642-642


652-652: Default flag value
Having disableNewRowHighlight = false here matches the same default across the codebase, keeping behavior consistent.


667-669: Direct conditional styling
Using a ternary for backgroundColor provides clear, concise logic for toggling new-row highlight.


685-685: Ternary with disable check
Nicely extends the existing ternary to skip highlighting if disableNewRowHighlight is true.

weave-js/src/components/PagePanelComponents/Home/Browse3/datasets/CreateDatasetDrawer.tsx (4)

21-26: Readable prop definitions
The CreateDatasetDrawerProps interface clearly documents the required callback props and optional creation state, making the component’s usage self-explanatory.


28-43: High-level drawer component
Wrapping logic in CreateDatasetProvider is a clean architectural decision, isolating state management from the UI logic.


79-87: File upload validation
The file comparison ensures a CSV file is selected. As a security measure, consider validating further (e.g., checking the first few bytes for CSV format) to guard against incorrect MIME types or disguised files.


125-131: Drag-and-drop minimal type check
CSV injection vulnerabilities can occur if malicious formulas are embedded (e.g., starting with “=”). Ensure the parser or subsequent handling sanitizes or escapes these to prevent potential CSV macro exploits, especially if users might open exported data in spreadsheet software.

weave-js/src/components/PagePanelComponents/Home/Browse3/datasets/EditableDatasetView.tsx (5)

49-56: Good change making the interface exportable.

The DatasetObjectVal interface is now properly exported, which improves reusability and allows other files to reference this type directly.


63-64: Props extension is well implemented.

New optional props with sensible defaults are added correctly. This enhances the component's flexibility, allowing consumers to control ID column visibility and row highlighting behavior.

Also applies to: 77-78


341-390: Good refactoring of columns conditionals.

The refactoring of the column generation logic is well-structured, with clear separation between the ID column and control column conditions. This improves readability and maintainability.


392-414: Control cell is properly independent of ID column visibility.

Good decision to make the control column inclusion independent of the ID column visibility. This ensures editing functionality remains intact even when the ID column is hidden.


454-454: Props are correctly passed down to child components and dependencies updated.

The new props are properly passed to child components and correctly added to the dependencies array in the useMemo hook, preventing potential stale closure issues.

Also applies to: 490-491

weave-js/src/components/PagePanelComponents/Home/Browse3/datasets/CreateDatasetDrawerContext.tsx (6)

1-28: Well-structured context setup with comprehensive action types.

The context setup follows best practices with clearly defined action types as constants. This makes state management more maintainable and helps prevent typos in action types.


31-64: State interface and initial state are well defined.

The state interface is comprehensive and includes all necessary properties for the drawer functionality. The initial state provides sensible defaults.


67-91: Clean reducer implementation with proper type safety.

The reducer function is well-structured with proper type annotations and a comprehensive switch statement handling all possible actions.


110-121: Provider component design follows best practices.

The CreateDatasetProvider component follows the React context provider pattern correctly, wrapping the inner provider with the necessary dataset edit context.


207-242: Handler functions are focused and maintain clean state.

The drawer management functions are well-implemented, with clear separation of concerns and proper state cleanup on close.


259-268: Context hook includes proper error handling.

The custom hook includes proper error checking to ensure it's used within the provider context, following React best practices.

weave-js/src/components/PagePanelComponents/Home/Browse3/pages/DatasetsPage/DatasetsPage.tsx (4)

14-16: State and imports are properly set up for the new functionality.

The necessary imports and state variables are correctly added to support the dataset creation functionality.

Also applies to: 38-46


73-79: Handler functions are concise and focused.

The drawer open/close handlers are simple and follow best practices for state updates.


160-203: Drawer integration is well-implemented.

The CreateDatasetDrawer is correctly integrated with proper props and state management. The loading state is properly passed to provide user feedback during dataset creation.


250-258: New Dataset button conditionally rendered based on permissions.

The button is correctly hidden for users without write permissions, following proper security practices.

weave-js/src/components/PagePanelComponents/Home/Browse3/datasets/csvUtils.ts (4)

3-19: Well-defined interfaces for CSV parsing.

The interfaces for parsed columns and parsing results are clearly defined with appropriate types, making the code more maintainable and type-safe.


21-64: Comprehensive type detection with edge case handling.

The detectDataType function handles various edge cases well, including proper ordering of type checks (checking booleans before numbers) and special handling for values like 'Infinity'.


66-134: Column analysis with robust type inference.

The column analysis function samples up to 100 non-null values for better type inference and includes special handling for boolean-like values. This creates a more accurate representation of the data.


230-274: CSV parsing with proper async handling and error management.

The parseCSV function uses promises correctly for async file operations and includes proper error handling for both file reading and parsing errors. The TextDecoder usage ensures proper character encoding support.

Comment on lines +154 to +202
switch (type) {
case 'number':
const num = Number(value);
return isNaN(num) ? value : num;
case 'boolean':
// Already a boolean
if (typeof value === 'boolean') {
return value;
}
// String representation of boolean
if (typeof value === 'string') {
const lowered = value.toLowerCase().trim();
if (
lowered === 'true' ||
lowered === 'yes' ||
lowered === '1' ||
lowered === 'y'
) {
return true;
}
if (
lowered === 'false' ||
lowered === 'no' ||
lowered === '0' ||
lowered === 'n'
) {
return false;
}
}
// Number 1 or 0
if (typeof value === 'number') {
if (value === 1) {
return true;
}
if (value === 0) {
return false;
}
}
return value;
case 'date':
const date = new Date(value);
return isNaN(date.getTime()) ? value : date;
case 'null':
return null;
case 'string':
default:
return String(value);
}
};
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛠️ Refactor suggestion

Switch case declarations can cause scope issues.

The variable declarations in the switch cases could lead to scope issues.

Wrap the variable declarations in blocks to prevent them from being accessible from other cases:

case 'number':
+  {
    const num = Number(value);
    return isNaN(num) ? value : num;
+  }
case 'date':
+  {
    const date = new Date(value);
    return isNaN(date.getTime()) ? value : date;
+  }
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
switch (type) {
case 'number':
const num = Number(value);
return isNaN(num) ? value : num;
case 'boolean':
// Already a boolean
if (typeof value === 'boolean') {
return value;
}
// String representation of boolean
if (typeof value === 'string') {
const lowered = value.toLowerCase().trim();
if (
lowered === 'true' ||
lowered === 'yes' ||
lowered === '1' ||
lowered === 'y'
) {
return true;
}
if (
lowered === 'false' ||
lowered === 'no' ||
lowered === '0' ||
lowered === 'n'
) {
return false;
}
}
// Number 1 or 0
if (typeof value === 'number') {
if (value === 1) {
return true;
}
if (value === 0) {
return false;
}
}
return value;
case 'date':
const date = new Date(value);
return isNaN(date.getTime()) ? value : date;
case 'null':
return null;
case 'string':
default:
return String(value);
}
};
switch (type) {
case 'number': {
const num = Number(value);
return isNaN(num) ? value : num;
}
case 'boolean':
// Already a boolean
if (typeof value === 'boolean') {
return value;
}
// String representation of boolean
if (typeof value === 'string') {
const lowered = value.toLowerCase().trim();
if (
lowered === 'true' ||
lowered === 'yes' ||
lowered === '1' ||
lowered === 'y'
) {
return true;
}
if (
lowered === 'false' ||
lowered === 'no' ||
lowered === '0' ||
lowered === 'n'
) {
return false;
}
}
// Number 1 or 0
if (typeof value === 'number') {
if (value === 1) {
return true;
}
if (value === 0) {
return false;
}
}
return value;
case 'date': {
const date = new Date(value);
return isNaN(date.getTime()) ? value : date;
}
case 'null':
return null;
case 'string':
default:
return String(value);
}
};
🧰 Tools
🪛 Biome (1.9.4)

[error] 156-156: Other switch clauses can erroneously access this declaration.
Wrap the declaration in a block to restrict its access to the switch clause.

The declaration is defined in this switch clause:

Unsafe fix: Wrap the declaration in a block.

(lint/correctness/noSwitchDeclarations)


[error] 194-194: Other switch clauses can erroneously access this declaration.
Wrap the declaration in a block to restrict its access to the switch clause.

The declaration is defined in this switch clause:

Unsafe fix: Wrap the declaration in a block.

(lint/correctness/noSwitchDeclarations)


[error] 198-198: Useless case clause.

because the default clause is present:

Unsafe fix: Remove the useless case.

(lint/complexity/noUselessSwitchCase)

@bcsherma bcsherma requested a review from tssweeney March 15, 2025 21:01
Copy link
Collaborator

@tssweeney tssweeney left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Approving. Lets merge this first thing Monday.

In my PR: #3876 i supported more file types and custom column selection. I suspect we will want to add this soon.

@bcsherma bcsherma merged commit 7435f0a into master Mar 17, 2025
133 checks passed
@bcsherma bcsherma deleted the datset-csv-upload branch March 17, 2025 15:29
@github-actions github-actions bot locked and limited conversation to collaborators Mar 17, 2025
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants