MCPcopy Index your code
hub / github.com/coder/mux / resolveTaskAISettings

Method resolveTaskAISettings

src/node/services/taskService.ts:1578–1625  ·  view source on GitHub ↗
(params: {
    cfg: ReturnType<Config["loadConfigOrDefault"]>;
    parentMeta: {
      aiSettingsByAgent?: Record<string, ResolvedWorkspaceAiSettings>;
      aiSettings?: ResolvedWorkspaceAiSettings;
    };
    agentId: string;
    modelString?: string;
    thinkingLevel?: ParsedThinkingInput;
    parentRuntimeAiSettings?: { modelString?: string; thinkingLevel?: ThinkingLevel };
  })

Source from the content-addressed store, hash-verified

1576 }
1577
1578 private resolveTaskAISettings(params: {
1579 cfg: ReturnType<Config["loadConfigOrDefault"]>;
1580 parentMeta: {
1581 aiSettingsByAgent?: Record<string, ResolvedWorkspaceAiSettings>;
1582 aiSettings?: ResolvedWorkspaceAiSettings;
1583 };
1584 agentId: string;
1585 modelString?: string;
1586 thinkingLevel?: ParsedThinkingInput;
1587 parentRuntimeAiSettings?: { modelString?: string; thinkingLevel?: ThinkingLevel };
1588 }): {
1589 taskModelString: string;
1590 canonicalModel: string;
1591 effectiveThinkingLevel: ThinkingLevel;
1592 } {
1593 const parentAiSettings = this.resolveWorkspaceAISettings(params.parentMeta, params.agentId);
1594 // Sub-agent defaults take priority over UI agent defaults per field for any agent invoked as a sub-agent.
1595 const subagentDefault = params.cfg.subagentAiDefaults?.[params.agentId];
1596 const agentDefault = params.cfg.agentAiDefaults?.[params.agentId];
1597 const parentRuntimeAiSettings = params.parentRuntimeAiSettings;
1598
1599 const taskModelString =
1600 coerceNonEmptyString(params.modelString) ??
1601 coerceNonEmptyString(subagentDefault?.modelString) ??
1602 coerceNonEmptyString(agentDefault?.modelString) ??
1603 coerceNonEmptyString(parentRuntimeAiSettings?.modelString) ??
1604 coerceNonEmptyString(parentAiSettings?.model) ??
1605 defaultModel;
1606 const canonicalModel = normalizeToCanonical(taskModelString).trim();
1607 assert(canonicalModel.length > 0, "resolveTaskAISettings: resolved model must be non-empty");
1608
1609 // Resolve an explicit override first so numeric thinking indices map into the
1610 // chosen model's allowed levels (named levels pass through unchanged).
1611 const overrideThinkingLevel =
1612 params.thinkingLevel != null
1613 ? resolveThinkingInput(params.thinkingLevel, canonicalModel)
1614 : undefined;
1615 const requestedThinkingLevel: ThinkingLevel =
1616 overrideThinkingLevel ??
1617 subagentDefault?.thinkingLevel ??
1618 agentDefault?.thinkingLevel ??
1619 parentRuntimeAiSettings?.thinkingLevel ??
1620 parentAiSettings?.thinkingLevel ??
1621 "off";
1622 const effectiveThinkingLevel = enforceThinkingPolicy(canonicalModel, requestedThinkingLevel);
1623
1624 return { taskModelString, canonicalModel, effectiveThinkingLevel };
1625 }
1626
1627 /**
1628 * Derives auto-resume send options (agentId, model, thinkingLevel) from durable

Callers 3

createManyMethod · 0.95
createMethod · 0.95

Calls 6

coerceNonEmptyStringFunction · 0.90
normalizeToCanonicalFunction · 0.90
resolveThinkingInputFunction · 0.90
enforceThinkingPolicyFunction · 0.90
assertFunction · 0.50

Tested by

no test coverage detected