Conversation
SiliconFlow serves the System One contract at https://api.siliconflow.cn/v1/systemone, giving callers a carrier where TypeSafe and OpenRouter are hard to reach. The transport follows the local fetch-based pattern (retry allowlist, byte ceiling, whole-request deadline, fixed-string client-visible errors) and auto-selects when SILICONFLOW_API_KEY is the only configured credential, outranking the compatible fallback; force it with JEV_PROVIDER=siliconflow. The default jev-latest maps to the SiliconFlow alias semif; unknown model names go to the wire verbatim for the endpoint to reject. The API root is overridable via JEV_SILICONFLOW_BASE_URL, mirroring the OpenRouter and Cloudflare overrides.
|
Thank you for submitting this. The transport is well built and the tests are thorough. Provider and transport support now live in @jkudish/jev-agent-tools, the shared transport layer for Jev, so new carriers are added there rather than in jev-mcp. The adding a provider guide covers the options, including publishing yours as a third-party driver package. If you publish one, a PR linking it from the READMEs is welcome. |
|
Thanks for the pointer! The transport now lives where it belongs: jkudish/jev-agent-tools#4 adds SiliconFlow as a built-in driver there, following the add-a-provider guide (driver shape, fixed-string errors, Happy to close this in favor of that PR — and if you'd like, the README link from jev-mcp's provider section can land separately once it's released. |
What
Adds SiliconFlow (硅基流动) as a sixth provider alongside TypeSafe, OpenRouter, Cloudflare, Vercel, and the generic compatible endpoint:
SILICONFLOW_API_KEYauto-selects SiliconFlow when it is the only configured provider credential, outranking the compatible fallback;JEV_PROVIDER=siliconflowforces it.{ model, state, questions }contract tohttps://api.siliconflow.cn/v1/systemoneand reuses the local fetch-based resilience path: the 408/409/429/5xx retry allowlist, the 1 MB streamed byte ceiling, the whole-request deadline, and fixed-string client-visible errors.jev-latestmaps to SiliconFlow's current aliassemif, mirroring the OpenRouterjev-1.13mapping. Unknown model names are sent verbatim for the endpoint to reject — no silent rewriting, per the "configuration errors, never silent fallbacks" rule.JEV_SILICONFLOW_BASE_URL, following the existingJEV_OPENROUTER_BASE_URL/JEV_CLOUDFLARE_BASE_URLconvention (this is also what makes the transport testable against a local mock).Why
SiliconFlow is a practical carrier for callers who cannot reach TypeSafe or OpenRouter reliably. The endpoint speaks the same System One contract the compatible adapter already targets, so this is a small, self-contained transport with no new dependencies.
Testing
npm run typecheck,npm run build, andnpm testpass: 246 tests, including 7 new ones covering the wire request shape and auth header, thejev-latest→semifalias mapping, auto-selection (alone and in preference over a complete compatible credential pair), non-2xx statuses surfacing as fixed-string errors without upstream body text, malformed 200 bodies, and the missing-key configuration error.Notes for review
main(0.10.1) and follows the fixed-string error convention from 0.10.0 — no upstream response text reaches MCP-visible errors.