Commit Graph

228 Commits

Author SHA1 Message Date
Mario Zechner ed0cfcbda2 fix(ai): tolerate malformed trailing tool-call JSON in OpenAI streams closes #1424 2026-02-12 21:09:42 +01:00
Nate Smyth 2419412483 refactor(ai): fix inconsistencies, trim ai code+replace tests, remove unnceccessary tool_result check 2026-02-12 18:41:12 +01:00
Nate Smyth 0a132a30a1 feat(ai): route copilot claude via anthropic messages api 2026-02-12 18:41:12 +01:00
Mario Zechner 1e88c5e463 feat(ai): add generic metadata field to StreamOptions, closes #1384
Add metadata?: Record<string, unknown> to StreamOptions so providers
can extract fields they understand. Anthropic provider extracts user_id
for abuse tracking and rate limiting. Other providers ignore it.

Based on #1384 by @7Sageer, reworked to use a generic type instead of
Anthropic-specific typing on the base interface.
2026-02-12 17:39:03 +01:00
Markus Ylisiurunen 28c0991281 Extend interleaved thinking test to Anthropic first-party provider (#1413)
* extend interleaved thinking test to Anthropic first-party provider

* switch back to global Bedrock model identifier

* set retry to 3 for both

* enable bedrock claude interleaved thinking by default and use completeSimple in test
2026-02-12 17:27:42 +01:00
Mario Zechner ed9255d3bd ai: update Antigravity system instruction to compact version, fix flaky tool test
- Replace verbose ANTIGRAVITY_SYSTEM_INSTRUCTION with compact version from CLIProxyAPI
- Replace bridgePrompt override with [ignore] wrapper pattern
- Switch Antigravity Gemini test model from gemini-3-flash to gemini-3-pro-high
- Rename calculator tool to math_operation (gemini-3-pro ignores schema for 'calculator')

closes #1415
2026-02-08 23:37:09 +01:00
Mario Zechner 1caadb2e2a fix(ai): use parametersJsonSchema for Google tool declarations, revert Antigravity opus model
- Use parametersJsonSchema instead of parameters for Gemini tool declarations
  to support full JSON Schema (anyOf, oneOf, const, etc.)
- Keep legacy parameters field for Claude models on Cloud Code Assist, where
  the API translates parameters into Anthropic's input_schema
- Revert claude-opus-4-6-thinking back to claude-opus-4-5-thinking (model
  doesn't exist on the Antigravity endpoint)

fixes #1398
2026-02-08 15:53:17 +01:00
Mario Zechner f5b9eeb514 fix(ai): clamp minimal reasoning for gpt-5.3-codex (fixes #1334) 2026-02-06 18:45:08 +01:00
xu0o0 e9f94ba6c3 feat: better cache support in bedrock (#1326) 2026-02-06 18:05:46 +01:00
Mario Zechner a40bf5fbd5 fix(ai): move AWS_BEDROCK_SKIP_AUTH inside Node.js environment check
The process.env access was outside the typeof process check, which
would throw in browser environments. Moved inside the Node.js/Bun
block for consistency with other env var access.

Also added changelog entry for #1320 and improved docs clarity.
2026-02-06 10:45:20 +01:00
Dustin Spicuzza df527fb988 fix(ai): provide mechanism to connect to unauthenticated bedrock proxies (#1320)
fixes #1309
2026-02-06 10:44:28 +01:00
Markus Ylisiurunen d3d3ef4155 fix(ai): handle bedrock opus 4.6 adaptive thinking and interleaved beta 2026-02-06 10:27:13 +02:00
Mario Zechner d1fce2ba1d fix(ai): disable OpenAI Responses storage by default (closes #1308) 2026-02-06 01:24:37 +01:00
Mario Zechner 4c4d787b1a feat(ai): add adaptive thinking support for Claude Opus 4.6
- Add adaptive thinking mode (type: 'adaptive') for Opus 4.6+
- Add effort parameter ('low', 'medium', 'high', 'max') for adaptive thinking
- thinkingEnabled now auto-detects: adaptive for 4.6+, budget-based for older
- streamSimple/completeSimple map ThinkingLevel to effort levels for Opus 4.6
- Add tests for Opus 4.6 adaptive thinking and GPT-5.3 Codex
- Update @anthropic-ai/sdk to 0.73.0
- Update @aws-sdk/client-bedrock-runtime to 3.983.0
- Update @google/genai to 1.40.0
- Remove fast-xml-parser override (no longer needed)
2026-02-05 21:14:11 +01:00
Mario Zechner 150aeebf7d fix(ai): respect codex baseUrl (closes #1244) 2026-02-04 12:30:31 +01:00
Mario Zechner 111a31e4db fix(ai): apply cache_control to string user messages 2026-02-02 19:19:12 +01:00
Mario Zechner ff0eb3ecd4 fix(ai): omit strict for unsupported openai completions 2026-02-02 00:44:55 +01:00
Mario Zechner 8f7ef85833 fix(ai): pass through cacheRetention in buildBaseOptions
fixes #1154
2026-02-01 17:37:45 +01:00
Mario Zechner abfd04b5c5 feat(ai): add cacheRetention stream option 2026-02-01 09:32:10 +01:00
Mario Zechner e9ca0be769 feat(ai): add PI_AI_ANTIGRAVITY_VERSION env var override
Allows users to override the Antigravity User-Agent version when Google
updates their version requirements, avoiding the need to wait for a
package release.

Fixes #1129
2026-02-01 09:32:10 +01:00
4h9fbZ 993c45a059 feat(coding-agent): add Qwen CLI OAuth provider 2026-02-01 01:51:55 +01:00
Mario Zechner 030a61d88c feat: add maxDelayMs setting to cap server-requested retry delays
When a provider (e.g., Google Gemini CLI) requests a retry delay longer
than maxDelayMs (default: 60s), the request fails immediately with an
informative error instead of waiting silently for hours.

The error is then handled by agent-level auto-retry, which shows the
delay to the user and allows aborting with Escape.

- Add maxRetryDelayMs to StreamOptions (packages/ai)
- Add maxRetryDelayMs to AgentOptions (packages/agent)
- Add retry.maxDelayMs to settings (packages/coding-agent)
- Update _isRetryableError to match 'retry delay' errors

fixes #1123
2026-02-01 00:50:41 +01:00
Ben Vargas e045a9f142 feat(ai): add Vercel AI Gateway routing support (#1051)
* feat(ai): add Vercel AI Gateway routing support

Add vercelGatewayRouting to OpenAICompletionsCompat, parallel to
openRouterRouting. When a model targets ai-gateway.vercel.sh and has
vercelGatewayRouting configured, the openai-completions provider passes
providerOptions.gateway with only/order in the request body.

Changes:
- types.ts: VercelGatewayRouting interface + field on OpenAICompletionsCompat
- openai-completions.ts: buildParams passes providerOptions.gateway,
  detectCompat/getCompat include the new field
- model-registry.ts: VercelGatewayRoutingSchema for models.json validation
- test: updated Required<OpenAICompletionsCompat> in test fixture

* docs(coding-agent): add vercelGatewayRouting to custom models documentation
2026-01-30 01:44:51 +01:00
Mario Zechner af813f9048 fix(ai): default tool call arguments
fixes #1065
2026-01-30 01:13:16 +01:00
Mario Zechner 52532c7c00 fix(ai): update Antigravity User-Agent to 1.15.8
fixes #1079
2026-01-29 23:10:49 +01:00
Mario Zechner 1b6a147579 feat(ai): add PI_CACHE_RETENTION env var for extended prompt caching
Adds support for extended cache retention via PI_CACHE_RETENTION=long:
- Anthropic: 5m -> 1h TTL
- OpenAI: in-memory -> 24h retention

Only applies to direct API calls (api.anthropic.com, api.openai.com).
Proxies and other providers are unaffected.

fixes #967
2026-01-29 02:22:06 +01:00
Mario Zechner 605f6f494b fix(ai): normalize pipe-separated tool call IDs for cross-provider handoff
- Handle pipe-separated IDs from OpenAI Responses API in openai-completions provider
- Strip trailing underscores after truncation in openai-responses-shared (OpenAI Codex rejects them)
- Add regression tests for tool call ID normalization

fixes #1022
2026-01-29 01:28:12 +01:00
Mario Zechner 8b5c81f21f fix(ai): preserve input token counts from message_start in Anthropic provider
Proxies like Portkey omit input_tokens in message_delta events (it's nullable
per the SDK). The previous code unconditionally overwrote usage fields, causing
input token counts to reset to 0.

Now only updates usage fields when they are present (not null), preserving
the correct input_tokens value captured from message_start.

Fixes #1045
2026-01-29 00:06:51 +01:00
Mario Zechner 4f9deddd47 fix(ai): detect DeepSeek URLs and disable unsupported developer role
fixes #1048
2026-01-28 23:55:54 +01:00
mom ee7c0a7d18 fix(ai): handle sensitive stop_reason from Anthropic API (fixes #978) 2026-01-28 02:18:16 +00:00
williamtwomey 41d2c7ff38 OpenAI completions toolChoice fix (#998)
* openai completions tools fix

* Reset generated file

---------

Co-authored-by: williamtwomey <ai@shadylawn.net>
2026-01-28 03:03:15 +01:00
Mario Zechner 9b903656ae fix(ai): correct provider error message typo (closes #958) 2026-01-26 15:37:57 +01:00
haoqixu 1e718e63ea feat(ai): Support HTTP proxy through environment variables 2026-01-25 15:52:45 +08:00
jake dac7474da2 feat(ai): add OpenRouter provider routing support
Allows custom models to specify which upstream providers OpenRouter
should route requests to via the `openRouterRouting` field in model
definitions.

Supported fields:
- `only`: list of provider slugs to exclusively use
- `order`: list of provider slugs to try in order
2026-01-25 03:34:49 +01:00
Mario Zechner a6d878e804 fix(ai): default tool call arguments to empty object for Google providers
When Google providers return tool calls without an args field (common for
no-argument tools), the arguments field was undefined. This breaks
subsequent API calls that require tool_use.input to be present.

Now defaults to {} when args is missing.

Related: clawdbot/clawdbot#1509
2026-01-25 03:18:02 +01:00
Mario Zechner 0d24ddbb03 fix(ai): use model.api instead of hardcoding api type in streaming functions
- anthropic.ts: use model.api instead of hardcoding 'anthropic-messages'
- openai-responses.ts: use model.api instead of hardcoding 'openai-responses'
- gitlab-duo: simplify to use actual model IDs, export MODELS array
2026-01-25 00:52:34 +01:00
Mario Zechner 177c694406 feat: custom provider support with streamSimple
- Add resetApiProviders() to clear and re-register built-in providers
- Add createAssistantMessageEventStream() factory for extensions
- Add streamSimple support in ProviderConfig for custom API implementations
- Call resetApiProviders() on /reload to clean up extension providers
- Add custom-provider.md documentation
- Add custom-provider.ts example with full Anthropic implementation
- Update extensions.md with streamSimple config option
2026-01-24 23:15:11 +01:00
Mario Zechner c725135a76 refactor(ai): register api providers 2026-01-24 23:15:11 +01:00
Markus Ylisiurunen 151099e17e fix(ai): handle openai responses arguments.done events 2026-01-24 12:05:58 +01:00
Markus Ylisiurunen c6e966bd1c adjust azure responses metadata and handoff gating 2026-01-24 12:05:58 +01:00
Markus Ylisiurunen bd7049b7d1 fix(ai): port openai responses handoff guard 2026-01-24 12:05:40 +01:00
Markus Ylisiurunen 5edec3a40a fix(ai): preserve codex tool strictness 2026-01-24 12:05:40 +01:00
Markus Ylisiurunen 284ff81035 refactor(ai): share openai responses logic 2026-01-24 12:05:40 +01:00
Markus Ylisiurunen 085c378d34 add Azure deployment name map and refresh generated models 2026-01-24 12:04:34 +01:00
Markus Ylisiurunen 391c93800c switch azure responses to base url config and v1 api 2026-01-24 12:04:34 +01:00
Markus Ylisiurunen 01f559efc0 guard azure responses deltas before content parts 2026-01-24 12:04:34 +01:00
Markus Ylisiurunen 3112526051 remove service tier from azure-openai-responses; add link to changelog entry 2026-01-24 12:04:34 +01:00
Markus Ylisiurunen 856012296b add Azure OpenAI Responses provider with deployment-aware model mapping 2026-01-24 12:04:34 +01:00
Mario Zechner 72de8f26a1 Merge pull request #917 from williballenthin/fix-call-arguments-done
fix(ai): handle call arguments done on OpenAI-compatible endpoints
2026-01-24 03:14:02 +01:00
Danila Poyarkov 6d0c544e18 fix: Bun compatibility for build scripts and runtime detection 2026-01-23 19:31:16 +03:00