← JinkōCONTENT HISTORY

Update to Jinkō

Snapshot Sep 30, 2026 · 23:13 UTC · version 1.8.0

Collection source: not recorded for this historical snapshot.

WHAT CHANGED · RULE-BASED ANALYSIS

First saved snapshot

No earlier snapshot is available to establish a change.

Compare saved observations

Download comparison JSON
Full technical diff · 0 changed fields
Full snapshot data
{
  "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"
}

SHA-256: 417df07e59dfe6d6081909457ba8e7d5b3a414ef6a7379c37d5bd0355ea48c90