Repository navigation
Conversation
Code Review SummaryStatus: No Issues Found | Recommendation: Merge Files Reviewed (14 files)
Reviewed by claude-sonnet-5.5 · Input: 258 · Output: 1.6K · Cached: 232.1K Review guidance: REVIEW.md from base branch |
debba
left a comment
There was a problem hiding this comment.
Thanks for the work on adding Runcrate, including filtering its model catalog to text outputs. We are evaluating moving AI assistant integrations into plugins, so I am holding off on reviewing and merging AI assistant changes for now. The draft with that work is #1337.
Since this is your first PR here, we would be happy to have you join us on Discord if you would like to get involved: https://discord.com/invite/K2hmhfHRSt
|
Thanks for the look, understood. Happy to wait. Once the plugin interface from #1337 lands I'll port the Runcrate entry to the plugin API. Could you ping me here when it's ready? |
|
@heydryft, the interface you were waiting for is now on main: #1337 has been merged. Runcrate can now be a separate declarative The authoring guide is https://github.com/TabularisDB/tabularis/blob/main/plugins/ai-assistants/README.md and a starting definition is at https://github.com/TabularisDB/tabularis/blob/main/plugins/ai-assistants/packages/runcrate/.tabularium . Keep the stable The existing eight providers remain embedded, so replacement packages for them are unnecessary. The production AI kind/listing has not been enabled, and the actual first shipping runtime version still needs assignment before public ingestion. Please develop the package against main now, then coordinate that runtime gate rather than publishing an unversioned production listing. This resolves the wait for an interface; it is not an approval to merge the old hardcoded-provider implementation. |
|
Great, thanks. We'll build Runcrate as an ai-assistant package against main and publish it from a Runcrate repo. Will wait on the runtime version before anything public. |
|
@heydryft, the runtime-version gate you were waiting for is now assigned. The external AI assistant runtime from #1337 is now on "min_runtime_version": "0.32.1-4"The current nightly is For a complete published example, see Google Gemini on Tabularium, the Gemini plugin repository, and release 1.0.2. The release includes the standalone The authoring guide describes the declarative HTTP contract. New providers should use an external The Runcrate starter manifest is available as a starting point. Keep |
|
The package is up: https://github.com/runcrateai/tabularis-runcrate-plugin/releases/tag/v1.0.0 (standalone manifest plus universal ZIP, floor 0.32.1-4). One snag on the registry side: the GitHub sign-in asks for repo write and webhook admin on the account, which is more than we want to hand over. Could you add the repo from your end, or is there a narrower way in? |
Summary
Adds Runcrate as an AI provider. Runcrate serves open models (DeepSeek, GLM, Qwen, Kimi, gpt-oss and others) behind an OpenAI-compatible Chat Completions API at
https://api.runcrate.ai/v1. It follows the Requesty integration (#817) step by step, so it shows up in Settings > AI next to OpenRouter and Requesty and works for SQL generation, query explanation and the other AI features.Changes
src-tauri/src/ai.rs:generate_runcrate(POSThttps://api.runcrate.ai/v1/chat/completions, same body as OpenRouter and Requesty, no attribution headers), the dispatch arm, andfetch_runcrate_models, which reads the public/v1/modelscatalog and keeps only rows whoseoutput_modalitiesincludetext(the same list also has image, video, audio and embedding models). Merged into the static list like OpenRouter and Requesty.src-tauri/src/ai_models.yaml:runcrateentry withdeepseek-ai/DeepSeek-V4.1-Flashfirst as the default, thenzai-org/GLM-5.3-Flash,zai-org/GLM-5.3,Qwen/Qwen3.8-Flash,openai/gpt-oss-120b,moonshotai/Kimi-K2.6. All ids checked against the live catalog.src-tauri/src/application/ai.rs,src-tauri/src/transport/desktop/config.rs:RUNCRATE_API_KEYenv var for key lookup and key status.packages/web-ui: provider type, label, Settings > AI entry, key status check and a simple box icon inClientIcons.tsx(currentColor, no hardcoded colors).settings.tsandaiDefaults.ts, like Requesty, so it is only used when picked explicitly. A test covers that.test_runcrate_catalog_keeps_text_models_onlyand aruncratecheck intest_load_default_models;runcrateadded to both provider fixture tests inai_provider_tests.rs(wire protocol plus a check that the request goes toapi.runcrate.ai:443asPOST /v1/chat/completions, and HTTP error propagation); label test insettingsUI.test.ts; no auto-select test insettings.test.ts.README.md,.gitster/gitster.md,snap/snapcraft.yaml: Runcrate added to the provider lists.No issue to close: this is a provider addition with the same scope as #817.
How to test
RUNCRATE_API_KEY.deepseek-ai/DeepSeek-V4.1-Flash(or refresh the model list to see the full catalog).Checks
pnpm typecheck: passpnpm lint(ESLint, Prettier, theme tokens): passnpx vitest runinpackages/web-ui: 7525 passed, 7 failed. The 7 failing files (index.test.ts,api/representativeSlice.test.ts,contexts/ThemeDowngrade.test.tsx,scripts/set-nightly-version.test.ts,scripts/stage-winget-installer.test.ts,scripts/winget-build-config.test.ts,types/pluginSlotsParity.test.ts) fail the same way on a cleanmainin this checkout, unrelated to this change. The new and touched tests insettings.test.tsandsettingsUI.test.tspass.cargo test --lib aiinsrc-tauri: 323 passed, 0 failed, 3 ignored, includingtest_runcrate_catalog_keeps_text_models_only,test_load_default_modelsand bothai::provider_testsfixture tests.rustfmt --checkon the changed Rust files: clean.generate_runcrateandfetch_runcrate_modelswith a Runcrate key (a temporary ignored test, not committed):fetch_runcrate_models: 146 text modelsdeepseek-ai/DeepSeek-V4.1-Flashandzai-org/GLM-5.3-Flash, prompt "Count the rows in the authors table": both returnedSELECT COUNT(*) FROM authors;Runcrate Error: {"error":{"message":"Invalid or revoked API key",...}}This PR was prepared with AI assistance: an AI coding agent wrote the change and ran the checks above.
Disclosure: I work on Runcrate.