mirror of
https://github.com/openclaw/openclaw.git
synced 2026-04-16 11:41:08 +00:00
50 lines
1.6 KiB
TypeScript
50 lines
1.6 KiB
TypeScript
export function splitTrailingAuthProfile(raw: string): {
|
|
model: string;
|
|
profile?: string;
|
|
} {
|
|
const trimmed = raw.trim();
|
|
if (!trimmed) {
|
|
return { model: "" };
|
|
}
|
|
|
|
const lastSlash = trimmed.lastIndexOf("/");
|
|
let profileDelimiter = trimmed.indexOf("@", lastSlash + 1);
|
|
if (profileDelimiter <= 0) {
|
|
return { model: trimmed };
|
|
}
|
|
|
|
const suffixAfterDelimiter = () => trimmed.slice(profileDelimiter + 1);
|
|
|
|
// Keep well-known "version" suffixes (ex: @20251001) as part of the model id,
|
|
// but allow an auth profile suffix *after* them (ex: ...@20251001@work).
|
|
if (/^\d{8}(?:@|$)/.test(suffixAfterDelimiter())) {
|
|
const nextDelimiter = trimmed.indexOf("@", profileDelimiter + 9);
|
|
if (nextDelimiter < 0) {
|
|
return { model: trimmed };
|
|
}
|
|
profileDelimiter = nextDelimiter;
|
|
}
|
|
|
|
// Keep local model quant suffixes (common in LM Studio/Ollama catalogs) as part
|
|
// of the model id. These often use '@' (ex: gemma-4-31b-it@q8_0) which would
|
|
// otherwise be misinterpreted as an auth profile delimiter.
|
|
//
|
|
// If an auth profile is needed, it can still be specified as a second suffix:
|
|
// lmstudio/foo@q8_0@work
|
|
if (/^(?:q\d+(?:_[a-z0-9]+)*|\d+bit)(?:@|$)/i.test(suffixAfterDelimiter())) {
|
|
const nextDelimiter = trimmed.indexOf("@", profileDelimiter + 1);
|
|
if (nextDelimiter < 0) {
|
|
return { model: trimmed };
|
|
}
|
|
profileDelimiter = nextDelimiter;
|
|
}
|
|
|
|
const model = trimmed.slice(0, profileDelimiter).trim();
|
|
const profile = trimmed.slice(profileDelimiter + 1).trim();
|
|
if (!model || !profile) {
|
|
return { model: trimmed };
|
|
}
|
|
|
|
return { model, profile };
|
|
}
|