feat: sync deployed v1.0.0-rc.38-custom.42

Sync production source including routing, billing, Astra detection and public uptime. Update custom build instructions and license packaging.
This commit is contained in:
cneicy committed 2026-09-26 04:49:11 +08:00
1 parent aa6c3f50f4
commit ceddfd3d6b
828 files changed
+122253 -13702

No files matched your search

@@ -0,0 +1,140 @@
/*
Copyright (C) 2023-2026 QuantumNous
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
For commercial licensing, please contact support@quantumnous.com
*/
export type InferenceMetric = {
name: string
labels: Record<string, string>
value: number
}
export type InferenceStatus = {
sampled_at: number
endpoints: Record<string, { status: number; error?: string }>
version: string
models: { id: string; root: string; max_model_len: number | null }[]
metrics: InferenceMetric[]
raw_metrics: string
}
export function metricValue(
metrics: InferenceMetric[],
name: string,
labels: Record<string, string> = {},
mode: 'sum' | 'max' = 'sum'
): number | undefined {
const values = metrics
.filter(
(metric) =>
metric.name === name &&
Object.entries(labels).every(
([key, value]) => metric.labels[key] === value
)
)
.map((metric) => metric.value)
if (
!values.length ||
values.some((value) => !Number.isFinite(value) || value < 0)
) {
return undefined
}
if (mode === 'max') return Math.max(...values)
const total = values.reduce((sum, value) => sum + value, 0)
return Number.isFinite(total) ? total : undefined
}
export function metricRatio(
numerator: number | undefined,
denominator: number | undefined
): number | undefined {
if (
numerator === undefined ||
denominator === undefined ||
denominator <= 0
) {
return undefined
}
const ratio = numerator / denominator
return Number.isFinite(ratio) ? ratio : undefined
}
export function metricMean(
metrics: InferenceMetric[],
name: string
): number | undefined {
return metricRatio(
metricValue(metrics, `${name}_sum`),
metricValue(metrics, `${name}_count`)
)
}
function metricSeriesKey(metric: InferenceMetric): string {
return JSON.stringify([
metric.name,
Object.entries(metric.labels).sort(([a], [b]) => a.localeCompare(b)),
])
}
export function recentMetrics(
current: InferenceStatus,
previous?: InferenceStatus
): { seconds: number; metrics: InferenceMetric[] } | undefined {
if (
!previous ||
current.endpoints['/metrics']?.status !== 200 ||
previous.endpoints['/metrics']?.status !== 200 ||
current.endpoints['/metrics']?.error ||
previous.endpoints['/metrics']?.error ||
current.sampled_at <= previous.sampled_at
) {
return undefined
}
const old = new Map(
previous.metrics.map((metric) => [metricSeriesKey(metric), metric.value])
)
const metrics: InferenceMetric[] = []
const tracked = current.metrics.filter(
(metric) =>
metric.name === 'process_start_time_seconds' ||
/_(total|sum|count|created)$/.test(metric.name)
)
const previousTracked = previous.metrics.filter(
(metric) =>
metric.name === 'process_start_time_seconds' ||
/_(total|sum|count|created)$/.test(metric.name)
)
if (tracked.length !== previousTracked.length) return undefined
for (const metric of tracked) {
const last = old.get(metricSeriesKey(metric))
if (
last === undefined ||
!Number.isFinite(metric.value) ||
metric.value < last
) {
return undefined
}
if (
metric.name === 'process_start_time_seconds' ||
metric.name.endsWith('_created')
) {
if (metric.value !== last) return undefined
continue
}
metrics.push({ ...metric, value: metric.value - last })
}
return { seconds: (current.sampled_at - previous.sampled_at) / 1000, metrics }
}