Skip to content

Commit 86727fa

Browse files
christsoclaude
andcommitted
refactor(core): make provider optional when use_target is set
Targets with use_target delegate to another target and don't need their own provider. Removed redundant provider: mock from delegation targets in root targets.yaml. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1 parent 6bb803b commit 86727fa

3 files changed

Lines changed: 7 additions & 5 deletions

File tree

.agentv/targets.yaml

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,19 +13,16 @@ targets:
1313
# Example: AGENT_TARGET=copilot-cli or AGENT_TARGET=claude
1414
- name: default
1515
use_target: ${{ AGENT_TARGET }}
16-
provider: mock
1716

1817
# ── LLM target (text generation, no agent binary needed) ────────────
1918
# Delegates to GRADER_TARGET — same provider used for grading and LLM evals.
2019
- name: llm
2120
use_target: ${{ GRADER_TARGET }}
22-
provider: mock
2321

2422
# ── Grader (LLM-as-judge) ──────────────────────────────────────────
2523
# Used by agent targets via grader_target. Switch provider via GRADER_TARGET.
2624
- name: grader
2725
use_target: ${{ GRADER_TARGET }}
28-
provider: mock
2926

3027
# ── Named agent targets ───────────────────────────────────────────
3128
- name: copilot-cli

packages/core/src/evaluation/providers/targets.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -638,7 +638,7 @@ export const COMMON_TARGET_SETTINGS = [
638638
const BASE_TARGET_SCHEMA = z
639639
.object({
640640
name: z.string().min(1, 'target name is required'),
641-
provider: z.string().min(1, 'provider is required'),
641+
provider: z.string().optional(),
642642
use_target: z.string().optional(),
643643
grader_target: z.string().optional(),
644644
judge_target: z.string().optional(), // backward compat
@@ -719,6 +719,11 @@ export function resolveTargetDefinition(
719719
`${parsed.name}: target-level workspace_template has been removed. Use eval-level workspace.template.`,
720720
);
721721
}
722+
if (!parsed.provider) {
723+
throw new Error(
724+
`${parsed.name}: 'provider' is required (targets with use_target must be resolved before calling resolveTargetDefinition)`,
725+
);
726+
}
722727
const provider = resolveString(
723728
parsed.provider,
724729
env,

packages/core/src/evaluation/providers/types.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -282,7 +282,7 @@ export type EnvLookup = Readonly<Record<string, string | undefined>>;
282282

283283
export interface TargetDefinition {
284284
readonly name: string;
285-
readonly provider: ProviderKind | string;
285+
readonly provider?: ProviderKind | string;
286286
// Delegation: resolve this target as another named target.
287287
// Supports ${{ ENV_VAR }} syntax (e.g., use_target: ${{ AGENT_TARGET }}).
288288
readonly use_target?: string | unknown | undefined;

0 commit comments

Comments
 (0)