Skip to content

Commit ec9676d

Browse files
committed
guard missing model in kimi compat
1 parent 4452eab commit ec9676d

4 files changed

Lines changed: 17 additions & 5 deletions

File tree

web/src/llm-api/__tests__/kimi-tool-compat.test.ts

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { describe, expect, it } from 'bun:test'
22

3-
import { addKimiToolCompatibilityFields } from '../kimi-tool-compat'
3+
import { addKimiToolCompatibilityFields, isKimiModel } from '../kimi-tool-compat'
44

55
import type { ChatCompletionRequestBody } from '../types'
66

@@ -102,3 +102,11 @@ describe('addKimiToolCompatibilityFields', () => {
102102
expect(addKimiToolCompatibilityFields(body)).toEqual(body)
103103
})
104104
})
105+
106+
describe('isKimiModel', () => {
107+
it('matches only Moonshot model ids', () => {
108+
expect(isKimiModel('moonshotai/kimi-k2.6')).toBe(true)
109+
expect(isKimiModel('anthropic/claude-sonnet-4.5')).toBe(false)
110+
expect(isKimiModel(undefined)).toBe(false)
111+
})
112+
})

web/src/llm-api/canopywave.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import {
99
extractRequestMetadata,
1010
insertMessageToBigQuery,
1111
} from './helpers'
12-
import { addKimiToolCompatibilityFields } from './kimi-tool-compat'
12+
import { addKimiToolCompatibilityFields, isKimiModel } from './kimi-tool-compat'
1313

1414
import type { UsageData } from './helpers'
1515
import type { InsertMessageBigqueryFn } from '@codebuff/common/types/contracts/bigquery'
@@ -89,7 +89,7 @@ function createCanopyWaveRequest(params: {
8989
fetch: typeof globalThis.fetch
9090
}) {
9191
const { body, originalModel, fetch } = params
92-
const providerBody = originalModel.startsWith('moonshotai/')
92+
const providerBody = isKimiModel(originalModel)
9393
? addKimiToolCompatibilityFields(body)
9494
: body
9595
const canopywaveBody: Record<string, unknown> = {

web/src/llm-api/kimi-tool-compat.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
import type { ChatCompletionRequestBody } from './types'
22

3+
export function isKimiModel(model: unknown): model is string {
4+
return typeof model === 'string' && model.startsWith('moonshotai/')
5+
}
6+
37
function getToolCallNamesById(
48
messages: ChatCompletionRequestBody['messages'],
59
): Map<string, string> {

web/src/llm-api/openrouter.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import {
99
extractRequestMetadata,
1010
insertMessageToBigQuery,
1111
} from './helpers'
12-
import { addKimiToolCompatibilityFields } from './kimi-tool-compat'
12+
import { addKimiToolCompatibilityFields, isKimiModel } from './kimi-tool-compat'
1313
import {
1414
OpenRouterErrorResponseSchema,
1515
OpenRouterStreamChatCompletionChunkSchema,
@@ -62,7 +62,7 @@ function createOpenRouterRequest(params: {
6262
fetch: typeof globalThis.fetch
6363
}) {
6464
const { body, openrouterApiKey, fetch } = params
65-
const providerBody = body.model.startsWith('moonshotai/')
65+
const providerBody = isKimiModel(body.model)
6666
? addKimiToolCompatibilityFields(body)
6767
: body
6868

0 commit comments

Comments
 (0)