Added image generation to blog writer

This commit is contained in:
ajaysi
2025-10-31 15:59:16 +05:30
parent 3219e6bbe4
commit cdb41aec1b
80 changed files with 7662 additions and 3951 deletions

View File

@@ -0,0 +1,73 @@
import { useCallback, useState } from 'react';
import { apiClient } from '../../api/client';
export interface ImageGenerationRequest {
prompt: string;
negative_prompt?: string;
provider?: 'gemini' | 'huggingface' | 'stability';
model?: string;
width?: number;
height?: number;
guidance_scale?: number;
steps?: number;
seed?: number;
}
export interface ImageGenerationResponse {
success: boolean;
image_base64: string;
width: number;
height: number;
provider: string;
model?: string;
seed?: number;
}
export function useImageGeneration() {
const [isGenerating, setIsGenerating] = useState(false);
const [error, setError] = useState<string | null>(null);
const [result, setResult] = useState<ImageGenerationResponse | null>(null);
const generate = useCallback(async (req: ImageGenerationRequest) => {
setIsGenerating(true);
setError(null);
try {
const { data } = await apiClient.post<ImageGenerationResponse>('/api/images/generate', req);
setResult(data);
return data;
} catch (e: any) {
const message = e?.response?.data?.detail || e?.message || 'Image generation failed';
setError(message);
throw new Error(message);
} finally {
setIsGenerating(false);
}
}, []);
return { isGenerating, error, result, generate };
}
export interface PromptSuggestion {
prompt: string;
negative_prompt?: string;
width?: number;
height?: number;
overlay_text?: string;
}
export async function fetchPromptSuggestions(payload: any): Promise<PromptSuggestion[]> {
const res = await fetch('/api/images/suggest-prompts', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
credentials: 'include',
body: JSON.stringify(payload)
});
if (!res.ok) {
const text = await res.text();
throw new Error(text || 'Failed to fetch prompt suggestions');
}
const data = await res.json();
return data.suggestions || [];
}