mirror of
https://github.com/Nezumi-2711/9router.git
synced 2026-09-22 13:38:31 +00:00
- concerns/finishReasonMap.js: toOpenAIFinish/fromOpenAIFinish, switch special formats, default passthrough - Replace 3 inline switch maps (claude→oai, oai→claude, commandcode→oai) - Golden translator tests pass, behavior identical Co-authored-by: Cursor <cursoragent@cursor.com>
44 lines
1.3 KiB
JavaScript
44 lines
1.3 KiB
JavaScript
// Concern #6: finish_reason / stop_reason mapping.
|
|
// One entry per direction; switch by special format, default handles common providers.
|
|
|
|
// upstream finish/stop reason → OpenAI finish_reason
|
|
export function toOpenAIFinish(reason, format) {
|
|
switch (format) {
|
|
case "claude":
|
|
switch (reason) {
|
|
case "end_turn": return "stop";
|
|
case "max_tokens": return "length";
|
|
case "tool_use": return "tool_calls";
|
|
case "stop_sequence": return "stop";
|
|
default: return "stop";
|
|
}
|
|
case "commandcode":
|
|
switch (reason) {
|
|
case "stop": return "stop";
|
|
case "length": return "length";
|
|
case "tool-calls":
|
|
case "tool_use": return "tool_calls";
|
|
case "content-filter": return "content_filter";
|
|
case "error": return "stop";
|
|
default: return reason || "stop";
|
|
}
|
|
default:
|
|
return reason || "stop";
|
|
}
|
|
}
|
|
|
|
// OpenAI finish_reason → upstream stop reason
|
|
export function fromOpenAIFinish(reason, format) {
|
|
switch (format) {
|
|
case "claude":
|
|
switch (reason) {
|
|
case "stop": return "end_turn";
|
|
case "length": return "max_tokens";
|
|
case "tool_calls": return "tool_use";
|
|
default: return "end_turn";
|
|
}
|
|
default:
|
|
return reason;
|
|
}
|
|
}
|