"Run and interpret PointLLM Objaverse and ModelNet40 evaluations,
Scanned 9/8/2026
Install to Claude Code
npx -y skills add VectorSpaceLab/AREX-Skill --skill evaluation --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Evaluation?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/vectorspacelab-evaluation-8330d199)More formats (shields.io, HTML) on the badges page.
---
name: evaluation
description: "Run and interpret PointLLM Objaverse and ModelNet40 evaluations,
including local result validation, OpenAI-assisted judging, and traditional
caption metrics."
disable-model-invocation: true
metadata:
disco-role: operating
license: CC BY-NC-SA 4.0
---
# PointLLM evaluation
Use this skill after an inference run has produced a JSON result file. It
covers benchmark generation and scoring, not model loading or raw dataset
installation. Keep those concerns in the inference and data skills. Use this
skill to choose a task, check the result contract, run the appropriate judge,
and interpret the output without hiding invalid responses or metric caveats.
## Route the evaluation
1. Identify the result kind before spending compute or API budget:
- Objaverse open-vocabulary classification: `open-free-form-classification`.
- Objaverse object captioning: `object-captioning`.
- ModelNet40 close-set classification: `modelnet-close-set-classification`.
- Caption-only local comparison: traditional metrics.
2. Validate the inference JSON locally first:
`python scripts/validate_results_json.py RESULTS.json --kind ...`.
This bundled checker makes no API calls and downloads no models.
3. Confirm that `prompt` and each result's `ground_truth`, `model_output`, and
`object_id` match the selected task. ModelNet rows additionally need the
integer `ground_truth` and `label_name`.
4. Preserve the original inference JSON. Write judge output beside it, using a
distinct `_evaluated_<model>.json` or `_evaluated_traditional.json` name.
## Generate benchmark results
The project evaluation entry points expose the following stable contracts:
- Objaverse classification/captioning: select `--task_type classification` or
`captioning`, with classification prompt index 0 or 1 and captioning index 2.
- ModelNet40: select `--prompt_index 0` or `1`; keep `--shuffle False` because
the dataset index is used as the object ID.
- The generated file contains `prompt` and `results`. Objaverse rows use a
string object ID and annotation text; ModelNet rows use an index, numeric
class, generated text, and class name.
Generation needs the model, tokenizer, CUDA placement, and data paths supplied
by the sibling skills. Do not improvise a second result format: downstream
judges and resume logic key on `object_id`.
## Run OpenAI-assisted scoring
1. Obtain explicit approval for external API calls and a cost ceiling. Set
`OPENAI_API_KEY` in the process environment; never place it in JSON, a
prompt, a skill file, or shell history committed to a project.
2. Choose the exact `--eval_type` and a supported `--model_type`; see
`references/cli-reference.md` for commands and filenames.
3. Prefer `--parallel --num_workers N` only after checking rate limits and the
budget. A smaller worker count is safer for first validation.
4. The evaluator retries selected OpenAI rate-limit, service-unavailable, and
timeout errors with exponential backoff, but non-retryable errors stop the
run. It records prompt/completion tokens and estimated `GPT_cost`.
5. On Ctrl+C or an exception, leave the generated
`<output>_processed_temp.json` in place. Re-run the same command in the
same output directory to resume by `object_id`; do not edit or merge the
temporary file manually. A successful completion writes the final JSON and
removes the temporary file.
Treat `GPT_cost` as an estimate based on the source's hard-coded historical
price table, not a billing statement. Recheck provider pricing before a large
run. Never use a guessed or empty credential to probe the API.
## Interpret outputs
- Open classification reports `accuracy`, counts, invalid responses, token
totals, cost, and per-row `gpt_cls_result` (`T`, `F`, or `INVALID`).
- ModelNet reports `accuracy`, `clean_accuracy`, and
`invalid_correct_predictions`; an invalid judge answer is randomly assigned
a valid category by the evaluator, so it can coincidentally count as correct.
Report both headline and clean values and the invalid count.
- Captioning reports `average_score` on a 0--100 scale, `total_score`, invalid
count, token totals, cost, and per-row `gpt_score` (0--100 or -1).
- Traditional evaluation reports BLEU-1/2/3/4, ROUGE-1/2/L, METEOR,
Sentence-BERT, and SimCSE scores. These are supplementary: README guidance
warns that BLEU, ROUGE, and METEOR favor short captions and weakly represent
semantic accuracy/diversity.
Do not call an invalid classification response a genuine model error without
separately reporting the invalid rate. Do not compare traditional metrics to
GPT scores as if they were on the same scale or measuring the same construct.
## Failure handling and handoff
- Import/dependency failures: verify the pinned environment and optional
evaluator dependencies before retrying; see the troubleshooting reference.
- Data/config failures: hand the missing annotation, point-cloud, or ModelNet
configuration issue to the data sibling rather than patching a result file.
- API failures: stop when the credential, model entitlement, rate limit, or
cost ceiling is unclear; resume only from a trusted temp file.
- Output failures: run the bundled validator, inspect duplicate/missing object
IDs, and retain invalid rows and raw judge text for auditability.
A complete handoff names the benchmark, prompt index, inference file, scoring
mode/model, worker count, final and temporary output paths, counts, invalid
responses, token/cost totals, and unresolved caveats. Record skipped API or
full-benchmark checks explicitly.
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!