Skip to content

SmartHopper 2.0.0-dev.260619: Unified AI I/O, GhJSON Patch, Audio/Speech support, Gemini, and more!

Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 19 Jun 21:32
· 62 commits to main since this release

This major dev release reimagines SmartHopper's component surface with a unified *2* naming convention, introduces a complete family of typed AI input and output components with graceful fallback handling, adds GhJSON diff/patch operations for versioned Grasshopper workflows, and brings speech and music support across OpenAI, MistralAI and Google Gemini.

🔄 Unified Naming & Breaking Changes

Every AI tool and component has been renamed to a clearer source2target pattern:

  • Tools: text_generatetext2text, img_generatetext2img, file_to_mdfile2md, web_to_mdweb2md, etc. web_generic_page_read is removed—use web2md instead.
  • Components: AITextGenerateAIText2TextComponent, AIImgGenerateComponentAIText2ImgComponent, AIFileToMdComponentAIFile2MdComponent, etc. WebPageReadComponent is removed—use Web2MdComponent instead.

Other breaking changes:

  • Model (M) replaced by Settings (S): all AI components now accept AIRequestParameters (from the new AISettingsComponent) or a plain model name string for backward compatibility.
  • Batch API signatures changed: AIBatchStatus.ResultBodyResults dictionary; SubmitBatchAsync and OnBatchCompleted signatures updated for multi-item support.
  • Removed service_tier extra descriptor from OpenAI, Anthropic and MistralAI providers. Use the dedicated Batch input on AISettingsComponent instead.
  • ComponentBase deep refactor: files saved before SmartHopper 1.1.0 lose persistent outputs on first open and must be re-run once.

📥📤 New AI I/O Component Family

A complete suite of typed input and output components now covers every common Grasshopper-to-AI data exchange:

  • Input components (SmartHopper > Input): Text2AI, Img2AI, Audio2AI, Json2AI, AIPromptComponent (formerly AIInstructionsComponent), plus typed list variants TextList2AI, NumberList2AI, IntegerList2AI, BooleanList2AI that collapse branches into JSON arrays.
  • Output components (SmartHopper > Output): AI2Text, AI2Boolean, AI2Number, AI2Integer, AI2Markdown, AI2Json, AI2Img, AI2Script, plus typed list variants AI2TextList, AI2NumberList, AI2IntegerList, AI2BooleanList that expand JSON arrays into typed branches.

Some output components carry an optional Fallback (F) input and a Used Fallback (UF) boolean output. When the AI response is unparseable or empty, the fallback value is emitted and UF = true.

📦 GhJSON Diff & Patch

Version your Grasshopper canvas with .ghpatch files:

  • New AI tools: gh_diff, gh_patch_apply, gh_patch_validate.
  • New Grasshopper components: GhDiffComponents ("Diff GhJSON"), GhPatchApplyComponents ("Apply GhPatch"), SaveGhPatch, OpenGhPatch, GhValidateComponents and GhPatchApplyToCanvasComponents.

These operations route through the GhJSON.NET 1.1.0 NuGet Package, still under testing.

🚀 Batch Processing UX

Batch jobs now show a live progress counter (Processing batch (YY/XX)...), survive file save/reload because sentinel trees are serialized with the document, and provide immediate cancellation feedback (Cancelling batch {id}...Batch {id} cancelled successfully). Per-item custom IDs improve traceability, and order-based fallback matching recovers results when sentinel mapping is unavailable.

🆕 Google Gemini Provider and Audio Support [NOT TESTED FEATURES]

  • Google Gemini is now a first-class provider with support for Gemini 3.1, 2.5, 2.0 and 1.5 models, including text generation, image generation, structured outputs, tool calling, extended thinking, batch processing and service-tier selection.
  • Audio support lands for OpenAI, MistralAI and Gemini: speech-to-text (whisper-1, voxtral-small-latest, etc.) and text-to-speech (tts-1, voxtral-tts-26-03, Gemini preview TTS). A new lyria music-generation endpoint is available on Gemini.

⚙️ Settings & Timeout Consolidation

  • AISettingsComponent assembles per-request AIRequestParameters from universal inputs: Model, Temperature, Max Tokens, Top P, Seed, Timeout and Extras.
  • AIExtraSettingsComponent dynamically generates inputs based on the selected provider's extra descriptors.
  • Timeout is now a single setting (default 300 s) with clear resolution priority: component input → settings → safe default.

📄 File, Web & Vision Processing

  • file2md and AIFile2MdComponent convert PDF, DOCX, PPTX, XLSX, HTML, CSV and more to Markdown with layout intelligence and image extraction.
  • web2md and Web2MdComponent convert web pages to Markdown with specialized handlers for Wikipedia, GitHub, GitLab and Stack Exchange.
  • img2text now supports batch mode and correctly transmits base64 image data for GH_ExtractedImage inputs across all providers.

📦 JSON Components & Utilities

New non-AI JSON components join the SmartHopper > JSON tab:

  • JsonSchemaComponent, JsonSchemaPropComponent, JsonSchemaPropObjectComponent, JsonSchemaPropArrayComponent
  • JsonObjectComponent, JsonArrayComponent, JsonArray2TextListComponent, JsonObject2TextComponent
  • JsonGetValueComponent (dot-notation paths), JsonMergeComponent
  • JsonSanitizerComponent recovers malformed AI-generated JSON via automatic markdown-fence stripping, brace-depth extraction and smart sanitization.

🛠️ Technical Requirements

  • Rhino 8.0 or above is required
  • Windows 10/11 or macOS
  • Valid API keys for MistralAI, OpenAI, DeepSeek, Anthropic, OpenRouter or Google Gemini

⚠️ Important Notes

  • This is a dev release with some features still unstable or subject to change
  • API keys are required, and usage costs apply based on your provider
  • Breaking: saved Grasshopper files using the old Model (M) input or legacy component names will need reconnecting after upgrade
  • Documentation is currently under development

🤝 We Value Your Feedback!

Help shape SmartHopper's future by:

  • Sharing your experiences with the new features
  • Suggesting improvements via our discussion
  • Telling us what AI capabilities would help your workflow most

We hope you enjoy these new features and improvements!

Happy designing! 🎨


Auto-generated release notes

What's Changed

  • chore: add provider hash manifest for 1.4.2-alpha by @github-actions[bot] in #410
  • ci: enhance milestone management and release automation workflows by @marc-romu in #411
  • ci: new automatic milestone management, automatic update to yak, and release stages manager by @marc-romu in #412
  • update dev by @marc-romu in #413
  • feat(ai): Add batch API support, vision capabilities, file/markdown conversion, and AI settings components by @marc-romu in #416
  • feat(ai-tools): rename AI tools and components to consistent naming convention by @marc-romu in #417
  • docs: update contributors section for dev by @github-actions[bot] in #418
  • chore: add provider hash manifest for 1.4.2-beta by @github-actions[bot] in #427
  • [patch] ci: add reusable cherry-pick action and patch propagation workflow for multi-branch commit fan-out → dev by @github-actions[bot] in #432
  • [patch] ci: add patch/ prefix to auto-delete branch patterns in PR cleanup workflow → dev by @github-actions[bot] in #433
  • [patch] feat(model-registry): refresh AI model catalog across all providers with Apr 2026 updates and rebalance rankings → dev by @github-actions[bot] in #435
  • ci: automate release notes generation with Mistral AI by @devin-ai-integration[bot] in #439
  • ci: add concurrency controls, promotion freeze, auto-discover branches, and CI improvements by @devin-ai-integration[bot] in #442
  • docs(rules): clarify Windsurf guidance by @devin-ai-integration[bot] in #443
  • Update dev from main by @marc-romu in #444
  • docs: update contributors section for main by @github-actions[bot] in #445
  • [patch] ci: automate license header updates on PRs → dev by @github-actions[bot] in #446
  • ci(models): automated provider model discovery via OpenRouter API by @marc-romu in #453
  • chore: anonymize SmartHopperPublicKey for main by @github-actions[bot] in #454
  • chore(models): auto-add new and deprecate stale OpenRouter models by @github-actions[bot] in #463
  • chore(models): auto-add new and deprecate stale MistralAI models by @github-actions[bot] in #465
  • ci: dispatch PR checks after bot writes by @devin-ai-integration[bot] in #469
  • chore(models): auto-add new and deprecate stale DeepSeek models by @github-actions[bot] in #466
  • chore(models): auto-add new and deprecate stale OpenAI models by @github-actions[bot] in #464
  • chore(models): auto-add new and deprecate stale Anthropic models by @github-actions[bot] in #462
  • fix(ci): handle 'already_exists' milestone error code by @devin-ai-integration[bot] in #479
  • fix(ci): provider-models surfaces validation errors + non-fatal scheduled run by @devin-ai-integration[bot] in #480
  • chore(templates): sync model-verification template with ProviderModels by @github-actions[bot] in #485
  • fix: update manifest text dynamically in YAK upload workflow by @devin-ai-integration[bot] in #493
  • ci: create version label when initializing stabilization path by @devin-ai-integration[bot] in #519
  • chore(ci): rethink label colors, rename stale/needs-attention, add needs testers by @devin-ai-integration[bot] in #518
  • [patch] fix(ci): strip date/build metadata from version labels → dev by @github-actions[bot] in #550
  • [patch] fix(ci): strip date/build metadata from version labels → main by @github-actions[bot] in #553
  • feat: SmartHopper 2.0.0 - Google Gemini Provider, Batch API, Vision Input, and Breaking Changes by @marc-romu in #420
  • chore: update development version date to 2.0.0-dev.260616 by @github-actions[bot] in #556
  • chore(templates): add 1.4.3 to model-verification template by @marc-romu in #557
  • docs: update contributors section for dev by @github-actions[bot] in #561
  • refactor: remove unused HashSet containers in AIInputPayloadMerger and gh_put by @devin-ai-integration[bot] in #562
  • fix(ci): handle null $LASTEXITCODE in version-manager action by @devin-ai-integration[bot] in #563
  • feat(fallback): implement Modality Fallback Resolver by @devin-ai-integration[bot] in #564
  • feat(release): SmartHopper 2.0.0 — Gemini Provider, Batch API, Vision Input, and Breaking Changes by @marc-romu in #560

Full Changelog: 1.4.2-alpha...2.0.0-dev.260619