import {z} from 'zod' export type AssistantFollowUp = {text?: string | undefined, type?: string | undefined}; export type PILImage = {format?: string | undefined, format_description?: string | undefined}; export type SpritePose = {animation_prompt?: string | undefined, margin_ratio?: number | undefined, margin_ratio_mode?: string | undefined, name?: string | undefined, prompt?: string | undefined}; export type Sprite3DRender = {style_id?: string | undefined, style_version?: number | undefined, style_params?: Record | undefined, params?: Record | undefined, perspective?: string | undefined, direction?: string | undefined, animation_name?: string | undefined, motion?: Record | undefined, mirror?: boolean | undefined, fps?: number | undefined, keep_horizontal_travel?: boolean | undefined, keep_vertical_travel?: boolean | undefined, pixel_block?: number | undefined, generated_model?: Record | undefined}; export type GameImage = {tags?: Array | undefined, id?: string | undefined, image_id?: string | undefined, url?: string | undefined, type?: string | undefined, final_score?: number | undefined, nsfw_prob?: number | undefined, similarity?: number | undefined, width?: number | undefined, height?: number | undefined, game_id?: string | undefined, hosted_filename?: string | undefined, icon?: boolean | undefined, targetSize?: number | undefined, seed?: number | undefined, embedded?: boolean | undefined, analysed?: boolean | undefined, image?: string | undefined, image_type?: string | undefined, prompt?: string | undefined, motion_prompt?: string | undefined, request_id?: string | undefined, hints?: Array | undefined, selected_genres?: Array | undefined, selected_colors?: Array | undefined, selected_style?: string | undefined, selected_perspective?: string | undefined, is_safe?: boolean | undefined, platform?: string | undefined, loading?: boolean | undefined, original_hints?: Array | undefined, genres?: Array | undefined, edit_mask?: string | undefined, edit_mode?: string | undefined, camera_rotation?: number | undefined, camera_elevation?: number | undefined, edit_mask_pil_image?: PILImage | undefined, pil_image?: PILImage | undefined, nsfw?: number | undefined, pose?: SpritePose | undefined, render_3d?: Sprite3DRender | undefined, pixel_grid?: (Array | null) | undefined, pixel_size?: number | undefined, model?: string | undefined, normals?: string | undefined}; export type GeneratedVideo = {tags?: Array | undefined, id?: string | undefined, original_prompt?: string | undefined, prompt?: string | undefined, url?: string | undefined, image?: GameImage | undefined, pil_image?: PILImage | undefined, seed?: number | undefined, duration?: number | undefined, has_audio?: boolean | undefined, model?: string | undefined, pixel_grid?: (Array | null) | undefined, reference_url?: string | undefined, reference_clip?: Record | undefined, crop_and_center_image?: boolean | undefined, middle_image?: GameImage | undefined, final_image?: GameImage | undefined, margin_ratio?: number | undefined, margin_ratio_horizontal?: number | undefined, margin_ratio_vertical?: number | undefined, motion_duration?: number | undefined, moderation_rewrite?: boolean | undefined}; export type PackAlignment = {description?: string | undefined, sizeHeightPx?: number | undefined, groundOffset?: number | undefined, horizontalOffset?: number | undefined}; export type Spritesheet = {tags?: Array | undefined, id?: string | undefined, audio_b64?: string | undefined, duration?: number | undefined, billed_duration?: number | undefined, start_timestamp?: number | undefined, end_timestamp?: number | undefined, num_frames?: number | undefined, num_cols?: number | undefined, num_rows?: number | undefined, max_num_frames?: number | undefined, margin_ratio?: number | undefined, margin_ratio_horizontal?: number | undefined, margin_ratio_vertical?: number | undefined, margin_ratio_mode?: string | undefined, target_frame_size?: number | undefined, loop?: boolean | undefined, bad_loop?: boolean | undefined, out_of_frame?: boolean | undefined, out_of_frame_edges?: Array | undefined, loop_score?: number | undefined, loop_detected?: boolean | undefined, frame_width?: number | undefined, frame_height?: number | undefined, pixel_block?: number | undefined, stats_encrypted?: string | undefined, crop?: boolean | undefined, original_prompt?: string | undefined, motion_prompt?: string | undefined, prompt?: string | undefined, seed?: number | undefined, sprite_sheet?: PILImage | undefined, sprite_sheet_b64?: string | undefined, sprite_sheet_raw_b64?: string | undefined, sprite_sheet_normals_b64?: string | undefined, sprite_sheet_watermarked_b64?: string | undefined, sprite_sheet_raw_watermarked_b64?: string | undefined, watermarked?: boolean | undefined, video?: GeneratedVideo | undefined, preview_video_b64?: string | undefined, first_frame_b64?: string | undefined, last_frame_b64?: string | undefined, image?: GameImage | undefined, middle_image?: GameImage | undefined, final_image?: GameImage | undefined, has_audio?: boolean | undefined, model?: string | undefined, is_edited?: boolean | undefined, generation_mode?: string | undefined, pixel_art_filter?: string | undefined, degraded?: boolean | undefined, use_pixel_grid?: boolean | undefined, label?: string | undefined, preview_scale?: number | undefined, pack_alignment?: PackAlignment | undefined, render_3d?: Sprite3DRender | undefined}; export type AssistantFunctionCall = {args?: Record | undefined, name?: string | undefined}; export type ThreeDGenerationParameters = {model?: ('prop' | 'hero') | undefined, rig?: boolean | undefined, rig_type?: ('general' | 'humanoid' | 'game' | 'humanoid_template' | 'humanoid_template_hands') | undefined, joint_naming?: ('smpl' | 'mixamo' | 'humanik' | 'unreal' | 'godot' | 'rigify' | 'vroid') | undefined, target_num_faces?: number | undefined, dynamic_simplification?: number | undefined, remeshing?: string | undefined, texture_size?: number | undefined, texture_type?: string | undefined, render_format?: string | undefined, render_video?: boolean | undefined}; export type AssetGeneration = {id?: string | undefined, rigged?: boolean | undefined, animatable?: boolean | undefined, seed?: number | undefined, images_b64?: Array | undefined, params_encrypted?: string | undefined, request_id?: string | undefined, video_b64?: string | undefined, mesh_video_b64?: string | undefined, snapshots_b64?: Array | undefined, model_b64?: string | undefined, binary_data_b64?: string | undefined, voxels_b64?: string | undefined, mask_snapshots_b64?: Array | undefined, depth_snapshots_b64?: Array | undefined, normal_snapshots_b64?: Array | undefined, textured?: boolean | undefined, view_azimuths?: Array | undefined, generation_model?: string | undefined, generation_parameters?: ThreeDGenerationParameters | undefined}; export type Animation3DClip = {_id: string, user_id: string, model_asset_id: string, clip_name?: string | undefined, prompt?: string | undefined, preset_id?: string | undefined, motion_id?: string | undefined, mirror?: boolean | undefined, mode?: ('rot_trans' | 'rot_only') | undefined, seed?: number | undefined, glb_url?: string | undefined, preview_url?: string | undefined, accepted?: boolean | undefined, motion?: number | undefined, fit_rmse?: number | undefined, date?: number | undefined, deleted?: boolean | undefined}; export type ThreeDAsset = {tags?: Array | undefined, asset?: AssetGeneration | undefined, image?: GameImage | undefined, back_image?: GameImage | undefined, sprite3d_look?: Record | undefined, api_model_url?: string | undefined, sprite3d_attachments?: Array> | undefined, animations?: Array | undefined}; export type Annotation = {start?: number | undefined, end?: number | undefined, label?: string | undefined, text?: string | undefined, label_probs?: ({feature?: number | undefined, junk?: number | undefined, mechanic?: number | undefined, theme?: number | undefined}) | undefined}; export type SimilarGame = {id?: string | undefined, similarity?: number | undefined}; export type GenerationsSearchResult = {similar_games?: Array | undefined}; export type PrometheusGameImage = {game_id?: string | undefined, hash?: number | undefined, id?: string | undefined, origin?: string | undefined, similarity?: number | undefined}; export type MediaElement = {type?: string | undefined, url?: string | undefined}; export type Game = {_id?: string | undefined, id?: string | undefined, source_id?: string | undefined, title?: string | undefined, short_description?: string | undefined, short_description_clean?: string | undefined, summary?: string | undefined, description?: string | undefined, description_clean?: string | undefined, description_annotations?: Array | undefined, user_rating_count?: number | undefined, user_rating?: number | undefined, developers?: Array | undefined, urls?: Array | undefined, release_date?: number | undefined, update_date?: number | undefined, icon?: GameImage | undefined, header?: GameImage | undefined, videos?: Array | undefined, screenshots?: Array | undefined, url?: Array | undefined, actual_genres?: Array | undefined, predicted_genres?: Array | undefined, augmented_genres?: Array | undefined, source?: string | undefined, price?: string | undefined, platforms?: Array | undefined, keywords?: Array | undefined, game_modes?: Array | undefined, genres?: Array | undefined, advisory_rating?: string | undefined}; export type GeneratedText = {id?: string | undefined, request_id?: string | undefined, image?: GameImage | undefined, images?: Array | undefined, context_keywords?: Array | undefined, text?: string | undefined, title?: string | undefined, type?: string | undefined, image_prompt?: string | undefined, final_score?: number | undefined}; export type PlotlyPlotData = {mode?: string | undefined}; export type PlotlyPlot = {data?: Array | undefined, layout?: PlotlyPlotData | undefined}; export type LudoScoreInsight = {tag?: string | undefined, text?: string | undefined}; export type LudoScoreMetric = {_max_similarity?: number | undefined, _min_similarity?: number | undefined, description?: string | undefined, key?: string | undefined, name?: string | undefined, score?: number | undefined, supporting_games_title?: string | undefined, supporting_games?: Array | undefined, core_metric?: boolean | undefined, plotly_plot?: PlotlyPlot | undefined, insights?: Array | undefined}; export type LudoScoreBadge = {description?: string | undefined, icon_url?: string | undefined, key?: string | undefined, name?: string | undefined}; export type LudoScore = {metrics?: Array | undefined, params?: string | undefined, score_text?: string | undefined, score_unit?: string | undefined, score?: number | undefined, timestamp?: number | undefined, country?: string | undefined, sources?: Array | undefined, version?: string | undefined, badge?: LudoScoreBadge | undefined, insights?: Array | undefined}; export type StepValue = {step?: string | undefined, description?: string | undefined, value?: string | undefined, score?: LudoScore | undefined}; export type GeneratedGame = {tags?: Array | undefined, id?: string | undefined, title?: string | undefined, summary?: string | undefined, text_raw?: string | undefined, genres?: Array | undefined, keywords?: Array | undefined, description?: string | undefined, description_raw?: string | undefined, description_annotations?: Array | undefined, search_results?: GenerationsSearchResult | undefined, images?: Array | undefined, screenshots?: Array | undefined, image?: GameImage | undefined, blending?: Array | undefined, blended_games?: Array | undefined, platform?: string | undefined, perspective?: string | undefined, platforms?: Array | undefined, sentence?: string | undefined, punchline?: string | undefined, art_style?: string | undefined, quality_score?: number | undefined, uniqueness_score?: number | undefined, final_score?: number | undefined, hints?: Array | undefined, request_id?: string | undefined, prompt?: string | undefined, selected_genres?: Array | undefined, mechanics?: Array | undefined, step_choices?: Array | undefined, score?: LudoScore | undefined, image_prompt?: string | undefined}; export type ChatMessage = {text?: string | undefined, role: string, timestamp?: number | undefined, followups?: Array | undefined, selected_element?: string | undefined, images?: Array | undefined, videos?: Array | undefined, sprites?: Array | undefined, function_calls?: Array | undefined, assets?: Array | undefined, game_ideas?: Array | undefined}; export type SaveGddConversationRequest = {conversation_id: string, title?: string | undefined, message_history: Array}; export type CreateApiChatGddIdConversationsArgs = {id: string, body: SaveGddConversationRequest}; export type CreateApiChatGddIdConversationsOptions = {baseUrl: string, Bearer?: string | undefined, fetch?: typeof fetch | undefined}; export const assistantFollowUp = z.object({text: z.string().optional(), type: z.string().optional()}); export const pILImage = z.object({format: z.string().optional(), format_description: z.string().optional()}); export const spritePose = z.object({animation_prompt: z.string().optional(), margin_ratio: z.number().optional(), margin_ratio_mode: z.string().optional(), name: z.string().optional(), prompt: z.string().optional()}); export const sprite3DRender = z.object({style_id: z.string().optional(), style_version: z.number().int().optional(), style_params: z.object({}).optional(), params: z.object({}).optional(), perspective: z.string().optional(), direction: z.string().optional(), animation_name: z.string().optional(), motion: z.object({}).optional(), mirror: z.boolean().optional(), fps: z.number().optional(), keep_horizontal_travel: z.boolean().optional(), keep_vertical_travel: z.boolean().optional(), pixel_block: z.number().int().optional(), generated_model: z.object({}).optional()}); export const gameImage = z.object({tags: z.array(z.string()).optional(), id: z.string().optional(), image_id: z.string().optional(), url: z.string().optional(), type: z.string().optional(), final_score: z.number().optional(), nsfw_prob: z.number().optional(), similarity: z.number().optional(), width: z.number().int().optional(), height: z.number().int().optional(), game_id: z.string().optional(), hosted_filename: z.string().optional(), icon: z.boolean().optional(), targetSize: z.number().int().optional(), seed: z.number().int().optional(), embedded: z.boolean().optional(), analysed: z.boolean().optional(), image: z.string().optional(), image_type: z.string().optional(), prompt: z.string().optional(), motion_prompt: z.string().optional(), request_id: z.string().optional(), hints: z.array(z.string()).optional(), selected_genres: z.array(z.string()).optional(), selected_colors: z.array(z.string()).optional(), selected_style: z.string().optional(), selected_perspective: z.string().optional(), is_safe: z.boolean().optional(), platform: z.string().optional(), loading: z.boolean().optional(), original_hints: z.array(z.string()).optional(), genres: z.array(z.string()).optional(), edit_mask: z.string().optional(), edit_mode: z.string().optional(), camera_rotation: z.number().int().gte(-180).lte(180).optional(), camera_elevation: z.number().int().gte(-30).lte(60).optional(), edit_mask_pil_image: pILImage.optional(), pil_image: pILImage.optional(), nsfw: z.number().optional(), pose: spritePose.optional(), render_3d: sprite3DRender.optional(), pixel_grid: z.array(z.number().int()).nullable().optional(), pixel_size: z.number().optional(), model: z.string().optional(), normals: z.string().optional()}); export const generatedVideo = z.object({tags: z.array(z.string()).optional(), id: z.string().optional(), original_prompt: z.string().optional(), prompt: z.string().optional(), url: z.string().optional(), image: gameImage.optional(), pil_image: pILImage.optional(), seed: z.number().int().optional(), duration: z.number().optional(), has_audio: z.boolean().optional(), model: z.string().optional(), pixel_grid: z.array(z.number().int()).nullable().optional(), reference_url: z.string().optional(), reference_clip: z.object({}).optional(), crop_and_center_image: z.boolean().optional(), middle_image: gameImage.optional(), final_image: gameImage.optional(), margin_ratio: z.number().optional(), margin_ratio_horizontal: z.number().optional(), margin_ratio_vertical: z.number().optional(), motion_duration: z.number().optional(), moderation_rewrite: z.boolean().optional()}); export const packAlignment = z.object({description: z.string().optional(), sizeHeightPx: z.number().optional(), groundOffset: z.number().optional(), horizontalOffset: z.number().optional()}); export const spritesheet = z.object({tags: z.array(z.string()).optional(), id: z.string().optional(), audio_b64: z.string().optional(), duration: z.number().optional(), billed_duration: z.number().optional(), start_timestamp: z.number().optional(), end_timestamp: z.number().optional(), num_frames: z.number().optional(), num_cols: z.number().optional(), num_rows: z.number().optional(), max_num_frames: z.number().optional(), margin_ratio: z.number().optional(), margin_ratio_horizontal: z.number().optional(), margin_ratio_vertical: z.number().optional(), margin_ratio_mode: z.string().optional(), target_frame_size: z.number().optional(), loop: z.boolean().optional(), bad_loop: z.boolean().optional(), out_of_frame: z.boolean().optional(), out_of_frame_edges: z.array(z.string()).optional(), loop_score: z.number().optional(), loop_detected: z.boolean().optional(), frame_width: z.number().optional(), frame_height: z.number().optional(), pixel_block: z.number().optional(), stats_encrypted: z.string().optional(), crop: z.boolean().optional(), original_prompt: z.string().optional(), motion_prompt: z.string().optional(), prompt: z.string().optional(), seed: z.number().optional(), sprite_sheet: pILImage.optional(), sprite_sheet_b64: z.string().optional(), sprite_sheet_raw_b64: z.string().optional(), sprite_sheet_normals_b64: z.string().optional(), sprite_sheet_watermarked_b64: z.string().optional(), sprite_sheet_raw_watermarked_b64: z.string().optional(), watermarked: z.boolean().optional(), video: generatedVideo.optional(), preview_video_b64: z.string().optional(), first_frame_b64: z.string().optional(), last_frame_b64: z.string().optional(), image: gameImage.optional(), middle_image: gameImage.optional(), final_image: gameImage.optional(), has_audio: z.boolean().optional(), model: z.string().optional(), is_edited: z.boolean().optional(), generation_mode: z.string().optional(), pixel_art_filter: z.string().optional(), degraded: z.boolean().optional(), use_pixel_grid: z.boolean().optional(), label: z.string().optional(), preview_scale: z.number().optional(), pack_alignment: packAlignment.optional(), render_3d: sprite3DRender.optional()}); export const assistantFunctionCall = z.object({args: z.object({}).optional(), name: z.string().optional()}); export const threeDGenerationParameters = z.object({model: z.enum(["prop", "hero"]).optional(), rig: z.boolean().optional(), rig_type: z.enum(["general", "humanoid", "game", "humanoid_template", "humanoid_template_hands"]).optional(), joint_naming: z.enum(["smpl", "mixamo", "humanik", "unreal", "godot", "rigify", "vroid"]).optional(), target_num_faces: z.number().int().optional(), dynamic_simplification: z.number().optional(), remeshing: z.string().optional(), texture_size: z.number().int().optional(), texture_type: z.string().optional(), render_format: z.string().optional(), render_video: z.boolean().optional()}); export const assetGeneration = z.object({id: z.string().optional(), rigged: z.boolean().optional(), animatable: z.boolean().optional(), seed: z.number().int().optional(), images_b64: z.array(z.string()).optional(), params_encrypted: z.string().optional(), request_id: z.string().optional(), video_b64: z.string().optional(), mesh_video_b64: z.string().optional(), snapshots_b64: z.array(z.string()).optional(), model_b64: z.string().optional(), binary_data_b64: z.string().optional(), voxels_b64: z.string().optional(), mask_snapshots_b64: z.array(z.string()).optional(), depth_snapshots_b64: z.array(z.string()).optional(), normal_snapshots_b64: z.array(z.string()).optional(), textured: z.boolean().optional(), view_azimuths: z.array(z.number()).optional(), generation_model: z.string().optional(), generation_parameters: threeDGenerationParameters.optional()}); export const animation3DClip = z.object({_id: z.string(), user_id: z.string(), model_asset_id: z.string(), clip_name: z.string().optional(), prompt: z.string().optional(), preset_id: z.string().optional(), motion_id: z.string().optional(), mirror: z.boolean().optional(), mode: z.enum(["rot_trans", "rot_only"]).optional(), seed: z.number().int().optional(), glb_url: z.string().optional(), preview_url: z.string().optional(), accepted: z.boolean().optional(), motion: z.number().optional(), fit_rmse: z.number().optional(), date: z.number().int().optional(), deleted: z.boolean().optional()}); export const threeDAsset = z.object({tags: z.array(z.string()).optional(), asset: assetGeneration.optional(), image: gameImage.optional(), back_image: gameImage.optional(), sprite3d_look: z.object({}).optional(), api_model_url: z.string().optional(), sprite3d_attachments: z.array(z.object({})).optional(), animations: z.array(animation3DClip).optional()}); export const annotation = z.object({start: z.number().int().optional(), end: z.number().int().optional(), label: z.string().optional(), text: z.string().optional(), label_probs: z.object({feature: z.number().optional(), junk: z.number().optional(), mechanic: z.number().optional(), theme: z.number().optional()}).optional()}); export const similarGame = z.object({id: z.string().optional(), similarity: z.number().optional()}); export const generationsSearchResult = z.object({similar_games: z.array(similarGame).optional()}); export const prometheusGameImage = z.object({game_id: z.string().optional(), hash: z.number().int().optional(), id: z.string().optional(), origin: z.string().optional(), similarity: z.number().optional()}); export const mediaElement = z.object({type: z.string().optional(), url: z.string().optional()}); export const game = z.object({_id: z.string().optional(), id: z.string().optional(), source_id: z.string().optional(), title: z.string().optional(), short_description: z.string().optional(), short_description_clean: z.string().optional(), summary: z.string().optional(), description: z.string().optional(), description_clean: z.string().optional(), description_annotations: z.array(annotation).optional(), user_rating_count: z.number().int().optional(), user_rating: z.number().optional(), developers: z.array(z.string()).optional(), urls: z.array(z.string()).optional(), release_date: z.number().int().optional(), update_date: z.number().int().optional(), icon: gameImage.optional(), header: gameImage.optional(), videos: z.array(mediaElement).optional(), screenshots: z.array(gameImage).optional(), url: z.array(z.string()).optional(), actual_genres: z.array(z.string()).optional(), predicted_genres: z.array(z.string()).optional(), augmented_genres: z.array(z.string()).optional(), source: z.string().optional(), price: z.string().optional(), platforms: z.array(z.string()).optional(), keywords: z.array(z.string()).optional(), game_modes: z.array(z.string()).optional(), genres: z.array(z.string()).optional(), advisory_rating: z.string().optional()}); export const generatedText = z.object({id: z.string().optional(), request_id: z.string().optional(), image: gameImage.optional(), images: z.array(gameImage).optional(), context_keywords: z.array(z.string()).optional(), text: z.string().optional(), title: z.string().optional(), type: z.string().optional(), image_prompt: z.string().optional(), final_score: z.number().optional()}); export const plotlyPlotData = z.object({mode: z.string().optional()}); export const plotlyPlot = z.object({data: z.array(plotlyPlotData).optional(), layout: plotlyPlotData.optional()}); export const ludoScoreInsight = z.object({tag: z.string().optional(), text: z.string().optional()}); export const ludoScoreMetric = z.object({_max_similarity: z.number().optional(), _min_similarity: z.number().optional(), description: z.string().optional(), key: z.string().optional(), name: z.string().optional(), score: z.number().optional(), supporting_games_title: z.string().optional(), supporting_games: z.array(z.string()).optional(), core_metric: z.boolean().optional(), plotly_plot: plotlyPlot.optional(), insights: z.array(ludoScoreInsight).optional()}); export const ludoScoreBadge = z.object({description: z.string().optional(), icon_url: z.string().optional(), key: z.string().optional(), name: z.string().optional()}); export const ludoScore = z.object({metrics: z.array(ludoScoreMetric).optional(), params: z.string().optional(), score_text: z.string().optional(), score_unit: z.string().optional(), score: z.number().optional(), timestamp: z.number().int().optional(), country: z.string().optional(), sources: z.array(z.string()).optional(), version: z.string().optional(), badge: ludoScoreBadge.optional(), insights: z.array(ludoScoreInsight).optional()}); export const stepValue = z.object({step: z.string().optional(), description: z.string().optional(), value: z.string().optional(), score: ludoScore.optional()}); export const generatedGame = z.object({tags: z.array(z.string()).optional(), id: z.string().optional(), title: z.string().optional(), summary: z.string().optional(), text_raw: z.string().optional(), genres: z.array(z.string()).optional(), keywords: z.array(z.string()).optional(), description: z.string().optional(), description_raw: z.string().optional(), description_annotations: z.array(annotation).optional(), search_results: generationsSearchResult.optional(), images: z.array(prometheusGameImage).optional(), screenshots: z.array(gameImage).optional(), image: gameImage.optional(), blending: z.array(z.string()).optional(), blended_games: z.array(game).optional(), platform: z.string().optional(), perspective: z.string().optional(), platforms: z.array(z.string()).optional(), sentence: z.string().optional(), punchline: z.string().optional(), art_style: z.string().optional(), quality_score: z.number().optional(), uniqueness_score: z.number().optional(), final_score: z.number().optional(), hints: z.array(z.string()).optional(), request_id: z.string().optional(), prompt: z.string().optional(), selected_genres: z.array(z.string()).optional(), mechanics: z.array(generatedText).optional(), step_choices: z.array(stepValue).optional(), score: ludoScore.optional(), image_prompt: z.string().optional()}); export const chatMessage = z.object({text: z.string().optional(), role: z.string(), timestamp: z.number().optional(), followups: z.array(assistantFollowUp).optional(), selected_element: z.string().optional(), images: z.array(gameImage).optional(), videos: z.array(generatedVideo).optional(), sprites: z.array(spritesheet).optional(), function_calls: z.array(assistantFunctionCall).optional(), assets: z.array(threeDAsset).optional(), game_ideas: z.array(generatedGame).optional()}); export const gddConversation = z.object({_id: z.string().optional(), user_id: z.string().optional(), project_id: z.string().optional(), title: z.string().optional(), date: z.number().optional(), date_created: z.number().optional(), message_history: z.array(chatMessage).optional()}); export const validateResponse = async ( schema: { readonly '~standard': { readonly validate: (value: unknown) => ({ readonly value: Output; readonly issues?: undefined } | { readonly issues: ReadonlyArray<{ readonly message: string; readonly path?: ReadonlyArray | undefined }> }) | Promise<{ readonly value: Output; readonly issues?: undefined } | { readonly issues: ReadonlyArray<{ readonly message: string; readonly path?: ReadonlyArray | undefined }> }> } }, value: unknown ): Promise => { const result = await schema['~standard'].validate(value) if (result.issues !== undefined) { const detail = result.issues .map(({ message, path }) => path?.length ? `${path.map((segment) => String(typeof segment === 'object' ? segment.key : segment)).join('.')}: ${message}` : message ) .join('; ') throw new Error(`Response does not match the schema: ${detail}`, { cause: { issues: result.issues } }) } return result.value }; /** * Creates or wholly replaces one of the caller's GDD chat conversations (Roles: user) * * POST /chat/gdd/{id}/conversations */ export const createApiChatGddIdConversations = async (args: CreateApiChatGddIdConversationsArgs, options: CreateApiChatGddIdConversationsOptions) => { const {baseUrl, fetch: fetchFn = fetch, Bearer} = options ?? {} const query = new URLSearchParams() const headers = new Headers() headers.set('content-type', "application/json") headers.set('accept', "application/json") if (Bearer !== undefined) headers.set("Authorization", Bearer) const url = `${baseUrl.replace(/\/+$/, '')}/chat/gdd/${encodeURIComponent(String(args.id))}/conversations${query.size > 0 ? `?${query}` : ''}` const res = await fetchFn(url, {method: "POST", headers, body: JSON.stringify(args.body)}) if (!res.ok) throw new Error(`Request failed with status ${res.status}`, {cause: {status: res.status, body: await res.text()}}) return validateResponse(gddConversation, await res.json()) };