feat(athena): add temperature support to council member schema

Allow per-member temperature overrides in council config. Adds temperature field to CouncilMemberSchema (0-2 range), CouncilMemberConfig type, and auto-generated JSON schema.

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
This commit is contained in:
ismeth
2026-02-19 13:53:04 +01:00
committed by YeonGyu-Kim
parent 5769a48a94
commit 5aa64932c5
4 changed files with 303 additions and 1 deletions
+1
View File
@@ -2,6 +2,7 @@ export interface CouncilMemberConfig {
model: string
variant?: string
name?: string
temperature?: number
}
export interface CouncilConfig {
+39 -1
View File
@@ -20,6 +20,7 @@ describe("CouncilMemberSchema", () => {
model: "openai/gpt-5.3-codex",
variant: "high",
name: "analyst-a",
temperature: 0.3,
}
//#when
@@ -110,11 +111,48 @@ describe("CouncilMemberSchema", () => {
//#then
expect(parsed.variant).toBeUndefined()
expect(parsed.name).toBeUndefined()
expect(parsed.temperature).toBeUndefined()
})
test("accepts member config with temperature", () => {
//#given
const config = { model: "openai/gpt-5.3-codex", temperature: 0.5 }
//#when
const result = CouncilMemberSchema.safeParse(config)
//#then
expect(result.success).toBe(true)
if (result.success) {
expect(result.data.temperature).toBe(0.5)
}
})
test("rejects temperature below 0", () => {
//#given
const config = { model: "openai/gpt-5.3-codex", temperature: -0.1 }
//#when
const result = CouncilMemberSchema.safeParse(config)
//#then
expect(result.success).toBe(false)
})
test("rejects temperature above 2", () => {
//#given
const config = { model: "openai/gpt-5.3-codex", temperature: 2.1 }
//#when
const result = CouncilMemberSchema.safeParse(config)
//#then
expect(result.success).toBe(false)
})
test("rejects member config with unknown fields", () => {
//#given
const config = { model: "openai/gpt-5.3-codex", temperature: 0.2 }
const config = { model: "openai/gpt-5.3-codex", unknownField: true }
//#when
const result = CouncilMemberSchema.safeParse(config)
+1
View File
@@ -14,6 +14,7 @@ export const CouncilMemberSchema = z.object({
model: ModelStringSchema,
variant: z.string().optional(),
name: z.string().optional(),
temperature: z.number().min(0).max(2).optional(),
}).strict()
export const CouncilConfigSchema = z.object({