test(ai): refresh responses and codex e2e coverage closes #3576
This commit is contained in:
@@ -9,6 +9,7 @@
|
|||||||
### Fixed
|
### Fixed
|
||||||
|
|
||||||
- Fixed `openai-completions` streamed tool-call assembly to coalesce deltas by stable tool index when OpenAI-compatible gateways mutate tool call IDs mid-stream, preventing malformed Kimi K2.6/OpenCode tool streams from splitting one call into multiple bogus tool calls ([#3576](https://github.com/badlogic/pi-mono/issues/3576))
|
- Fixed `openai-completions` streamed tool-call assembly to coalesce deltas by stable tool index when OpenAI-compatible gateways mutate tool call IDs mid-stream, preventing malformed Kimi K2.6/OpenCode tool streams from splitting one call into multiple bogus tool calls ([#3576](https://github.com/badlogic/pi-mono/issues/3576))
|
||||||
|
- Fixed `packages/ai` E2E coverage to use currently supported OpenAI Responses and OpenAI Codex models, and updated the Bedrock adaptive-thinking payload expectation to match the current `display: "summarized"` shape.
|
||||||
- Fixed built-in `kimi-coding` model generation to attach `User-Agent: KimiCLI/1.5` to all generated Kimi models, overriding the Anthropic SDK default UA so direct Kimi Coding requests use the provider's expected client identity ([#3586](https://github.com/badlogic/pi-mono/issues/3586))
|
- Fixed built-in `kimi-coding` model generation to attach `User-Agent: KimiCLI/1.5` to all generated Kimi models, overriding the Anthropic SDK default UA so direct Kimi Coding requests use the provider's expected client identity ([#3586](https://github.com/badlogic/pi-mono/issues/3586))
|
||||||
|
|
||||||
## [0.69.0] - 2026-04-22
|
## [0.69.0] - 2026-04-22
|
||||||
|
|||||||
@@ -447,8 +447,8 @@ describe("Generate E2E Tests", () => {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
describe.skipIf(!process.env.OPENAI_API_KEY)("OpenAI Responses Provider (gpt-5-mini)", () => {
|
describe.skipIf(!process.env.OPENAI_API_KEY)("OpenAI Responses Provider (gpt-5.4)", () => {
|
||||||
const llm = getModel("openai", "gpt-5-mini");
|
const llm = getModel("openai", "gpt-5.4");
|
||||||
|
|
||||||
it("should complete basic text generation", { retry: 3 }, async () => {
|
it("should complete basic text generation", { retry: 3 }, async () => {
|
||||||
await basicTextGeneration(llm);
|
await basicTextGeneration(llm);
|
||||||
@@ -1120,8 +1120,8 @@ describe("Generate E2E Tests", () => {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
describe("OpenAI Codex Provider (gpt-5.3-codex)", () => {
|
describe("OpenAI Codex Provider (gpt-5.5)", () => {
|
||||||
const llm = getModel("openai-codex", "gpt-5.3-codex");
|
const llm = getModel("openai-codex", "gpt-5.5");
|
||||||
|
|
||||||
it.skipIf(!openaiCodexToken)("should complete basic text generation", { retry: 3 }, async () => {
|
it.skipIf(!openaiCodexToken)("should complete basic text generation", { retry: 3 }, async () => {
|
||||||
await basicTextGeneration(llm, { apiKey: openaiCodexToken });
|
await basicTextGeneration(llm, { apiKey: openaiCodexToken });
|
||||||
@@ -1148,8 +1148,8 @@ describe("Generate E2E Tests", () => {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
describe("OpenAI Codex Provider (gpt-5.3-codex via WebSocket)", () => {
|
describe("OpenAI Codex Provider (gpt-5.5 via WebSocket)", () => {
|
||||||
const llm = getModel("openai-codex", "gpt-5.3-codex");
|
const llm = getModel("openai-codex", "gpt-5.5");
|
||||||
const wsOptions = { apiKey: openaiCodexToken, transport: "websocket" as const };
|
const wsOptions = { apiKey: openaiCodexToken, transport: "websocket" as const };
|
||||||
|
|
||||||
it.skipIf(!openaiCodexToken)("should complete basic text generation", { retry: 3 }, async () => {
|
it.skipIf(!openaiCodexToken)("should complete basic text generation", { retry: 3 }, async () => {
|
||||||
@@ -1237,13 +1237,16 @@ describe("Generate E2E Tests", () => {
|
|||||||
|
|
||||||
const payload = capturedPayload as {
|
const payload = capturedPayload as {
|
||||||
additionalModelRequestFields?: {
|
additionalModelRequestFields?: {
|
||||||
thinking?: { type?: string };
|
thinking?: { type?: string; display?: string };
|
||||||
output_config?: { effort?: string };
|
output_config?: { effort?: string };
|
||||||
anthropic_beta?: string[];
|
anthropic_beta?: string[];
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
expect(payload.additionalModelRequestFields?.thinking).toEqual({ type: "adaptive" });
|
expect(payload.additionalModelRequestFields?.thinking).toEqual({
|
||||||
|
type: "adaptive",
|
||||||
|
display: "summarized",
|
||||||
|
});
|
||||||
expect(payload.additionalModelRequestFields?.output_config).toEqual({ effort: "max" });
|
expect(payload.additionalModelRequestFields?.output_config).toEqual({ effort: "max" });
|
||||||
expect(payload.additionalModelRequestFields?.anthropic_beta).toBeUndefined();
|
expect(payload.additionalModelRequestFields?.anthropic_beta).toBeUndefined();
|
||||||
});
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user