{"id":16876,"plugin_id":"plugins_6a6a29948a7c8191ace6787d5ae074bb","kind":"skill","collection_source":null,"comparison_source":null,"observed_at":"2026-09-30T23:13:50.837Z","digest":"417df07e59dfe6d6081909457ba8e7d5b3a414ef6a7379c37d5bd0355ea48c90","against":null,"payload":{"name":"jinko-vpop","description":"Create, generate, inspect, or work with Jinkō virtual populations (vpops) and vpop designs via the jinko-sdk. Use this skill whenever the user wants to upload a vpop from CSV or pandas DataFrame, create a vpop generator from marginal distributions, generate a vpop from a vpop design, inspect vpop content/statistics, or edit an existing vpop design. Vpops generated or uploaded as Vpop project items are not editable; edit the vpop design instead and regenerate.","included_files":[{"relative_path":"agents/openai.yaml","size_in_bytes":264},{"relative_path":"assets/distrib.json","size_in_bytes":8288},{"relative_path":"assets/toy_marginals.json","size_in_bytes":304},{"relative_path":"assets/toy_vpop.csv","size_in_bytes":47},{"relative_path":"evals/evals.json","size_in_bytes":1776},{"relative_path":"references/csv-vpop.md","size_in_bytes":1043},{"relative_path":"references/vpop-design.md","size_in_bytes":3059},{"relative_path":"scripts/create_vpop_design_from_design.py","size_in_bytes":6478},{"relative_path":"scripts/create_vpop_from_csv.py","size_in_bytes":4979},{"relative_path":"scripts/edit_vpop_design.py","size_in_bytes":5164},{"relative_path":"scripts/inspect_vpop.py","size_in_bytes":2256}],"skill_md_contents":"---\nname: jinko-vpop\ndescription: >-\n  Create, generate, inspect, or work with Jinkō virtual populations (vpops) and vpop designs via the jinko-sdk. Use this skill whenever the user wants to upload a vpop from CSV or pandas DataFrame, create a vpop generator from marginal distributions, generate a vpop from a vpop design, inspect vpop content/statistics, or edit an existing vpop design. Vpops generated or uploaded as Vpop project items are not editable; edit the vpop design instead and regenerate.\ncompatibility: >-\n   Check set-up with the `jinko-sdk-setup` skill. Creating vpops or vpop designs requires write access to the Jinkō project. DataFrame creation requires pandas.\nmetadata:\n  author: Nova In Silico\n  requires_sdk: \">=1.8,<2.0\"\nlicense: MIT\n---\n\n# Jinkō Vpop SDK Workflows\n\nUse this skill for technical vpop and vpop-design workflows through the SDK. Keep distribution guidance minimal; use the allowed distribution shapes in `assets/distrib.json` and defer deeper distribution design to a dedicated distribution skill when available.\n\n> **PREREQUISITE:** This skill needs an initialized `jinko-sdk` connection and an\n> SDK satisfying its `metadata.requires_sdk` range. Run the `jinko-sdk-setup` skill\n> (`../jinko-sdk-setup/SKILL.md`) and proceed only once its check passes. If that\n> skill is not found, install it from `novainsilico/jinko-skills`.\n\n## Core Rules\n\n- Use `client.create_vpop_from_csv()` or `client.create_vpop_from_dataframe()` for direct vpop upload.\n- Use `client.create_vpop_design_from_design()` for marginal-distribution vpop designs.\n- Use `design.generate_vpop()` to generate an immutable Vpop from a `VpopDesign`.\n- Check `design.diagnostics` (or `design.get_sanity()`) before generating, and fix reported errors first.\n- Edit an existing design's descriptors/correlations with `design.descriptors` (`create*`/`set_distribution*`) and `design.correlations`, not by replacing the raw payload.\n- Treat Vpop project items as generated/uploaded artifacts that are not edited in place.\n- Edit vpop designs, not generated vpops, then regenerate a new vpop.\n- Require explicit confirmation or script `--apply` before creating or updating project items.\n- Descriptor IDs in CSV headers and marginal designs must match real model component IDs when the vpop will be used with that model.\n- Reject duplicate descriptor IDs in marginal lists; converting duplicates to a mapping would otherwise silently discard earlier entries.\n\n## Project Folder Hygiene\n\n- Prefer creating vpops and vpop designs inside a dedicated Jinkō folder instead of the project root. At the start of a workflow, ask for or propose a folder name, for example `YYYY-MM-DD-<experiment-name>`.\n- Reuse an existing exact-match folder when possible: `client.get_folder_by_name(name, exact_match_only=True)`.\n- If the folder does not exist, create it only after user confirmation or when a script is run with `--apply`.\n- Resolve one folder object or folder id, then pass `folder=folder` to SDK creation calls that support it.\n\n## Bundled Assets\n\n- `assets/toy_vpop.csv`: two-patient vpop CSV using the toy model descriptors `Dose` and `k_elim`.\n- `assets/toy_marginals.json`: list-of-marginals vpop design for `Dose` and `k_elim`.\n- `assets/distrib.json`: source of truth for admissible marginal distribution shapes.\n\n## Bundled Scripts\n\nUse scripts rather than embedding long Python examples in chat.\n\n- `scripts/create_vpop_from_csv.py`: uploads a CSV directly, or via pandas DataFrame with `--method dataframe`.\n- `scripts/create_vpop_design_from_design.py`: creates a vpop design from a list of unique `{ \"id\": ..., \"distribution\": ... }` entries and can optionally generate a vpop after diagnostics pass.\n- `scripts/inspect_vpop.py`: inspects content, description, or statistics for an existing vpop.\n- `scripts/edit_vpop_design.py`: updates or adds descriptors sequentially, reports already-applied IDs if a later edit fails, and runs post-edit diagnostics before success.\n\nExamples:\n\n```bash\npython skills/jinko-vpop/scripts/create_vpop_from_csv.py --csv skills/jinko-vpop/assets/toy_vpop.csv\npython skills/jinko-vpop/scripts/create_vpop_from_csv.py --csv skills/jinko-vpop/assets/toy_vpop.csv --apply\npython skills/jinko-vpop/scripts/create_vpop_from_csv.py --csv skills/jinko-vpop/assets/toy_vpop.csv --folder 2026-06-15-vpop-study --create-folder --apply\npython skills/jinko-vpop/scripts/create_vpop_design_from_design.py --design skills/jinko-vpop/assets/toy_marginals.json --model-sid cm-... --apply --generate\npython skills/jinko-vpop/scripts/inspect_vpop.py --vpop-sid vp-... --statistics --correlations\npython skills/jinko-vpop/scripts/edit_vpop_design.py --vpop-design-sid vd-... --design skills/jinko-vpop/assets/toy_marginals.json --apply\n```\n\n## CSV Upload Pattern\n\nThe minimal CSV shape is one row per patient:\n\n```csv\npatientIndex,Dose,k_elim\n1,1.0,0.08\n2,1.2,0.12\n```\n\nUse actual component IDs, not biological labels such as `age` or `weight`, when the vpop is meant to drive a model.\n\n## Marginal Design Pattern\n\nUse a list of marginal entries in skill assets and scripts:\n\n```json\n[\n  {\"id\": \"Dose\", \"distribution\": {\"tag\": \"Uniform\", \"lowBound\": 0.8, \"highBound\": 1.2}},\n  {\"id\": \"k_elim\", \"distribution\": {\"tag\": \"NormalTruncated\", \"mean\": 0.1, \"stdev\": 0.02, \"lowBound\": 0.01, \"highBound\": 0.3}}\n]\n```\n\nThe script converts this list to the SDK mapping expected by `create_vpop_design_from_design(marginal_distributions=...)`.\n\n## Reference Routing\n\n- Read `references/csv-vpop.md` for direct CSV/DataFrame upload details.\n- Read `references/vpop-design.md` for marginal vpop design and generation details.\n- Read `assets/distrib.json` before adding or changing marginal distribution shapes.\n"},"changes":[],"summary":"First saved snapshot. No earlier version is available for comparison.","summary_kind":"deterministic","summary_metadata":{}}