mirror of
https://github.com/router-for-me/Cli-Proxy-API-Management-Center.git
synced 2026-08-29 00:41:25 +08:00
fix(kimi): use versioned OpenAI base URL
This commit is contained in:
@@ -3,8 +3,9 @@ import type { SponsorProviderRaw } from './types';
|
||||
|
||||
export const KIMI_PROVIDER_NAME = 'kimi';
|
||||
export const KIMI_DISPLAY_NAME = 'Kimi';
|
||||
export const KIMI_OPENAI_BASE_URL = 'https://api.moonshot.ai';
|
||||
export const KIMI_ANTHROPIC_BASE_URL = 'https://api.moonshot.ai/anthropic';
|
||||
export const KIMI_LEGACY_OPENAI_BASE_URL = 'https://api.moonshot.ai';
|
||||
export const KIMI_OPENAI_BASE_URL = `${KIMI_LEGACY_OPENAI_BASE_URL}/v1`;
|
||||
export const KIMI_ANTHROPIC_BASE_URL = `${KIMI_LEGACY_OPENAI_BASE_URL}/anthropic`;
|
||||
export const KIMI_CHINESE_AFFILIATE_URL = 'https://platform.kimi.com/?aff=cliproxyapi';
|
||||
export const KIMI_INTERNATIONAL_AFFILIATE_URL = 'https://platform.kimi.ai/?aff=cliproxyapi';
|
||||
|
||||
@@ -46,9 +47,11 @@ export const getKimiProtocolUrls = (_value: string | undefined | null) => ({
|
||||
|
||||
export const isKimiOpenAIProvider = (config: OpenAIProviderConfig | undefined | null): boolean => {
|
||||
if (!config) return false;
|
||||
const baseUrl = normalizeBaseUrl(config.baseUrl);
|
||||
return (
|
||||
normalizeText(config.name) === KIMI_PROVIDER_NAME ||
|
||||
normalizeBaseUrl(config.baseUrl) === normalizeBaseUrl(KIMI_OPENAI_BASE_URL)
|
||||
baseUrl === normalizeBaseUrl(KIMI_OPENAI_BASE_URL) ||
|
||||
baseUrl === normalizeBaseUrl(KIMI_LEGACY_OPENAI_BASE_URL)
|
||||
);
|
||||
};
|
||||
|
||||
|
||||
@@ -1,8 +1,10 @@
|
||||
import { describe, expect, test } from 'bun:test';
|
||||
import { afterEach, describe, expect, test } from 'bun:test';
|
||||
import { buildOpenAIChatCompletionsEndpoint } from '../src/components/providers/utils';
|
||||
import {
|
||||
KIMI_ANTHROPIC_BASE_URL,
|
||||
KIMI_CHINESE_AFFILIATE_URL,
|
||||
KIMI_INTERNATIONAL_AFFILIATE_URL,
|
||||
KIMI_LEGACY_OPENAI_BASE_URL,
|
||||
KIMI_OPENAI_BASE_URL,
|
||||
buildKimiRaw,
|
||||
getKimiAffiliateUrl,
|
||||
@@ -13,18 +15,41 @@ import {
|
||||
import { PROVIDER_LOGOS } from '../src/features/providers/brandLogos';
|
||||
import { PROVIDER_BRAND_ORDER } from '../src/features/providers/descriptors';
|
||||
import { getSponsorProviderDefinition } from '../src/features/providers/sponsorDefinitions';
|
||||
import { apiCallApi } from '../src/services/api/apiCall';
|
||||
import { modelsApi } from '../src/services/api/models';
|
||||
|
||||
const originalApiCallRequest = apiCallApi.request;
|
||||
|
||||
afterEach(() => {
|
||||
apiCallApi.request = originalApiCallRequest;
|
||||
});
|
||||
|
||||
describe('Kimi provider', () => {
|
||||
test('maps OpenAI-compatible and Claude protocols to their exact endpoints', () => {
|
||||
expect(getKimiProtocolUrls(undefined)).toEqual({
|
||||
openai: 'https://api.moonshot.ai',
|
||||
openai: 'https://api.moonshot.ai/v1',
|
||||
anthropic: 'https://api.moonshot.ai/anthropic',
|
||||
codex: '',
|
||||
gemini: '',
|
||||
});
|
||||
expect(buildOpenAIChatCompletionsEndpoint(KIMI_OPENAI_BASE_URL)).toBe(
|
||||
'https://api.moonshot.ai/v1/chat/completions'
|
||||
);
|
||||
expect(getSponsorProviderDefinition('kimi').protocols).toEqual(['openai', 'claude']);
|
||||
});
|
||||
|
||||
test('discovers models through the versioned OpenAI endpoint', async () => {
|
||||
let requestedUrl = '';
|
||||
apiCallApi.request = (async (payload) => {
|
||||
requestedUrl = payload.url;
|
||||
return { statusCode: 200, header: {}, bodyText: '', body: { data: [] } };
|
||||
}) as typeof apiCallApi.request;
|
||||
|
||||
await modelsApi.fetchModelsViaApiCall(KIMI_OPENAI_BASE_URL, 'test-key');
|
||||
|
||||
expect(requestedUrl).toBe('https://api.moonshot.ai/v1/models');
|
||||
});
|
||||
|
||||
test('uses the domestic registration link for Chinese and the international link otherwise', () => {
|
||||
expect(getKimiAffiliateUrl('zh-CN')).toBe(KIMI_CHINESE_AFFILIATE_URL);
|
||||
expect(getKimiAffiliateUrl('zh-TW')).toBe(KIMI_CHINESE_AFFILIATE_URL);
|
||||
@@ -53,6 +78,12 @@ describe('Kimi provider', () => {
|
||||
baseUrl: `${KIMI_OPENAI_BASE_URL}/`,
|
||||
})
|
||||
).toBeTrue();
|
||||
expect(
|
||||
isKimiOpenAIProvider({
|
||||
name: 'legacy-moonshot',
|
||||
baseUrl: KIMI_LEGACY_OPENAI_BASE_URL,
|
||||
})
|
||||
).toBeTrue();
|
||||
expect(
|
||||
isKimiClaudeProvider({ apiKey: 'sk-test', baseUrl: KIMI_ANTHROPIC_BASE_URL })
|
||||
).toBeTrue();
|
||||
|
||||
Reference in New Issue
Block a user