Skip to content

Conversation

@tqchen
Copy link
Member

@tqchen tqchen commented Feb 2, 2026

Previously we relied on a special error to handle EnvErrorAlreadySet, this PR updates the behavior so that the Error being thrown can also have kind EnvErrorAlreadySet, which indicate there is an interrupt. This allows the error handling behavior to be overall simpler and more consistent, removing boliler plate in C++ exposure.

ABI impact: this change only impacts the downstream c++ usage that uses EnvErrorAlreadySet. The downstream DSLs and libraries are not impacted by this change.

The only usecase so far is tvm compiler autotuning service to propagate KeyboardInterrupt. Given the benefit and limited impact, we could consider bring it in, since it simplifies the checking and throw logics in the function and further streamlines error handling.

@gemini-code-assist
Copy link
Contributor

Summary of Changes

Hello @tqchen, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

This pull request streamlines the error handling mechanism by integrating the EnvErrorAlreadySet concept directly into the general Error object's kind attribute. This change eliminates a dedicated return code and a separate exception type, leading to a more consistent and less boilerplate-heavy approach for C++ error propagation, particularly beneficial for scenarios like propagating KeyboardInterrupt from Python.

Highlights

  • Unified Error Handling: The special EnvErrorAlreadySet exception and its corresponding -2 return code have been removed. Instead, EnvErrorAlreadySet is now represented as a standard Error object with its kind field set to 'EnvErrorAlreadySet'.
  • Simplified C++ API: The C++ FFI layer no longer needs to explicitly catch EnvErrorAlreadySet or handle the -2 return code, simplifying the error propagation logic.
  • Backward Compatibility: Python-side Cython bindings (error.pxi, function.pxi, type_info.pxi) retain checks for the -2 return code for backward compatibility, with a TODO to remove it in future versions.
  • Documentation Updates: The documentation for the C API (c_api.h) and Python language guide (python_lang_guide.md) has been updated to reflect the removal of the -2 error code.

🧠 New Feature in Public Preview: You can now enable Memory to help Gemini Code Assist learn from your team's feedback. This makes future code reviews more consistent and personalized to your project's style. Click here to enable Memory in your admin console.

Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here.

You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

Copy link
Contributor

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

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

Code Review

This pull request refactors the error handling for EnvErrorAlreadySet by making it a kind of ffi::Error instead of a separate exception type. This simplifies the error handling logic across the C++ and Python FFI boundaries. The changes look good and are consistent. I've identified some code duplication in the Cython files and suggested a refactoring to improve maintainability by introducing a shared helper function for error checking.

@tqchen
Copy link
Member Author

tqchen commented Feb 2, 2026

cc @guan404ming

@tqchen tqchen force-pushed the env-signal-compact branch from f2b5959 to d358b4c Compare February 2, 2026 20:36
Previously we relied on a special error to handle EnvErrorAlreadySet,
this PR updates the behavior so that the Error being thrown can also have
kind EnvErrorAlreadySet, which indicate there is an interrupt. This allows
the error handling behavior to be overall simpler and more consistent,
removing boliler plate in C++ exposure.

ABI impact: this change only impacts the downstream c++ usage that uses EnvErrorAlreadySet.
The downstream DSLs and libraries are not impacted by this change.

The only usecase so far is tvm compiler autotuning service to propagate KeyboardInterrupt.
Given the benefit and limited impact, we could consider bring it in, since it simplifies
the checking and throw logics in the function and further streamlines error handling.
@tqchen tqchen force-pushed the env-signal-compact branch from d358b4c to 4510cdf Compare February 2, 2026 20:38
@tqchen tqchen merged commit b1611e0 into apache:main Feb 3, 2026
12 of 13 checks passed
@guan404ming
Copy link
Member

Thanks for this @tqchen!

guan404ming added a commit to guan404ming/tvm-ffi that referenced this pull request Feb 3, 2026
Signed-off-by: Guan-Ming Chiu <guanmingchiu@gmail.com>
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.

3 participants