test(llm-pi-ai): avoid model-specific Azure assertions

This commit is contained in:
Yichen Jiang committed 2026-10-12 18:09:54 +08:00
1 parent ab64b70d3f
commit 7b8eef3954
4 files changed
+11 -10

No files matched your search

+2 -2
View File
@@ -87,8 +87,8 @@
en: b6bd570c0159ba08
zh: 7d2d91eea6a8d830
/deepseek-ai-dsh-llm-pi-ai/known-limitations-and-deferred-work:
en: de6e60be33ddcd82
zh: dfd0f00289200b77
en: ee870ac2ac87decc
zh: 9e66c5e7400c4bc6
/deepseek-ai-dsh-llm-pi-ai/known-limitations-and-deferred-work/dev-note:
en: 3678dd0f6642c2a5
zh: 75cbdd064cc64282
+1 -1
View File
@@ -237,7 +237,7 @@ These limits define where the adapter stops and future work begins. They are cur
- **Images are accepted only in user and tool-result messages** — images in system, developer, or assistant history fail with `UNSUPPORTED_CONTENT` on both conversion paths.
- **Provider HTTP status is unavailable** — pi-ai error events do not expose a stable HTTP status across providers.
- **Retry policy is provider-owned, not an SDK retry** — pi-ai SDK retries stay disabled so durable agent steps and `llm/retry` events own every visible attempt, and direct `ctx.llm.stream()` calls remain single-attempt.
- **Streamed tool-call arguments are parsed once, when the call ends** — the installed pi-ai carries [`patches/@[email protected]`](../../../patches/@[email protected]), which removes the per-delta re-parse of the whole accumulated argument JSON in every stream adapter (upstream [earendil-works/pi#9265](https://github.com/earendil-works/pi/issues/9265)); unpatched, a multi-megabyte argument stream costs O(n²) CPU on the event loop and stalls every session in the process. Until `toolcall_end`, a pi-ai partial's tool-call `arguments` stays `{}`; this adapter reads only the delta strings and the finalized arguments. Re-apply or retire the patch on every pi-ai upgrade.
- **Streamed JSON tool-call arguments avoid per-delta reparsing** — the installed pi-ai carries [`patches/@[email protected]`](../../../patches/@[email protected]), which removes the per-delta re-parse of the whole accumulated argument JSON in every stream adapter (upstream [earendil-works/pi#9265](https://github.com/earendil-works/pi/issues/9265)); unpatched, a multi-megabyte argument stream costs O(n²) CPU on the event loop and stalls every session in the process. Completion events supply parsed arguments; Responses may parse at both argument completion and output-item completion. This adapter reads only delta strings and finalized arguments. Re-apply or retire the patch on every pi-ai upgrade.
<a id="dev-note"></a>
### Dev Note
+1 -1
View File
@@ -237,7 +237,7 @@ pi-ai 事件变成 harness 的推理、文本、工具调用、用量与 finish
- **图片只在 user 与工具结果消息中被接受**——system、developer 或 assistant 历史中的图片在两条转换路径上都会以 `UNSUPPORTED_CONTENT` 失败。
- **提供方 HTTP 状态不可用**——pi-ai 错误事件不跨提供方暴露稳定 HTTP 状态。
- **重试策略由提供方自有,而非 SDK 重试**——pi-ai SDK 重试保持禁用,因此持久 agent(智能体)步骤与 `llm/retry` 事件拥有每个可见尝试,直接 `ctx.llm.stream()` 调用仍是单次尝试。
- **流式工具调用参数只在调用结束时解析一次**——安装的 pi-ai 带有 [`patches/@[email protected]`](../../../patches/@[email protected]),它移除了每个流适配器中对整段累计参数 JSON 的逐 delta 重新解析(上游 [earendil-works/pi#9265](https://github.com/earendil-works/pi/issues/9265));未打补丁时,数 MB 的参数流会在事件循环上消耗 O(n²) CPU,并使进程内所有会话停滞。在 `toolcall_end` 之前,pi-ai partial 的工具调用 `arguments` 保持为 `{}`;本适配器只读取 delta 字符串与最终参数。每次升级 pi-ai 时都要重新应用或撤销该补丁。
- **流式 JSON 工具调用参数避免逐 delta 重复解析**——安装的 pi-ai 带有 [`patches/@[email protected]`](../../../patches/@[email protected]),它移除了每个流适配器中对整段累计参数 JSON 的逐 delta 重新解析(上游 [earendil-works/pi#9265](https://github.com/earendil-works/pi/issues/9265));未打补丁时,数 MB 的参数流会在事件循环上消耗 O(n²) CPU,并使进程内所有会话停滞。完成事件提供解析后的参数;Responses 可能在参数完成和输出项完成时分别解析。本适配器只读取 delta 字符串与最终参数。每次升级 pi-ai 时都要重新应用或撤销该补丁。
<a id="dev-note"></a>
### 开发备注
+7 -6
View File
@@ -442,13 +442,14 @@ describe('hand-declared providers', () => {
describe('catalog routes with per-model configuration', () => {
it('keeps both Azure protocols under the azure catalog route', () => {
const provider = resolveProfiles({ azure: {} }).get('azure')?.piProvider
const models = provider?.getModels()
if (provider === undefined) throw new Error('the installed catalog ships no azure provider')
const models = provider.getModels()
const protocols = new Set(models.map(model => model.api))
expect(provider?.id).toBe('azure')
expect(models).toEqual(expect.arrayContaining([
expect.objectContaining({ provider: 'azure', api: 'azure-openai-responses', id: 'gpt-6.1-sol' }),
expect.objectContaining({ provider: 'azure', api: 'openai-completions', id: 'deepseek-v4-pro' }),
]))
expect(provider.id).toBe('azure')
expect(protocols).toContain('azure-openai-responses')
expect(protocols).toContain('openai-completions')
expect(models.every(model => model.provider === 'azure')).toBe(true)
expect(catalogProvider('azure-openai-responses')).toBeUndefined()
})