chore: initialize clean metapi repository
This commit is contained in:
commit
2ecc23730d
199 files changed
+46078
No files matched your search
@@ -0,0 +1,147 @@
|
||||
import { describe, expect, it } from 'vitest';
|
||||
import {
|
||||
extractSelfLogItems,
|
||||
findBestSelfLogMatch,
|
||||
shouldLookupSelfLog,
|
||||
type SelfLogItem,
|
||||
} from './proxyUsageFallbackService.js';
|
||||
|
||||
describe('proxyUsageFallbackService', () => {
|
||||
it('extracts logs from nested /api/log/self payload', () => {
|
||||
const payload = {
|
||||
success: true,
|
||||
data: {
|
||||
data: [
|
||||
{
|
||||
model_name: 'gpt-4o',
|
||||
prompt_tokens: 120,
|
||||
completion_tokens: 80,
|
||||
quota: 3300,
|
||||
created_at: 1_700_000_123,
|
||||
request_time: 1450,
|
||||
},
|
||||
],
|
||||
},
|
||||
};
|
||||
|
||||
const logs = extractSelfLogItems(payload);
|
||||
expect(logs).toEqual([
|
||||
{
|
||||
modelName: 'gpt-4o',
|
||||
tokenName: '',
|
||||
promptTokens: 120,
|
||||
completionTokens: 80,
|
||||
totalTokens: 200,
|
||||
quota: 3300,
|
||||
createdAtMs: 1_700_000_123_000,
|
||||
requestTimeMs: 1450,
|
||||
},
|
||||
]);
|
||||
});
|
||||
|
||||
it('matches best log by model + time window + request time', () => {
|
||||
const logs: SelfLogItem[] = [
|
||||
{
|
||||
modelName: 'gpt-4o',
|
||||
tokenName: 'default',
|
||||
promptTokens: 10,
|
||||
completionTokens: 5,
|
||||
totalTokens: 15,
|
||||
quota: 1000,
|
||||
createdAtMs: 1_700_000_000_000,
|
||||
requestTimeMs: 800,
|
||||
},
|
||||
{
|
||||
modelName: 'gpt-4o',
|
||||
tokenName: 'default',
|
||||
promptTokens: 200,
|
||||
completionTokens: 100,
|
||||
totalTokens: 300,
|
||||
quota: 4500,
|
||||
createdAtMs: 1_700_000_007_000,
|
||||
requestTimeMs: 3100,
|
||||
},
|
||||
{
|
||||
modelName: 'gpt-4o-mini',
|
||||
tokenName: 'default',
|
||||
promptTokens: 999,
|
||||
completionTokens: 1,
|
||||
totalTokens: 1000,
|
||||
quota: 9999,
|
||||
createdAtMs: 1_700_000_007_000,
|
||||
requestTimeMs: 3100,
|
||||
},
|
||||
];
|
||||
|
||||
const matched = findBestSelfLogMatch(logs, {
|
||||
modelName: 'gpt-4o',
|
||||
requestStartedAtMs: 1_700_000_004_000,
|
||||
requestEndedAtMs: 1_700_000_008_200,
|
||||
localLatencyMs: 3200,
|
||||
});
|
||||
|
||||
expect(matched).toEqual(logs[1]);
|
||||
});
|
||||
|
||||
it('returns null when no safe match exists', () => {
|
||||
const logs: SelfLogItem[] = [
|
||||
{
|
||||
modelName: 'gpt-4o',
|
||||
tokenName: 'default',
|
||||
promptTokens: 120,
|
||||
completionTokens: 80,
|
||||
totalTokens: 200,
|
||||
quota: 3300,
|
||||
createdAtMs: 1_700_000_123_000,
|
||||
requestTimeMs: 1450,
|
||||
},
|
||||
];
|
||||
|
||||
const matched = findBestSelfLogMatch(logs, {
|
||||
modelName: 'gpt-4o',
|
||||
requestStartedAtMs: 1_700_010_000_000,
|
||||
requestEndedAtMs: 1_700_010_004_000,
|
||||
localLatencyMs: 4000,
|
||||
});
|
||||
|
||||
expect(matched).toBeNull();
|
||||
});
|
||||
|
||||
it('matches provider-prefixed model names', () => {
|
||||
const logs: SelfLogItem[] = [
|
||||
{
|
||||
modelName: 'z-ai/glm4.7',
|
||||
tokenName: 'sys_playground',
|
||||
promptTokens: 1095,
|
||||
completionTokens: 2179,
|
||||
totalTokens: 3274,
|
||||
quota: 1890000,
|
||||
createdAtMs: 1_772_024_884_000,
|
||||
requestTimeMs: 59_000,
|
||||
},
|
||||
];
|
||||
|
||||
const matched = findBestSelfLogMatch(logs, {
|
||||
modelName: 'glm4.7',
|
||||
tokenName: 'windhub',
|
||||
requestStartedAtMs: 1_772_024_825_000,
|
||||
requestEndedAtMs: 1_772_024_884_500,
|
||||
localLatencyMs: 59_000,
|
||||
});
|
||||
|
||||
expect(matched).toEqual(logs[0]);
|
||||
});
|
||||
|
||||
it('always enables self-log lookup for done-hub/one-hub', () => {
|
||||
expect(shouldLookupSelfLog('done-hub', { promptTokens: 12, completionTokens: 8, totalTokens: 20 })).toBe(true);
|
||||
expect(shouldLookupSelfLog('one-hub', { promptTokens: 1, completionTokens: 1, totalTokens: 2 })).toBe(true);
|
||||
});
|
||||
|
||||
it('only enables self-log lookup for new-api/anyrouter when usage is missing', () => {
|
||||
expect(shouldLookupSelfLog('new-api', { promptTokens: 0, completionTokens: 0, totalTokens: 0 })).toBe(true);
|
||||
expect(shouldLookupSelfLog('anyrouter', { promptTokens: 0, completionTokens: 0, totalTokens: 0 })).toBe(true);
|
||||
|
||||
expect(shouldLookupSelfLog('new-api', { promptTokens: 12, completionTokens: 3, totalTokens: 15 })).toBe(false);
|
||||
expect(shouldLookupSelfLog('anyrouter', { promptTokens: 12, completionTokens: 3, totalTokens: 15 })).toBe(false);
|
||||
});
|
||||
});
|
||||
Reference in new issue
Block a user