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

chore(weave): new text based datetime dropdown #3829

Draft
wants to merge 7 commits into
base: master
Choose a base branch
from

Conversation

gtarpenning
Copy link
Member

@gtarpenning gtarpenning commented Mar 3, 2025

Description

Adds a new dropdown/text input widget for datetimes. This allows tying in absolute or relative dates, and will encourage more usage of datetime filtering 🤞🏻 .

Screenshot 2025-03-03 at 3 14 24 PM

Testing

datetime-parser-1

Summary by CodeRabbit

  • New Features

    • Introduced a dynamic date selection dropdown that supports both absolute and relative date formats.
    • Enhanced the date input experience with intuitive suggestions (like "Yesterday") and visual feedback.
    • Added utility functions for improved date parsing and formatting.
  • Bug Fixes

    • Removed outdated date handling components to streamline functionality.
  • Tests

    • Added comprehensive unit tests for date utility functions to ensure accuracy and reliability.

Copy link
Contributor

coderabbitai bot commented Mar 3, 2025

Warning

Rate limit exceeded

@gtarpenning has exceeded the limit for the number of commits or files that can be reviewed per hour. Please wait 5 minutes and 28 seconds before requesting another review.

⌛ How to resolve this issue?

After the wait time has elapsed, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

We recommend that you space out your commits to avoid hitting the rate limit.

🚦 How do rate limits work?

CodeRabbit enforces hourly rate limits for each developer per organization.

Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout.

Please see our FAQ for further information.

📥 Commits

Reviewing files that changed from the base of the PR and between a508b89 and d1fc252.

📒 Files selected for processing (1)
  • weave-js/src/util/date.test.ts (1 hunks)

Walkthrough

A new React component, SelectDatetimeDropdown, has been introduced to provide a flexible date selection interface supporting both absolute and relative formats. The changes remove the old StyledDateTimePicker from the selection flow and delegate date handling to the new dropdown component. Additionally, a new utility file date.ts has been added with functions to parse and format dates, interpreting natural language inputs alongside standard formats.

Changes

File(s) Change Summary
weave-js/src/components/PagePanelComponents/Home/Browse3/filters/SelectDatetimeDropdown.tsx
weave-js/src/components/PagePanelComponents/Home/Browse3/filters/SelectValue.tsx
Added a new SelectDatetimeDropdown component to handle date input with suggestions and state management. Replaced the old StyledDateTimePicker in SelectValue.tsx, removing legacy moment-based logic.
weave-js/src/util/date.ts Introduced a new utility file with parseDate, isRelativeDate, formatDate, formatDateOnly, and dateToISOString functions to handle various date formats and natural language inputs using the moment library.
weave-js/src/util/date.test.ts Added a new test file containing unit tests for date utility functions, covering parsing, formatting, and relative date identification.

Suggested reviewers

  • bcsherma
  • domphan-wandb

Poem

I'm a rabbit in code, hopping with glee,
New dropdown adventures as lively as can be.
Dates now dance by prompt and clue,
Parsing magic with every view.
Cheers to these changes—hoppy and true! 🐰💻


Thank you for using CodeRabbit. We offer it for free to the OSS community and would appreciate your support in helping us grow. If you find it useful, would you consider giving us a shout-out on your favorite social media?

❤️ Share
🪧 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: 2

🧹 Nitpick comments (4)
weave-js/src/util/date.ts (1)

14-103: Consider edge cases and time zone handling in date parsing.

The parseDate function is well-structured with good documentation and handles a variety of date formats. However, there are a few considerations:

  1. Time zone handling is implicit, which could lead to unexpected behavior when parsing dates
  2. Natural language parsing for relative dates could be affected by edge cases (month boundaries, leap years)
  3. There's no handling for future-oriented relative times like "in 2 days"

Consider adding:

  1. Explicit time zone handling
  2. Support for future-oriented relative times
  3. More robust handling of edge cases
export const parseDate = (dateStr: string): Date | null => {
  if (!dateStr || typeof dateStr !== 'string') {
    return null;
  }

  // Trim the input
  const trimmedStr = dateStr.trim();
  if (!trimmedStr) {
    return null;
  }

  // Try parsing with moment
  const momentDate = moment(trimmedStr);
  if (momentDate.isValid()) {
    return momentDate.toDate();
  }

  // Try parsing natural language dates
  const lowerStr = trimmedStr.toLowerCase();
  const now = new Date();

  // Handle "today", "yesterday", "tomorrow"
  if (lowerStr === 'today') {
    return new Date(now.setHours(0, 0, 0, 0));
  } else if (lowerStr === 'yesterday') {
    const yesterday = new Date(now);
    yesterday.setDate(yesterday.getDate() - 1);
    yesterday.setHours(0, 0, 0, 0);
    return yesterday;
  } else if (lowerStr === 'tomorrow') {
    const tomorrow = new Date(now);
    tomorrow.setDate(tomorrow.getDate() + 1);
    tomorrow.setHours(0, 0, 0, 0);
    return tomorrow;
  }

  // Handle "last week", "next month", etc.
  const lastNextPattern = /^(last|next)\s+(day|week|month|year)$/i;
  const lastNextMatch = lowerStr.match(lastNextPattern);
  if (lastNextMatch) {
    const direction = lastNextMatch[1].toLowerCase();
    const unit = lastNextMatch[2].toLowerCase();
    const multiplier = direction === 'last' ? -1 : 1;

    const result = new Date(now);
    switch (unit) {
      case 'day':
        result.setDate(result.getDate() + multiplier);
        break;
      case 'week':
        result.setDate(result.getDate() + multiplier * 7);
        break;
      case 'month':
        result.setMonth(result.getMonth() + multiplier);
        break;
      case 'year':
        result.setFullYear(result.getFullYear() + multiplier);
        break;
    }
    return result;
  }

  // Handle "X days/weeks/months/years ago"
  const agoPattern = /^(\d+)\s+(day|week|month|year)s?\s+ago$/i;
  const agoMatch = lowerStr.match(agoPattern);
  if (agoMatch) {
    const amount = parseInt(agoMatch[1], 10);
    const unit = agoMatch[2].toLowerCase();

    const result = new Date(now);
    switch (unit) {
      case 'day':
        result.setDate(result.getDate() - amount);
        break;
      case 'week':
        result.setDate(result.getDate() - amount * 7);
        break;
      case 'month':
        result.setMonth(result.getMonth() - amount);
        break;
      case 'year':
        result.setFullYear(result.getFullYear() - amount);
        break;
    }
    return result;
  }
+
+  // Handle "in X days/weeks/months/years"
+  const inFuturePattern = /^in\s+(\d+)\s+(day|week|month|year)s?$/i;
+  const inFutureMatch = lowerStr.match(inFuturePattern);
+  if (inFutureMatch) {
+    const amount = parseInt(inFutureMatch[1], 10);
+    const unit = inFutureMatch[2].toLowerCase();
+
+    const result = new Date(now);
+    switch (unit) {
+      case 'day':
+        result.setDate(result.getDate() + amount);
+        break;
+      case 'week':
+        result.setDate(result.getDate() + amount * 7);
+        break;
+      case 'month':
+        result.setMonth(result.getMonth() + amount);
+        break;
+      case 'year':
+        result.setFullYear(result.getFullYear() + amount);
+        break;
+    }
+    return result;
+  }

  // If all parsing attempts fail, return null
  return null;
};
weave-js/src/components/PagePanelComponents/Home/Browse3/filters/SelectDatetimeDropdown.tsx (3)

9-9: Verify import comment accuracy.

The import statement has a comment suggesting uncertainty about the date parser's existence, but the utility is actually imported correctly.

-import {parseDate} from '../../../../../util/date'; // Assuming there's a date parser utility
+import {parseDate} from '../../../../../util/date';

34-46: Consider consolidating state management.

The component maintains multiple pieces of state that could potentially get out of sync. Consider using a reducer pattern for more reliable state management.

You could consolidate the component's state with useReducer:

type State = {
  inputValue: string;
  parsedDate: Date | null;
  isDropdownVisible: boolean;
  hoveredIndex: number | null;
  selectedSuggestion: string | null;
  isInputHovered: boolean;
  isInputFocused: boolean;
};

type Action =
  | { type: 'SET_INPUT_VALUE'; payload: string }
  | { type: 'SET_PARSED_DATE'; payload: Date | null }
  | { type: 'SET_DROPDOWN_VISIBLE'; payload: boolean }
  | { type: 'SET_HOVERED_INDEX'; payload: number | null }
  | { type: 'SET_SELECTED_SUGGESTION'; payload: string | null }
  | { type: 'SET_INPUT_HOVERED'; payload: boolean }
  | { type: 'SET_INPUT_FOCUSED'; payload: boolean }
  | { type: 'HANDLE_INPUT_CHANGE'; payload: string };

function reducer(state: State, action: Action): State {
  switch (action.type) {
    case 'SET_INPUT_VALUE':
      return { ...state, inputValue: action.payload };
    case 'SET_PARSED_DATE':
      return { ...state, parsedDate: action.payload };
    case 'SET_DROPDOWN_VISIBLE':
      return { ...state, isDropdownVisible: action.payload };
    case 'SET_HOVERED_INDEX':
      return { ...state, hoveredIndex: action.payload };
    case 'SET_SELECTED_SUGGESTION':
      return { ...state, selectedSuggestion: action.payload };
    case 'SET_INPUT_HOVERED':
      return { ...state, isInputHovered: action.payload };
    case 'SET_INPUT_FOCUSED':
      return { ...state, isInputFocused: action.payload };
    case 'HANDLE_INPUT_CHANGE': {
      const newInputValue = action.payload;
      const date = parseInput(newInputValue);
      return {
        ...state,
        inputValue: newInputValue,
        parsedDate: date,
        selectedSuggestion: null,
      };
    }
    default:
      return state;
  }
}

167-298: Extract inline styles to improve maintainability.

The component has significant inline styling which can make maintenance difficult. Consider extracting these styles to styled components or a separate style object for better maintainability.

Extract inline styles to improve readability and maintainability:

// At the top of the file
const styles = {
  container: {
    position: 'relative',
    display: 'flex',
    alignItems: 'center',
    marginBottom: '5px',
  },
  icon: {
    position: 'absolute',
    top: '50%',
    left: '9px',
    transform: 'translateY(-50%)',
    fontSize: '16px',
  },
  input: (isInputFocused: boolean, isInputHovered: boolean) => ({
    padding: '4px 12px',
    paddingLeft: '32px',
    paddingRight: '80px',
    borderRadius: '4px',
    border: 0,
    boxShadow: isInputFocused
      ? `0 0 0 2px ${TEAL_400}`
      : isInputHovered
      ? `0 0 0 2px ${TEAL_350}`
      : `inset 0 0 0 1px ${MOON_250}`,
    outline: 'none',
    flex: 1,
    height: '32px',
    minHeight: '32px',
    boxSizing: 'border-box',
    fontSize: '16px',
    lineHeight: '24px',
    cursor: 'default',
  }),
  // Add more style objects for other elements
};

// Then in the render:
<div style={styles.container}>
  <Icon name="date" style={styles.icon} />
  <input
    // ...props
    style={styles.input(isInputFocused, isInputHovered)}
  />
  {/* ... */}
</div>
📜 Review details

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

📥 Commits

Reviewing files that changed from the base of the PR and between 60b0926 and 1c34b09.

📒 Files selected for processing (3)
  • weave-js/src/components/PagePanelComponents/Home/Browse3/filters/SelectDatetimeDropdown.tsx (1 hunks)
  • weave-js/src/components/PagePanelComponents/Home/Browse3/filters/SelectValue.tsx (2 hunks)
  • weave-js/src/util/date.ts (1 hunks)
🧰 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/filters/SelectValue.tsx
  • weave-js/src/util/date.ts
  • weave-js/src/components/PagePanelComponents/Home/Browse3/filters/SelectDatetimeDropdown.tsx
⏰ Context from checks skipped due to timeout of 90000ms (100)
  • GitHub Check: WeaveJS Lint and Compile
  • GitHub Check: Trace nox tests (3, 13, trace_server)
  • GitHub Check: Trace nox tests (3, 13, trace)
  • GitHub Check: Trace nox tests (3, 12, scorers)
  • GitHub Check: Trace nox tests (3, 12, trace)
  • GitHub Check: Trace nox tests (3, 11, scorers)
  • GitHub Check: Trace nox tests (3, 11, trace)
  • GitHub Check: Trace nox tests (3, 10, scorers)
  • GitHub Check: Trace nox tests (3, 10, trace)
  • GitHub Check: Trace nox tests (3, 9, scorers)
  • GitHub Check: WeaveJS Lint and Compile
  • GitHub Check: Trace nox tests (3, 13, trace_server)
  • GitHub Check: Trace nox tests (3, 13, trace)
  • GitHub Check: Trace nox tests (3, 12, scorers)
  • GitHub Check: Trace nox tests (3, 12, trace)
  • GitHub Check: Trace nox tests (3, 11, scorers)
  • GitHub Check: Trace nox tests (3, 11, trace)
  • GitHub Check: Trace nox tests (3, 10, scorers)
  • GitHub Check: Trace nox tests (3, 10, trace)
  • GitHub Check: Trace nox tests (3, 9, scorers)
  • GitHub Check: WeaveJS Lint and Compile
  • GitHub Check: Trace nox tests (3, 13, trace_server)
  • GitHub Check: Trace nox tests (3, 13, trace)
  • GitHub Check: Trace nox tests (3, 12, scorers)
  • GitHub Check: Trace nox tests (3, 12, trace)
  • GitHub Check: Trace nox tests (3, 11, scorers)
  • GitHub Check: Trace nox tests (3, 11, trace)
  • GitHub Check: Trace nox tests (3, 10, scorers)
  • GitHub Check: Trace nox tests (3, 10, trace)
  • GitHub Check: Trace nox tests (3, 9, scorers)
  • GitHub Check: WeaveJS Lint and Compile
  • GitHub Check: Trace nox tests (3, 13, trace_server)
  • GitHub Check: Trace nox tests (3, 13, trace)
  • GitHub Check: Trace nox tests (3, 12, scorers)
  • GitHub Check: Trace nox tests (3, 12, trace)
  • GitHub Check: Trace nox tests (3, 11, scorers)
  • GitHub Check: Trace nox tests (3, 11, trace)
  • GitHub Check: Trace nox tests (3, 10, scorers)
  • GitHub Check: Trace nox tests (3, 10, trace)
  • GitHub Check: Trace nox tests (3, 9, scorers)
  • GitHub Check: WeaveJS Lint and Compile
  • GitHub Check: Trace nox tests (3, 13, trace_server)
  • GitHub Check: Trace nox tests (3, 13, trace)
  • GitHub Check: Trace nox tests (3, 12, scorers)
  • GitHub Check: Trace nox tests (3, 12, trace)
  • GitHub Check: Trace nox tests (3, 11, scorers)
  • GitHub Check: Trace nox tests (3, 11, trace)
  • GitHub Check: Trace nox tests (3, 10, scorers)
  • GitHub Check: Trace nox tests (3, 10, trace)
  • GitHub Check: Trace nox tests (3, 9, scorers)
  • GitHub Check: WeaveJS Lint and Compile
  • GitHub Check: Trace nox tests (3, 13, trace_server)
  • GitHub Check: Trace nox tests (3, 13, trace)
  • GitHub Check: Trace nox tests (3, 12, scorers)
  • GitHub Check: Trace nox tests (3, 12, trace)
  • GitHub Check: Trace nox tests (3, 11, scorers)
  • GitHub Check: Trace nox tests (3, 11, trace)
  • GitHub Check: Trace nox tests (3, 10, scorers)
  • GitHub Check: Trace nox tests (3, 10, trace)
  • GitHub Check: Trace nox tests (3, 9, scorers)
  • GitHub Check: WeaveJS Lint and Compile
  • GitHub Check: Trace nox tests (3, 13, trace_server)
  • GitHub Check: Trace nox tests (3, 13, trace)
  • GitHub Check: Trace nox tests (3, 12, scorers)
  • GitHub Check: Trace nox tests (3, 12, trace)
  • GitHub Check: Trace nox tests (3, 11, scorers)
  • GitHub Check: Trace nox tests (3, 11, trace)
  • GitHub Check: Trace nox tests (3, 10, scorers)
  • GitHub Check: Trace nox tests (3, 10, trace)
  • GitHub Check: Trace nox tests (3, 9, scorers)
  • GitHub Check: WeaveJS Lint and Compile
  • GitHub Check: Trace nox tests (3, 13, trace_server)
  • GitHub Check: Trace nox tests (3, 13, trace)
  • GitHub Check: Trace nox tests (3, 12, scorers)
  • GitHub Check: Trace nox tests (3, 12, trace)
  • GitHub Check: Trace nox tests (3, 11, scorers)
  • GitHub Check: Trace nox tests (3, 11, trace)
  • GitHub Check: Trace nox tests (3, 10, scorers)
  • GitHub Check: Trace nox tests (3, 10, trace)
  • GitHub Check: Trace nox tests (3, 9, scorers)
  • GitHub Check: WeaveJS Lint and Compile
  • GitHub Check: Trace nox tests (3, 13, trace_server)
  • GitHub Check: Trace nox tests (3, 13, trace)
  • GitHub Check: Trace nox tests (3, 12, scorers)
  • GitHub Check: Trace nox tests (3, 12, trace)
  • GitHub Check: Trace nox tests (3, 11, scorers)
  • GitHub Check: Trace nox tests (3, 11, trace)
  • GitHub Check: Trace nox tests (3, 10, scorers)
  • GitHub Check: Trace nox tests (3, 10, trace)
  • GitHub Check: Trace nox tests (3, 9, scorers)
  • GitHub Check: WeaveJS Lint and Compile
  • GitHub Check: Trace nox tests (3, 13, trace_server)
  • GitHub Check: Trace nox tests (3, 13, trace)
  • GitHub Check: Trace nox tests (3, 12, scorers)
  • GitHub Check: Trace nox tests (3, 12, trace)
  • GitHub Check: Trace nox tests (3, 11, scorers)
  • GitHub Check: Trace nox tests (3, 11, trace)
  • GitHub Check: Trace nox tests (3, 10, scorers)
  • GitHub Check: Trace nox tests (3, 10, trace)
  • GitHub Check: Trace nox tests (3, 9, scorers)
🔇 Additional comments (6)
weave-js/src/components/PagePanelComponents/Home/Browse3/filters/SelectValue.tsx (2)

17-18: LGTM! Import of the new dropdown component.

The change correctly imports the new SelectDatetimeDropdown component that replaces the previous date picker.


52-53: Simplified date handling with the new dropdown component.

The implementation correctly replaces the old StyledDateTimePicker with the new SelectDatetimeDropdown component, maintaining the same interface for value and onChange. This is a clean transition that delegates date handling to the specialized component.

weave-js/src/util/date.ts (1)

112-120: The formatDate function is well-implemented.

The function correctly handles null and undefined inputs and provides a sensible default format.

weave-js/src/components/PagePanelComponents/Home/Browse3/filters/SelectDatetimeDropdown.tsx (3)

74-84: Consistent state updates with onChange handler.

The code properly handles both valid dates and unparsable inputs by updating the parent component. This is a good pattern for maintaining component state consistency.


302-322: Well-implemented relative date detection.

The isRelativeInput function provides a comprehensive check for different types of relative date inputs, which is essential for proper UI feedback.


394-397:

❓ Verification inconclusive

Verify ISO string format requirements.

The dateToISOString function is used to convert dates to ISO strings before passing them to the parent component's onChange handler. Ensure that this format matches what the rest of the application expects.


🏁 Script executed:

#!/bin/bash
# Search for patterns of ISO string date usage in the codebase

echo "Searching for date string formats used with onSetValue in filter components..."
rg -p "onSetValue\s*\(\s*.*\.toISOString" --type=typescript

echo "Checking other datetime value handling in SelectValue.tsx..."
rg -A 5 -B 5 "fieldType === 'datetime'" --type=typescript

Length of output: 495


Below is a revised shell script that doesn’t rely on an unrecognized file type. This script searches across both .ts and .tsx files for ISO string conversion and date handling usage. Please run it for manual verification of whether the ISO string format produced by dateToISOString matches the rest of the application’s expectations.

After running this script, please verify that:

  • The ISO string format produced by dateToISOString is consistent with the format expected by parent components.
  • There isn’t any conflicting date handling for datetime fields (e.g., in SelectValue.tsx or similar files).

Kindly confirm the verification results or let me know if further adjustments are needed.


🏁 Script executed:

#!/bin/bash
echo "Searching for onSetValue usages with .toISOString in TS/TSX files..."
fd -e ts -e tsx -x grep -H "onSetValue.*\.toISOString" {}

echo ""
echo "Searching for ISO conversion (.toISOString) occurrences in TS/TSX files..."
fd -e ts -e tsx -x grep -H "\.toISOString" {}

echo ""
echo "Searching for datetime field handling (fieldType === 'datetime') in TS/TSX files..."
fd -e ts -e tsx -x grep -H "fieldType === 'datetime'" {}

Length of output: 2142


ISO String Format Consistency Check
The dateToISOString function in weave-js/src/components/PagePanelComponents/Home/Browse3/filters/SelectDatetimeDropdown.tsx now returns a full ISO string—or an empty string if no date is provided—which is consistent with the majority of the codebase (e.g., in ErrorPanel.tsx and the SDK files). Please verify that the parent component’s onChange handler expects this full ISO format. Note that while some components (such as in CallsTableButtons.tsx or AudioPlayer.tsx) further process the ISO string (e.g., splitting on the 'T'), the intended behavior in this filter is to use the unmodified ISO string.

@circle-job-mirror
Copy link

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: 2

🧹 Nitpick comments (10)
weave-js/src/util/date.test.ts (2)

292-316: Tests outside test block structure

These expect statements are outside of any test block. They should be wrapped in a properly named test function for better error reporting and test organization.

- // X days/weeks/months before/after today
- expect(
-   areDatesEqual(parseDate('3 days before today'), createDate(2023, 6, 12))
- ).toBe(true);
- expect(
-   areDatesEqual(parseDate('3 days after today'), createDate(2023, 6, 18))
- ).toBe(true);
- expect(
-   areDatesEqual(parseDate('1 week before today'), createDate(2023, 6, 8))
- ).toBe(true);
- expect(
-   areDatesEqual(parseDate('1 week after today'), createDate(2023, 6, 22))
- ).toBe(true);
- expect(
-   areDatesEqual(parseDate('1 month before today'), createDate(2023, 5, 15))
- ).toBe(true);
- expect(
-   areDatesEqual(parseDate('1 month after today'), createDate(2023, 7, 15))
- ).toBe(true);
- expect(
-   areDatesEqual(parseDate('1 year before today'), createDate(2022, 6, 15))
- ).toBe(true);
- expect(
-   areDatesEqual(parseDate('1 year after today'), createDate(2024, 6, 15))
- ).toBe(true);
+ test('should parse "X units before/after today" format', () => {
+   // X days/weeks/months before/after today
+   expect(
+     areDatesEqual(parseDate('3 days before today'), createDate(2023, 6, 12))
+   ).toBe(true);
+   expect(
+     areDatesEqual(parseDate('3 days after today'), createDate(2023, 6, 18))
+   ).toBe(true);
+   expect(
+     areDatesEqual(parseDate('1 week before today'), createDate(2023, 6, 8))
+   ).toBe(true);
+   expect(
+     areDatesEqual(parseDate('1 week after today'), createDate(2023, 6, 22))
+   ).toBe(true);
+   expect(
+     areDatesEqual(parseDate('1 month before today'), createDate(2023, 5, 15))
+   ).toBe(true);
+   expect(
+     areDatesEqual(parseDate('1 month after today'), createDate(2023, 7, 15))
+   ).toBe(true);
+   expect(
+     areDatesEqual(parseDate('1 year before today'), createDate(2022, 6, 15))
+   ).toBe(true);
+   expect(
+     areDatesEqual(parseDate('1 year after today'), createDate(2024, 6, 15))
+   ).toBe(true);
+ });

319-325: Improve the "now" test cases with more precise assertions.

The current tests for "now" only check individual components of the date. This approach can miss synchronization issues between components. Use a more comprehensive approach.

// Current time
const now = new Date(2023, 5, 15); // Our mocked current date
- expect(parseDate('now')?.getFullYear()).toBe(now.getFullYear());
- expect(parseDate('now')?.getMonth()).toBe(now.getMonth());
- expect(parseDate('now')?.getDate()).toBe(now.getDate());
- expect(parseDate('right now')?.getFullYear()).toBe(now.getFullYear());
- expect(parseDate('current time')?.getFullYear()).toBe(now.getFullYear());
+ // Helper to check if two dates are close in time (within 1 second)
+ const areDatesCloseInTime = (date1: Date | null, date2: Date | null): boolean => {
+   if (!date1 || !date2) return false;
+   return Math.abs(date1.getTime() - date2.getTime()) < 1000;
+ };
+ 
+ expect(areDatesCloseInTime(parseDate('now'), now)).toBe(true);
+ expect(areDatesCloseInTime(parseDate('right now'), now)).toBe(true);
+ expect(areDatesCloseInTime(parseDate('current time'), now)).toBe(true);
weave-js/src/components/PagePanelComponents/Home/Browse3/filters/SelectDatetimeDropdown.tsx (5)

76-100: Consolidate duplicate logic in handleInputChange and handleSuggestionClick.

The logic for parsing dates and updating state is duplicated in these two handlers. This could lead to maintenance issues and inconsistencies.

Extract the common logic into a separate function:

+ // Common function to update state and notify parent
+ const updateDateValue = (inputStr: string) => {
+   const date = parseDate(inputStr);
+   setParsedDate(date);
+   
+   // Call the parent onChange handler
+   if (date) {
+     onChange(dateToISOString(date));
+   } else {
+     onChange(inputStr);
+   }
+   
+   // Check against predefined suggestions
+   const isPredefined = predefinedSuggestions.some(
+     s => s.abbreviation === inputStr
+   );
+   if (!isPredefined) {
+     setSelectedSuggestion(null);
+   }
+ };

  const handleInputChange = (event: React.ChangeEvent<HTMLInputElement>) => {
    const newInputValue = event.target.value;
    setInputValue(newInputValue);
-
-    // Parse the input to get a date
-    const date = parseDate(newInputValue);
-    setParsedDate(date);
-
-    // Call the parent onChange handler with the timestamp
-    if (date) {
-      onChange(dateToISOString(date));
-    } else {
-      // If we couldn't parse a date, pass the raw input
-      // This allows for storing relative date strings like "3d" directly
-      onChange(newInputValue);
-    }
-
-    // Check against our predefined suggestions by their value
-    const isPredefined = predefinedSuggestions.some(
-      s => s.abbreviation === newInputValue
-    );
-    if (!isPredefined) {
-      setSelectedSuggestion(null);
-    }
+    updateDateValue(newInputValue);
  };

Then update the handleSuggestionClick function similarly.


117-137: Simplify the handleSuggestionClick function by using the extracted helper.

This handler can be simplified by using the common helper function suggested above.

  const handleSuggestionClick = (suggestionValue: string) => {
    setInputValue(suggestionValue);
-
-    // Parse the suggestion to get a date
-    const date = parseDate(suggestionValue);
-    setParsedDate(date);
-
-    // Call the parent onChange handler with the timestamp
-    if (date) {
-      onChange(dateToISOString(date));
-    } else {
-      // If we couldn't parse a date, pass the raw input
-      onChange(suggestionValue);
-    }
+    updateDateValue(suggestionValue);

    setSelectedSuggestion(suggestionValue);
    setDropdownVisible(false);
    if (inputRef.current) {
      inputRef.current.blur();
    }
  };

190-221: Extract inline styles to improve maintainability.

The component has extensive inline styles that make the JSX harder to read and maintain. Consider extracting them to styled components or a separate styles object.

You could define styles at the top of the file:

+ // Component styles
+ const styles = {
+   inputContainer: {
+     position: 'relative',
+     display: 'flex',
+     alignItems: 'center',
+     marginBottom: '5px',
+   },
+   icon: {
+     position: 'absolute',
+     top: '50%',
+     left: '9px',
+     transform: 'translateY(-50%)',
+     fontSize: '16px',
+   },
+   input: (isInputFocused: boolean, isInputHovered: boolean) => ({
+     padding: '4px 12px', 
+     paddingLeft: '32px',
+     paddingRight: '80px',
+     borderRadius: '4px',
+     border: 0,
+     boxShadow: isInputFocused
+       ? `0 0 0 2px ${TEAL_400}`
+       : isInputHovered
+       ? `0 0 0 2px ${TEAL_350}`
+       : `inset 0 0 0 1px ${MOON_250}`,
+     outline: 'none',
+     flex: 1,
+     height: '32px',
+     minHeight: '32px',
+     boxSizing: 'border-box',
+     fontSize: '16px',
+     lineHeight: '24px',
+     cursor: 'default',
+   }),
+   // ... other styles
+ };

// In the render function:
return (
  <div style={styles.inputContainer}>
    <Icon
      name="date"
      style={styles.icon}
    />
    <input
      type="text"
      value={inputValue}
      onChange={handleInputChange}
      onFocus={handleFocus}
      onBlur={handleBlur}
      onMouseEnter={handleInputMouseEnter}
      onMouseLeave={handleInputMouseLeave}
      placeholder="Enter a date..."
      style={styles.input(isInputFocused, isInputHovered)}
      ref={inputRef}
    />
    {/* Rest of the component */}
  </div>
);

62-75: Consider memoizing computed values to improve performance.

The computed values like yesterdayString and predefinedSuggestions will be recalculated on every render, but they could be memoized.

- // Compute yesterday's date string (date only, no time)
- const yesterdayDate = new Date();
- yesterdayDate.setDate(yesterdayDate.getDate() - 1);
- const yesterdayString = formatDateOnly(yesterdayDate);
-
- // Predefined suggestions with a nicename for each
- const yesterdaySuggestion: PredefinedSuggestion = {
-   abbreviation: yesterdayString,
-   label: 'Yesterday (Absolute)',
- };
- const predefinedSuggestions: PredefinedSuggestion[] = [
-   ...PREDEFINED_SUGGESTIONS,
-   yesterdaySuggestion,
- ];

+ // Memoize computations that don't depend on changing state
+ const predefinedSuggestions = React.useMemo(() => {
+   // Compute yesterday's date string (date only, no time)
+   const yesterdayDate = new Date();
+   yesterdayDate.setDate(yesterdayDate.getDate() - 1);
+   const yesterdayString = formatDateOnly(yesterdayDate);
+
+   // Predefined suggestions with a nicename for each
+   const yesterdaySuggestion: PredefinedSuggestion = {
+     abbreviation: yesterdayString,
+     label: 'Yesterday (Absolute)',
+   };
+   
+   return [
+     ...PREDEFINED_SUGGESTIONS,
+     yesterdaySuggestion,
+   ];
+ }, []);

141-145: Consider using React callback refs to avoid unnecessary renders.

The handleMouseLeave function is recreated on every render, but it could be defined once using useCallback.

- const handleMouseLeave = () => {
-   setHoveredIndex(null);
- };

+ const handleMouseLeave = React.useCallback(() => {
+   setHoveredIndex(null);
+ }, []);

Similar optimizations could be applied to the other simple event handlers.

weave-js/src/util/date.ts (3)

15-25: Simplify the input validation logic.

The current validation has redundant checks. The check for typeof dateStr !== 'string' is unnecessary since the function signature already declares dateStr as a string. Additionally, the early returns can be consolidated.

export const parseDate = (dateStr: string): Date | null => {
-  if (!dateStr || typeof dateStr !== 'string') {
+  if (!dateStr) {
    return null;
  }

  const now = new Date();

  // Trim the input
  const trimmedStr = dateStr.trim();
-  if (!trimmedStr) {
-    return null;
-  }
+  if (!trimmedStr) return null;

154-169: Apply consistent error handling pattern across similar blocks.

Similar to the other switch statements, this one should also have its case blocks wrapped in curly braces to prevent variable leakage.

switch (unit) {
  case 'day':
+   {
    result.setDate(result.getDate() - amount);
    break;
+   }
  case 'week':
+   {
    result.setDate(result.getDate() - amount * 7);
    break;
+   }
  case 'month':
+   {
    result.setMonth(result.getMonth() - amount);
    break;
+   }
  case 'year':
+   {
    result.setFullYear(result.getFullYear() - amount);
    break;
+   }
}

239-253: Consider extracting the month pattern matching logic into a helper function.

This loop pattern for matching month names appears twice in the code. Consider extracting it to a helper function to avoid duplication.

+ // Helper to check if a string matches month-year pattern
+ const checkMonthYearPattern = (
+   str: string, 
+   monthFirst: boolean
+ ): { match: boolean; year: number; monthIndex: number } | null => {
+   for (let i = 0; i < monthNames.length; i++) {
+     const fullPattern = monthFirst 
+       ? new RegExp(`^${monthNames[i]}\\s+(\\d{4})$`, 'i')
+       : new RegExp(`^(\\d{4})\\s+${monthNames[i]}$`, 'i');
+     const abbrPattern = monthFirst
+       ? new RegExp(`^${monthAbbreviations[i]}\\s+(\\d{4})$`, 'i')
+       : new RegExp(`^(\\d{4})\\s+${monthAbbreviations[i]}$`, 'i');
+  
+     const fullMatch = lowerStr.match(fullPattern);
+     const abbrMatch = lowerStr.match(abbrPattern);
+  
+     if (fullMatch || abbrMatch) {
+       const yearCapture = monthFirst ? 1 : 0;
+       const year = parseInt(fullMatch?.[1] || abbrMatch?.[1] || '0', 10);
+       return { match: true, year, monthIndex: i };
+     }
+   }
+   return null;
+ };

// Then use it in both places:
// For "Month YYYY" pattern
+ const monthFirstResult = checkMonthYearPattern(lowerStr, true);
+ if (monthFirstResult) {
+   return new Date(monthFirstResult.year, monthFirstResult.monthIndex, 1);
+ }

// Later for "YYYY Month" pattern
+ const yearFirstResult = checkMonthYearPattern(lowerStr, false);
+ if (yearFirstResult) {
+   return new Date(yearFirstResult.year, yearFirstResult.monthIndex, 1);
+ }
📜 Review details

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

📥 Commits

Reviewing files that changed from the base of the PR and between 1c34b09 and 67b41ec.

📒 Files selected for processing (3)
  • weave-js/src/components/PagePanelComponents/Home/Browse3/filters/SelectDatetimeDropdown.tsx (1 hunks)
  • weave-js/src/util/date.test.ts (1 hunks)
  • weave-js/src/util/date.ts (1 hunks)
🧰 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/util/date.ts
  • weave-js/src/components/PagePanelComponents/Home/Browse3/filters/SelectDatetimeDropdown.tsx
  • weave-js/src/util/date.test.ts
🪛 Biome (1.9.4)
weave-js/src/util/date.ts

[error] 36-36: 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] 40-40: 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] 44-44: 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] 48-48: 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)

⏰ Context from checks skipped due to timeout of 90000ms (886)
  • GitHub Check: Legacy (Query Service) Python unit tests (1)
  • GitHub Check: Legacy (Query Service) Python unit tests (0)
  • 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, mistral1)
  • GitHub Check: Trace nox tests (3, 13, mistral0)
  • GitHub Check: Trace nox tests (3, 13, llamaindex)
  • GitHub Check: Trace nox tests (3, 13, litellm)
  • 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, 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: Legacy (Query Service) Python unit tests (1)
  • GitHub Check: Legacy (Query Service) Python unit tests (0)
  • 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, 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: Legacy (Query Service) Python unit tests (1)
  • GitHub Check: Legacy (Query Service) Python unit tests (0)
  • 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, 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: notify-wandb-core
  • GitHub Check: Legacy (Query Service) Python unit tests (1)
  • GitHub Check: Legacy (Query Service) Python unit tests (0)
  • 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, 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: notify-wandb-core
  • GitHub Check: Legacy (Query Service) Python unit tests (1)
  • GitHub Check: Legacy (Query Service) Python unit tests (0)
  • 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, 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: notify-wandb-core
  • GitHub Check: Legacy (Query Service) Python unit tests (1)
  • GitHub Check: Legacy (Query Service) Python unit tests (0)
  • 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, 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: notify-wandb-core
  • GitHub Check: Legacy (Query Service) Python unit tests (1)
  • GitHub Check: Legacy (Query Service) Python unit tests (0)
  • 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, 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: Legacy (Query Service) Python unit tests (1)
  • GitHub Check: Legacy (Query Service) Python unit tests (0)
  • 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, 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: Legacy (Query Service) Python unit tests (1)
  • GitHub Check: Legacy (Query Service) Python unit tests (0)
  • 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, 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: Legacy (Query Service) Python unit tests (1)
  • GitHub Check: Legacy (Query Service) Python unit tests (0)
  • 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, 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 (5)
weave-js/src/util/date.test.ts (1)

29-42:

✅ Verification successful

Verify that mocking restores correctly.

Using jest.useFakeTimers() but later only restoring Date.now may leave the timers in a fake state. This could affect other tests in the same test suite.


🏁 Script executed:

#!/bin/bash
# Check if any other test files use timers that might be affected
rg "useFakeTimers|useRealTimers" --type ts --glob "!**/date.test.ts"

Length of output: 70


Timers Restoration Verified – No Action Needed

The afterAll block correctly restores both the mocked Date.now using mockRestore() and the timers by calling jest.useRealTimers(). The search for timer-related usage outside this file did not reveal evidence of interference with other tests. No modifications are required.

weave-js/src/util/date.ts (4)

180-194: Apply consistent error handling pattern here as well.

The same issue with variable leakage in switch cases exists here too.

switch (unit) {
  case 'day':
+   {
    result.setDate(result.getDate() + amount);
    break;
+   }
  case 'week':
+   {
    result.setDate(result.getDate() + amount * 7);
    break;
+   }
  case 'month':
+   {
    result.setMonth(result.getMonth() + amount);
    break;
+   }
  case 'year':
+   {
    result.setFullYear(result.getFullYear() + amount);
    break;
+   }
}

283-296: Apply consistent error handling pattern to this switch statement as well.

The issue with variable leakage in switch cases applies to this block too.

switch (unit) {
  case 'day':
+   {
    result.setDate(result.getDate() + amount * multiplier);
    break;
+   }
  case 'week':
+   {
    result.setDate(result.getDate() + amount * 7 * multiplier);
    break;
+   }
  case 'month':
+   {
    result.setMonth(result.getMonth() + amount * multiplier);
    break;
+   }
  case 'year':
+   {
    result.setFullYear(result.getFullYear() + amount * multiplier);
    break;
+   }
}

130-143: Apply consistent error handling pattern to this switch statement.

The same issue with variable leakage in switch cases exists here as well.

switch (unit) {
  case 'day':
+   {
    result.setDate(result.getDate() + multiplier);
    break;
+   }
  case 'week':
+   {
    result.setDate(result.getDate() + multiplier * 7);
    break;
+   }
  case 'month':
+   {
    result.setMonth(result.getMonth() + multiplier);
    break;
+   }
  case 'year':
+   {
    result.setFullYear(result.getFullYear() + multiplier);
    break;
+   }
}

54-59:

✅ Verification successful

Consider handling moment deprecation warnings.

Moment.js is considered legacy and displays deprecation warnings. Consider moving to a more modern alternative like date-fns or Luxon in future iterations.


🌐 Web query:

Is Moment.js still maintained? What are the recommended alternatives?

💡 Result:

Moment.js entered maintenance mode in September 2020 and is no longer actively developed, though critical security fixes may still be addressed[1][7]. The team explicitly states it should not be used for new projects due to design limitations from its 2011 architecture[1][2].

Why Moment.js is deprecated

  • Bundle size: 67.9KB minified (vs 2KB for Day.js)[3][4], causing performance issues
  • Mutability: Date objects can be accidentally modified, introducing bugs[3][8]
  • No tree-shaking: Entire library must be imported regardless of features used[3][8]
  • Legacy design: Lacks modern ES module support and native Intl API integration[2][7]

Recommended alternatives

Library Key Features Bundle Size
Luxon Immutable API, native timezone support via Intl, Moment-like syntax[2][5] 68KB
Day.js Moment-compatible API, plugin system, immutable operations[3][5] 2KB
date-fns Modular functions, pure functions, TypeScript support[4][5][8] 8KB core

Luxon (by Moment.js maintainers) is ideal for complex date logic and timezone handling[2][5]. Day.js offers the easiest migration path from Moment.js with nearly identical syntax[3][5]. date-fns provides functional programming patterns and optimal bundle control through tree-shaking[4][8].

For modern applications, Chrome DevTools now warns about Moment.js usage due to performance impacts[4][8]. The TC39 Temporal proposal (Stage 3) may eventually replace these libraries with native date/time APIs[5].

Citations:


Deprecation Warning Handling for Moment.js

The code in weave-js/src/util/date.ts currently uses Moment.js for date parsing, which is acceptable for now but comes with a significant caveat—Moment.js entered maintenance mode back in September 2020 and is considered legacy. This means you'll encounter deprecation warnings along with other limitations (e.g., bundle size, mutability, lack of native ES module support).

For future iterations, please consider the following:

  • Evaluate Alternatives: Look into modern libraries such as Luxon (for a Moment-like experience with native timezone support), Day.js (for an almost drop-in replacement with a much smaller footprint), or date-fns (for modular, functional date utilities).
  • Plan for Migration: Even if no immediate change is required, planning ahead for a migration can avoid technical debt—especially as browser tools and performance audits now flag Moment.js usage.

Comment on lines 258 to 272
{parsedDate && (
<li
style={{
padding: '8px',
borderBottom: '1px solid #eee',
color: '#555',
cursor: 'default',
}}>
{/* Dynamic label for relative or absolute */}
<strong>
{isRelativeDate(inputValue) ? 'Relative:' : 'Absolute:'}
</strong>{' '}
{formatDate(parsedDate)}
</li>
)}
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

Add keyboard navigation for the dropdown suggestions.

The dropdown can be navigated with the mouse, but there's no keyboard support which limits accessibility.

Add keyboard support for navigating suggestions:

// Add keyboard navigation state and handlers
+ const [keyboardFocusIndex, setKeyboardFocusIndex] = useState<number | null>(null);
+
+ const handleKeyDown = (event: React.KeyboardEvent<HTMLInputElement>) => {
+   if (!isDropdownVisible) {
+     if (event.key === 'ArrowDown' || event.key === 'Enter') {
+       setDropdownVisible(true);
+       return;
+     }
+     return;
+   }
+   
+   switch (event.key) {
+     case 'ArrowDown':
+       event.preventDefault();
+       setKeyboardFocusIndex(prev => 
+         prev === null || prev >= predefinedSuggestions.length - 1 ? 0 : prev + 1
+       );
+       break;
+     case 'ArrowUp':
+       event.preventDefault();
+       setKeyboardFocusIndex(prev => 
+         prev === null || prev <= 0 ? predefinedSuggestions.length - 1 : prev - 1
+       );
+       break;
+     case 'Enter':
+       if (keyboardFocusIndex !== null) {
+         event.preventDefault();
+         handleSuggestionClick(predefinedSuggestions[keyboardFocusIndex].abbreviation);
+       }
+       break;
+     case 'Escape':
+       event.preventDefault();
+       setDropdownVisible(false);
+       break;
+   }
+ };

// Add the event handler to the input
<input
  type="text"
  value={inputValue}
  onChange={handleInputChange}
  onFocus={handleFocus}
  onBlur={handleBlur}
+ onKeyDown={handleKeyDown}
  onMouseEnter={handleInputMouseEnter}
  onMouseLeave={handleInputMouseLeave}
  placeholder="Enter a date..."
  // ...
/>

// Update dropdown styling to show keyboard focus
<li
  key={index}
  onClick={() => handleSuggestionClick(suggestion.abbreviation)}
  onMouseEnter={() => handleMouseEnter(index)}
  onMouseLeave={handleMouseLeave}
  style={{
    padding: '8px',
    cursor: 'pointer',
    backgroundColor:
      selectedSuggestion === suggestion.abbreviation
        ? hoveredIndex === index
          ? '#f8f8f8'
          : '#E1F7FA'
        : hoveredIndex === index || keyboardFocusIndex === index
        ? '#f8f8f8'
        : '#fff',
  }}
  onMouseDown={e => e.preventDefault()}>
  {/* ... */}
</li>

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant