Predictive skills: two-skill workflow (modeling + training) - #21
Conversation
Review: Consolidated Predictive SkillReviewed against: (1) issues from hands-on GNN testing in this session, (2) prior PR #12 findings, (3) dev-quality-skills-review checklist. Must Fix1. SKILL.md is 821 lines — exceeds 500-line checklist limit by 64%. Recommend splitting into a two-skill workflow (mirroring the prescriptive pattern) plus extracting content to reference/example files:
Why two, not three or one:
Additionally, extract to reference files:
Keep inline summaries + load-trigger pointers in each SKILL.md. 2. Discovery routing points to old skill name. 3. Discovery 4. Case mismatch persists in link prediction examples. (Unchanged from PR #12 — Must Fix #2.)
5. Missing Should Fix6. No guidance on experiment schema permissions for RAI native app. (From testing.) The GNN experiment tracking schema needs 7. No guidance on extending an existing ontology for GNN. (Unchanged from PR #12 — Must Fix #3.) Phase 1 auto-discovery builds from scratch. Users coming from 8. No guidance on creating train/val/test split tables. (Unchanged from PR #12 — Must Fix #4.) The skill assumes splits exist in Snowflake but never explains how to create them or what schema they need (columns, join keys, label format). 9. Domain-specific filtering in train_link_prediction.py. (Unchanged from PR #12.) Lines 44-45 add 10. Unused 11. 12. No cross-skill pattern for graph metrics → GNN features. (Unchanged from PR #12.) Common workflow: compute centrality/community → use as GNN features. Neither graph-analysis nor predictive skill shows this. Nice to Have13. Training examples aren't self-contained. All training examples assume 14. Works Well
|
Test Report: Skills-Driven GNN Pipeline on HM_MINI (Initial)Tested the two-skill workflow ( Results
Bottom line: The skills produce code that successfully trains a GNN. Prediction extraction is blocked by a platform-side latency issue (prediction model preparation), not a skill or code issue. Issues found (three-way classification)Platform / Reasoner (P) — needs GNN team
Skill files (S) — fixed in commit
|
| # | Issue | Fix applied |
|---|---|---|
| S1 | Column casing guidance missing — identify_by keys must match exact Snowflake column names |
Added note + pitfall to modeling skill |
| S2 | has_time_column edge-only limitation not in pitfalls |
Added to training pitfalls with workaround |
| S3 | stream_logs=False not mentioned as option |
Added to optional params description |
| S4 | Experiment schema GRANT incomplete | Expanded pitfall with full SQL |
Agent harness (A) — lessons learned
| # | Issue | Lesson |
|---|---|---|
| A1 | Used full HM_PYREL dataset instead of HM_MINI | Default to smallest available for testing |
| A2 | Wrong column casing on first attempt | Always DESCRIBE TABLE before writing code |
| A3 | Used pt=pt initially (PR #12 bug) |
Fixed in this PR to property_transformer=pt |
Skills assessment
The two-skill workflow (rai-predictive-modeling + rai-predictive-training) works well:
- An agent following the skills can produce code that passes all phases through training submission
- The phased structure maps cleanly to the actual API workflow
- Common Pitfalls caught most issues
- The split into modeling vs training feels natural (like prescriptive formulation vs solver-management)
Remaining skill gaps are minor and were patched in d8eea01. The main blockers are platform-side (P1: temporal features, P2: latency).
ifountalis
left a comment
There was a problem hiding this comment.
Nice split, matches the prescriptive pattern cleanly. Three things before we land:
-
Branch is behind main (~89 commits). The last merge from main was on 2026-04-07. Since then rai-discovery/SKILL.md and
rai-graph-analysis/SKILL.md have seen substantive updates on main — the inspect.schema(model) grounding step (now Step 1 of
discovery), WCC output-type guidance, DataFrame bridge rewording, removal of the separate-graph-model pattern, and more. A
git diff main..HEAD currently looks like this PR is removing that content. Could you merge/rebase main in and resolve the
conflicts so those changes aren't clobbered? -
Malformed pitfall row in skills/rai-predictive-training/SKILL.md:379. The Common Pitfalls table header is 2-column
(Mistake | Fix) but that row has three pipe-separated cells (Mistake | Cause | Fix). Either collapse Cause into the Fix cell,
or promote the whole table to 3 columns to match the rai-predictive-modeling pitfalls table. -
End-to-end agent test. The last checkbox in the test plan (Agent usability: can an agent follow the two-skill workflow
end-to-end?) is still unchecked. The d8eea01 Fix skill gaps found during HM_MINI testing commit suggests hands-on testing
happened — was a full end-to-end agent run on the split (modeling → training) workflow done, or is that still pending?
Agent User Testing Report: IssuesE2E test — HM_MINI sales regression, then closing the loop into a downstream rule. Followed both skills cold (no prior context) to build a sales-regression GNN on HM_MINI: predict transaction Verdict: both halves of the loop work. Environment
Data model
Results — quickstart (n_epochs=5) vs longer (n_epochs=20)
ep5: model collapsed to the target mean (predicted band 0.020–0.028 vs true 0.001–0.21). Pipeline-correct but under-trained. Spearman ρ of 0.45 meant signal was there — it was ranking correctly but couldn't express magnitudes. ep20: model fits near-perfectly. Prediction band spans the full target range. Training wall-time dropped from 400s → 143s because the dataset-prep step (~350s) hits a cache on the second run in the same session; subsequent GNN constructors pay the full cost again. Caveat on ep20: R² = 0.997 is suspiciously high for a first-pass GNN. Two benign explanations — (a) price is deeply determined by the Article, so the graph handily learns the Article→price mapping; (b) the temporal split doesn't separate "never-before-seen" articles. A leakage sanity-check is now in the skill. Closing the loop: predictions → downstream reasonersValidated two paths for consuming GNN predictions after
Finding: the GNN does NOT auto-persist predictions as a durable Snowflake table when only Compared to the Issues for triageRelationalAI infra
Skills — fixed on this PR
Skills — partially fixed
Full detailsArtifacts in
Overall: the two-skill split is a clean mental model, the reorganized reference files kept the main SKILL.md files scannable, and the pipeline produces useful predictions when |
- rai-predictive-modeling: clarify identify_by / property access is case-insensitive (rule previously contradicted examples); add regression_snowflake.py example (regression with time on HM_MINI). - rai-predictive-training: add train_regression.py example; add Regression-specific sanity checks section to evaluation-debugging.md (regression needs more epochs than classification; R^2 < 0 early is normal; profile target distribution before training). Addresses feedback from agent user testing report (PR #21 comment).
e9bd0ef to
8d17282
Compare
e526091 to
5470b8d
Compare
8ac98c5 to
4eb5786
Compare
e28462e to
c5010ec
Compare
|
Second-pass review. Prior items are resolved — rebase is clean, training pitfall table is uniformly 2-column, E2E agent run happened. A few things still to address before landing. Please fix1. Internal contradiction about
Three surfaces, three stories. Pick one: either they're deprecated/omit (scrub both example blocks — the files under 2. Pitfall-table shape now diverges between the two skills.
4. Training example files are not runnable and give no import hint.
Please check3. Task-table column naming looks inconsistent across modeling examples — is this intentional?
The Nice to have5. The Otherwise the split is in good shape — downstream/aggregation section, GRANT pitfall, leakage check, |
c5010ec to
ebc21e7
Compare
|
All 4 review items addressed on tip
Also folded in from this round:
PR tip |
ebc21e7 to
0a7f959
Compare
…r link prediction task tables Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…t tables including test Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…lattening Snowflake does not support change tracking on LATERAL views, so the recommended fix is CREATE TABLE AS SELECT + ALTER TABLE SET CHANGE_TRACKING. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…oined columns VARIANT on a column not used in any relationship join is a non-blocking warning — no flattening needed. Only columns used in joins require a LATERAL FLATTEN table fix. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Review-driven fixes applied on top of pkouki's content: - Use `tgt_id` consistently in the format-requirements section (table, warning prose, and SQL recipe) — was previously `tgt_id` in the table but `target_id` in the warning prose. - Replace the⚠️ emoji in the warning blockquote with bold `**Warning:**` to match the no-emoji convention used elsewhere in this skill. - Compress the SKILL.md Common Pitfalls row to a 1-line trigger that points to the reference section for the joined-vs-non-joined branch and the LATERAL FLATTEN recipe — keeps a single source of truth. - Append `(VARIANT check)` to the reference section heading so an agent grepping for "VARIANT" hits the section title directly. No semantic changes; pure cleanup of an already-validated finding.
Three issues hit during the v1/fraud-detection full-PaySim run that the skills didn't anticipate. Adding them so the next adapter doesn't rediscover them: rai-predictive-modeling: - Promote the TIMESTAMP_NTZ -> VARCHAR ISO-8601 guidance out of body prose into a Common Pitfalls row with the exact ALTER TABLE / TO_CHAR fix. - Add a new pitfall row (and § Populate from Snowflake callout) for pandas timestamp[ns] parquet -> Snowflake TIMESTAMP_NTZ silently multiplying values by 1000 on COPY INTO. rai-predictive-training: - § GNN Constructor: pre-resume SYSTEM_COMPUTE_POOL_GPU before long fit() runs (otherwise the SDK hangs forever with no progress signal — we lost 91 idle minutes to a suspended pool). - § Known Limitations #2: spell out the four mechanical steps of the has_time_column=False fallback (skill said "fall back" but adapters still had to figure out which Relationship template + PropertyTransformer + temporal_strategy edits go together). - Same section: add the engine-side cache-invalidation footgun. After an ALTER TABLE column-type change, the engine's compiled-relation artifact retains the old type even after stream delete + recreate. The real error lives in problems.json via GET_TRANSACTION_ARTIFACTS, not in the "transaction was aborted (runtime error)" client wrapper. Workaround: rename Model(...) to force a fresh RAI relation namespace.
Adds runbook entries derived from a real end-to-end run of the subscriber_retention and demand_forecasting templates: experiment- schema setup DDL, worker-not-ready recovery, train-job-matches-stale- experiment behavior, has_time_column workaround, JOBS history rollover, and de-recommendation of CREATE_GNN_SERVICE for QUEUED job recovery.
After grounding each addition against the PyRel gnn3 source and the
relationalai_gnns runtime, three claims needed correction or sharpening:
- L-1 (rai-predictive-modeling Prerequisites): replace the over-broad
GRANT ALL PRIVILEGES with the four minimum grants prescribed by
relationalai_gnns.core.diagnostics.PermissionDiagnostic. Keep ALL as
a working superset for non-least-privilege deployments. Note the error
surfaces as PermissionError specifically (not RuntimeError) so it can
be caught explicitly.
- L-3 (rai-predictive-training): the original "SDK matches train jobs to
experiments by Model name" claim was wrong — _wait_obtain_model_run_id
reads train_job.model_run_id directly, no name matching. Replaced with
the actual mechanism: gnn.fit() is idempotent (estimator.py:483-490);
reusing a GNN instance after a partial failure silently no-ops and the
next predictions() resolves the previous job's id. Workaround is to
re-instantiate GNN(...), not to bump the Model("...") name.
- L-6 (Stalled train job forensics): tightened to cite the actual
job_manager.py:332-340 polling loop semantics. Removed the speculative
"after ~30 min" timing — JOBS retention varies by Snowflake/native-app
version and isn't observable from the SDK.
- rai-health: same SDK-grounding for the SUSPEND/RESUME runbook; framed
the recovery as empirical (not source-documented) since the SDK has no
worker-readiness probe beyond GET_REASONER status. Reinforced that the
SDK never invokes CREATE_GNN_SERVICE, so its image-mismatch error has
no bearing on predictive train submission.
Net-new additions:
- gnn.fit() idempotency as its own subsection in rai-predictive-training
(the actual root cause customers will hit when retrying after partial
failures in notebooks).
- Hyperparameter validation note: unknown keys raise ValueError with
difflib-suggested corrections via validate_train_params.
The 'Worker not ready to accept jobs' section originally repeated the same 3-statement SQL recovery block that lives in rai-health § Predictive train jobs stuck QUEUED. Drop the duplicate SQL and replace with a pointer; keep the SDK-level explanation (what gnn.fit submits, why the SDK can't see worker desync) since that's training-skill territory. Result: one canonical runbook home (rai-health, the operational SQL skill), one canonical SDK explanation (rai-predictive-training).
Made-with: Cursor
Moves rai-predictive-modeling and rai-predictive-training from skills/<name>/ to plugins/rai/skills/<name>/ to align with main's plugin layout. The other PR #21 file edits (rai-health, rai-setup, rai-discovery, rai-graph-analysis) were auto-relocated by git's rename detection during the merge from main. Removes the empty skills/ top-level directory. PR #21 is now mergeable to main without further structural work.
- rai-predictive-training/SKILL.md: 563→514 lines via consolidation
- Replaced fragmented 'Known Limitations' / 'Worker not ready' / 'gnn.fit
is idempotent' / 'Stalled train job' subsections (split between Training
and Troubleshooting) with one tight symptom→fix table under a single
'Known Limitations & Runtime Troubleshooting' heading
- Removed three Common Pitfalls rows that duplicated the new inline table
- Extracted full has_time_column=True before/after fallback code, SDK
source citations, and full troubleshoot prose to references/known-
limitations.md (rewritten as a quick lookup, not essay prose)
- Reference Files table updated with new entry + load trigger
- Both new skills' descriptions: added negative-boundary clauses
('Not for X — see other-skill') so routing failures from over-broad WHEN
clauses are caught at description match time
5294f9c to
7281298
Compare
…ion, node regression) Predictive-coupled discovery edits — apply the translation/routing table to the three product-supported task families and surface them in the SKILL.md tables that already enumerate predictive routing. Reasoner-agnostic discovery improvements (description/summary rewrite, per-reasoner skill load table, reference-row translation framing for prescriptive/graph/rules) ship separately on PR #39 since they help existing workflows without depending on the predictive skills. - references/predictive.md: replace the classification/regression/anomaly/ clustering question-type list with the three product-supported families (node_classification, node_regression, link_prediction); add the User-Type → GNN Task Type translation table mapping each user-facing type to the granular `task_type` / `eval_metric` / `has_time_column`; add `link_target_concept` field for link prediction; per-period forecasting routes to `regression` with `has_time_column=True` (not a separate task type). Anomaly/clustering are not supported natively — only emit as `pre_computed` if an external table exists. - examples/predictive_routing.md: add three GNN-mode walkthroughs (churn → node classification, unit output → node regression, recommendation → link prediction) carrying both the user-facing type and the technical GNN fields; update the existing pre-computed example to use the new `node_classification` value. - SKILL.md predictive rows in the Quick Reference, Reasoner Classification, Cumulative Discovery, Reference Files, Examples, and routing-fields tables — refreshed to the three-family vocabulary and naming rai-predictive-modeling / rai-predictive-training as handoff targets.
7281298 to
99b0263
Compare
…, discovery precheck Filling four gaps validated against the gnn3 venv (relationalai 1.1.1 editable + relationalai_gnns 0.1.5): - rai-predictive-modeling: add a Two-engine model section (Logic for data ingest/queries/exports vs Predictive for fit/predictions) and an Engine sizing section with CPU vs GPU heuristics tied to graph scale. Calls out the CLI-vs-backend allow-list gap on GPU sizes — REASONER_SIZES_AWS in services/reasoners/constants.py lists CPU only, while the AWSEngineSize Literal in config_reasoners_fields.py accepts GPU_NV_S — and points at the async API as the fall-through. - rai-predictive-training: add a Timing expectations table that distinguishes stream_logs=True (default; fit() blocks synchronously via _stream_logs_formatted) from stream_logs=False (returns at submit; predictions() then waits via _wait_obtain_model_run_id). Both modes block in predictions(). Add a short "Training appears stuck" pointer to the new diagnostic ladder in references/known-limitations.md. - references/known-limitations.md: new "Training appears stuck" three-step ladder (GET_REASONER → jobs.list → SHOW EXPERIMENTS) that localizes failure to one component before suspending anything. - rai-health: enhance the existing Predictive-stuck-QUEUED section with the same three-step diagnostic-ladder framing parallel to the Logic / CDC ladders. Recovery (SUSPEND/RESUME) preserved as the second half. - rai-discovery references/predictive.md: precheck note in Data Sufficiency Signals (rai_predictive mode) that classifying a question as rai_predictive-feasible requires confirming the Predictive reasoner is provisioned and READY — most accounts default to Logic only. The general engine-management surface (api.CREATE_REASONER_ASYNC + poll pattern, Predictive row in rai-setup reasoners.md, ban on EXPERIMENTAL.* procs) ships separately as a setup-management PR — that material reaches all reasoner families and isn't predictive-coupled.
…sizes with platform docs The CLI and Python clients are thin wrappers over RELATIONALAI.API.* stored procedures. Surfacing the procedures directly closes a real gap: notebook/SQL-only workflows that don't run the CLI, and the case where the CLI version trails the backend on a new flag or size. Reasoner-agnostic — applies to logic + prescriptive equally. Predictive sizing/routing specifics ship with the predictive skills (PR #21). - references/engine-management.md: new "SQL stored procedures (canonical fallback)" section. Procedure table covers CREATE_REASONER / CREATE_REASONER_ASYNC, GET_REASONER, SUSPEND_REASONER, RESUME_REASONER_ASYNC, DELETE_REASONER, ALTER_REASONER_AUTO_SUSPEND_MINS, ALTER_REASONER_POOL_NODE_LIMITS, GET_JOB, CANCEL_JOB, plus the api.REASONERS and api.JOBS views. Aligned with the surface documented at docs.relational.ai/manage/compute-resources. Async + poll example. Generic "do not call RELATIONALAI.EXPERIMENTAL.*" callout (no reasoner-specific examples — those live with the relevant reasoner skills). - references/reasoners.md: Engine sizes table is now reasoner-aware (Logic + Prescriptive columns, AWS + Azure columns), reflecting the doc note that HIGHMEM_X64_L (AWS) and HIGHMEM_X64_SL (Azure) are Logic-only — Prescriptive does not currently accept the largest tier on either cloud. Adds a runtime note about the standard RELATIONAL_AI_<INSTANCE_FAMILY> compute-pool naming visible in GET_REASONER's RUNTIME field, with a link to the platform doc.
…sizes with platform docs The CLI and Python clients are thin wrappers over RELATIONALAI.API.* stored procedures. Surfacing the procedures directly closes a real gap: notebook/SQL-only workflows that don't run the CLI, and the case where the CLI version trails the backend on a new flag or size. Reasoner-agnostic — applies to logic + prescriptive equally. Predictive sizing/routing specifics ship with the predictive skills (PR #21). - references/engine-management.md: new "SQL stored procedures (canonical fallback)" section. Procedure table covers CREATE_REASONER / CREATE_REASONER_ASYNC, GET_REASONER, SUSPEND_REASONER, RESUME_REASONER_ASYNC, DELETE_REASONER, ALTER_REASONER_AUTO_SUSPEND_MINS, ALTER_REASONER_POOL_NODE_LIMITS, GET_JOB, CANCEL_JOB, plus the api.REASONERS and api.JOBS views. Aligned with the surface documented at docs.relational.ai/manage/compute-resources. Async + poll example. Generic "do not call RELATIONALAI.EXPERIMENTAL.*" callout (no reasoner-specific examples — those live with the relevant reasoner skills). - references/reasoners.md: Engine sizes table is now reasoner-aware (Logic + Prescriptive columns, AWS + Azure columns), reflecting the doc note that HIGHMEM_X64_L (AWS) and HIGHMEM_X64_SL (Azure) are Logic-only — Prescriptive does not currently accept the largest tier on either cloud. Adds a runtime note about the standard RELATIONAL_AI_<INSTANCE_FAMILY> compute-pool naming visible in GET_REASONER's RUNTIME field, with a link to the platform doc.
…ATE_REASONER_ASYNC
The predictive provisioning + recovery story should point at the
supported RELATIONALAI.API.* surface and a GPU compute type, not at
EXPERIMENTAL.CREATE_GNN_SERVICE — which is off-surface, GNN-specific,
and currently broken on V5 due to an image-mismatch (issues.md
ISS-005). Customer-facing guidance frames the answer positively.
- rai-predictive-modeling: replace the Engine sizing CPU-vs-GPU
heuristic block with a "Provisioning the Predictive reasoner" block.
Names GPU_NV_S as the recommended default and shows the canonical
CALL RELATIONALAI.API.CREATE_REASONER_ASYNC('predictive', '<name>',
'GPU_NV_S', OBJECT_CONSTRUCT()) shape with a GET_REASONER poll. Keeps
the CLI-vs-backend allow-list note as fall-through context.
- rai-predictive-training: drop the standalone "CREATE_GNN_SERVICE() is
not the right escalation" paragraph. The new line points at
SUSPEND_REASONER / RESUME_REASONER_ASYNC / DELETE_REASONER +
CREATE_REASONER_ASYNC('predictive', ..., 'GPU_NV_S', ...) for rebuild.
- rai-health: § Predictive train jobs stuck QUEUED Recovery now
includes the rebuild-on-GPU path (DELETE_REASONER +
CREATE_REASONER_ASYNC with GPU_NV_S) when worker-recycle isn't
enough. Drops the long EXPERIMENTAL.CREATE_GNN_SERVICE blockquote;
keeps a single-clause "stay on the API surface, not EXPERIMENTAL.*"
reminder paired with the positive recovery instructions.
Distinct upstream failure mode from the existing "Predictive train
jobs stuck QUEUED" section: the reasoner is still PROVISIONING (not
READY), and gnn.fit() appears to hang in Step 1 (dataset prep) while
the in-pod data index hydrates from CDC streams. Same per-table
CDC stream-sync compounding that affects unwarmed Logic reasoners
on first model query, surfaced on the Predictive side.
3-step diagnostic ladder anchored to the existing rai-health surface:
- GET_REASONER('predictive', ...) for pod status
- relationalai.api.cdc_status for upstream stream health (cross-link
to § Step 5 for the quarantine/resume_cdc runbook)
- GET_OWN_TRANSACTION_PROBLEMS('<txn>') for the specific transaction
the client errored against (cross-link to § Step 4 for owner
restriction pitfall)
Recovery escalates to the QUEUED-section's SUSPEND/RESUME pattern,
or rebuild on a fresh GPU reasoner via DELETE_REASONER +
CREATE_REASONER_ASYNC('predictive', ..., 'GPU_NV_S', OBJECT_CONSTRUCT()).
7dec885 to
931d82d
Compare
…guidance only Drop the negative framings (PermissionError walk-through, shared-DB warning quote, "not a generic RuntimeError" callout) and the specific EXPERIMENTS schema name in favor of a <YOUR_SCHEMA> placeholder. The four GRANT statements + "All four grants are required" + the matching GNN constructor args are sufficient guidance.
931d82d to
b556191
Compare
Two corrections to the Common Pitfalls row that maps the
PermissionDiagnostic error to a fix:
1. Symptom now uses the actual PermissionError message text
("Database does not exist or the GNN RelationalAI Native App
lacks permissions" / "Schema does not exist or ...") so agents
matching the row to a real error log find it directly.
2. Fix now names the four explicit grants (USAGE on database,
USAGE on schema, CREATE EXPERIMENT, CREATE MODEL) and points at
rai-predictive-modeling § Prerequisites for the canonical SQL.
Drops the GRANT ALL ON SCHEMA recommendation — CREATE EXPERIMENT
and CREATE MODEL are not part of the legacy ALL bundle.
Why
Enable users to adopt the RAI predictive reasoner (GNN workloads) end-to-end through their coding agent — model → train → predict → integrate into ontology → chain into rules / prescriptive / graph reasoners — and recover when the runtime misbehaves.
Key changes
Two new customer-facing skills (early access):
rai-predictive-modeling— concepts, Snowflake/CSV loading, task relationships, graph edges, PropertyTransformer features, graph-metric-as-feature. § Prerequisites (experiment-schema DDL + grants, package-version pin, two-engine model Logic-vs-Predictive). § Provisioning the Predictive reasoner recommendsGPU_NV_Sand shows the canonicalCALL RELATIONALAI.API.CREATE_REASONER_ASYNC('predictive', '<name>', 'GPU_NV_S', OBJECT_CONSTRUCT())shape. Examples: link_prediction / node_classification / regression. References: task relationships, PropertyTransformer types, auto-discovery SQL.rai-predictive-training—GNNconstructor,fit(),predictions(), register/load; intent routing; downstream-chain patterns (same-model, cross-session, aggregation/bridge concepts, non-additive blending, multi-GNN). § Timing expectations distinguishesstream_logs=True/Falsesemantics. § Known Limitations & Runtime Troubleshooting symptom→fix table, backed byreferences/known-limitations.mdcarrying the full 3-step "Training appears stuck" ladder +has_time_columnworkarounds +gnn.fit()idempotency + polling-without-timeout + opaque-transaction-wrapper guidance. Examples: train_link_prediction / train_node_classification / train_regression / register_and_load. References: hyperparameters, task-types-and-metrics, prediction-attributes, evaluation-debugging.Both new skills' descriptions include negative-boundary clauses to catch routing failures at description-match time.
Discovery — predictive routing only:
rai-discovery/references/predictive.md: rewritten around the three product-supported families (node_classification/node_regression/link_prediction); User-Type → GNN Task Type translation table mapping each user-facing type to the granular reasonertask_type(binary/multi/multilabel_classification, regression, link_prediction, repeated_link_prediction), defaulteval_metric, andhas_time_column. Per-period forecasting routes toregressionwith a time column, not a separate task. Anomaly/clustering only emit aspre_computed. Adds therai_predictive-mode precheck (GET_REASONER('predictive', ...)→READYbefore classifying).rai-discovery/SKILL.md: predictive rows refreshed in the Quick Reference, Reasoner Classification, Cumulative Discovery, Reference Files, Examples, routing-fields, and Post-Discovery Routing tables; predictiveimplementation_hintrow exposestask_type/eval_metric/has_time_column/temporal_column/link_target_concept. Post-Discovery Routing per-reasoner table from rai-discovery: clarify role as translation/ideation/routing layer + complete per-reasoner skill routing #39 now has its predictive row.rai-discovery/examples/predictive_routing.md: three GNN walkthroughs (churn → node classification, per-unit output → node regression, recommendation → link prediction) alongside the pre-computed example.rai-graph-analysis/SKILL.md: cross-refs the GNN graph-construction pattern under § When NOT to use.Existing reasoner-adjacent skills:
rai-health: two new predictive sections, both framed as diagnostic-ladder → recovery (parallel to Logic / CDC ladders).GET_REASONER(pod status) →relationalai.api.cdc_status(upstream stream health) →GET_OWN_TRANSACTION_PROBLEMS('<txn>')(transaction-specific problems). Cross-links § Step 4 and § Step 5.GET_REASONER→client.jobs.list("Predictive", ...)→SHOW EXPERIMENTS. Recovery:SUSPEND_REASONER+RESUME_REASONER_ASYNC, escalating toDELETE_REASONER+CREATE_REASONER_ASYNC('predictive', ..., 'GPU_NV_S', OBJECT_CONSTRUCT())for a fresh rebuild. Stays on the supportedRELATIONALAI.API.*surface throughout.rai-setup: two-line Prerequisites pointer noting predictive needs additional schema setup, deferring torai-predictive-modeling§ Prerequisites for the DDL.Examples: one canonical per task type, generic concept names (User/Item/Interaction; Source/Target/OptTarget) — no domain creep.
Folded-in PRs (closed, child branches deleted):
LATERAL FLATTENrecipe)Test plan (completed)
task_type/eval_metric/has_time_columnvia the translation table; pre-computed andrai_predictivemodes both covered; predictive engine precheck named in Data Sufficiency SignalsRELATIONALAI.API.*surface; GPU recommended viaCREATE_REASONER_ASYNC('predictive', ..., 'GPU_NV_S', OBJECT_CONSTRUCT())(matchesissues.mdISS-005 ground-truth verification)rai-healthowns SUSPEND/RESUME + the diagnostic ladders;rai-predictive-trainingSKILL.md links to it; full diagnostic ladder lives once inreferences/known-limitations.mdgnn3(relationalai 1.1.1editable +relationalai_gnns 0.1.5):_stream_logs_formattedsynchronous behavior atestimator.py:529,_wait_obtain_model_run_idat line 777,client.jobs.list("Predictive", ...)reachable viaREASONER_TYPE_LABELS,GPU_NV_Saccepted byAWSEngineSizeLiteral but excluded fromREASONER_SIZES_AWSvalidation list/dev-skills-reviewchecklist applied; line counts within budgetRelationalAI/templates#49) end-to-end runs —subscriber_retention(Test-set RMSE 0.1386),demand_forecasting(Per-Sale RMSE 7.28)plugins/rai/skills/<name>/; rebased onto post-rai-discovery: clarify role as translation/ideation/routing layer + complete per-reasoner skill routing #39mainRelated