返回 oh-my-ppt
model-runtime.test.ts
根目录 / tests / unit / model-runtime.test.ts
1 import { describe, expect, it } from 'vitest'
2 import {
3 bindCurrentModelTemperatureControl,
4 DEFAULT_MODEL_TEMPERATURE,
5 getCurrentModelTemperatureControl,
6 isCurrentModelTemperatureEnabled,
7 resolveCurrentModelThinkingParameterMode,
8 resolveCurrentModelTemperature,
9 resolveCurrentModelTemperatureOptions,
10 runWithModelTemperatureControl
11 } from '../../src/main/agent-runtime/model'
12
13 describe('model temperature runtime', () => {
14 it('keeps temperature enabled when no model control is bound', () => {
15 expect(getCurrentModelTemperatureControl()).toBeUndefined()
16 expect(isCurrentModelTemperatureEnabled()).toBe(true)
17 expect(resolveCurrentModelTemperature(0.4)).toBe(0.4)
18 })
19
20 it('uses the requested or default temperature when enabled', () => {
21 runWithModelTemperatureControl({ disableTemperature: false }, () => {
22 expect(isCurrentModelTemperatureEnabled()).toBe(true)
23 expect(resolveCurrentModelTemperature(0.2)).toBe(0.2)
24 expect(resolveCurrentModelTemperature(undefined)).toBe(DEFAULT_MODEL_TEMPERATURE)
25 expect(resolveCurrentModelTemperature(3)).toBe(2)
26 })
27 })
28
29 it('omits temperature throughout the current async model task when disabled', async () => {
30 await runWithModelTemperatureControl(
31 { id: 'reasoning-model', disableTemperature: true, thinkingParameterMode: 'omit' },
32 async () => {
33 await Promise.resolve()
34 expect(isCurrentModelTemperatureEnabled()).toBe(false)
35 expect(resolveCurrentModelThinkingParameterMode()).toBe('omit')
36 expect(resolveCurrentModelTemperature(0.7)).toBeUndefined()
37 expect(resolveCurrentModelTemperature(undefined)).toBeUndefined()
38 expect(resolveCurrentModelTemperatureOptions(0.7)).not.toHaveProperty('temperature')
39 }
40 )
41 })
42
43 it('isolates enterWith bindings between concurrent async model tasks', async () => {
44 let releaseTasks: (() => void) | undefined
45 const waitForRelease = new Promise<void>((resolve) => {
46 releaseTasks = resolve
47 })
48 let readyCount = 0
49 let releaseReady: (() => void) | undefined
50 const allReady = new Promise<void>((resolve) => {
51 releaseReady = resolve
52 })
53
54 const runTask = async (
55 id: string,
56 disableTemperature: boolean,
57 thinkingParameterMode: 'auto' | 'omit'
58 ): Promise<number | undefined> => {
59 await Promise.resolve()
60 bindCurrentModelTemperatureControl({ id, disableTemperature, thinkingParameterMode })
61 readyCount += 1
62 if (readyCount === 2) releaseReady?.()
63 await waitForRelease
64 expect(getCurrentModelTemperatureControl()?.modelConfigId).toBe(id)
65 expect(resolveCurrentModelThinkingParameterMode()).toBe(thinkingParameterMode)
66 return resolveCurrentModelTemperature(0.5)
67 }
68
69 const disabledTask = runTask('disabled-model', true, 'omit')
70 const enabledTask = runTask('enabled-model', false, 'auto')
71 await allReady
72 releaseTasks?.()
73
74 await expect(disabledTask).resolves.toBeUndefined()
75 await expect(enabledTask).resolves.toBe(0.5)
76 })
77 })
78
78 lines TYPESCRIPT