返回 oh-my-ppt
runtime.ts
根目录 / src / main / agent-runtime / model / runtime.ts
1 import { AsyncLocalStorage } from 'node:async_hooks'
2 import {
3 DEFAULT_THINKING_PARAMETER_MODE,
4 normalizeThinkingParameterMode,
5 type ThinkingParameterMode
6 } from '@shared/model-config'
7
8 export const DEFAULT_MODEL_TEMPERATURE = 0.7
9
10 type ModelRuntimeControl = {
11 modelConfigId?: string
12 disableTemperature: boolean
13 thinkingParameterMode: ThinkingParameterMode
14 }
15
16 const modelRuntimeControl = new AsyncLocalStorage<ModelRuntimeControl>()
17
18 export const getCurrentModelTemperatureControl = (): ModelRuntimeControl | undefined =>
19 modelRuntimeControl.getStore()
20
21 export const bindCurrentModelTemperatureControl = (config: {
22 id?: string
23 disableTemperature?: boolean
24 thinkingParameterMode?: ThinkingParameterMode
25 }): void => {
26 modelRuntimeControl.enterWith({
27 modelConfigId: config.id,
28 disableTemperature: config.disableTemperature === true,
29 thinkingParameterMode: normalizeThinkingParameterMode(config.thinkingParameterMode)
30 })
31 }
32
33 export const runWithModelTemperatureControl = <T>(
34 config: {
35 id?: string
36 disableTemperature?: boolean
37 thinkingParameterMode?: ThinkingParameterMode
38 },
39 task: () => T
40 ): T =>
41 modelRuntimeControl.run(
42 {
43 modelConfigId: config.id,
44 disableTemperature: config.disableTemperature === true,
45 thinkingParameterMode: normalizeThinkingParameterMode(config.thinkingParameterMode)
46 },
47 task
48 )
49
50 export const isCurrentModelTemperatureEnabled = (): boolean =>
51 getCurrentModelTemperatureControl()?.disableTemperature !== true
52
53 export const resolveCurrentModelTemperature = (
54 temperature: number | undefined
55 ): number | undefined => {
56 if (!isCurrentModelTemperatureEnabled()) return undefined
57 if (Number.isFinite(temperature) && typeof temperature === 'number') {
58 return Math.max(0, Math.min(2, temperature))
59 }
60 return DEFAULT_MODEL_TEMPERATURE
61 }
62
63 export const resolveCurrentModelTemperatureOptions = (
64 temperature: number | undefined
65 ): { temperature?: number } => {
66 const resolvedTemperature = resolveCurrentModelTemperature(temperature)
67 return resolvedTemperature === undefined ? {} : { temperature: resolvedTemperature }
68 }
69
70 export const resolveCurrentModelThinkingParameterMode = (): ThinkingParameterMode => {
71 return (
72 getCurrentModelTemperatureControl()?.thinkingParameterMode || DEFAULT_THINKING_PARAMETER_MODE
73 )
74 }
75
75 lines TYPESCRIPT