feat: new strict nondet and nondet_unsafe#274
Conversation
✅ Deploy Preview for genlayer-docs ready!
To edit notification comments on pull requests, go to your Netlify project configuration. |
WalkthroughA new section on the "Strict Equivalence Principle" has been added to the documentation, along with detailed explanations and Python code samples for implementing custom leader/validator patterns. The update covers both safe (sandboxed) and fast (unsafe) custom validation flows, including advanced error handling strategies. Changes
Sequence Diagram(s)sequenceDiagram
participant User
participant Leader
participant Validator
participant GL as gl.vm
User->>Leader: Submit input data
Leader->>GL: Run leader function
GL->>Validator: Run validator function (sandboxed or unsafe)
Validator-->>GL: Return result or error
GL->>User: Compare outputs (strict or custom logic)\nReturn validation result
Estimated code review effort🎯 2 (Simple) | ⏱️ ~7 minutes Possibly related PRs
Suggested reviewers
Poem
Note ⚡️ Unit Test Generation is now available in beta!Learn more here, or try it out under "Finishing Touches" below. ✨ Finishing Touches🧪 Generate unit tests
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. 🪧 TipsChatThere are 3 ways to chat with CodeRabbit:
SupportNeed help? Create a ticket on our support page for assistance with any issues or questions. CodeRabbit Commands (Invoked using PR comments)
Other keywords and placeholders
CodeRabbit Configuration File (
|
There was a problem hiding this comment.
Actionable comments posted: 1
🧹 Nitpick comments (5)
pages/developers/intelligent-contracts/equivalence-principle.mdx (5)
98-105: Addimport jsonto keep the snippet copy-pasteableReaders will get a
NameError: name 'json' is not definedif they copy this example verbatim. A one-line import keeps the snippet self-contained.def fetch_content(): + import json response = gl.nondet.web.get("https://example.com") body = json.loads(response.body) return body["valid"]
108-114: Clarify the exact return type for strict equality
check_condition()currently returns a raw string ("true"/"false"), but downstream code may expect a boolean. To avoid confusion, either cast toboolor explicitly state that the strict-equality contract compares strings.
135-146: Example missingjsonimportSame issue as above: the snippet won’t run standalone.
def leader_fn(): + import json response = gl.nondet.exec_prompt(prompt) return json.loads(response)
148-160: Avoid re-executing the leader logic inside the validator to cut cost & latency
validator_fncallsleader_fn()again, duplicating the non-deterministic operation (extra prompt, LLM cost, latency). Prefer executing validator-specific logic instead:- def validator_fn(leader_res: gl.vm.Result) -> bool: - if not isinstance(leader_res, gl.vm.Return): - return False - - validator_res = leader_fn() - leader_score = leader_res.calldata["score"] - validator_score = validator_res["score"] + def validator_fn(leader_res: gl.vm.Result) -> bool: + if not isinstance(leader_res, gl.vm.Return): + return False + + # Independently re-compute *only* the score + validator_score = gl.nondet.exec_prompt(prompt) + validator_score = json.loads(validator_score)["score"] + leader_score = leader_res.calldata["score"]This keeps validator work independent while avoiding double JSON parsing & prompt cost.
207-214: Nit: tighten the custom-error comparison exampleMinor phrasing—
in error1.messagechecks for substrings; consider.lower()or regex to make the comparison case-insensitive and future-proof.- return "timeout" in error1.message and "timeout" in error2.message + return "timeout" in error1.message.lower() and "timeout" in error2.message.lower()
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (1)
pages/developers/intelligent-contracts/equivalence-principle.mdx(1 hunks)
🧰 Additional context used
📓 Path-based instructions (1)
pages/**/*.mdx
📄 CodeRabbit Inference Engine (CLAUDE.md)
pages/**/*.mdx: All content is in MDX format supporting React components
Import and use custom components within MDX files
Create .mdx file in appropriate pages/ subdirectory when adding new pages
All content should support React components in MDX files
Files:
pages/developers/intelligent-contracts/equivalence-principle.mdx
🧠 Learnings (11)
📓 Common learnings
Learnt from: CR
PR: genlayerlabs/genlayer-docs#0
File: CLAUDE.md:0-0
Timestamp: 2025-07-24T07:56:58.272Z
Learning: Applies to pages/validators/setup-guide.mdx : Setup Guide Updates (pages/validators/setup-guide.mdx): Update version references in download examples and version lists, update configuration examples with new contract addresses when applicable, enhance command documentation when new features are added to existing commands, update genesis block configuration in consensus section when network upgrades occur
Learnt from: CR
PR: genlayerlabs/genlayer-docs#0
File: CLAUDE.md:0-0
Timestamp: 2025-07-24T07:56:58.272Z
Learning: Applies to pages/validators/setup-guide.mdx : GenVM diagnostics integration affects the doctor command behavior and should be documented in the validator setup guide
Learnt from: CR
PR: genlayerlabs/genlayer-docs#0
File: CLAUDE.md:0-0
Timestamp: 2025-07-24T07:56:58.272Z
Learning: Applies to pages/validators/setup-guide.mdx : Update genesis block configuration in consensus section of setup-guide.mdx when network upgrades occur
Learnt from: CR
PR: genlayerlabs/genlayer-docs#0
File: CLAUDE.md:0-0
Timestamp: 2025-07-24T07:56:58.272Z
Learning: Applies to pages/validators/setup-guide.mdx : Consensus contract addresses change with network upgrades and must be updated in configuration examples
Learnt from: CR
PR: genlayerlabs/genlayer-docs#0
File: CLAUDE.md:0-0
Timestamp: 2025-07-24T07:56:58.272Z
Learning: Applies to pages/validators/setup-guide.mdx : Update configuration examples with new contract addresses in setup-guide.mdx when applicable
Learnt from: CR
PR: genlayerlabs/genlayer-docs#0
File: CLAUDE.md:0-0
Timestamp: 2025-07-24T07:56:58.272Z
Learning: Applies to pages/validators/setup-guide.mdx : Update version references in download examples and version lists in setup-guide.mdx when new validator releases occur
Learnt from: CR
PR: genlayerlabs/genlayer-docs#0
File: CLAUDE.md:0-0
Timestamp: 2025-07-24T07:56:58.272Z
Learning: Applies to pages/validators/setup-guide.mdx : Update version list in curl command output example (line ~88), download command version variable (line ~113), consensus contract addresses and genesis block number (lines ~143-146), and command documentation (line ~347) in setup-guide.mdx for new validator releases
📚 Learning: applies to pages/validators/setup-guide.mdx : setup guide updates (pages/validators/setup-guide.mdx)...
Learnt from: CR
PR: genlayerlabs/genlayer-docs#0
File: CLAUDE.md:0-0
Timestamp: 2025-07-24T07:56:58.272Z
Learning: Applies to pages/validators/setup-guide.mdx : Setup Guide Updates (pages/validators/setup-guide.mdx): Update version references in download examples and version lists, update configuration examples with new contract addresses when applicable, enhance command documentation when new features are added to existing commands, update genesis block configuration in consensus section when network upgrades occur
Applied to files:
pages/developers/intelligent-contracts/equivalence-principle.mdx
📚 Learning: applies to pages/validators/setup-guide.mdx : update configuration examples with new contract addres...
Learnt from: CR
PR: genlayerlabs/genlayer-docs#0
File: CLAUDE.md:0-0
Timestamp: 2025-07-24T07:56:58.272Z
Learning: Applies to pages/validators/setup-guide.mdx : Update configuration examples with new contract addresses in setup-guide.mdx when applicable
Applied to files:
pages/developers/intelligent-contracts/equivalence-principle.mdx
📚 Learning: applies to pages/validators/setup-guide.mdx : update genesis block configuration in consensus sectio...
Learnt from: CR
PR: genlayerlabs/genlayer-docs#0
File: CLAUDE.md:0-0
Timestamp: 2025-07-24T07:56:58.272Z
Learning: Applies to pages/validators/setup-guide.mdx : Update genesis block configuration in consensus section of setup-guide.mdx when network upgrades occur
Applied to files:
pages/developers/intelligent-contracts/equivalence-principle.mdx
📚 Learning: applies to pages/validators/setup-guide.mdx : update version list in curl command output example (li...
Learnt from: CR
PR: genlayerlabs/genlayer-docs#0
File: CLAUDE.md:0-0
Timestamp: 2025-07-24T07:56:58.272Z
Learning: Applies to pages/validators/setup-guide.mdx : Update version list in curl command output example (line ~88), download command version variable (line ~113), consensus contract addresses and genesis block number (lines ~143-146), and command documentation (line ~347) in setup-guide.mdx for new validator releases
Applied to files:
pages/developers/intelligent-contracts/equivalence-principle.mdx
📚 Learning: applies to pages/validators/setup-guide.mdx : update version references in download examples and ver...
Learnt from: CR
PR: genlayerlabs/genlayer-docs#0
File: CLAUDE.md:0-0
Timestamp: 2025-07-24T07:56:58.272Z
Learning: Applies to pages/validators/setup-guide.mdx : Update version references in download examples and version lists in setup-guide.mdx when new validator releases occur
Applied to files:
pages/developers/intelligent-contracts/equivalence-principle.mdx
📚 Learning: applies to pages/validators/setup-guide.mdx : update consensus contract addresses and genesis block ...
Learnt from: CR
PR: genlayerlabs/genlayer-docs#0
File: CLAUDE.md:0-0
Timestamp: 2025-07-24T07:56:58.272Z
Learning: Applies to pages/validators/setup-guide.mdx : Update consensus contract addresses and genesis block number in setup-guide.mdx when network upgrades occur
Applied to files:
pages/developers/intelligent-contracts/equivalence-principle.mdx
📚 Learning: applies to pages/validators/setup-guide.mdx : consensus contract addresses change with network upgra...
Learnt from: CR
PR: genlayerlabs/genlayer-docs#0
File: CLAUDE.md:0-0
Timestamp: 2025-07-24T07:56:58.272Z
Learning: Applies to pages/validators/setup-guide.mdx : Consensus contract addresses change with network upgrades and must be updated in configuration examples
Applied to files:
pages/developers/intelligent-contracts/equivalence-principle.mdx
📚 Learning: applies to pages/validators/setup-guide.mdx : genvm diagnostics integration affects the doctor comma...
Learnt from: CR
PR: genlayerlabs/genlayer-docs#0
File: CLAUDE.md:0-0
Timestamp: 2025-07-24T07:56:58.272Z
Learning: Applies to pages/validators/setup-guide.mdx : GenVM diagnostics integration affects the doctor command behavior and should be documented in the validator setup guide
Applied to files:
pages/developers/intelligent-contracts/equivalence-principle.mdx
📚 Learning: applies to pages/validators/changelog.mdx : changelog updates (pages/validators/changelog.mdx): add ...
Learnt from: CR
PR: genlayerlabs/genlayer-docs#0
File: CLAUDE.md:0-0
Timestamp: 2025-07-24T07:56:58.272Z
Learning: Applies to pages/validators/changelog.mdx : Changelog Updates (pages/validators/changelog.mdx): Add new version entries at the top in reverse chronological order, use consistent format: # v0.x.x, ## New features, ## Bug fixes, ## Misc, and include missing intermediate versions if needed
Applied to files:
pages/developers/intelligent-contracts/equivalence-principle.mdx
📚 Learning: applies to pages/validators/setup-guide.mdx : enhance command documentation in setup-guide.mdx when ...
Learnt from: CR
PR: genlayerlabs/genlayer-docs#0
File: CLAUDE.md:0-0
Timestamp: 2025-07-24T07:56:58.272Z
Learning: Applies to pages/validators/setup-guide.mdx : Enhance command documentation in setup-guide.mdx when new features are added to existing commands
Applied to files:
pages/developers/intelligent-contracts/equivalence-principle.mdx
Comprehensive Equivalence Principles Documentation
Added complete coverage of all GenLayer equivalence principle methods with practical examples and clear guidance.
New Content Added:
gl.vm.run_nondet(safe) andgl.vm.run_nondet_unsafe(performance-focused) variantsImprovements:
The documentation now provides developers with complete guidance on choosing and implementing the right equivalence principle for their specific use case, from simple boolean operations to complex custom scoring systems.
Summary by CodeRabbit