feat: add validated llm json helper

This commit is contained in:
Codex
2026-06-21 23:43:02 +08:00
parent 44e9e04533
commit b9cfa3faf6
2 changed files with 99 additions and 0 deletions
+30
View File
@@ -1,4 +1,5 @@
import OpenAI from "openai";
import type { z } from "zod";
export interface GenerateInput {
system?: string;
@@ -7,6 +8,10 @@ export interface GenerateInput {
temperature?: number;
}
export interface GenerateValidatedJsonInput<T> extends GenerateInput {
schema: z.ZodType<T>;
}
export interface LlmProviderStatus {
provider: "deepseek" | "openai";
configured: boolean;
@@ -106,6 +111,31 @@ export async function generateJson<T>(input: GenerateInput): Promise<T> {
}
}
export let generateJsonForValidation: <T>(input: GenerateInput) => Promise<T> =
generateJson;
export function setGenerateJsonForValidation(
generator: typeof generateJsonForValidation,
) {
generateJsonForValidation = generator;
}
export async function generateValidatedJson<T>({
schema,
...input
}: GenerateValidatedJsonInput<T>): Promise<T | null> {
if (!isLlmConfigured()) {
return null;
}
try {
const generated = await generateJsonForValidation<unknown>(input);
return schema.parse(generated);
} catch {
return null;
}
}
function normalizeLlmError(error: unknown) {
const message = error instanceof Error ? error.message : "Unknown LLM error";
return new Error(`LLM provider error: ${message}`);