Skip to content

convert cli to debugger of cloud infrastructure - #100

Merged
priyanshujain merged 2 commits into
masterfrom
cli-debugger-v0
Jul 30, 2025
Merged

convert cli to debugger of cloud infrastructure#100
priyanshujain merged 2 commits into
masterfrom
cli-debugger-v0

Conversation

@priyanshujain

@priyanshujain priyanshujain commented Jul 13, 2025

Copy link
Copy Markdown
Collaborator

Summary by CodeRabbit

  • Refactor

    • Updated internal module paths and reorganized imports to use a new namespace throughout the CLI codebase.
    • Switched the build system to hatchling and moved dependency management from requirements.txt to a static list in the project configuration.
    • Adjusted the CLI entry point and script references to the new structure.
  • Chores

    • Modernized and streamlined GitHub Actions workflows for deployment, publishing, and testing.
    • Adopted the uv toolchain for environment setup, building, and publishing.
    • Limited CI tests to Python 3.13 and focused workflows on the CLI directory.
    • Removed requirements.txt in favor of centralized dependency management.

@coderabbitai

coderabbitai Bot commented Jul 13, 2025

Copy link
Copy Markdown

Walkthrough

The changes refactor the CLI project’s Python module structure and update its build, test, and deployment workflows. All import paths in the CLI codebase are migrated from the cli namespace to infragpt. The build system is switched from setuptools to hatchling, dependencies are moved from requirements.txt to pyproject.toml, and GitHub Actions workflows are updated to use the uv toolchain and Python 3.13.

Changes

File(s) Change Summary
.github/workflows/cli-deploy.yml, .github/workflows/publish.yml, .github/workflows/test.yml GitHub Actions workflows updated to use uv toolchain, Python 3.13, and improved CLI subdirectory handling.
cli/pyproject.toml Switched build backend from setuptools to hatchling, moved dependencies from dynamic to static, updated entrypoint.
requirements.txt File deleted; dependencies now managed in pyproject.toml.
cli/src/infragpt/main.py, cli/src/infragpt/config.py, cli/src/infragpt/llm/init.py, cli/src/infragpt/llm/auth.py, cli/src/infragpt/llm/client.py, cli/src/infragpt/llm_adapter.py, cli/src/infragpt/main.py, cli/src/infragpt/prompts.py All imports updated from cli.* or llm.* to infragpt.*; no logic changes.

Sequence Diagram(s)

sequenceDiagram
    participant Developer
    participant GitHub Actions
    participant uv Toolchain
    participant PyPI

    Developer->>GitHub Actions: Push/PR (CLI changes)
    GitHub Actions->>uv Toolchain: Install uv, Python 3.13
    GitHub Actions->>uv Toolchain: Sync/install dependencies
    GitHub Actions->>uv Toolchain: Build package (uv build)
    GitHub Actions->>uv Toolchain: Run tests (pytest)
    GitHub Actions->>uv Toolchain: Install and run twine check
    alt On publish workflow
        GitHub Actions->>PyPI: Upload package (twine upload)
    end
Loading

Poem

🐇
Refactored paths, a tidy warren,
Imports now in neat array,
Setuptools hops out, hatchling’s in—
With uv tools, we build and spin!
The old requirements, swept away,
Infragpt leaps to a brighter day.

✨ Finishing Touches
  • 📝 Generate Docstrings

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ 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.
    • Explain this complex logic.
    • 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 explain this code block.
    • @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 explain its main purpose.
    • @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.

Support

Need help? Create a ticket on our support page for assistance with any issues or questions.

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 generate sequence diagram to generate a sequence diagram of the changes in 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.

CodeRabbit Configuration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • Please see the configuration documentation for more information.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

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.

@priyanshujain
priyanshujain marked this pull request as draft July 13, 2025 15:17
@priyanshujain priyanshujain self-assigned this Jul 13, 2025

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 3

🔭 Outside diff range comments (1)
cli/src/infragpt/main.py (1)

88-91: Fix parameter mismatch – verbose is being passed as api_key.

generate_gcloud_command() expects (prompt, model_type, api_key, *, …).
Passing the boolean verbose in the positional api_key slot makes every call fail authentication.

-                result = generate_gcloud_command(user_input, model_type, verbose)
+                result = generate_gcloud_command(
+                    user_input,
+                    model_type,
+                    api_key,
+                )

If you later need verbose inside generate_gcloud_command, expose it as a keyword arg.
Without this patch interactive mode cannot work when verbose=True.

🧹 Nitpick comments (14)
cli/src/infragpt/config.py (1)

55-61: Potential duplication / divergence of validate_env_api_keys logic

init_config() now imports validate_env_api_keys from infragpt.llm, while a function with the same name also exists in infragpt.llm_adapter.
Having two sources of truth will drift over time and confuse callers.

Action items:

  1. Consolidate the helper in a single module and re-export if needed.
  2. Add unit tests ensuring both config.init_config() and llm_adapter.validate_env_api_keys() stay in sync.
cli/src/infragpt/llm_adapter.py (1)

17-29: Imports updated correctly, but reinforce single-source philosophy

Imports now target the infragpt namespace—good.
Given the duplication noted in config.py, consider importing validate_env_api_keys from the canonical module instead of maintaining an identical implementation here.

No blocking issues, just maintainability advice.

cli/src/infragpt/main.py (1)

22-31: Remove unused imports to satisfy Ruff and avoid dead code.

CONFIG_FILE and validate_env_api_keys are never referenced in this module. Keep console, generate_gcloud_command, etc., but drop the unused names to silence Ruff-F401 and reduce mental noise.

-from infragpt.config import (
-    CONFIG_FILE, load_config, init_config, console
-)
-from infragpt.llm_adapter import (
-    generate_gcloud_command, validate_env_api_keys, prompt_credentials
-)
+from infragpt.config import load_config, init_config, console
+from infragpt.llm_adapter import generate_gcloud_command, prompt_credentials
cli/src/infragpt/llm/client.py (2)

16-19: Drop unused ValidationError import.

ValidationError is not referenced anywhere in this file. Remove it to satisfy Ruff-F401.

-from infragpt.llm.errors import AuthenticationError, GenerationError, ValidationError
+from infragpt.llm.errors import AuthenticationError, GenerationError

198-204: Import ParsingError once at module top to avoid duplication inside except blocks.

Repeated local imports add overhead and obscure stack traces. Move the import to the header and reuse it.

-    except json.JSONDecodeError as e:
-        from infragpt.llm.errors import ParsingError
+    except json.JSONDecodeError as e:
         raise ParsingError(f"Failed to parse parameter info: {str(e)}") from e
     except Exception as e:
-        # Wrap other errors
-        from infragpt.llm.errors import ParsingError
+        # Wrap other errors
         raise ParsingError(f"Failed to get parameter info: {str(e)}") from e

And add near the other top-level imports:

from infragpt.llm.errors import ParsingError
cli/pyproject.toml (1)

22-31: Optional: move dev extras under [project.optional-dependencies] for PEP 621 compliance.

[dependency-groups] is specific to Hatch; if wider tooling (e.g., pip, poetry) is expected, expose dev deps in the standard table:

[project.optional-dependencies]
dev = [
    "pytest>=8.4.1",
]
.github/workflows/publish.yml (3)

14-18: Trim the trailing whitespace & pin the UV version.
Line 18 has trailing spaces that break YAML-lint, and using version: "latest" makes your build non-deterministic.

-          version: "latest"  
+          # Pin to the latest *major* you know works
+          version: "0.2.8"

22-26: Cache the build artefacts to speed up CI.
uv build re-computes wheels every run. Consider caching $HOME/.cache/uv between jobs to cut several minutes off the workflow.


27-35: Reuse the existing environment instead of reinstalling Twine.
uv tool install twine creates a fresh venv each call. You can install Twine once in the build step (or use uv pip install) and reuse it here, saving ~10 s.

.github/workflows/test.yml (5)

23-23: Remove stray trailing spaces.
Line 23 violates YAML-lint.

-      
+

24-31: Pin UV version & document the install.
Same comments as in the publish workflow: pin a known-good version and avoid breakage when setup-uv ships breaking changes.


32-37: Use a lock-file driven sync.
uv sync without a lock file silently installs latest deps, defeating reproducibility. Commit uv.lock (or requirements.lock) and run uv sync --strict.


46-50: Surface skipped-tests as a warning.
Silently skipping tests can mask omissions. Exit with non-zero when tests/ is missing or at least emit a workflow warning.


54-57: Avoid redundant wheel builds in test job.
uv build + twine check is valuable in a separate “package” job but slows the test matrix. Consider splitting into a dedicated build workflow or use needs.

📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 2241820 and e852cc9.

⛔ Files ignored due to path filters (2)
  • cli/uv.lock is excluded by !**/*.lock
  • uv.lock is excluded by !**/*.lock
📒 Files selected for processing (13)
  • .github/workflows/cli-deploy.yml (2 hunks)
  • .github/workflows/publish.yml (1 hunks)
  • .github/workflows/test.yml (2 hunks)
  • cli/pyproject.toml (2 hunks)
  • cli/src/infragpt/__main__.py (1 hunks)
  • cli/src/infragpt/config.py (1 hunks)
  • cli/src/infragpt/llm/__init__.py (1 hunks)
  • cli/src/infragpt/llm/auth.py (1 hunks)
  • cli/src/infragpt/llm/client.py (2 hunks)
  • cli/src/infragpt/llm_adapter.py (1 hunks)
  • cli/src/infragpt/main.py (1 hunks)
  • cli/src/infragpt/prompts.py (1 hunks)
  • requirements.txt (0 hunks)
💤 Files with no reviewable changes (1)
  • requirements.txt
🧰 Additional context used
🧠 Learnings (3)
.github/workflows/cli-deploy.yml (2)
Learnt from: CR
PR: priyanshujain/infragpt#0
File: services/website/CLAUDE.md:0-0
Timestamp: 2025-06-30T17:03:50.266Z
Learning: Applies to services/website/.github/workflows/**/*.yml : Automated deployment must be configured via GitHub Actions for Netlify deployment
Learnt from: CR
PR: priyanshujain/infragpt#0
File: services/website/CLAUDE.md:0-0
Timestamp: 2025-06-30T17:03:50.266Z
Learning: Applies to services/website/.github/workflows/**/*.yml : npm cache optimization must be used for faster CI builds
.github/workflows/publish.yml (1)
Learnt from: CR
PR: priyanshujain/infragpt#0
File: services/website/CLAUDE.md:0-0
Timestamp: 2025-06-30T17:03:50.266Z
Learning: Applies to services/website/.github/workflows/**/*.yml : Build process must run Astro build and deploy to Netlify on main branch pushes
.github/workflows/test.yml (2)
Learnt from: CR
PR: priyanshujain/infragpt#0
File: services/website/CLAUDE.md:0-0
Timestamp: 2025-06-30T17:03:50.266Z
Learning: Applies to services/website/.github/workflows/**/*.yml : npm cache optimization must be used for faster CI builds
Learnt from: CR
PR: priyanshujain/infragpt#0
File: services/website/CLAUDE.md:0-0
Timestamp: 2025-06-30T17:03:50.266Z
Learning: Applies to services/website/.github/workflows/**/*.yml : Build process must run Astro build and deploy to Netlify on main branch pushes
🧬 Code Graph Analysis (5)
cli/src/infragpt/llm/auth.py (1)
cli/src/infragpt/llm/errors.py (1)
  • AuthenticationError (11-13)
cli/src/infragpt/__main__.py (1)
cli/src/infragpt/main.py (2)
  • main (122-159)
  • cli (108-112)
cli/src/infragpt/llm_adapter.py (2)
cli/src/infragpt/config.py (2)
  • load_config (23-33)
  • save_config (35-44)
cli/src/infragpt/history.py (1)
  • log_interaction (20-41)
cli/src/infragpt/llm/client.py (3)
cli/src/infragpt/llm/errors.py (4)
  • AuthenticationError (11-13)
  • GenerationError (16-18)
  • ValidationError (26-28)
  • ParsingError (21-23)
cli/src/infragpt/llm/auth.py (1)
  • validate_api_key (15-59)
cli/src/infragpt/llm/prompts.py (1)
  • get_prompt_template (68-85)
cli/src/infragpt/config.py (2)
cli/src/infragpt/history.py (1)
  • init_history_dir (61-63)
cli/src/infragpt/llm_adapter.py (1)
  • validate_env_api_keys (210-248)
🪛 Ruff (0.11.9)
cli/src/infragpt/llm/auth.py

12-12: infragpt.llm.errors.AuthenticationError imported but unused

Remove unused import: infragpt.llm.errors.AuthenticationError

(F401)

cli/src/infragpt/main.py

23-23: infragpt.config.CONFIG_FILE imported but unused

Remove unused import: infragpt.config.CONFIG_FILE

(F401)


27-27: infragpt.llm_adapter.validate_env_api_keys imported but unused

Remove unused import: infragpt.llm_adapter.validate_env_api_keys

(F401)

cli/src/infragpt/llm/__init__.py

14-14: infragpt.llm.client.get_llm_client imported but unused; consider removing, adding to __all__, or using a redundant alias

(F401)


15-15: infragpt.llm.client.generate_gcloud_command imported but unused; consider removing, adding to __all__, or using a redundant alias

(F401)


16-16: infragpt.llm.client.get_parameter_info imported but unused; consider removing, adding to __all__, or using a redundant alias

(F401)


20-20: infragpt.llm.auth.validate_api_key imported but unused; consider removing, adding to __all__, or using a redundant alias

(F401)


23-23: infragpt.llm.prompts.get_prompt_template imported but unused; consider removing, adding to __all__, or using a redundant alias

(F401)


23-23: infragpt.llm.prompts.format_prompt imported but unused; consider removing, adding to __all__, or using a redundant alias

(F401)


26-26: infragpt.llm.models.MODEL_TYPE imported but unused; consider removing, adding to __all__, or using a redundant alias

(F401)

cli/src/infragpt/llm/client.py

17-17: infragpt.llm.errors.ValidationError imported but unused

Remove unused import: infragpt.llm.errors.ValidationError

(F401)

🪛 YAMLlint (1.37.1)
.github/workflows/publish.yml

[error] 18-18: trailing spaces

(trailing-spaces)

.github/workflows/test.yml

[error] 23-23: trailing spaces

(trailing-spaces)


[error] 28-28: trailing spaces

(trailing-spaces)

🔇 Additional comments (6)
cli/src/infragpt/__main__.py (1)

4-4: Import path update looks good

The switch to infragpt.main.cli aligns with the new package layout; no further action needed.

cli/src/infragpt/prompts.py (1)

15-22: Import realignment looks fine

All references now point to the infragpt namespace and the symbols are used below—no issues spotted.

.github/workflows/cli-deploy.yml (1)

26-29: Verify that actions/setup-python@v5 supports python-version: "3.13".

At the time of writing, 3.13 is still pre-release. If the image is unavailable the job will fail. Consider pinning to 3.12 until GA or adding a matrix to fall back.

cli/pyproject.toml (1)

11-12: Confirm ecosystem support for Python ≥ 3.13.

Several pinned dependencies (langchain-*, prompt-toolkit, etc.) may not yet publish wheels for 3.13. Build failures will surface only in CI. Validate compatibility or loosen the requires-python constraint to >=3.10.

.github/workflows/publish.yml (1)

19-21: Double-check Python 3.13 availability on runners.
uv python install 3.13 will fail until 3.13 is published on python.org + cached by setup-uv. Verify that the release is GA and supported on GHA; otherwise fall back to the latest stable (3.12).

.github/workflows/test.yml (1)

6-10: Path filter excludes root-level changes that break the CLI.
Running tests only when cli/** changes means updates to shared libs or GH-Actions files won’t trigger the suite. Ensure this is intentional.

Comment on lines +11 to +12
from infragpt.llm.models import MODEL_TYPE
from infragpt.llm.errors import AuthenticationError

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

⚠️ Potential issue

Remove unused AuthenticationError import to satisfy Ruff F401

AuthenticationError isn’t referenced anywhere in this module. Keeping it triggers the Ruff F401 warning and may cause CI to fail if warnings are treated as errors.

-from infragpt.llm.models import MODEL_TYPE
-from infragpt.llm.errors import AuthenticationError
+from infragpt.llm.models import MODEL_TYPE
📝 Committable suggestion

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

Suggested change
from infragpt.llm.models import MODEL_TYPE
from infragpt.llm.errors import AuthenticationError
from infragpt.llm.models import MODEL_TYPE
🧰 Tools
🪛 Ruff (0.11.9)

12-12: infragpt.llm.errors.AuthenticationError imported but unused

Remove unused import: infragpt.llm.errors.AuthenticationError

(F401)

🤖 Prompt for AI Agents
In cli/src/infragpt/llm/auth.py at lines 11 to 12, the import statement includes
AuthenticationError which is not used anywhere in the file. Remove the import of
AuthenticationError from the import line to resolve the Ruff F401 unused import
warning and prevent potential CI failures.

Comment on lines 12 to 30
# Public exports from client.py
from llm.client import (
from infragpt.llm.client import (
get_llm_client,
generate_gcloud_command,
get_parameter_info,
)

# Public exports from auth.py
from llm.auth import validate_api_key
from infragpt.llm.auth import validate_api_key

# Public exports from prompts.py
from llm.prompts import get_prompt_template, format_prompt
from infragpt.llm.prompts import get_prompt_template, format_prompt

# Public exports from models.py
from llm.models import MODEL_TYPE
from infragpt.llm.models import MODEL_TYPE

# Public exports from errors.py
from llm.errors import (
from infragpt.llm.errors import (
LLMError,

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🛠️ Refactor suggestion

Add __all__ to make re-exports explicit and silence F401.

The wildcard re-exports are intentional, but Ruff flags them as unused.
Publish them cleanly and document the public surface by adding __all__.

 from infragpt.llm.client import (
     get_llm_client,
     generate_gcloud_command,
     get_parameter_info,
 )

 ...
 from infragpt.llm.errors import (
     LLMError,
     AuthenticationError,
     GenerationError,
     ParsingError,
     ValidationError,
     ConfigurationError,
 )

+# Public API of infragpt.llm
+__all__ = [
+    "get_llm_client",
+    "generate_gcloud_command",
+    "get_parameter_info",
+    "validate_api_key",
+    "get_prompt_template",
+    "format_prompt",
+    "MODEL_TYPE",
+    # errors
+    "LLMError",
+    "AuthenticationError",
+    "GenerationError",
+    "ParsingError",
+    "ValidationError",
+    "ConfigurationError",
+]
📝 Committable suggestion

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

Suggested change
# Public exports from client.py
from llm.client import (
from infragpt.llm.client import (
get_llm_client,
generate_gcloud_command,
get_parameter_info,
)
# Public exports from auth.py
from llm.auth import validate_api_key
from infragpt.llm.auth import validate_api_key
# Public exports from prompts.py
from llm.prompts import get_prompt_template, format_prompt
from infragpt.llm.prompts import get_prompt_template, format_prompt
# Public exports from models.py
from llm.models import MODEL_TYPE
from infragpt.llm.models import MODEL_TYPE
# Public exports from errors.py
from llm.errors import (
from infragpt.llm.errors import (
LLMError,
# Public exports from client.py
from infragpt.llm.client import (
get_llm_client,
generate_gcloud_command,
get_parameter_info,
)
# Public exports from auth.py
from infragpt.llm.auth import validate_api_key
# Public exports from prompts.py
from infragpt.llm.prompts import get_prompt_template, format_prompt
# Public exports from models.py
from infragpt.llm.models import MODEL_TYPE
# Public exports from errors.py
from infragpt.llm.errors import (
LLMError,
AuthenticationError,
GenerationError,
ParsingError,
ValidationError,
ConfigurationError,
)
# Public API of infragpt.llm
__all__ = [
"get_llm_client",
"generate_gcloud_command",
"get_parameter_info",
"validate_api_key",
"get_prompt_template",
"format_prompt",
"MODEL_TYPE",
# errors
"LLMError",
"AuthenticationError",
"GenerationError",
"ParsingError",
"ValidationError",
"ConfigurationError",
]
🧰 Tools
🪛 Ruff (0.11.9)

14-14: infragpt.llm.client.get_llm_client imported but unused; consider removing, adding to __all__, or using a redundant alias

(F401)


15-15: infragpt.llm.client.generate_gcloud_command imported but unused; consider removing, adding to __all__, or using a redundant alias

(F401)


16-16: infragpt.llm.client.get_parameter_info imported but unused; consider removing, adding to __all__, or using a redundant alias

(F401)


20-20: infragpt.llm.auth.validate_api_key imported but unused; consider removing, adding to __all__, or using a redundant alias

(F401)


23-23: infragpt.llm.prompts.get_prompt_template imported but unused; consider removing, adding to __all__, or using a redundant alias

(F401)


23-23: infragpt.llm.prompts.format_prompt imported but unused; consider removing, adding to __all__, or using a redundant alias

(F401)


26-26: infragpt.llm.models.MODEL_TYPE imported but unused; consider removing, adding to __all__, or using a redundant alias

(F401)


30-30: infragpt.llm.errors.LLMError imported but unused; consider removing, adding to __all__, or using a redundant alias

(F401)

🤖 Prompt for AI Agents
In cli/src/infragpt/llm/__init__.py around lines 12 to 30, the imported symbols
are re-exported but not explicitly declared, causing linter (Ruff) to flag them
as unused (F401). To fix this, define a __all__ list that includes all the
public symbols you want to export from this module. This will make the
re-exports explicit, document the public API surface, and silence the unused
import warnings.

strategy:
matrix:
python-version: ["3.9", "3.13"]
python-version: ["3.13"]

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🛠️ Refactor suggestion

Add at least one released Python version to the matrix.
Limiting the matrix to 3.13 removes test coverage on the versions your users actually run today (3.11/3.12). Keep 3.13 for bleeding-edge plus one LTS.

🤖 Prompt for AI Agents
In .github/workflows/test.yml at line 19, the Python version matrix currently
includes only version 3.13, which excludes testing on stable and widely used
versions like 3.11 and 3.12. Update the python-version array to include at least
one released version such as 3.11 or 3.12 alongside 3.13 to ensure broader test
coverage across commonly used Python versions.

@priyanshujain
priyanshujain marked this pull request as ready for review July 30, 2025 07:52
@priyanshujain
priyanshujain merged commit aac778a into master Jul 30, 2025
1 check was pending
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