jinko-trial
Create, sanity-check, run, poll, download results, and compute plot data for Jinkō in-silico trials via the jinko-sdk. Use this skill whenever the user wants to set up a trial from a computational model and simple output set, optionally attach a vpop, protocol, data table, or advanced scoring output set, launch a trial, wait for completion, inspect completed trials, download TimeSeries and Scalar results as pandas DataFrames, or get calculated plot data (scalar distributions, time-series quantile bands, survival curves, contribution/tornado analysis, per-patient scatter values), filtered or grouped by descriptors, to draw their own plots. Do not use this skill for model editing, vpop creation, protocol design authoring, data-table upload, output-set creation/editing, or configuring a stored TrialVisualization.
How do I install this agent skill?
npx skills add https://github.com/novainsilico/jinko-skills --skill jinko-trialIs this agent skill safe to install?
- Gen Agent Trust Hubpass
This skill is a secure integration for the Jinkō platform, providing workflows to manage in-silico trials via the official Jinkō SDK. It incorporates safety best practices, such as mandatory pre-launch sanity checks and metadata validation for data tables. All external resource references, including the SDK and command-line tools, are official vendor-provided assets from Nova In Silico.
- Socketpass
No alerts
- Snykpass
Risk: LOW · No issues
What does this agent skill do?
Jinkō Trial SDK Workflows
Use this skill for trial setup, sanity checks, run/poll, and result download. Keep creation of upstream assets in their dedicated skills: jinko-model, jinko-vpop, jinko-protocol, jinko-data-table, and jinko-output-set (simple and advanced output sets).
PREREQUISITE: This skill needs an initialized
jinko-sdkconnection and an SDK satisfying itsmetadata.requires_sdkrange. Run thejinko-sdk-setupskill (../jinko-sdk-setup/SKILL.md) and proceed only once its check passes. If that skill is not found, install it fromnovainsilico/jinko-skills.
Minimum Trial
A minimum trial is composed of:
- A computational model.
- Solving options, using the model defaults unless an override is explicitly provided.
- A simple output set, defined as the list of component time series that should be saved and visualized. Use
model.time_dependent_ids()as the default output ids when the user has not specified ids.
Optional trial inputs:
- Vpop.
- Protocol design.
- Data table design(s).
- Advanced output set/scoring design.
Sanity Constraints
Do not launch while trial sanity reports errors. Always confirm this by calling trial.sanity() — not by re-running standalone checks from upstream skills (validate_scoring_formula, client.validate_scoring_condition, scoring_design.diagnostics, etc.). Those checks only validate an asset in isolation; they cannot see how it behaves once bound to this concrete trial. trial.sanity() is the same trial-context check the Jinkō UI runs before launch and is the source of truth for launch-readiness — see references/trial-setup.md for the pre-launch workflow and errors after standalone validation passed troubleshooting.
Typical constraints surfaced by trial sanity:
- The computational model cannot have sanity errors.
- All descriptors in the protocol must correspond to model components.
- All descriptors in the vpop must correspond to model components.
- All descriptors in data-table
obsIdcolumns must correspond to model components. - All data-table
armScopevalues must correspond to protocol arms when a protocol is used. - The advanced output set (scoring design) must resolve cleanly against this trial's model outputs and simple output set — this can fail here (
ADVANCED_OUTPUTS_ERRORS) even whenjinko-output-set's standalone validation passed.
If sanity errors are reported, show them and ask whether the user wants help fixing the upstream asset.
Core SDK Methods
- Create simple output set:
client.create_simple_output_set(model, model.time_dependent_ids())unless explicit output ids were requested. Seejinko-output-setfor measure shapes and advanced output sets (constraints/scalars/objectives). - Create trial:
client.create_trial(model, data_tables=..., vpop=..., protocol=..., simple_output_set=..., advanced_output_set=...). - Edit solving options after creation:
trial.edit_solving_options({...}); usetrial.get_solving_options()to inspect raw ISO 8601 duration strings, ortrial.get_solving_options(duration_format="timedelta")fortimedeltavalues. For focused edits, usetrial.set_solving_times(t_max=timedelta(days=28), t_step="P1D")with either representation. - Pre-launch sanity check (required before
run()):trial.sanity()— returns a rawdict(the JSON response, not a typed object) with one component report per key (model,protocol,vpop,outputSetfor the simple output set,scoringsfor the advanced output set,dataTables,solvingTimes), each with["sanity"]["errors"]/["sanity"]["warnings"]and["sanity"]["componentsSanity"]for per-component detail. - Run trial:
trial.run(). - Poll:
trial.wait_until_completed(timeout=1800). - Discover time series:
trial.output_ids(). - Discover scalars and arms:
trial.results.summary(). - Download time series as pandas when available:
trial.results.timeseries({...}).to_dataframe(). - Download scalars as pandas when available:
trial.results.scalars([...]).to_dataframe(). - Without pandas, use
TabularDownload.raw_bytes; result payloads may be CSV or zipped CSV. - Calculated plot data, read-only and typed:
trial.results.aggregate_scalars(...),aggregate_timeseries(...),tornado_sensitivity(...),survival_analysis(...),scalars_per_population(...)(scatter). Filters and groups both come from the descriptor handles (age.gte(18),sex.in_levels([...]),auc.group_by_quantiles(4),sex.group_by_levels()), plustrial.results.group_by_arm(). No import beyondJinkoClientis needed. Query the trial directly and do not create a TrialVisualization just to read data. The same filter and group vocabulary configures a stored visualization injinko-trial-viz. - Ignore every time series and scalar whose id starts with
__jinko. These are platform telemetry, such as__jinkoSolvingTime,__jinkoAllocationMiB, and__jinkoNumSteps. They differ between any two runs of the same trial and carry no scientific meaning, so exclude them before comparing results, reporting agreement, or computing any metric.
When data tables are attached, pass them through the supported data_tables= argument. Require each data table to report metadata.public.validForFitnessFunction is True before creating the trial; reject False, missing, and malformed values.
Project Folder Hygiene
- Prefer creating output sets and trials 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>. - Reuse an existing exact-match folder when possible:
client.get_folder_by_name(name, exact_match_only=True). - If the folder does not exist, create it only after user confirmation or when a script is run with
--apply. - Resolve one folder object or folder id, then pass
folder=folderto trial creation calls. For simple output sets, create them first and then move them withoutput_set.move_to_folder(folder).
Retry And Reuse Hygiene
- For one user request, keep one named local setup script and update it rather than creating
run_v2.py,run_v3.py, and similar copies. - When a trial or output set fails validation, inspect and repair the existing item first. Re-run
trial.sanity()after the repair. - Create a new trial or output set only when the user requests an independent scenario, the existing item is immutable/incompatible, or a repair would destroy a result the user asked to preserve. State the reason when creating a replacement.
SDK Scripts
These are on PATH as console scripts once the SDK is installed, and also
runnable via python -m as shown below.
jinko.cli.find_completed_trial_results: lists trials, finds the first completed one, prints its summary, and downloads TimeSeries and Scalar results to pandas DataFrames.jinko.cli.setup_and_run_trial: creates a simple output set, creates a trial from model plus optional assets, sanity-checks, optionally runs, polls, and optionally downloads results.
Examples:
python -m jinko.cli.find_completed_trial_results --limit 20 --output-dir trial-results
python -m jinko.cli.setup_and_run_trial --model-sid cm-...
python -m jinko.cli.setup_and_run_trial --model-sid cm-... --output-id Drug
python -m jinko.cli.setup_and_run_trial --model-sid cm-... --output-id Drug --folder 2026-06-15-trial-run --create-folder --apply --run
python -m jinko.cli.setup_and_run_trial --model-sid cm-... --output-id Drug --vpop-sid vp-... --protocol-design-sid pd-... --data-table-sid dt-... --apply --run --download-results
Reference Routing
- Read
references/trial-setup.mdfor trial creation, the safe pre-launch sanity-check workflow, and troubleshootingADVANCED_OUTPUTS_ERRORS/"The following advanced outputs have errors". - Read
references/trial-results.mdfor completed-trial discovery and result downloads. - Read
references/trial-plot-data.mdfor aggregate plot data, selectors, filters, and groups.
How can the creator link this skill?
Add the canonical catalog link to the repository README so users can inspect current installs and available audits. The publishing guide covers the complete discovery path.
<a href="https://skillzs.dev/skills/novainsilico/jinko-skills/jinko-trial">View jinko-trial on skillZs</a>