| 1 | import type * as Response from "effect/ai/Response" |
| 2 | import * as Predicate from "effect/Predicate" |
| 3 | |
| 4 | const finishReasonMap: Record<string, Response.FinishReason> = { |
| 5 | end_turn: "stop", |
| 6 | max_tokens: "length", |
| 7 | pause_turn: "pause", |
| 8 | refusal: "content-filter", |
| 9 | stop_sequence: "stop", |
| 10 | tool_use: "tool-calls" |
| 11 | } |
| 12 | |
| 13 | /** @internal */ |
| 14 | export const resolveFinishReason = ( |
| 15 | finishReason: string, |
| 16 | isJsonResponse: boolean = false |
| 17 | ): Response.FinishReason => { |
| 18 | const reason = Object.hasOwn(finishReasonMap, finishReason) ? finishReasonMap[finishReason] : undefined |
| 19 | if (Predicate.isUndefined(reason)) { |
| 20 | return "unknown" |
| 21 | } |
| 22 | if (isJsonResponse && reason === "tool-calls") { |
| 23 | return "stop" |
| 24 | } |
| 25 | return reason |
| 26 | } |