Kaynağa Gözat

feat: add kimi-k2-thinking model to moonshot provider (#9079)

Daniel 1 ay önce
ebeveyn
işleme
63b4a785c1

+ 1 - 0
packages/types/src/model.ts

@@ -65,6 +65,7 @@ export const modelInfoSchema = z.object({
 	supportsReasoningBinary: z.boolean().optional(),
 	// Capability flag to indicate whether the model supports temperature parameter
 	supportsTemperature: z.boolean().optional(),
+	defaultTemperature: z.number().optional(),
 	requiredReasoningBudget: z.boolean().optional(),
 	supportsReasoningEffort: z.boolean().optional(),
 	requiredReasoningEffort: z.boolean().optional(),

+ 14 - 0
packages/types/src/providers/moonshot.ts

@@ -39,6 +39,20 @@ export const moonshotModels = {
 		cacheReadsPrice: 0.6, // $0.60 per million tokens (cache hit)
 		description: `Kimi K2 Turbo is a high-speed version of the state-of-the-art Kimi K2 mixture-of-experts (MoE) language model, with the same 32 billion activated parameters and 1 trillion total parameters, optimized for output speeds of up to 60 tokens per second, peaking at 100 tokens per second.`,
 	},
+	"kimi-k2-thinking": {
+		maxTokens: 16_000, // Recommended ≥ 16,000
+		contextWindow: 262_144, // 262,144 tokens
+		supportsImages: false, // Text-only (no image/vision support)
+		supportsPromptCache: true,
+		inputPrice: 0.6, // $0.60 per million tokens (cache miss)
+		outputPrice: 2.5, // $2.50 per million tokens
+		cacheWritesPrice: 0, // $0 per million tokens (cache miss)
+		cacheReadsPrice: 0.15, // $0.15 per million tokens (cache hit)
+		supportsTemperature: true, // Default temperature: 1.0
+		preserveReasoning: true,
+		defaultTemperature: 1.0,
+		description: `The kimi-k2-thinking model is a general-purpose agentic reasoning model developed by Moonshot AI. Thanks to its strength in deep reasoning and multi-turn tool use, it can solve even the hardest problems.`,
+	},
 } as const satisfies Record<string, ModelInfo>
 
 export const MOONSHOT_DEFAULT_TEMPERATURE = 0.6

+ 1 - 0
webview-ui/src/components/settings/ApiOptions.tsx

@@ -807,6 +807,7 @@ const ApiOptions = ({
 								value={apiConfiguration.modelTemperature}
 								onChange={handleInputChange("modelTemperature", noTransform)}
 								maxValue={2}
+								defaultValue={selectedModelInfo?.defaultTemperature}
 							/>
 						)}
 						<RateLimitSecondsControl

+ 4 - 2
webview-ui/src/components/settings/TemperatureControl.tsx

@@ -9,9 +9,10 @@ interface TemperatureControlProps {
 	value: number | undefined | null
 	onChange: (value: number | undefined | null) => void
 	maxValue?: number // Some providers like OpenAI use 0-2 range.
+	defaultValue?: number // Default temperature from model configuration
 }
 
-export const TemperatureControl = ({ value, onChange, maxValue = 1 }: TemperatureControlProps) => {
+export const TemperatureControl = ({ value, onChange, maxValue = 1, defaultValue }: TemperatureControlProps) => {
 	const { t } = useAppTranslation()
 	const [isCustomTemperature, setIsCustomTemperature] = useState(value !== undefined)
 	const [inputValue, setInputValue] = useState(value)
@@ -37,7 +38,8 @@ export const TemperatureControl = ({ value, onChange, maxValue = 1 }: Temperatur
 						if (!isChecked) {
 							setInputValue(null) // Unset the temperature, note that undefined is unserializable.
 						} else {
-							setInputValue(value ?? 0) // Use the value from apiConfiguration, if set.
+							// Use the value from apiConfiguration, or fallback to model's defaultTemperature, or finally to 0
+							setInputValue(value ?? defaultValue ?? 0)
 						}
 					}}>
 					<label className="block font-medium mb-1">{t("settings:temperature.useCustom")}</label>