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 {
|
||||
return "__red__"
|
||||
function isVariantFallback(definition: VariantDefinition): definition is VariantFallback {
|
||||
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