Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions .changeset/gemini-experimental.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
"uptide": patch
---

Gemini is labelled experimental: in `fix --help`, in the `LLM:` line `fix` prints, and in the
docs. Its evaluation runs on the storefront fixture failed on service errors (HTTP 503/429),
so its migration quality is not established yet.
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -222,7 +222,7 @@ was kept on the compiler's word and deserves a careful review.

## Choosing a model

Assisted fixes support Anthropic, OpenAI and Gemini, with the same prompts, tool,
Assisted fixes support Anthropic, OpenAI and Gemini (experimental), with the same prompts, tool,
verification and publish gate. Set the chosen provider's key in your environment:
`ANTHROPIC_API_KEY`, `OPENAI_API_KEY` or `GEMINI_API_KEY`. Never put keys in repository
config or command arguments.
Expand Down
2 changes: 1 addition & 1 deletion docs/cli.md
Original file line number Diff line number Diff line change
Expand Up @@ -175,7 +175,7 @@ gate are the same as for a verified dependency.

## Choosing a model

Assisted fixes support Anthropic, OpenAI and Gemini, with the same prompts, tool,
Assisted fixes support Anthropic, OpenAI and Gemini (experimental), with the same prompts, tool,
verification and publish gate. Set the chosen provider's key in your environment:
`ANTHROPIC_API_KEY`, `OPENAI_API_KEY` or `GEMINI_API_KEY`. Never put keys in repository
config or command arguments.
Expand Down
5 changes: 4 additions & 1 deletion packages/cli/src/cli.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -679,7 +679,10 @@ it('selects each provider from its key, passes model and the universal budget, a
const io = memoryIo({ cwd: pnpmGitRepo(), env: { [key]: 'test-key' } });
expect(await run(['fix', 'zod'], io, engine)).toBe(0);
expect(engine.calls[0]).toMatchObject({ provider, model, maxCostUsd: 1 });
expect(io.stderr()).toContain(`LLM: ${provider} / ${model}`);
// Gemini is experimental: its evaluation runs failed on service errors (docs/provider-evaluation.md).
expect(io.stderr()).toContain(
`LLM: ${provider}${provider === 'gemini' ? ' (experimental)' : ''} / ${model}`,
);
expect(io.stderr()).toContain('LLM spend: no LLM calls.');
expect(io.stderr()).not.toContain('test-key');
}
Expand Down
4 changes: 2 additions & 2 deletions packages/cli/src/cli.ts
Original file line number Diff line number Diff line change
Expand Up @@ -714,7 +714,7 @@ ${EXIT_CODES('a plan was made', 'not used', ';\n or a dependency failed to a
)
.option(
'--provider <name>',
'LLM provider: anthropic, openai or gemini (also UPTIDE_PROVIDER)',
'LLM provider: anthropic, openai or gemini (experimental) (also UPTIDE_PROVIDER)',
)
.option('--model <id>', 'LLM model ID (also UPTIDE_MODEL)')
.option('--no-llm', 'rule-based fixes only: never send code to the LLM provider')
Expand Down Expand Up @@ -881,7 +881,7 @@ ${PRIVACY}`,
else if (!llm) io.err('assisted fixes off (--no-llm): no code leaves this machine\n');
else if (selection.available) {
io.err(
`LLM: ${selection.provider} / ${selection.model} · budget $${maxCost.toFixed(2)}\n`,
`LLM: ${selection.provider}${selection.provider === 'gemini' ? ' (experimental)' : ''} / ${selection.model} · budget $${maxCost.toFixed(2)}\n`,
);
io.err(assistedNote(selection.provider));
const price = priceFor(selection.provider, selection.model);
Expand Down
Loading