feat(prompts-core): resolve prompt variants by declaration order
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
This commit is contained in:
@@ -0,0 +1,15 @@
|
|||||||
|
bun test v1.3.12 (700fc117)
|
||||||
|
|
||||||
|
packages/prompts-core/src/variant-resolver.test.ts:
|
||||||
|
S1 actual: default
|
||||||
|
S2 actual: gpt
|
||||||
|
S3 actual: gemini
|
||||||
|
S4 actual: planner
|
||||||
|
S5 actual: default
|
||||||
|
S6 actual: default
|
||||||
|
S7 actual: NoMatchingVariantError
|
||||||
|
|
||||||
|
7 pass
|
||||||
|
0 fail
|
||||||
|
7 expect() calls
|
||||||
|
Ran 7 tests across 1 file. [75.00ms]
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
bun test v1.3.12 (700fc117)
|
||||||
|
|
||||||
|
packages/prompts-core/src/variant-resolver.test.ts:
|
||||||
|
S1 actual: default
|
||||||
|
S2 actual: gpt
|
||||||
|
S3 actual: gemini
|
||||||
|
S4 actual: planner
|
||||||
|
S5 actual: default
|
||||||
|
S6 actual: default
|
||||||
|
S7 actual: NoMatchingVariantError
|
||||||
|
|
||||||
|
7 pass
|
||||||
|
0 fail
|
||||||
|
7 expect() calls
|
||||||
|
Ran 7 tests across 1 file. [75.00ms]
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
bun test v1.3.12 (700fc117)
|
||||||
|
|
||||||
|
packages/prompts-core/src/variant-resolver.test.ts:
|
||||||
|
S1 actual: default
|
||||||
|
S2 actual: gpt
|
||||||
|
S3 actual: gemini
|
||||||
|
S4 actual: planner
|
||||||
|
S5 actual: default
|
||||||
|
S6 actual: default
|
||||||
|
S7 actual: NoMatchingVariantError
|
||||||
|
|
||||||
|
7 pass
|
||||||
|
0 fail
|
||||||
|
7 expect() calls
|
||||||
|
Ran 7 tests across 1 file. [75.00ms]
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
bun test v1.3.12 (700fc117)
|
||||||
|
|
||||||
|
packages/prompts-core/src/variant-resolver.test.ts:
|
||||||
|
S1 actual: default
|
||||||
|
S2 actual: gpt
|
||||||
|
S3 actual: gemini
|
||||||
|
S4 actual: planner
|
||||||
|
S5 actual: default
|
||||||
|
S6 actual: default
|
||||||
|
S7 actual: NoMatchingVariantError
|
||||||
|
|
||||||
|
7 pass
|
||||||
|
0 fail
|
||||||
|
7 expect() calls
|
||||||
|
Ran 7 tests across 1 file. [75.00ms]
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
bun test v1.3.12 (700fc117)
|
||||||
|
|
||||||
|
packages/prompts-core/src/variant-resolver.test.ts:
|
||||||
|
S1 actual: default
|
||||||
|
S2 actual: gpt
|
||||||
|
S3 actual: gemini
|
||||||
|
S4 actual: planner
|
||||||
|
S5 actual: default
|
||||||
|
S6 actual: default
|
||||||
|
S7 actual: NoMatchingVariantError
|
||||||
|
|
||||||
|
7 pass
|
||||||
|
0 fail
|
||||||
|
7 expect() calls
|
||||||
|
Ran 7 tests across 1 file. [75.00ms]
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
bun test v1.3.12 (700fc117)
|
||||||
|
|
||||||
|
packages/prompts-core/src/variant-resolver.test.ts:
|
||||||
|
S1 actual: default
|
||||||
|
S2 actual: gpt
|
||||||
|
S3 actual: gemini
|
||||||
|
S4 actual: planner
|
||||||
|
S5 actual: default
|
||||||
|
S6 actual: default
|
||||||
|
S7 actual: NoMatchingVariantError
|
||||||
|
|
||||||
|
7 pass
|
||||||
|
0 fail
|
||||||
|
7 expect() calls
|
||||||
|
Ran 7 tests across 1 file. [75.00ms]
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
bun test v1.3.12 (700fc117)
|
||||||
|
|
||||||
|
packages/prompts-core/src/variant-resolver.test.ts:
|
||||||
|
S1 actual: default
|
||||||
|
S2 actual: gpt
|
||||||
|
S3 actual: gemini
|
||||||
|
S4 actual: planner
|
||||||
|
S5 actual: default
|
||||||
|
S6 actual: default
|
||||||
|
S7 actual: NoMatchingVariantError
|
||||||
|
|
||||||
|
7 pass
|
||||||
|
0 fail
|
||||||
|
7 expect() calls
|
||||||
|
Ran 7 tests across 1 file. [75.00ms]
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
bun test v1.3.12 (700fc117)
|
||||||
|
|
||||||
|
packages/prompts-core/src/variant-resolver.test.ts:
|
||||||
|
S1 actual: default
|
||||||
|
S2 actual: gpt
|
||||||
|
S3 actual: gemini
|
||||||
|
S4 actual: planner
|
||||||
|
S5 actual: default
|
||||||
|
S6 actual: default
|
||||||
|
S7 actual: NoMatchingVariantError
|
||||||
|
|
||||||
|
7 pass
|
||||||
|
0 fail
|
||||||
|
7 expect() calls
|
||||||
|
Ran 7 tests across 1 file. [75.00ms]
|
||||||
@@ -1,5 +1,29 @@
|
|||||||
import type { ResolveVariantInput } from "./types"
|
import {
|
||||||
|
NoMatchingVariantError,
|
||||||
|
type ResolveVariantInput,
|
||||||
|
type VariantDefinition,
|
||||||
|
type VariantFallback,
|
||||||
|
} from "./types"
|
||||||
|
|
||||||
export function resolveVariant(_input: ResolveVariantInput): string {
|
function isVariantFallback(definition: VariantDefinition): definition is VariantFallback {
|
||||||
return "__red__"
|
return "fallback" in definition && definition.fallback === true
|
||||||
|
}
|
||||||
|
|
||||||
|
export function resolveVariant(input: ResolveVariantInput): string {
|
||||||
|
const entries = Object.entries(input.variants)
|
||||||
|
const testInput = {
|
||||||
|
...(input.modelID === undefined ? {} : { modelID: input.modelID }),
|
||||||
|
...(input.agentName === undefined ? {} : { agentName: input.agentName }),
|
||||||
|
}
|
||||||
|
|
||||||
|
for (const [variantKey, definition] of entries) {
|
||||||
|
if (isVariantFallback(definition)) continue
|
||||||
|
if (definition.test(testInput)) return variantKey
|
||||||
|
}
|
||||||
|
|
||||||
|
const fallbackEntry = entries.find(([, definition]) => isVariantFallback(definition))
|
||||||
|
if (fallbackEntry !== undefined) return fallbackEntry[0]
|
||||||
|
|
||||||
|
const variantKeys = entries.map(([variantKey]) => variantKey).join(", ")
|
||||||
|
throw new NoMatchingVariantError(`No matching prompt variant found among: ${variantKeys}`)
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user