/*
 * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.
 * @generated-id: 59428d455b67
 */

import * as z from "zod/v3";
import { remap as remap$ } from "../../lib/primitives.js";
import {
  JudgeClassificationOutput,
  JudgeClassificationOutput$Outbound,
  JudgeClassificationOutput$outboundSchema,
} from "./judgeclassificationoutput.js";
import {
  JudgeRegressionOutput,
  JudgeRegressionOutput$Outbound,
  JudgeRegressionOutput$outboundSchema,
} from "./judgeregressionoutput.js";

export type Output =
  | (JudgeClassificationOutput & { type: "CLASSIFICATION" })
  | (JudgeRegressionOutput & { type: "REGRESSION" });

export type PostJudgeInSchema = {
  name: string;
  description: string;
  modelName: string;
  output:
    | (JudgeClassificationOutput & { type: "CLASSIFICATION" })
    | (JudgeRegressionOutput & { type: "REGRESSION" });
  instructions: string;
  tools: Array<string>;
};

/** @internal */
export type Output$Outbound =
  | (JudgeClassificationOutput$Outbound & { type: "CLASSIFICATION" })
  | (JudgeRegressionOutput$Outbound & { type: "REGRESSION" });

/** @internal */
export const Output$outboundSchema: z.ZodType<
  Output$Outbound,
  z.ZodTypeDef,
  Output
> = z.union([
  JudgeClassificationOutput$outboundSchema.and(
    z.object({ type: z.literal("CLASSIFICATION") }),
  ),
  JudgeRegressionOutput$outboundSchema.and(
    z.object({ type: z.literal("REGRESSION") }),
  ),
]);

export function outputToJSON(output: Output): string {
  return JSON.stringify(Output$outboundSchema.parse(output));
}

/** @internal */
export type PostJudgeInSchema$Outbound = {
  name: string;
  description: string;
  model_name: string;
  output:
    | (JudgeClassificationOutput$Outbound & { type: "CLASSIFICATION" })
    | (JudgeRegressionOutput$Outbound & { type: "REGRESSION" });
  instructions: string;
  tools: Array<string>;
};

/** @internal */
export const PostJudgeInSchema$outboundSchema: z.ZodType<
  PostJudgeInSchema$Outbound,
  z.ZodTypeDef,
  PostJudgeInSchema
> = z.object({
  name: z.string(),
  description: z.string(),
  modelName: z.string(),
  output: z.union([
    JudgeClassificationOutput$outboundSchema.and(
      z.object({ type: z.literal("CLASSIFICATION") }),
    ),
    JudgeRegressionOutput$outboundSchema.and(
      z.object({ type: z.literal("REGRESSION") }),
    ),
  ]),
  instructions: z.string(),
  tools: z.array(z.string()),
}).transform((v) => {
  return remap$(v, {
    modelName: "model_name",
  });
});

export function postJudgeInSchemaToJSON(
  postJudgeInSchema: PostJudgeInSchema,
): string {
  return JSON.stringify(
    PostJudgeInSchema$outboundSchema.parse(postJudgeInSchema),
  );
}
