llmrouter: ACL nur für eigene Namen, Durchreiche prüft LiteLLM
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
+13
-6
@@ -76,7 +76,19 @@ type Ziel = { alias: string; upstreamName: string; upstream: Upstream; model: st
|
|||||||
type Fehler = { fehler: string; status: number };
|
type Fehler = { fehler: string; status: number };
|
||||||
const OR = (): Upstream => config.upstreams.openrouter;
|
const OR = (): Upstream => config.upstreams.openrouter;
|
||||||
|
|
||||||
|
/** Bedient der Router diesen Namen selbst? Sonst Durchreiche -- und dann prueft LiteLLM die Rechte, nicht wir. */
|
||||||
|
function eigenerName(name: string): boolean {
|
||||||
|
return name.startsWith("role/") || name.startsWith("openrouter/") || name.startsWith("alt/") || config.aliases[name] !== undefined;
|
||||||
|
}
|
||||||
|
|
||||||
async function zielBestimmen(angefragt: string, keyName: string): Promise<Ziel | Fehler> {
|
async function zielBestimmen(angefragt: string, keyName: string): Promise<Ziel | Fehler> {
|
||||||
|
if (!eigenerName(angefragt)) {
|
||||||
|
if (config.fallback !== undefined) {
|
||||||
|
const u = config.fallback.upstream;
|
||||||
|
return { alias: "(durchreiche)", upstreamName: u, upstream: config.upstreams[u], model: angefragt, effort: null, effortSetzen: false };
|
||||||
|
}
|
||||||
|
return { fehler: `Unbekanntes Modell ${angefragt}`, status: 404 };
|
||||||
|
}
|
||||||
if (!erlaubt(acl.get(keyName) ?? [], angefragt)) return { fehler: `${keyName} darf ${angefragt} nicht rufen`, status: 403 };
|
if (!erlaubt(acl.get(keyName) ?? [], angefragt)) return { fehler: `${keyName} darf ${angefragt} nicht rufen`, status: 403 };
|
||||||
let name = angefragt;
|
let name = angefragt;
|
||||||
if (name.startsWith("role/")) {
|
if (name.startsWith("role/")) {
|
||||||
@@ -100,12 +112,7 @@ async function zielBestimmen(angefragt: string, keyName: string): Promise<Ziel |
|
|||||||
if ("fehler" in z) return { fehler: z.fehler, status: 404 };
|
if ("fehler" in z) return { fehler: z.fehler, status: 404 };
|
||||||
return { alias: name, upstreamName: "openrouter", upstream: OR(), model: z.model, effort: z.effort, effortSetzen: true };
|
return { alias: name, upstreamName: "openrouter", upstream: OR(), model: z.model, effort: z.effort, effortSetzen: true };
|
||||||
}
|
}
|
||||||
if (config.fallback !== undefined) {
|
return { fehler: `Unbekanntes Modell ${angefragt}`, status: 404 }; // z. B. Rolle zeigt auf einen Namen, den es nicht gibt
|
||||||
// Durchreiche: unbekannter Name geht unveraendert an LiteLLM, mit dem Client-Key -- dort gelten dessen ACLs.
|
|
||||||
const u = config.fallback.upstream;
|
|
||||||
return { alias: "(durchreiche)", upstreamName: u, upstream: config.upstreams[u], model: name, effort: null, effortSetzen: false };
|
|
||||||
}
|
|
||||||
return { fehler: `Unbekanntes Modell ${angefragt}`, status: 404 };
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// --- Anfrage bauen -------------------------------------------------------------
|
// --- Anfrage bauen -------------------------------------------------------------
|
||||||
|
|||||||
Reference in New Issue
Block a user