43 lines
1.1 KiB
TypeScript
43 lines
1.1 KiB
TypeScript
import {
|
|
EFFORT_HIGH,
|
|
EFFORT_LOW,
|
|
EFFORT_MAX,
|
|
EFFORT_MEDIUM,
|
|
} from '../constants/figures.js'
|
|
import {
|
|
type EffortLevel,
|
|
type EffortValue,
|
|
getDisplayedEffortLevel,
|
|
modelSupportsEffort,
|
|
} from '../utils/effort.js'
|
|
|
|
/**
|
|
* Build the text for the effort-changed notification, e.g. "◐ medium · /effort".
|
|
* Returns undefined if the model doesn't support effort.
|
|
*/
|
|
export function getEffortNotificationText(
|
|
effortValue: EffortValue | undefined,
|
|
model: string,
|
|
): string | undefined {
|
|
if (!modelSupportsEffort(model)) return undefined
|
|
const level = getDisplayedEffortLevel(model, effortValue)
|
|
return `${effortLevelToSymbol(level)} ${level} · /effort`
|
|
}
|
|
|
|
export function effortLevelToSymbol(level: EffortLevel): string {
|
|
switch (level) {
|
|
case 'low':
|
|
return EFFORT_LOW
|
|
case 'medium':
|
|
return EFFORT_MEDIUM
|
|
case 'high':
|
|
return EFFORT_HIGH
|
|
case 'max':
|
|
return EFFORT_MAX
|
|
default:
|
|
// Defensive: level can originate from remote config. If an unknown
|
|
// value slips through, render the high symbol rather than undefined.
|
|
return EFFORT_HIGH
|
|
}
|
|
}
|