adr: Eden AI as an EU-resident model provider - #104
Open
SamyMe wants to merge 1 commit into
Open
Conversation
Author
|
Oh and a bit of context on us: Eden AI is the largest AI gateway in Europe, backed by Olivier Pomel (Datadog) and Nicolas Dessaigne (Algolia). |
Author
|
@16francej I think this is close to your OpenRouter PR (#22), so maybe you are the right person to look. cc @ReganBell |
Author
|
@16francej @ReganBell any news on this?:) |
pull Bot
pushed a commit
to danielabelski/qm
that referenced
this pull request
Aug 4, 2026
…tered providers Two layers of custom model endpoints: 1. ANTHROPIC_BASE_URL / OPENAI_BASE_URL / OPENROUTER_BASE_URL are parsed and validated once in config (bad URLs fail at boot), resolved through one provider-endpoints module, and applied uniformly: the pi harness, the claude/codex child harness process envs, and admin key validation (a gateway-issued key validates against the configured endpoint). 2. An org admin can register additional providers that speak the OpenAI or Anthropic wire protocol — base URL, API key, and the model ids to expose — via PUT /v1/admin/custom-providers/:slug. Registered models resolve through the same choke point as built-ins, surface in the catalog and model pickers, and serve on the pi and opencode harnesses. Keys validate against the registered endpoint (skippable for gateways without a models listing), live in the same encrypted store as the built-in provider keys, and are write-only. Built-in model ids and provider slugs are reserved. The admin portal gets a Custom providers card. DeepSeek / Kimi / xAI / a corporate gateway become request bodies, not code. QA hardening: custom keys reach the model runtime for every provider, models.json materialization is cached per registry version, a corrupt custom key degrades only its provider, slashed custom ids win the opencode modelRef lookup, model/name input caps, double-delete 404s, and the picker refreshes when registrations change. Addresses the custom-endpoint asks in yc-software#110, yc-software#60, yc-software#116, yc-software#104.
kikoncuo
added a commit
to Omniloy/qm
that referenced
this pull request
Aug 11, 2026
Review verdict on the sanitizer: no XSS bypass across 26 payloads, and logoCssUrl is escape-proof for both the CSS string and the style element. What it did find was a logo that passes validation and then renders as nothing, plus three defects elsewhere. Accepted-but-invisible logos now fail loudly instead. A bare & (realistic for a company name), an unquoted attribute value, or markup inside an attribute all made the SVG unparseable while validation returned ok, so the favicon broke and --brand-logo resolved to nothing with no diagnostic. The same for a missing or wrong xmlns, which renders blank in both sinks. Character references are now decoded before the external-reference check, which was bypassable with &yc-software#104;ttp://. The admin console never received the two new fields: its fetchBrand still copied only accent, mark and selfLabel, so the shell rendered a blank <title> Admin</title>, an org's own product name never reached it, and the logo variable this work added could never paint. The shell cache key now covers both fields too. Where branding is missing entirely, the title falls back to the shipped name rather than emptiness. A product name carrying a quote or backslash corrupted manifest.json and Chrome then refused the whole extension. Such characters are stripped at every entry point, and the zip builder re-parses the JSON and ships the original on failure. The new brand guard would have failed CI on an unrelated npm install: it scanned base64 integrity hashes, where +QM/ or +QM= appears by chance. It reuses the older guard's integrity scrub. Also serves favicons under a sandboxed CSP, so a future sanitizer gap cannot escalate from a broken image to same-origin script.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Hi! There's no
MODEL_PROVIDERvalue today that keeps a turn inside the EU, which is a hard blocker for orgs with a data-residency requirement rather than a nice-to-have. Short notes on adding Eden AI's EU endpoint, plus a question about how many models to expose.Prototyped it at https://github.com/SamyMe/qm/tree/edenai-eu-provider if that's useful, and happy to send over an API key with credits so you can try it without spending anything. Disclosure: I work at Eden AI.
Need help on this PR? Tag
@codesmith-botwith what you need. Autofix is disabled.