import type { ProviderRuntimeModel } from
"openclaw/plugin-sdk/plugin-entry" ;
import { describe, expect, it } from
"vitest" ;
import {
resolveOpenAITransportTurnState,
resolveOpenAIWebSocketSessionPolicy,
} from
"./transport-policy.js" ;
describe(
"openai transport policy" , () => {
const nativeModel = {
id:
"gpt-5.4" ,
name:
"GPT-5.4" ,
api:
"openai-responses" ,
provider:
"openai" ,
baseUrl:
"https://api.openai.com/v1 ",
reasoning:
true ,
input: [
"text" ],
cost: { input:
0 , output:
0 , cacheRead:
0 , cacheWrite:
0 },
contextWindow:
200000 ,
maxTokens:
8192 ,
} satisfies ProviderRuntimeModel;
const proxyModel = {
...nativeModel,
id:
"proxy-model" ,
name:
"Proxy Model" ,
baseUrl:
"https://proxy.example.com/v1 ",
} satisfies ProviderRuntimeModel;
it(
"builds native turn state for direct OpenAI routes" , () => {
expect(
resolveOpenAITransportTurnState({
provider:
"openai" ,
modelId: nativeModel.id,
model: nativeModel,
sessionId:
"session-123" ,
turnId:
"turn-123" ,
attempt:
2 ,
transport:
"websocket" ,
}),
).toMatchObject({
headers: {
"x-client-request-id" :
"session-123" ,
"x-openclaw-session-id" :
"session-123" ,
"x-openclaw-turn-id" :
"turn-123" ,
"x-openclaw-turn-attempt" :
"2" ,
},
metadata: {
openclaw_session_id:
"session-123" ,
openclaw_turn_id:
"turn-123" ,
openclaw_turn_attempt:
"2" ,
openclaw_transport:
"websocket" ,
},
});
});
it(
"skips turn state for proxy-like OpenAI routes" , () => {
expect(
resolveOpenAITransportTurnState({
provider:
"openai" ,
modelId: proxyModel.id,
model: proxyModel,
sessionId:
"session-123" ,
turnId:
"turn-123" ,
attempt:
1 ,
transport:
"stream" ,
}),
).toBeUndefined();
});
it(
"returns websocket session headers and cooldown for native routes" , () => {
expect(
resolveOpenAIWebSocketSessionPolicy({
provider:
"openai" ,
modelId: nativeModel.id,
model: nativeModel,
sessionId:
"session-123" ,
}),
).toMatchObject({
headers: {
"x-client-request-id" :
"session-123" ,
"x-openclaw-session-id" :
"session-123" ,
},
degradeCooldownMs:
60 _
000 ,
});
});
it(
"treats Azure routes as native OpenAI-family transports" , () => {
expect(
resolveOpenAIWebSocketSessionPolicy({
provider:
"azure-openai-responses" ,
modelId:
"gpt-5.4" ,
model: {
...nativeModel,
provider:
"azure-openai-responses" ,
baseUrl:
"https://demo.openai.azure.com/openai/v1 ",
},
sessionId:
"session-123" ,
}),
).toMatchObject({
headers: {
"x-client-request-id" :
"session-123" ,
"x-openclaw-session-id" :
"session-123" ,
},
degradeCooldownMs:
60 _
000 ,
});
});
it(
"treats ChatGPT Codex backend routes as native OpenAI-family transports" , () => {
expect(
resolveOpenAIWebSocketSessionPolicy({
provider:
"openai-codex" ,
modelId:
"gpt-5.4" ,
model: {
...nativeModel,
provider:
"openai-codex" ,
api:
"openai-codex-responses" ,
baseUrl:
"https://chatgpt.com/backend-api ",
},
sessionId:
"session-123" ,
}),
).toMatchObject({
headers: {
"x-client-request-id" :
"session-123" ,
"x-openclaw-session-id" :
"session-123" ,
},
degradeCooldownMs:
60 _
000 ,
});
});
});
Messung V0.5 in Prozent C=97 H=100 G=98
¤ Dauer der Verarbeitung: 0.15 Sekunden
(vorverarbeitet am 2026-06-07)
¤
*© Formatika GbR, Deutschland