1import type * as Response from "effect/ai/Response"
2import * as Predicate from "effect/Predicate"
3
4const 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 */
14export 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}