mirror of
https://github.com/tiennm99/ccs.git
synced 2026-09-03 08:18:23 +00:00
fix(cliproxy): add Kimi model catalog, sync, and pricing to dashboard
- Add kimi entry to UI model-catalogs.ts with K2.5, K2 Thinking, K2 models and preset mappings so dashboard shows available models - Add kimi to CHANNEL_TO_PROVIDER and SYNCABLE_PROVIDERS in catalog-cache.ts so models sync from upstream CLIProxyAPI - Add kimi/moonshot to provider-editor ownerMap for model filtering - Update Kimi model pricing to match official Kimi Platform rates: kimi-k2.5 ($0.60/$3.00), kimi-k2-thinking ($0.60/$2.50), kimi-k2-turbo-preview ($1.15/$8.00) - Add missing kimi-k2.5 pricing entry Closes #581
This commit is contained in:
@@ -23,6 +23,7 @@ const CHANNEL_TO_PROVIDER: Record<string, CLIProxyProvider> = {
|
|||||||
codex: 'codex',
|
codex: 'codex',
|
||||||
qwen: 'qwen',
|
qwen: 'qwen',
|
||||||
iflow: 'iflow',
|
iflow: 'iflow',
|
||||||
|
kimi: 'kimi',
|
||||||
};
|
};
|
||||||
|
|
||||||
/** CCS provider → channel name mapping (reverse) */
|
/** CCS provider → channel name mapping (reverse) */
|
||||||
@@ -31,7 +32,7 @@ export const PROVIDER_TO_CHANNEL: Record<string, string> = Object.fromEntries(
|
|||||||
);
|
);
|
||||||
|
|
||||||
/** Providers to sync from CLIProxyAPI */
|
/** Providers to sync from CLIProxyAPI */
|
||||||
export const SYNCABLE_PROVIDERS: CLIProxyProvider[] = ['agy', 'gemini', 'codex', 'claude'];
|
export const SYNCABLE_PROVIDERS: CLIProxyProvider[] = ['agy', 'gemini', 'codex', 'claude', 'kimi'];
|
||||||
|
|
||||||
function getCacheFilePath(): string {
|
function getCacheFilePath(): string {
|
||||||
return path.join(getCcsDir(), CACHE_FILE_NAME);
|
return path.join(getCcsDir(), CACHE_FILE_NAME);
|
||||||
|
|||||||
@@ -450,37 +450,44 @@ const PRICING_REGISTRY: Record<string, ModelPricing> = {
|
|||||||
},
|
},
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
// Kimi Models (Moonshot AI) - Source: better-ccusage
|
// Kimi Models (Moonshot AI) - Source: Official Kimi Platform pricing
|
||||||
|
// inputPerMillion = cache miss price, cacheReadPerMillion = cache hit price
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
'kimi-for-coding': {
|
'kimi-k2.5': {
|
||||||
inputPerMillion: 0.15,
|
inputPerMillion: 0.6,
|
||||||
outputPerMillion: 0.6,
|
outputPerMillion: 3.0,
|
||||||
cacheCreationPerMillion: 0.0,
|
cacheCreationPerMillion: 0.0,
|
||||||
cacheReadPerMillion: 0.0,
|
cacheReadPerMillion: 0.1,
|
||||||
|
},
|
||||||
|
'kimi-for-coding': {
|
||||||
|
inputPerMillion: 0.6,
|
||||||
|
outputPerMillion: 2.5,
|
||||||
|
cacheCreationPerMillion: 0.0,
|
||||||
|
cacheReadPerMillion: 0.15,
|
||||||
},
|
},
|
||||||
'kimi-k2-0905-preview': {
|
'kimi-k2-0905-preview': {
|
||||||
inputPerMillion: 0.15,
|
inputPerMillion: 0.6,
|
||||||
outputPerMillion: 0.6,
|
outputPerMillion: 2.5,
|
||||||
cacheCreationPerMillion: 0.0,
|
cacheCreationPerMillion: 0.0,
|
||||||
cacheReadPerMillion: 0.0,
|
cacheReadPerMillion: 0.15,
|
||||||
},
|
},
|
||||||
'kimi-k2-turbo-preview': {
|
'kimi-k2-turbo-preview': {
|
||||||
inputPerMillion: 0.15,
|
inputPerMillion: 1.15,
|
||||||
outputPerMillion: 1.15,
|
outputPerMillion: 8.0,
|
||||||
cacheCreationPerMillion: 0.0,
|
cacheCreationPerMillion: 0.0,
|
||||||
cacheReadPerMillion: 0.0,
|
cacheReadPerMillion: 0.15,
|
||||||
},
|
},
|
||||||
'kimi-k2-thinking': {
|
'kimi-k2-thinking': {
|
||||||
inputPerMillion: 0.15,
|
inputPerMillion: 0.6,
|
||||||
outputPerMillion: 0.6,
|
outputPerMillion: 2.5,
|
||||||
cacheCreationPerMillion: 0.0,
|
cacheCreationPerMillion: 0.0,
|
||||||
cacheReadPerMillion: 0.0,
|
cacheReadPerMillion: 0.15,
|
||||||
},
|
},
|
||||||
'kimi-k2-thinking-turbo': {
|
'kimi-k2-thinking-turbo': {
|
||||||
inputPerMillion: 0.15,
|
inputPerMillion: 1.15,
|
||||||
outputPerMillion: 1.15,
|
outputPerMillion: 8.0,
|
||||||
cacheCreationPerMillion: 0.0,
|
cacheCreationPerMillion: 0.0,
|
||||||
cacheReadPerMillion: 0.0,
|
cacheReadPerMillion: 0.15,
|
||||||
},
|
},
|
||||||
'kimi-k2-instruct': {
|
'kimi-k2-instruct': {
|
||||||
inputPerMillion: 1.0,
|
inputPerMillion: 1.0,
|
||||||
|
|||||||
@@ -70,6 +70,7 @@ export function ProviderEditor({
|
|||||||
iflow: ['iflow'],
|
iflow: ['iflow'],
|
||||||
kiro: ['kiro', 'aws'],
|
kiro: ['kiro', 'aws'],
|
||||||
ghcp: ['github', 'copilot'],
|
ghcp: ['github', 'copilot'],
|
||||||
|
kimi: ['kimi', 'moonshot'],
|
||||||
};
|
};
|
||||||
const owners = ownerMap[modelFilterProvider.toLowerCase()] || [
|
const owners = ownerMap[modelFilterProvider.toLowerCase()] || [
|
||||||
modelFilterProvider.toLowerCase(),
|
modelFilterProvider.toLowerCase(),
|
||||||
|
|||||||
@@ -275,6 +275,40 @@ export const MODEL_CATALOGS: Record<string, ProviderCatalog> = {
|
|||||||
},
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
|
kimi: {
|
||||||
|
provider: 'kimi',
|
||||||
|
displayName: 'Kimi (Moonshot)',
|
||||||
|
defaultModel: 'kimi-k2.5',
|
||||||
|
models: [
|
||||||
|
{
|
||||||
|
id: 'kimi-k2.5',
|
||||||
|
name: 'Kimi K2.5',
|
||||||
|
description: 'Latest multimodal model (262K context)',
|
||||||
|
presetMapping: {
|
||||||
|
default: 'kimi-k2.5',
|
||||||
|
opus: 'kimi-k2.5',
|
||||||
|
sonnet: 'kimi-k2-thinking',
|
||||||
|
haiku: 'kimi-k2',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 'kimi-k2-thinking',
|
||||||
|
name: 'Kimi K2 Thinking',
|
||||||
|
description: 'Extended reasoning model',
|
||||||
|
presetMapping: {
|
||||||
|
default: 'kimi-k2-thinking',
|
||||||
|
opus: 'kimi-k2.5',
|
||||||
|
sonnet: 'kimi-k2-thinking',
|
||||||
|
haiku: 'kimi-k2',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 'kimi-k2',
|
||||||
|
name: 'Kimi K2',
|
||||||
|
description: 'Flagship coding model',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
kiro: {
|
kiro: {
|
||||||
provider: 'kiro',
|
provider: 'kiro',
|
||||||
displayName: 'Kiro (AWS)',
|
displayName: 'Kiro (AWS)',
|
||||||
|
|||||||
Reference in New Issue
Block a user