Commit Graph

410 Commits

Author SHA1 Message Date
Mario Zechner
933348593c fix(ai): send tool result images in function_call_output closes #2104 2026-03-14 00:49:40 +01:00
Mario Zechner
92882dc4cc fix(ai): improve anthropic oauth flow fixes #2119 2026-03-13 22:38:34 +01:00
sallyom
0acb65fe1c feat: allow injecting pre-built Anthropic client
Add optional `client` field to AnthropicOptions so callers can pass
alternative SDK clients (e.g. AnthropicVertex) that
share the same messages.stream() API. When omitted, behavior is unchanged.

Signed-off-by: sallyom <somalley@redhat.com>
2026-03-11 11:58:29 -04:00
Mario Zechner
4535415300 fix(ai): capture usage from choice.usage for non-standard OpenAI-compatible providers
Some OpenAI-compatible providers (e.g., Moonshot/Kimi) return usage
data in chunk.choices[0].usage instead of the standard chunk.usage.
Extract usage parsing into a helper and check choice.usage as fallback.

closes #2017
2026-03-10 16:28:39 +01:00
Geraldo Dutra Neto
23109b113d fix: send assistant content as string in openai-completions provider (#2008)
The OpenAI Chat Completions API standard format for assistant message
content is a plain string. Sending it as an array of
{type:"text", text:"..."} objects causes some models (notably DeepSeek
V3.2 via NVIDIA NIM) to mirror the content-block structure literally
in their output. This produces recursive nesting where each turn wraps
the previous content blocks deeper:

  [{'type':'text','text':'[{\'type\':\'text\',\'text\':...}]'}]

The fix unifies the assistant content serialization to always use a
joined string — the same approach already used for the github-copilot
provider — for all openai-completions backends.

Affected models observed: deepseek-ai/deepseek-v3.2 (nvidia provider).
Models like GLM-5, GPT-4, Claude were unaffected as they tolerate
array content, but sending a standard string is safer for all.

Co-authored-by: geraldoaax <geraldoaax@users.noreply.github.com>
2026-03-10 16:04:11 +01:00
Gordon Hui
01f7faae9c fix(ai): support GOOGLE_CLOUD_API_KEY for google-vertex (#1948) (#1976) 2026-03-09 13:30:22 +01:00
Drew Brown
d9cfa115be fix(ai): improve error details in response.failed handler (#1956) 2026-03-08 21:34:01 +01:00
Mario Zechner
a3f05423d9 feat(coding-agent): add provider payload hook 2026-03-07 14:34:28 +01:00
Mario Zechner
e4172e68d0 feat(ai): add claude-sonnet-4-6 to Antigravity, fix Claude thinking header detection, bump UA to 1.18.4
closes #1859
2026-03-06 13:27:35 +01:00
Mario Zechner
b4e7d5c445 fix(ai): restore OpenAI Responses reasoning replay closes #1878 2026-03-06 12:39:55 +01:00
Mario Zechner
863135d429 fix(ai): keep mistral browser-safe 2026-03-06 00:16:18 +01:00
Mario Zechner
a31065166d Merge branch 'feat/use-mistral-sdk' 2026-03-05 23:49:29 +01:00
Mario Zechner
4c175790b1 fix(ai): preserve mistral thinking replay 2026-03-05 23:49:18 +01:00
Markus Ylisiurunen
8a6384a925 add support for gpt-5.4 2026-03-05 22:53:08 +01:00
Mario Zechner
a0d839ce84 fix(ai): use skip_thought_signature_validator for unsigned Gemini 3 tool calls
Replace text fallback with the official sentinel value so unsigned function
calls retain structured context in multi-turn conversations.

closes #1829
2026-03-05 22:04:00 +01:00
Mario Zechner
cfbb15876a fix(ai): antigravity endpoint cascade on 403/404, add autopush fallback, strip extra headers
closes #1830
2026-03-05 21:59:43 +01:00
Mario Zechner
8fc2b76827 fix(ai): omit empty OpenAI Responses thinking blocks on replay 2026-03-05 21:28:16 +01:00
Mario Zechner
87d71380e2 fix(ai): preserve OpenAI Responses assistant phase across turns closes #1819 2026-03-05 21:13:06 +01:00
Mario Zechner
668ebc0941 fix(ai): replace Function-based dynamic imports with module imports (fixes #1814) 2026-03-04 20:50:14 +01:00
Mario Zechner
0199abfd11 fix(binary): preload Bedrock provider module for Bun bundle
refs #1814
2026-03-04 20:47:41 +01:00
Mario Zechner
e0754fdbb3 fix(ai,coding-agent): make pi-ai browser-safe and move OAuth runtime exports
- add browser smoke bundling check to root check + pre-commit

- lazy-load Bedrock provider registration to avoid browser graph traversal

- remove top-level OAuth runtime exports from @mariozechner/pi-ai

- add @mariozechner/pi-ai/oauth subpath export and update coding-agent imports

- move proxy dispatcher init to coding-agent CLI (Node-only)

- document Bedrock/OAuth browser limitations

closes #1814
2026-03-04 20:21:25 +01:00
Mario Zechner
2af0c98b5f fix(ai): support gemini-3.1 flash-lite and thinking matching
closes #1785
2026-03-04 20:17:58 +01:00
xu0o0
d4b473e298 fix(ai): respect region from profile config when AWS_PROFILE is set (#1800) 2026-03-04 08:56:06 +01:00
Abdeslam Yassine Agmar
eb9f1183ad refactor(ai): migrate mistral provider to conversations sdk 2026-03-03 17:25:50 +00:00
Mario Zechner
7b96041068 fix(ai): map groq qwen3 reasoning effort values closes #1745 2026-03-03 16:44:42 +01:00
Mario Zechner
7bd4c45d81 fix(ai,coding-agent): update antigravity gemini 3.1 models and headers
fixes #1761
2026-03-03 14:54:43 +01:00
Mario Zechner
9825c13f5f fix(ai): handle redacted_thinking blocks, skip interleaved beta for adaptive models, drop temperature with thinking
- Map redacted_thinking to ThinkingContent with redacted: true instead of
  adding a new content type. The opaque payload goes in thinkingSignature,
  thinking text is set to "[Reasoning redacted]" so it renders naturally
  everywhere. Cross-model transform drops redacted blocks.
- Skip interleaved-thinking-2025-05-14 beta header for Opus 4.6 / Sonnet 4.6
  where adaptive thinking makes it deprecated/redundant.
- Do not send temperature when thinkingEnabled is true (incompatible with
  both adaptive and budget-based thinking).

Based on #1665 by @tctev
2026-02-27 21:53:25 +01:00
Mario Zechner
afe9ae06e8 Closes #1671, switch to GLM-5 for tests 2026-02-27 21:35:40 +01:00
Yoshiaki Okuyama
22b3be834e fix(ai): use enable_thinking for Z.ai instead of thinking param (#1674)
Z.ai uses the same enable_thinking: boolean parameter as Qwen to control reasoning, not thinking: { type: "enabled" | "disabled" }.

The wrong parameter name means Z.ai ignores the disable request and always runs with thinking enabled, wasting tokens and adding latency.

Merge the Z.ai and Qwen branches since they use the same format.

PR by @okuyam2y
2026-02-27 21:33:14 +01:00
Mario Zechner
8880cd3cb8 Manual merge of #1677 2026-02-27 21:27:55 +01:00
tctev
e9d0074fa6 fix(ai): enable adaptive thinking for sonnet 4.6 and clamp xhigh effort (#1548)
* fix(ai): enable adaptive thinking for sonnet 4.6 and clamp xhigh effort

* chore(ai): drop changelog edit from contribution

---------

Co-authored-by: tctev <224793535+tctev@users.noreply.github.com>
2026-02-26 00:34:06 +01:00
Mario Zechner
a26a9cfabd feat: add configurable transport and codex websocket session caching 2026-02-13 23:41:49 +01:00
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