File size: 1,852 Bytes
f56a29b | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 | /**
* Type definitions for the generation pipeline.
*/
import type { GenerationProgress } from '@/lib/types/generation';
// ==================== Agent Info ====================
/** Lightweight agent info passed to the generation pipeline */
export interface AgentInfo {
id: string;
name: string;
role: string;
persona?: string;
}
// ==================== Cross-Page Context ====================
/** Cross-page context for maintaining speech coherence across scenes */
export interface SceneGenerationContext {
pageIndex: number; // Current page (1-based)
totalPages: number; // Total number of pages
allTitles: string[]; // All page titles in order
previousSpeeches: string[]; // Speech texts from the previous page only
}
// ==================== Generated Slide Data Interface ====================
/**
* AI-generated slide data structure
* Used to parse AI responses
*/
export interface GeneratedSlideData {
elements: Array<{
type: 'text' | 'image' | 'video' | 'shape' | 'chart' | 'latex' | 'line';
left: number;
top: number;
width: number;
height: number;
[key: string]: unknown;
}>;
background?: {
type: 'solid' | 'gradient';
color?: string;
gradient?: {
type: 'linear' | 'radial';
colors: Array<{ pos: number; color: string }>;
rotate: number;
};
};
remark?: string;
}
// ==================== Types ====================
export interface GenerationResult<T> {
success: boolean;
data?: T;
error?: string;
}
export interface GenerationCallbacks {
onProgress?: (progress: GenerationProgress) => void;
onStageComplete?: (stage: 1 | 2 | 3, result: unknown) => void;
onError?: (error: string) => void;
}
export type AICallFn = (
systemPrompt: string,
userPrompt: string,
images?: Array<{ id: string; src: string }>,
) => Promise<string>;
|