1import type * as Response from "effect/ai/Response"
2
3const 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 */
12export const escapeJSONDelta = (delta: string): string => JSON.stringify(delta).slice(1, -1)
13
14/** @internal */
15export 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}