import { env } from 'cloudflare:workers';

import { UpstreamFailureError } from '@atcute/xrpc-server';

import type { CompleteChat } from '../src/lib/ai/chat';

const MODEL = '@cf/google/gemma-4-26b-a4b-it';

/**
 * creates a Workers AI chat transport.
 *
 * @param feature feature name for errors
 * @returns the chat transport
 */
export const createWorkersAiCompletion = (feature: 'description' | 'translation'): CompleteChat => {
	return async ({ maxTokens, messages, responseSchema, temperature }) => {
		let result: ChatCompletionsOutput;

		try {
			result = await env.AI.run(MODEL, {
				// thinking can produce unparseable output.
				chat_template_kwargs: { enable_thinking: false },
				max_tokens: maxTokens,
				temperature: temperature,
				messages: messages,
				response_format: {
					type: 'json_schema',
					json_schema: { ...responseSchema, strict: true },
				},
			});
		} catch (error: unknown) {
			// keep upstream error pages out of the response body.
			console.error(`${feature} model call failed:`, error);

			throw new UpstreamFailureError({
				error: 'ModelUnavailable',
				message: `the ${feature} model could not be reached`,
			});
		}

		return result.choices[0]?.message.content ?? '';
	};
};
