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:
@@ -2,6 +2,7 @@ export interface CouncilMemberConfig {
|
||||
model: string
|
||||
variant?: string
|
||||
name?: string
|
||||
temperature?: number
|
||||
}
|
||||
|
||||
export interface CouncilConfig {
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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({
|
||||
|
||||
Reference in New Issue
Block a user