diff --git a/src/domain/llm/effort.ts b/src/domain/llm/effort.ts index 0709764..cf82871 100644 --- a/src/domain/llm/effort.ts +++ b/src/domain/llm/effort.ts @@ -1,4 +1,4 @@ -export { seedProviderConfig, withModel, withMinEffort, selectEffortForProvider }; +export { seedProviderConfig, withModel, selectEffortForProvider }; import { type Future } from "@/libs/future"; import { @@ -7,10 +7,9 @@ import { type OpenAIModelEffort, type XaiEffort, type AnthropicEffort, - type GeminiEffort, - GEMINI_EFFORTS + type GeminiEffort } from "@/domain/config/config"; -import { Just, Nothing, type Maybe } from "@/libs/maybe"; +import { Nothing, type Maybe } from "@/libs/maybe"; import { selectOpenAIEffort, selectAnthropicEffort, selectGeminiEffort, selectXaiEffort } from "@/infra/ui/effort-picker"; import { absurd } from "@/libs/types"; @@ -44,21 +43,6 @@ const withModel = (ai: ProviderConfig, model: string): ProviderConfig => { } }; -const withMinEffort = (config: ProviderConfig): ProviderConfig => { - switch (config.provider) { - case "openai": - return { provider: "openai", model: config.model, auth_method: config.auth_method, effort: Just("low") }; - case "anthropic": - return { provider: "anthropic", model: config.model, auth_method: config.auth_method, effort: Just("low") }; - case "gemini": - return { provider: "gemini", model: config.model, auth_method: config.auth_method, effort: Just(GEMINI_EFFORTS[0]) }; - case "xai": - return { provider: "xai", model: config.model, auth_method: config.auth_method, effort: Just("low") }; - default: - return absurd(config, "ProviderConfig"); - } -}; - const selectEffortForProvider = (current: ProviderConfig, modelEffort: Maybe = Nothing()): Future => { switch (current.provider) { case "openai": diff --git a/src/domain/llm/router.ts b/src/domain/llm/router.ts index f944b33..364f147 100644 --- a/src/domain/llm/router.ts +++ b/src/domain/llm/router.ts @@ -25,7 +25,6 @@ import { getPrompt, getRefinePrompt, getBranchNamePrompt, getSplitPrompt } from import { parseAndValidateBranchSuggestions, type BranchSuggestion } from "@/domain/branch/suggestions"; import { parseAndValidateSplitPlan, type SplitPlan } from "@/domain/split/plan"; import { withTransientRetry } from "@/domain/llm/retry"; -import { withMinEffort } from "@/domain/llm/effort"; import { Maybe, Nothing } from "@/libs/maybe"; type GenerateContentParams = { @@ -147,7 +146,7 @@ const generateSplitPlan = ( customTemplate: Maybe ): Future => withTransientRetry(() => - generateContent(withMinEffort(config), { prompt: getSplitPrompt(diff, files, convention, customTemplate) }).chain((gc) => + generateContent(config, { prompt: getSplitPrompt(diff, files, convention, customTemplate) }).chain((gc) => resultToFuture(parseAndValidateSplitPlan(gc.text, files)).map((plan) => ({ plan, metadata: gc.metadata })) ) ); diff --git a/test/domain/llm/effort.test.ts b/test/domain/llm/effort.test.ts deleted file mode 100644 index 25e35cf..0000000 --- a/test/domain/llm/effort.test.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { describe, expect, it } from "vitest"; -import { withMinEffort } from "@/domain/llm/effort"; -import { GEMINI_EFFORTS, type ProviderConfig } from "@/domain/config/config"; -import { Just, Nothing } from "@/libs/maybe"; - -const base = (provider: ProviderConfig["provider"]): ProviderConfig => - ({ - provider, - model: "m", - effort: Nothing(), - auth_method: { type: "api_key", content: "sk" } - }) as ProviderConfig; - -describe("withMinEffort", () => { - it("forces openai low", () => { - expect(withMinEffort(base("openai")).effort).toEqual(Just("low")); - }); - it("forces anthropic low", () => { - expect(withMinEffort(base("anthropic")).effort).toEqual(Just("low")); - }); - it("forces gemini MINIMAL", () => { - expect(withMinEffort(base("gemini")).effort).toEqual(Just(GEMINI_EFFORTS[0])); - }); - it("forces xai low", () => { - expect(withMinEffort(base("xai")).effort).toEqual(Just("low")); - }); -}); diff --git a/test/domain/llm/router.test.ts b/test/domain/llm/router.test.ts index eb8a466..ddcc846 100644 --- a/test/domain/llm/router.test.ts +++ b/test/domain/llm/router.test.ts @@ -76,16 +76,16 @@ describe("generateSplitPlan", () => { expect(result.metadata.model.provider).toBe("openai"); }); - it("calls the provider with minimum effort", async () => { + it("passes the configured effort through to the provider", async () => { const { generateContentWithOpenAI } = await import("@/infra/llm/openai"); vi.mocked(generateContentWithOpenAI).mockClear(); const json = JSON.stringify({ should_split: false, commits: [{ message: "feat: a", files: ["a.ts"] }] }); - vi.mocked(generateContentWithOpenAI).mockReturnValue(Future.resolve({ text: json, tokens: Nothing(), effectiveEffort: Just("low") })); + vi.mocked(generateContentWithOpenAI).mockReturnValue(Future.resolve({ text: json, tokens: Nothing(), effectiveEffort: Just("high") })); const config = { ...mockProvider("openai"), effort: Just("high") } as ProviderConfig; await runFuture(generateSplitPlan(config, "diff", ["a.ts"], "conventional", Nothing())); - expect(vi.mocked(generateContentWithOpenAI).mock.calls[0]?.[0].effort).toEqual(Just("low")); + expect(vi.mocked(generateContentWithOpenAI).mock.calls[0]?.[0].effort).toEqual(Just("high")); }); });