技能创建器
skill-creator
创建、改进和评估自定义技能,把专业流程转化为可重复使用的 AI 能力。
extensions-and-services【数据与研究】Extend LeRobot with discoverable policies, processors, hardware plugins, asynchronous inference, transport services, annotation validation, or Hugging Face Jobs without crossing hardware, network, credential, or dataset-safety boundaries.
独立 GitHub 快照 · 自动分类 · 以原作者文档为准
Use this skill when the task mentions a custom policy, processor, plugin, package prefix, lerobot_robot_, lerobot_camera_, lerobot_teleoperator_, async inference, a policy server/client, gRPC, transport, annotation, an annotation schema, HF Jobs, or a service endpoint.
Inputs are one or more of: a plugin distribution/package name, a config or config fragment, a processor JSON checkpoint, an async server/client parameter set, a local annotation staging tree, or a proposed HF Jobs command. Establish the requested route, package extras, device/backend, endpoint ownership, credential availability, and whether the user wants a dry-run or an actual launch.
Produce a route decision, a normalized local config, a list of discovered/registered types, or a validation report. A successful diagnostic proves only local parsing/importability/schema invariants; it does not prove hardware, network, model download, VLM availability, Hub authorization, or actuation.
discover_packages_path only when a local plugin package is intentionally supplied. Do not guess a registered type from a distribution name.async_config_check.py for server/client scalar settings and annotation_config_check.py for annotation config/schema. Use --help on the real CLI for scoped draccus fields, but do not launch it.ValueError; an unknown policy/hardware/step type is a registration/import problem, not a network problem. Remove or rename the conflicting registration and start a fresh process.PreTrainedConfig subclass with a unique name, make its modeling module expose the corresponding policy class, and provide required feature/delta/optimizer/scheduler validation. Use the policy factory; do not instantiate a model by guessing a module path.ProcessorStep.__call__ and transform_features; use a unique ProcessorStepRegistry name. Keep get_config() JSON-serializable and use tensor state_dict() only for state. Test both data and feature transforms.*Config, register a unique choice, expose the implementation class using the config class name without the trailing Config, and keep vendor imports optional. Factory construction can connect or touch hardware, so diagnostics stop at config/type resolution.lerobot_*_ prefix is imported by register_third_party_plugins(). Package initialization should register choices; failures are logged and do not abort discovery. For scoped config plugins, load_plugin() imports the package and its immediate submodules.The async route is a two-process gRPC protocol: client calls Ready, sends a pickled RemotePolicyConfig via SendPolicyInstructions, streams chunked pickled TimedObservation values through SendObservations, and requests pickled list[TimedAction] values through GetActions. The server loads the requested policy and pre/post-processors; the client executes actions locally. Matching host/port, policy type, checkpoint visibility, device, feature keys, FPS, chunk size, and aggregate function are all required. services.proto also declares learner transition RPCs; do not confuse those with async inference.
Use services for wire details, serialization limits, retries, and a no-daemon mismatch diagnosis. A successful config check must not be reported as a live endpoint check.
Annotation is a local or HF Jobs VLM workflow, not a harmless metadata edit. It stages module JSONL, validates timestamps/column routing/pairs/VQA JSON, then rewrites parquet. Validate a local config and synthetic staging shape before considering a real run. Remote annotation requires a Hub dataset id and HF authentication; a local root is not visible in the pod, and output is discarded without push_to_hub=true. Training Jobs similarly stage/resolve configs, forward secrets, and submit cloud work; use the training skill for the actual run.
See annotation and Jobs for the local schema and credential gates. annotation_config_check.py never contacts a VLM, Hub, endpoint, or Jobs service.
scripts/plugin_discovery_probe.py — lists installed distributions matching LeRobot plugin prefixes without importing them.scripts/async_config_check.py — validates server or client scalar configuration from local JSON/YAML or flags; never starts gRPC.scripts/annotation_config_check.py — validates local annotation config fields and optional synthetic staging rows; never calls the VLM or Hub.All scripts accept --help, are safe from arbitrary working directories, and write no files by default. Keep reports outside this skill tree.
Before handing off an extension or service draft:
A synthetic collision case should place two isolated plugin packages on the import path with the same processor registration and show the second import failing with a duplicate-name error; recovery is to rename/remove one and retry in a fresh process. A synthetic service mismatch should pair a valid local server config with a client address using a different port and show the checker stopping before any connection. A synthetic annotation case should pass local VQA/timestamp/pair validation while omitting api_key or using an unavailable remote target, then stop with the network/credential requirement rather than attempting a call.
Use configuration for draccus, ChoiceRegistry, path-vs-type rules, processor JSON/state/artifact boundaries, and Hub-locality behavior. Use troubleshooting when a type is unknown, a plugin collides, an endpoint is mismatched, a backend is missing, annotation validation fails, or a remote credential is absent.
Validation is complete only when links resolve, scripts pass parser/help checks, local configs pass or fail with actionable errors, and every unresolved hardware/network/credential assumption is recorded. Intentional omissions and known implementation hazards are preserved in the troubleshooting reference.
Return a concise record with:
Do not claim that a plugin is usable because its distribution is listed, that a service is reachable because its address parses, or that an annotation is publishable because its JSON schema passes. Do not duplicate dataset editing, policy training, hardware control, or simulation instructions here; hand those routes to the focused sub-skills.