mirror of
https://github.com/xavidop/cardex.git
synced 2026-08-28 17:01:07 +00:00
feat: add imodel selector
This commit is contained in:
@@ -22,6 +22,7 @@ const GeneratePokemonCardInputSchema = z.object({
|
||||
backgroundDescription: z.string().min(1, "Background description is required"),
|
||||
pokemonDescription: z.string().min(1, "Pokemon description is required"),
|
||||
language: z.enum(['english', 'japanese', 'chinese', 'korean', 'spanish', 'french', 'german', 'italian']),
|
||||
model: z.enum(['imagen-4.0-ultra-generate-001', 'imagen-4.0-generate-001', 'imagen-4.0-fast-generate-001', 'gemini-2.5-flash-image-preview']).default('imagen-4.0-ultra-generate-001'),
|
||||
hp: z.number().optional(),
|
||||
attackName1: z.string().optional(),
|
||||
attackDamage1: z.number().optional(),
|
||||
@@ -63,7 +64,7 @@ export async function generatePokemonCard(input: GeneratePokemonCardInput): Prom
|
||||
console.log("Generated prompt:", prompt);
|
||||
|
||||
const response = await genAI.models.generateImages({
|
||||
model: 'models/imagen-4.0-ultra-generate-preview-06-06',
|
||||
model: `models/${input.model}`,
|
||||
prompt: prompt,
|
||||
config: {
|
||||
numberOfImages: 1,
|
||||
|
||||
@@ -26,6 +26,7 @@ export interface GeneratePokemonCardInput {
|
||||
backgroundDescription: string;
|
||||
pokemonDescription: string;
|
||||
language: 'english' | 'japanese' | 'chinese' | 'korean' | 'spanish' | 'french' | 'german' | 'italian';
|
||||
model: 'imagen-4.0-ultra-generate-001' | 'imagen-4.0-generate-001' | 'imagen-4.0-fast-generate-001' | 'gemini-2.5-flash-image-preview';
|
||||
hp?: number;
|
||||
attackName1?: string;
|
||||
attackDamage1?: number;
|
||||
@@ -53,6 +54,13 @@ const languages = [
|
||||
{ value: 'italian', label: 'Italian' },
|
||||
] as const;
|
||||
|
||||
const models = [
|
||||
{ value: 'imagen-4.0-ultra-generate-001', label: 'Imagen 4.0 Ultra' },
|
||||
{ value: 'imagen-4.0-generate-001', label: 'Imagen 4.0 Standard' },
|
||||
{ value: 'imagen-4.0-fast-generate-001', label: 'Imagen 4.0 Fast' },
|
||||
{ value: 'gemini-2.5-flash-image-preview', label: 'Gemini 2.5 Flash' },
|
||||
] as const;
|
||||
|
||||
const cardGeneratorSchema = z.object({
|
||||
pokemonName: z.string().min(1, 'Pokemon name is required'),
|
||||
pokemonType: z.string().min(1, 'Pokemon type is required'),
|
||||
@@ -61,6 +69,7 @@ const cardGeneratorSchema = z.object({
|
||||
backgroundDescription: z.string().min(10, 'Background description must be at least 10 characters'),
|
||||
pokemonDescription: z.string().min(10, 'Pokemon description must be at least 10 characters'),
|
||||
language: z.enum(['english', 'japanese', 'chinese', 'korean', 'spanish', 'french', 'german', 'italian']),
|
||||
model: z.enum(['imagen-4.0-ultra-generate-001', 'imagen-4.0-generate-001', 'imagen-4.0-fast-generate-001', 'gemini-2.5-flash-image-preview']),
|
||||
hp: z.number().min(10).max(999).optional(),
|
||||
attackName1: z.string().optional(),
|
||||
attackDamage1: z.number().min(0).max(999).optional(),
|
||||
@@ -102,6 +111,7 @@ export function CardGenerator({ onCardGenerated, initialValues }: CardGeneratorP
|
||||
backgroundDescription: initialValues?.backgroundDescription || '',
|
||||
pokemonDescription: initialValues?.pokemonDescription || '',
|
||||
language: initialValues?.language || 'english',
|
||||
model: initialValues?.model || 'imagen-4.0-ultra-generate-001',
|
||||
hp: initialValues?.hp || 130,
|
||||
attackName1: initialValues?.attackName1 || 'Quick Attack',
|
||||
attackDamage1: initialValues?.attackDamage1 || 60,
|
||||
@@ -252,6 +262,25 @@ export function CardGenerator({ onCardGenerated, initialValues }: CardGeneratorP
|
||||
</SelectContent>
|
||||
</Select>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<Label htmlFor="model">AI Model</Label>
|
||||
<Select onValueChange={(value) => setValue('model', value as any)}>
|
||||
<SelectTrigger>
|
||||
<SelectValue placeholder="Select model" />
|
||||
</SelectTrigger>
|
||||
<SelectContent>
|
||||
{models.map((model) => (
|
||||
<SelectItem key={model.value} value={model.value}>
|
||||
{model.label}
|
||||
</SelectItem>
|
||||
))}
|
||||
</SelectContent>
|
||||
</Select>
|
||||
{errors.model && (
|
||||
<p className="text-sm text-red-500 mt-1">{errors.model.message}</p>
|
||||
)}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<Separator />
|
||||
|
||||
@@ -24,6 +24,7 @@ export interface GeneratePokemonCardInput {
|
||||
backgroundDescription: string;
|
||||
pokemonDescription: string;
|
||||
language: 'english' | 'japanese' | 'chinese' | 'korean' | 'spanish' | 'french' | 'german' | 'italian';
|
||||
model: 'imagen-4.0-ultra-generate-001' | 'imagen-4.0-generate-001' | 'imagen-4.0-fast-generate-001' | 'gemini-2.5-flash-image-preview';
|
||||
hp?: number;
|
||||
attackName1?: string;
|
||||
attackDamage1?: number;
|
||||
@@ -51,6 +52,13 @@ const languages = [
|
||||
{ value: 'italian', label: 'Italian' },
|
||||
] as const;
|
||||
|
||||
const models = [
|
||||
{ value: 'imagen-4.0-ultra-generate-001', label: 'Imagen 4.0 Ultra' },
|
||||
{ value: 'imagen-4.0-generate-001', label: 'Imagen 4.0 Standard' },
|
||||
{ value: 'imagen-4.0-fast-generate-001', label: 'Imagen 4.0 Fast' },
|
||||
{ value: 'gemini-2.5-flash-image-preview', label: 'Gemini 2.5 Flash' },
|
||||
] as const;
|
||||
|
||||
const cardGeneratorSchema = z.object({
|
||||
pokemonName: z.string().min(1, 'Pokemon name is required'),
|
||||
pokemonType: z.string().min(1, 'Pokemon type is required'),
|
||||
@@ -59,6 +67,7 @@ const cardGeneratorSchema = z.object({
|
||||
backgroundDescription: z.string().min(10, 'Background description must be at least 10 characters'),
|
||||
pokemonDescription: z.string().min(10, 'Pokemon description must be at least 10 characters'),
|
||||
language: z.enum(['english', 'japanese', 'chinese', 'korean', 'spanish', 'french', 'german', 'italian']),
|
||||
model: z.enum(['imagen-4.0-ultra-generate-001', 'imagen-4.0-generate-001', 'imagen-4.0-fast-generate-001', 'gemini-2.5-flash-image-preview']),
|
||||
hp: z.number().min(10).max(999).optional(),
|
||||
attackName1: z.string().optional(),
|
||||
attackDamage1: z.number().min(0).max(999).optional(),
|
||||
@@ -98,6 +107,7 @@ export function CardGeneratorFormOnly({ onCardGenerated, initialValues }: CardGe
|
||||
backgroundDescription: initialValues?.backgroundDescription || '',
|
||||
pokemonDescription: initialValues?.pokemonDescription || '',
|
||||
language: initialValues?.language || 'english',
|
||||
model: initialValues?.model || 'imagen-4.0-ultra-generate-001',
|
||||
hp: initialValues?.hp || 130,
|
||||
attackName1: initialValues?.attackName1 || 'Quick Attack',
|
||||
attackDamage1: initialValues?.attackDamage1 || 60,
|
||||
@@ -221,6 +231,25 @@ export function CardGeneratorFormOnly({ onCardGenerated, initialValues }: CardGe
|
||||
</SelectContent>
|
||||
</Select>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<Label htmlFor="model">AI Model</Label>
|
||||
<Select value={watchedValues.model} onValueChange={(value: any) => setValue('model', value)}>
|
||||
<SelectTrigger>
|
||||
<SelectValue placeholder="Select model" />
|
||||
</SelectTrigger>
|
||||
<SelectContent>
|
||||
{models.map((model) => (
|
||||
<SelectItem key={model.value} value={model.value}>
|
||||
{model.label}
|
||||
</SelectItem>
|
||||
))}
|
||||
</SelectContent>
|
||||
</Select>
|
||||
{errors.model && (
|
||||
<p className="text-sm text-red-500 mt-1">{errors.model.message}</p>
|
||||
)}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<Separator />
|
||||
|
||||
@@ -35,6 +35,7 @@ export interface CardGenerationParams {
|
||||
backgroundDescription: string;
|
||||
pokemonDescription: string;
|
||||
language: 'english' | 'japanese' | 'chinese' | 'korean' | 'spanish' | 'french' | 'german' | 'italian';
|
||||
model: 'imagen-4.0-ultra-generate-001' | 'imagen-4.0-generate-001' | 'imagen-4.0-fast-generate-001' | 'gemini-2.5-flash-image-preview';
|
||||
hp?: number;
|
||||
attackName1?: string;
|
||||
attackDamage1?: number;
|
||||
|
||||
Reference in New Issue
Block a user