Allow models to contain default temperature (#9734)

This commit is contained in:
Matt Rubens 2025-12-01 23:29:42 -05:00 committed by GitHub
parent b2b4f6411f
commit d2b274a9af
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
5 changed files with 100 additions and 1 deletions

View file

@ -38,6 +38,7 @@ export const RooModelSchema = z.object({
tags: z.array(z.string()).optional(),
pricing: RooPricingSchema,
deprecated: z.boolean().optional(),
default_temperature: z.number().optional(),
})
export const RooModelsResponseSchema = z.object({

View file

@ -478,4 +478,69 @@ describe("getRooModels", () => {
"Failed to fetch Roo Code Cloud models: No response from server",
)
})
it("should parse default_temperature from API response", async () => {
const mockResponse = {
object: "list",
data: [
{
id: "test/model-with-temp",
object: "model",
created: 1234567890,
owned_by: "test",
name: "Model with Default Temperature",
description: "Model with custom default temperature",
context_window: 128000,
max_tokens: 8192,
type: "language",
pricing: {
input: "0.0001",
output: "0.0002",
},
default_temperature: 0.6,
},
],
}
mockFetch.mockResolvedValueOnce({
ok: true,
json: async () => mockResponse,
})
const models = await getRooModels(baseUrl, apiKey)
expect(models["test/model-with-temp"].defaultTemperature).toBe(0.6)
})
it("should handle models without default_temperature", async () => {
const mockResponse = {
object: "list",
data: [
{
id: "test/model-no-temp",
object: "model",
created: 1234567890,
owned_by: "test",
name: "Model without Default Temperature",
description: "Model without custom default temperature",
context_window: 128000,
max_tokens: 8192,
type: "language",
pricing: {
input: "0.0001",
output: "0.0002",
},
},
],
}
mockFetch.mockResolvedValueOnce({
ok: true,
json: async () => mockResponse,
})
const models = await getRooModels(baseUrl, apiKey)
expect(models["test/model-no-temp"].defaultTemperature).toBeUndefined()
})
})

View file

@ -132,6 +132,7 @@ export async function getRooModels(baseUrl: string, apiKey?: string): Promise<Mo
description: model.description || model.name,
deprecated: model.deprecated || false,
isFree: tags.includes("free"),
defaultTemperature: model.default_temperature,
}
// Apply model-specific defaults (e.g., defaultToolProtocol)

View file

@ -87,6 +87,38 @@ describe("getModelParams", () => {
expect(result.temperature).toBe(0.5)
})
it("should use model defaultTemperature over provider defaultTemperature", () => {
const modelWithDefaultTemp: ModelInfo = {
...baseModel,
defaultTemperature: 0.8,
}
const result = getModelParams({
...anthropicParams,
settings: {},
model: modelWithDefaultTemp,
defaultTemperature: 0.5,
})
expect(result.temperature).toBe(0.8)
})
it("should prefer settings temperature over model defaultTemperature", () => {
const modelWithDefaultTemp: ModelInfo = {
...baseModel,
defaultTemperature: 0.8,
}
const result = getModelParams({
...anthropicParams,
settings: { modelTemperature: 0.3 },
model: modelWithDefaultTemp,
defaultTemperature: 0.5,
})
expect(result.temperature).toBe(0.3)
})
it("should use model maxTokens when available", () => {
const model: ModelInfo = {
...baseModel,

View file

@ -95,7 +95,7 @@ export function getModelParams({
format,
})
let temperature = customTemperature ?? defaultTemperature
let temperature = customTemperature ?? model.defaultTemperature ?? defaultTemperature
let reasoningBudget: ModelParams["reasoningBudget"] = undefined
let reasoningEffort: ModelParams["reasoningEffort"] = undefined
let verbosity: VerbosityLevel | undefined = customVerbosity