Skip to content

skills: consolidate three numerical-optimization API skills into one#1489

Open
ramakrishnap-nv wants to merge 1 commit into
mainfrom
skills/consolidate-numerical-optimization-api
Open

skills: consolidate three numerical-optimization API skills into one#1489
ramakrishnap-nv wants to merge 1 commit into
mainfrom
skills/consolidate-numerical-optimization-api

Conversation

@ramakrishnap-nv

Copy link
Copy Markdown
Collaborator

Merges cuopt-numerical-optimization-api-python, -api-c, and -api-cli into a single cuopt-numerical-optimization-api skill.

  • Shared content (LP/MILP/QP selection, QP rules, dual values, common issues) in SKILL.md
  • Interface-specific syntax and examples in references/python_api.md, references/c_api.md, references/cli_api.md
  • Assets reorganized under assets/python/, assets/c/, assets/cli/
  • Evals merged (9 total)
  • Updated AGENTS.md, marketplace.json, and cross-references

🤖 Generated with Claude Code

Merged cuopt-numerical-optimization-api-python, -api-c, and -api-cli into
a single cuopt-numerical-optimization-api skill. Shared concepts (LP/MILP/QP
selection, QP rules, dual values, common issues) live in SKILL.md; interface-
specific syntax and examples move to references/python_api.md, references/c_api.md,
and references/cli_api.md. Assets reorganized under assets/python/, assets/c/,
and assets/cli/. Evals merged (9 total). Updated AGENTS.md, marketplace.json,
and cross-references in cuopt-multi-objective-exploration and cuopt-skill-evolution.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@ramakrishnap-nv ramakrishnap-nv requested a review from a team as a code owner June 29, 2026 21:58
@ramakrishnap-nv ramakrishnap-nv requested a review from Iroy30 June 29, 2026 21:58
@coderabbitai

coderabbitai Bot commented Jun 29, 2026

Copy link
Copy Markdown

Review Change Stack

📝 Walkthrough

Walkthrough

Three per-interface numerical optimization skills (cuopt-numerical-optimization-api-python, -c, -cli) are replaced by a single cuopt-numerical-optimization-api skill. The new skill contains a unified SKILL.md, per-interface reference docs (python_api.md, c_api.md, cli_api.md), and a merged 9-item evals.json. Cross-references in marketplace.json, AGENTS.md, and dependent skills are updated accordingly.

Changes

Consolidated numerical optimization skill

Layer / File(s) Summary
Remove per-interface skill content
skills/cuopt-numerical-optimization-api-c/..., skills/cuopt-numerical-optimization-api-cli/..., skills/cuopt-numerical-optimization-api-python/...
Empties all SKILL.md, BENCHMARK.md, evals.json, skill-card.md, skill.oms.sig, and reference files from the three per-interface skill directories.
New consolidated SKILL.md and evals
skills/cuopt-numerical-optimization-api/SKILL.md, skills/cuopt-numerical-optimization-api/evals/evals.json
Adds the unified skill document covering interface selection, LP/MILP/QP decision rules, dual value availability, and troubleshooting, plus 9 evaluation items spanning Python, C, and CLI behaviors.
Per-interface reference docs
skills/cuopt-numerical-optimization-api/references/python_api.md, .../c_api.md, .../cli_api.md
Adds three interface-specific reference pages with worked examples, API call sequences, status string requirements, parameter constants, MPS formatting rules, and troubleshooting tables.
Cross-reference and registry updates
.claude-plugin/marketplace.json, AGENTS.md, skills/cuopt-multi-objective-exploration/SKILL.md, skills/cuopt-skill-evolution/SKILL.md, skillcritic-report.txt
Updates the plugin registry entry, AGENTS.md directory pointer, and interface references in dependent skills to use the consolidated skill name; adds a SkillCritic diagnostic report.

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~10 minutes

Possibly related issues

Possibly related PRs

  • NVIDIA/cuopt#1487: Both PRs modify skills/cuopt-multi-objective-exploration/SKILL.md to consolidate numerical optimization API references and adjust routing interface mentions.

Suggested labels

improvement

Suggested reviewers

  • tmckayus
🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly states the main change: consolidating three numerical-optimization API skills into one.
Description check ✅ Passed The description directly describes the consolidation, shared docs, references, assets, evals, and cross-reference updates.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch skills/consolidate-numerical-optimization-api
⚔️ Resolve merge conflicts
  • Resolve merge conflict in branch skills/consolidate-numerical-optimization-api

Comment @coderabbitai help to get the list of available commands.

@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: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@skills/cuopt-numerical-optimization-api/evals/evals.json`:
- Around line 3-129: The eval entries are still referencing removed
per-interface skill IDs instead of the consolidated cuOpt skill. Update every
expected_skill in this evals.json block to use cuopt-numerical-optimization-api
so the targets map to the merged registry entry. Keep the questions,
ground_truth, and expected_behavior unchanged; only swap the skill identifier
consistently across all affected eval cases.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: 133bb99f-fdbe-436f-889c-2b2021476aae

📥 Commits

Reviewing files that changed from the base of the PR and between 97c51d1 and 7049317.

⛔ Files ignored due to path filters (5)
  • skills/cuopt-numerical-optimization-api/assets/c/mps_solver/data/sample.mps is excluded by !**/*.mps
  • skills/cuopt-numerical-optimization-api/assets/cli/lp_production/production.mps is excluded by !**/*.mps
  • skills/cuopt-numerical-optimization-api/assets/cli/lp_simple/sample.mps is excluded by !**/*.mps
  • skills/cuopt-numerical-optimization-api/assets/cli/milp_facility/facility.mps is excluded by !**/*.mps
  • skills/cuopt-numerical-optimization-api/assets/python/mps_solver/data/sample.mps is excluded by !**/*.mps
📒 Files selected for processing (67)
  • .claude-plugin/marketplace.json
  • AGENTS.md
  • skillcritic-report.txt
  • skills/cuopt-multi-objective-exploration/SKILL.md
  • skills/cuopt-numerical-optimization-api-c/BENCHMARK.md
  • skills/cuopt-numerical-optimization-api-c/SKILL.md
  • skills/cuopt-numerical-optimization-api-c/evals/evals.json
  • skills/cuopt-numerical-optimization-api-c/references/examples.md
  • skills/cuopt-numerical-optimization-api-c/skill-card.md
  • skills/cuopt-numerical-optimization-api-c/skill.oms.sig
  • skills/cuopt-numerical-optimization-api-cli/BENCHMARK.md
  • skills/cuopt-numerical-optimization-api-cli/SKILL.md
  • skills/cuopt-numerical-optimization-api-cli/evals/evals.json
  • skills/cuopt-numerical-optimization-api-cli/skill-card.md
  • skills/cuopt-numerical-optimization-api-cli/skill.oms.sig
  • skills/cuopt-numerical-optimization-api-python/BENCHMARK.md
  • skills/cuopt-numerical-optimization-api-python/SKILL.md
  • skills/cuopt-numerical-optimization-api-python/benchmark/SOURCES.md
  • skills/cuopt-numerical-optimization-api-python/benchmark/evals.json
  • skills/cuopt-numerical-optimization-api-python/evals/evals.json
  • skills/cuopt-numerical-optimization-api-python/skill-card.md
  • skills/cuopt-numerical-optimization-api-python/skill.oms.sig
  • skills/cuopt-numerical-optimization-api/SKILL.md
  • skills/cuopt-numerical-optimization-api/assets/c/README.md
  • skills/cuopt-numerical-optimization-api/assets/c/lp_basic/README.md
  • skills/cuopt-numerical-optimization-api/assets/c/lp_basic/lp_simple.c
  • skills/cuopt-numerical-optimization-api/assets/c/lp_duals/README.md
  • skills/cuopt-numerical-optimization-api/assets/c/lp_duals/lp_duals.c
  • skills/cuopt-numerical-optimization-api/assets/c/lp_warmstart/README.md
  • skills/cuopt-numerical-optimization-api/assets/c/milp_basic/README.md
  • skills/cuopt-numerical-optimization-api/assets/c/milp_basic/milp_simple.c
  • skills/cuopt-numerical-optimization-api/assets/c/milp_production_planning/README.md
  • skills/cuopt-numerical-optimization-api/assets/c/milp_production_planning/milp_production.c
  • skills/cuopt-numerical-optimization-api/assets/c/mps_solver/README.md
  • skills/cuopt-numerical-optimization-api/assets/c/mps_solver/mps_solver.c
  • skills/cuopt-numerical-optimization-api/assets/cli/README.md
  • skills/cuopt-numerical-optimization-api/assets/cli/lp_production/README.md
  • skills/cuopt-numerical-optimization-api/assets/cli/lp_simple/README.md
  • skills/cuopt-numerical-optimization-api/assets/cli/milp_facility/README.md
  • skills/cuopt-numerical-optimization-api/assets/python/README.md
  • skills/cuopt-numerical-optimization-api/assets/python/least_squares/README.md
  • skills/cuopt-numerical-optimization-api/assets/python/least_squares/model.py
  • skills/cuopt-numerical-optimization-api/assets/python/lp_basic/README.md
  • skills/cuopt-numerical-optimization-api/assets/python/lp_basic/model.py
  • skills/cuopt-numerical-optimization-api/assets/python/lp_duals/README.md
  • skills/cuopt-numerical-optimization-api/assets/python/lp_duals/model.py
  • skills/cuopt-numerical-optimization-api/assets/python/lp_warmstart/README.md
  • skills/cuopt-numerical-optimization-api/assets/python/lp_warmstart/model.py
  • skills/cuopt-numerical-optimization-api/assets/python/maximization_workaround/README.md
  • skills/cuopt-numerical-optimization-api/assets/python/maximization_workaround/model.py
  • skills/cuopt-numerical-optimization-api/assets/python/milp_basic/README.md
  • skills/cuopt-numerical-optimization-api/assets/python/milp_basic/incumbent_callback.py
  • skills/cuopt-numerical-optimization-api/assets/python/milp_basic/model.py
  • skills/cuopt-numerical-optimization-api/assets/python/milp_production_planning/README.md
  • skills/cuopt-numerical-optimization-api/assets/python/milp_production_planning/model.py
  • skills/cuopt-numerical-optimization-api/assets/python/mps_solver/README.md
  • skills/cuopt-numerical-optimization-api/assets/python/mps_solver/data/README.md
  • skills/cuopt-numerical-optimization-api/assets/python/mps_solver/model.py
  • skills/cuopt-numerical-optimization-api/assets/python/mps_solver/results.md
  • skills/cuopt-numerical-optimization-api/assets/python/portfolio/README.md
  • skills/cuopt-numerical-optimization-api/assets/python/portfolio/model.py
  • skills/cuopt-numerical-optimization-api/evals/evals.json
  • skills/cuopt-numerical-optimization-api/references/c_api.md
  • skills/cuopt-numerical-optimization-api/references/cli_api.md
  • skills/cuopt-numerical-optimization-api/references/python_api.md
  • skills/cuopt-numerical-optimization-api/references/qp_examples.md
  • skills/cuopt-skill-evolution/SKILL.md
💤 Files with no reviewable changes (17)
  • skills/cuopt-numerical-optimization-api-cli/SKILL.md
  • skills/cuopt-numerical-optimization-api-python/benchmark/SOURCES.md
  • skills/cuopt-numerical-optimization-api-c/evals/evals.json
  • skills/cuopt-numerical-optimization-api-python/skill-card.md
  • skills/cuopt-numerical-optimization-api-cli/evals/evals.json
  • skills/cuopt-numerical-optimization-api-python/skill.oms.sig
  • skills/cuopt-numerical-optimization-api-c/skill-card.md
  • skills/cuopt-numerical-optimization-api-c/skill.oms.sig
  • skills/cuopt-numerical-optimization-api-c/SKILL.md
  • skills/cuopt-numerical-optimization-api-c/BENCHMARK.md
  • skills/cuopt-numerical-optimization-api-cli/BENCHMARK.md
  • skills/cuopt-numerical-optimization-api-python/BENCHMARK.md
  • skills/cuopt-numerical-optimization-api-python/evals/evals.json
  • skills/cuopt-numerical-optimization-api-python/SKILL.md
  • skills/cuopt-numerical-optimization-api-cli/skill.oms.sig
  • skills/cuopt-numerical-optimization-api-c/references/examples.md
  • skills/cuopt-numerical-optimization-api-cli/skill-card.md

Comment on lines +3 to +129
"id": "numopt-py-eval-001-lp-api-call-sequence",
"question": "I want to solve a small LP (continuous variables only, maximize a linear objective with linear constraints) using the cuOpt Python API. List the API calls in order \u2014 name each method, one line per method, no full runnable script.",
"expected_skill": "cuopt-numerical-optimization-api-python",
"expected_script": null,
"ground_truth": "The agent produces an ordered list of API calls without a runnable script. The list, in order: (1) Import Problem, CONTINUOUS, and MAXIMIZE from cuopt.linear_programming.problem, and SolverSettings from cuopt.linear_programming.solver_settings. (2) Construct Problem('name'). (3) For each decision variable, call problem.addVariable(lb=..., vtype=CONTINUOUS, name=...). (4) For each constraint, call problem.addConstraint(<linear expression> <= or >= or == <rhs>, name=...). (5) Call problem.setObjective(<linear expression>, sense=MAXIMIZE). (6) Construct SolverSettings(); call set_parameter('time_limit', ...) for time budget. (7) Call problem.solve(settings). (8) Check problem.Status.name in ['Optimal', 'PrimalFeasible'] (PascalCase status names \u2014 case-sensitive). (9) Read problem.ObjValue for the objective, and each variable's .getValue() for its optimal value. The agent uses LP (not MILP / QP) because all variables are continuous and the objective is linear. Mentions that status names are PascalCase (Optimal, not OPTIMAL or optimal) \u2014 case sensitivity matters.",
"expected_behavior": [
"Selects LP (not MILP or QP) given continuous variables and a linear objective",
"Lists the API calls in order without producing a full runnable script",
"Names Problem, addVariable (with vtype=CONTINUOUS), addConstraint, setObjective (sense=MAXIMIZE)",
"Names SolverSettings, set_parameter('time_limit', ...), and problem.solve(settings)",
"Names problem.Status.name and the PascalCase status values (Optimal / PrimalFeasible / FeasibleFound)",
"Names problem.ObjValue and variable.getValue() for reading results",
"Mentions that status names are case-sensitive (PascalCase)",
"Does not invent method names that are not in the skill"
]
},
{
"id": "numopt-py-eval-002-status-case-sensitivity",
"question": "My cuOpt Python LP solve runs without error but the result block never executes. Here is the check I wrote: if problem.Status.name == 'OPTIMAL': print(problem.ObjValue). What is wrong and how do I fix it?",
"expected_skill": "cuopt-numerical-optimization-api-python",
"expected_script": null,
"ground_truth": "The check silently fails because cuOpt status names use PascalCase, not ALL_CAPS. The string 'OPTIMAL' never matches. The correct LP status values to check are 'Optimal' and 'PrimalFeasible'. The fixed check is: if problem.Status.name in ['Optimal', 'PrimalFeasible']: print(problem.ObjValue). For MILP the correct values are 'Optimal' and 'FeasibleFound'. This is a common silent bug \u2014 the solve completes successfully but the code path that reads results is skipped because the string comparison always returns False.",
"expected_behavior": [
"Identifies the bug as a case mismatch \u2014 'OPTIMAL' is wrong, 'Optimal' is correct",
"States that cuOpt status names are PascalCase, not ALL_CAPS",
"Gives the correct LP check: problem.Status.name in ['Optimal', 'PrimalFeasible']",
"Notes that for MILP the passing status is 'FeasibleFound' not 'FEASIBLE_FOUND' or 'FEASIBLEFOUND'",
"Explains why this is a silent failure \u2014 no exception is raised, the block just never executes"
]
},
{
"id": "numopt-py-eval-003-integer-vs-continuous-workers",
"question": "I am modeling a staffing problem where I need to decide how many nurses to assign to each ward. Should the nurse count variables be INTEGER or CONTINUOUS in the cuOpt Python API, and what vtype constant do I use for each?",
"expected_skill": "cuopt-numerical-optimization-api-python",
"expected_script": null,
"ground_truth": "Nurse counts should be INTEGER because nurses are discrete countable entities \u2014 you cannot assign 2.7 nurses to a ward. The vtype constant is INTEGER (imported from cuopt.linear_programming.problem). The addVariable call would be: problem.addVariable(lb=0, vtype=INTEGER, name='ward_a_nurses'). This makes the problem a MILP, not an LP. CONTINUOUS would be wrong here because it allows fractional values, which are meaningless for headcounts. The rule is: 'how many things' (people, vehicles, machines) \u2192 INTEGER; 'how much of something' (hours, tonnes, dollars) \u2192 CONTINUOUS.",
"expected_behavior": [
"States nurse counts must be INTEGER because nurses are discrete countable entities",
"Names the correct vtype constant: INTEGER (imported from cuopt.linear_programming.problem)",
"Shows or describes the addVariable call with vtype=INTEGER",
"States this makes the problem MILP, not LP",
"Explains why CONTINUOUS is wrong \u2014 it allows fractional nurse counts",
"States the rule: countable things \u2192 INTEGER, measurable amounts \u2192 CONTINUOUS"
]
},
{
"id": "numopt-py-eval-004-qp-maximize-workaround",
"question": "I want to maximize a quadratic objective using the cuOpt Python QP API. When I pass sense=MAXIMIZE to setObjective, I get an error. What is the correct approach?",
"expected_skill": "cuopt-numerical-optimization-api-python",
"expected_script": null,
"ground_truth": "The cuOpt QP solver only supports MINIMIZE \u2014 MAXIMIZE is rejected for quadratic objectives. The correct workaround is to negate all coefficients in the objective and minimize the negated expression. For example, to maximize -0.04*x1*x1 - 0.02*x2*x2 (a concave quadratic with NSD Q), minimize 0.04*x1*x1 + 0.02*x2*x2 with sense=MINIMIZE. The resulting problem.ObjValue will be the negated maximum; multiply by -1 to recover the true maximum. All variables must remain CONTINUOUS \u2014 integer QP is not supported. The Q matrix of the original maximization problem must be negative semi-definite (NSD) for the problem to be concave and have a finite maximum; after negation it becomes PSD, which is what the solver expects. Maximizing a convex quadratic (positive coefficients) is unbounded and not a meaningful use case.",
"expected_behavior": [
"States QP only supports MINIMIZE \u2014 MAXIMIZE is rejected",
"Gives the correct workaround: negate all objective coefficients and use sense=MINIMIZE",
"Notes that problem.ObjValue will be negated and must be multiplied by -1 to get the true maximum",
"Reminds that all variables must be CONTINUOUS \u2014 integer QP is not supported",
"Does not suggest a non-existent MAXIMIZE_QP or similar invented API"
]
},
{
"id": "numopt-c-eval-001-milp-api-call-sequence",
"question": "I want to solve a small MILP (some integer variables, linear objective, linear constraints) with the cuOpt C API. List the C functions and structs I need in order \u2014 names only, one line each, no full source.",
"expected_skill": "cuopt-numerical-optimization-api-c",
"expected_script": null,
"ground_truth": "The agent produces an ordered list of C API entry points without writing a full source file: include cuopt/mathematical_optimization/cuopt_c.h, then call cuOptCreateRangedProblem with sense CUOPT_MINIMIZE or CUOPT_MAXIMIZE, then cuOptSolve(problem, settings, &solution), then cuOptGetObjectiveValue.",
"expected_behavior": [
"Lists C API call sequence without writing a complete source file",
"Names cuOptCreateRangedProblem, cuOptSolve, cuOptGetObjectiveValue in order"
]
},
{
"id": "numopt-c-eval-002-parameter-function-wrong-name",
"question": "I am setting a time limit on my cuOpt C API solver with this call: cuOptSetIntParameter(settings, CUOPT_TIME_LIMIT, 60.0). My colleague says the function name is wrong. What is the correct function, and what other parameter-setting functions does the C API provide?",
"expected_skill": "cuopt-numerical-optimization-api-c",
"expected_script": null,
"ground_truth": "The function name cuOptSetIntParameter does not exist in the cuOpt C API \u2014 it is a common mistake. The correct function for float parameters (including CUOPT_TIME_LIMIT, tolerances) is cuOptSetFloatParameter. The C API provides three parameter-setting functions: cuOptSetFloatParameter for float params such as time limits and tolerances, cuOptSetIntegerParameter (not cuOptSetIntParameter) for integer params such as CUOPT_LOG_TO_CONSOLE and method selection, and cuOptSetParameter for string params. CUOPT_TIME_LIMIT is a float parameter so the correct call is cuOptSetFloatParameter(settings, CUOPT_TIME_LIMIT, 60.0).",
"expected_behavior": [
"Identifies cuOptSetIntParameter as a non-existent function \u2014 the correct name is cuOptSetIntegerParameter",
"States CUOPT_TIME_LIMIT is a float parameter requiring cuOptSetFloatParameter, not cuOptSetIntegerParameter",
"Names all three parameter functions: cuOptSetFloatParameter, cuOptSetIntegerParameter, cuOptSetParameter",
"Does not produce a full source file \u2014 answers the question about function names only"
]
},
{
"id": "numopt-c-eval-003-csr-constraint-matrix",
"question": "I am building the constraint matrix for a cuOpt C LP. The problem has 2 constraints and 2 variables. Constraint 1: 3x1 + 4x2 <= 5.4. Constraint 2: 2.7x1 + 10.1x2 <= 4.9. Show me the row_offsets, col_indices, and values arrays for the CSR representation, and explain what each array means.",
"expected_skill": "cuopt-numerical-optimization-api-c",
"expected_script": null,
"ground_truth": "The CSR (Compressed Sparse Row) format uses three arrays. row_offsets has length num_constraints+1 = 3: {0, 2, 4}. Element i gives the starting index in col_indices/values for row i; the last element is the total number of nonzeros (4 here). col_indices = {0, 1, 0, 1}: the column index of each nonzero, ordered by row. values = {3.0, 4.0, 2.7, 10.1}: the nonzero values in the same order. Constraint upper bounds are {5.4, 4.9} and lower bounds are {-CUOPT_INFINITY, -CUOPT_INFINITY} since both constraints are <=. These arrays are passed to cuOptCreateRangedProblem.",
"expected_behavior": [
"Gives row_offsets = {0, 2, 4} and explains it as start indices per row plus total nnz at the end",
"Gives col_indices = {0, 1, 0, 1} matching the column of each nonzero by row",
"Gives values = {3.0, 4.0, 2.7, 10.1} in row-major order",
"Explains that constraint_lower_bounds should be -CUOPT_INFINITY for <= constraints",
"Names cuOptCreateRangedProblem as the function that receives these arrays"
]
},
{
"id": "numopt-c-eval-004-qp-restrictions",
"question": "I want to solve a QP with integer variables using the cuOpt C API. A colleague says this is not supported. Is that correct, and what are the restrictions for QP in the cuOpt C API?",
"expected_skill": "cuopt-numerical-optimization-api-c",
"expected_script": null,
"ground_truth": "The colleague is correct \u2014 integer QP is not supported in the cuOpt C API. The QP restrictions are: (1) minimization only \u2014 CUOPT_MINIMIZE is required; to maximize a quadratic objective, negate all objective coefficients and Q matrix entries; (2) continuous variables only \u2014 all variables must use CUOPT_CONTINUOUS, integer variables are not supported for QP; (3) the Q matrix should be positive semi-definite (PSD) for a convex, well-posed problem. The same library, include paths, and build pattern as LP/MILP are used; only the problem-creation call differs for QP.",
"expected_behavior": [
"Confirms integer QP is not supported \u2014 all QP variables must be CUOPT_CONTINUOUS",
"States QP only supports CUOPT_MINIMIZE, not CUOPT_MAXIMIZE",
"Explains how to maximize: negate objective coefficients and Q entries",
"Mentions Q should be positive semi-definite (PSD) for a convex problem",
"Notes the same library/headers/build pattern as LP/MILP \u2014 only the problem creation call differs"
]
},
{
"id": "numopt-cli-eval-001-mps-sections-and-cli-command",
"question": "I have an LP problem I want to solve with cuopt_cli from an MPS file, with a 60-second time limit and 1% MIP gap (in case I add integers later). List the MPS sections in required order, and the cuopt_cli command line.",
"expected_skill": "cuopt-numerical-optimization-api-cli",
"expected_script": null,
"ground_truth": "The agent lists the MPS sections in the required order: NAME, ROWS (N row for the objective, L/G/E rows for constraints), COLUMNS (variable-name, row-name, coefficient triples), RHS (right-hand-side values), BOUNDS (optional \u2014 LO/UP/FX/BV/LI/UI), ENDATA. For integer variables, integer markers are 'MARKER' 'INTORG' before and 'MARKER' 'INTEND' after the integer columns. The cuopt_cli invocation is: cuopt_cli problem.mps --time-limit 60 --mip-relative-tolerance 0.01. The agent mentions cuopt_cli --help as the canonical source for all flags. Does not invent flags like --max-time or --gap that are not in the skill. Notes that cuopt_cli ships with the cuopt Python package (install via pip or conda first if not present).",
"expected_behavior": [
"Lists MPS sections in required order: NAME, ROWS, COLUMNS, RHS, [BOUNDS], ENDATA",
"Mentions N row for objective and L/G/E for constraint types",
"Mentions integer markers ('MARKER' 'INTORG' / 'INTEND') for integer columns",
"Gives the cuopt_cli command with --time-limit 60 and --mip-relative-tolerance 0.01",
"References cuopt_cli --help as the canonical flag source",
"Does not invent flag names that are not in the skill (e.g. --max-time, --gap)",
"Mentions that cuopt_cli ships with the cuopt Python package"
]
}

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick win

Update the eval targets to the consolidated skill ID.

These entries still point at the removed per-interface skills. With the registry now exposing cuopt-numerical-optimization-api, the merged evals will be orphaned or misattributed unless expected_skill is updated everywhere.

Suggested fix
-    "expected_skill": "cuopt-numerical-optimization-api-python",
+    "expected_skill": "cuopt-numerical-optimization-api",
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@skills/cuopt-numerical-optimization-api/evals/evals.json` around lines 3 -
129, The eval entries are still referencing removed per-interface skill IDs
instead of the consolidated cuOpt skill. Update every expected_skill in this
evals.json block to use cuopt-numerical-optimization-api so the targets map to
the merged registry entry. Keep the questions, ground_truth, and
expected_behavior unchanged; only swap the skill identifier consistently across
all affected eval cases.

@github-actions

Copy link
Copy Markdown

CI Test Summary

✅ All 9 test job(s) passed.

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