refactor: require codex sentinel model endpoint yaml
This commit is contained in:
@@ -205,8 +205,8 @@ export function readCodexPoolSentinelConfig(value: unknown, defaults: CodexPoolS
|
||||
cronJobName: readRequiredDnsName(valueAt(value, "cronJobName"), `${sourcePath}.sentinel.cronJobName`),
|
||||
roleName: readRequiredDnsName(valueAt(value, "roleName"), `${sourcePath}.sentinel.roleName`),
|
||||
roleBindingName: readRequiredDnsName(valueAt(value, "roleBindingName"), `${sourcePath}.sentinel.roleBindingName`),
|
||||
model: readModelName(valueAt(value, "model"), `${sourcePath}.sentinel.model`, defaults.model),
|
||||
endpoint: "responses",
|
||||
model: readRequiredModelName(valueAt(value, "model"), `${sourcePath}.sentinel.model`),
|
||||
endpoint: readRequiredEndpoint(valueAt(value, "endpoint"), `${sourcePath}.sentinel.endpoint`),
|
||||
marker: {
|
||||
prefix: readMarkerPrefix(valueAt(marker, "prefix"), `${sourcePath}.sentinel.marker.prefix`, defaults.marker.prefix),
|
||||
exact: readBoolean(valueAt(marker, "exact"), `${sourcePath}.sentinel.marker.exact`, defaults.marker.exact),
|
||||
@@ -2106,20 +2106,30 @@ function readDnsName(value: unknown, key: string, fallback: string): string {
|
||||
}
|
||||
|
||||
function readRequiredDnsName(value: unknown, key: string): string {
|
||||
if (value === undefined || value === null) throw new Error(`${key} is required`);
|
||||
if (typeof value !== "string" || value.trim().length === 0) throw new Error(`${key} must be a non-empty string`);
|
||||
if (/[\r\n]/u.test(value)) throw new Error(`${key} must not contain newlines`);
|
||||
const text = value.trim();
|
||||
const text = readRequiredString(value, key);
|
||||
if (!/^[a-z0-9]([-a-z0-9]*[a-z0-9])?$/u.test(text)) throw new Error(`${key} must be a Kubernetes DNS label`);
|
||||
return text;
|
||||
}
|
||||
|
||||
function readModelName(value: unknown, key: string, fallback: string): string {
|
||||
const text = readString(value, key, fallback);
|
||||
function readRequiredModelName(value: unknown, key: string): string {
|
||||
const text = readRequiredString(value, key);
|
||||
if (!/^[A-Za-z0-9._:-]+$/u.test(text)) throw new Error(`${key} has an unsupported model name`);
|
||||
return text;
|
||||
}
|
||||
|
||||
function readRequiredEndpoint(value: unknown, key: string): "responses" {
|
||||
const text = readRequiredString(value, key);
|
||||
if (text !== "responses") throw new Error(`${key} must be responses`);
|
||||
return text;
|
||||
}
|
||||
|
||||
function readRequiredString(value: unknown, key: string): string {
|
||||
if (value === undefined || value === null) throw new Error(`${key} is required`);
|
||||
if (typeof value !== "string" || value.trim().length === 0) throw new Error(`${key} must be a non-empty string`);
|
||||
if (/[\r\n]/u.test(value)) throw new Error(`${key} must not contain newlines`);
|
||||
return value.trim();
|
||||
}
|
||||
|
||||
function readMarkerPrefix(value: unknown, key: string, fallback: string): string {
|
||||
const text = readString(value, key, fallback);
|
||||
if (!/^[A-Za-z0-9_-]{2,32}$/u.test(text)) throw new Error(`${key} must be 2-32 chars of letters, digits, _ or -`);
|
||||
|
||||
Reference in New Issue
Block a user