| 1 | import type * as Response from "effect/ai/Response" |
| 2 | |
| 3 | const finishReasonMap: Record<string, Response.FinishReason> = { |
| 4 | content_filter: "content-filter", |
| 5 | function_call: "tool-calls", |
| 6 | length: "length", |
| 7 | stop: "stop", |
| 8 | tool_calls: "tool-calls" |
| 9 | } |
| 10 | |
| 11 | /** @internal */ |
| 12 | export const escapeJSONDelta = (delta: string): string => JSON.stringify(delta).slice(1, -1) |
| 13 | |
| 14 | /** @internal */ |
| 15 | export const resolveFinishReason = ( |
| 16 | finishReason: string | null | undefined, |
| 17 | hasToolCalls: boolean |
| 18 | ): Response.FinishReason => { |
| 19 | if (finishReason == null) { |
| 20 | return hasToolCalls ? "tool-calls" : "stop" |
| 21 | } |
| 22 | const reason = Object.hasOwn(finishReasonMap, finishReason) ? finishReasonMap[finishReason] : undefined |
| 23 | if (reason == null) { |
| 24 | return hasToolCalls ? "tool-calls" : "unknown" |
| 25 | } |
| 26 | return reason |
| 27 | } |