172 lines
4.1 KiB
TypeScript
172 lines
4.1 KiB
TypeScript
|
|
|
|
export enum Role {
|
|
USER = 'user',
|
|
MODEL = 'model',
|
|
}
|
|
|
|
export enum MessageType {
|
|
TEXT = 'text',
|
|
AUDIO = 'audio',
|
|
IMAGE = 'image',
|
|
VIDEO = 'video',
|
|
}
|
|
|
|
export interface ChatMessage {
|
|
id: string;
|
|
role: Role;
|
|
type: MessageType;
|
|
content: string; // Text content or base64/url for media
|
|
model?: string; // Model used for generation
|
|
metadata?: {
|
|
isThinking?: boolean;
|
|
audioUrl?: string; // For TTS playback or User recording
|
|
imageUrl?: string;
|
|
videoUrl?: string;
|
|
transcription?: string; // For audio inputs
|
|
};
|
|
timestamp: number;
|
|
}
|
|
|
|
// New Interface for Chat Sessions
|
|
export interface ChatSession {
|
|
id: string;
|
|
title: string;
|
|
messages: ChatMessage[];
|
|
createdAt: number;
|
|
updatedAt: number;
|
|
}
|
|
|
|
export enum AppMode {
|
|
CHAT = 'chat',
|
|
READING = 'reading',
|
|
LISTENING = 'listening', // New Listening Mode
|
|
SPEAKING = 'speaking',
|
|
CREATIVE = 'creative',
|
|
TRANSLATION = 'translation',
|
|
OCR = 'ocr',
|
|
}
|
|
|
|
export type Language = 'en' | 'ja' | 'zh';
|
|
|
|
// Specific Gemini Models
|
|
export enum ModelNames {
|
|
TEXT_FAST = 'gemini-2.5-flash',
|
|
TEXT_REASONING = 'gemini-3-pro-preview',
|
|
TTS = 'gemini-2.5-flash-preview-tts',
|
|
IMAGE_GEN = 'imagen-4.0-generate-001',
|
|
IMAGE_EDIT = 'gemini-2.5-flash-image', // Nano Banana
|
|
VIDEO_GEN = 'veo-3.1-fast-generate-preview',
|
|
TRANSCRIPTION = 'gemini-2.5-flash',
|
|
}
|
|
|
|
export const AVAILABLE_CHAT_MODELS = [
|
|
{ id: 'gemini-3-pro-preview', name: 'Gemini 3 Pro (Default - Best Reasoning)' },
|
|
{ id: 'gemini-2.5-flash', name: 'Gemini 2.5 Flash (Fast & Balanced)' }
|
|
];
|
|
|
|
// Speaking Mode Types
|
|
export interface PronunciationFeedback {
|
|
score: number; // 0-100
|
|
transcription: string;
|
|
response: string; // AI Reply in Japanese
|
|
translation: string; // AI Reply in English/Native Lang
|
|
pronunciationIssues: string[]; // List of specific phoneme/pitch errors
|
|
advice: string; // General advice
|
|
}
|
|
|
|
export interface Scenario {
|
|
id: string;
|
|
title: string;
|
|
icon: string;
|
|
description: string;
|
|
initialMessage: string; // What AI says first
|
|
initialTranslation?: string; // Translation of initial message
|
|
role: string; // Who the AI is
|
|
}
|
|
|
|
// Reading Mode Types
|
|
export enum ReadingDifficulty {
|
|
BEGINNER = 'beginner', // N5/N4
|
|
INTERMEDIATE = 'intermediate', // N3/N2
|
|
ADVANCED = 'advanced', // N1+
|
|
}
|
|
|
|
export interface ReadingLesson {
|
|
title: string;
|
|
japaneseContent: string;
|
|
translation: string;
|
|
vocabulary: { word: string; reading: string; meaning: string }[];
|
|
grammarPoints?: { point: string; explanation: string }[];
|
|
}
|
|
|
|
export interface ReadingLessonRecord extends ReadingLesson {
|
|
id: string;
|
|
topic: string;
|
|
difficulty: ReadingDifficulty;
|
|
timestamp: number;
|
|
chatHistory?: ChatMessage[]; // Persist tutor chat
|
|
}
|
|
|
|
// Listening Mode Types
|
|
export interface QuizQuestion {
|
|
id: string;
|
|
question: string;
|
|
options: string[];
|
|
correctIndex: number;
|
|
explanation: string;
|
|
}
|
|
|
|
export interface ListeningLesson {
|
|
title: string;
|
|
script: string; // The full Japanese text (initially hidden)
|
|
translation: string;
|
|
vocabulary: { word: string; reading: string; meaning: string }[];
|
|
questions: QuizQuestion[];
|
|
}
|
|
|
|
export interface ListeningLessonRecord extends ListeningLesson {
|
|
id: string;
|
|
topic: string;
|
|
difficulty: ReadingDifficulty;
|
|
timestamp: number;
|
|
chatHistory?: ChatMessage[];
|
|
}
|
|
|
|
// OCR Mode Types
|
|
export interface OCRAnalysis {
|
|
extractedText: string;
|
|
detectedLanguage: string;
|
|
summary: string;
|
|
vocabulary: { word: string; reading: string; meaning: string }[];
|
|
grammarPoints: { point: string; explanation: string }[];
|
|
}
|
|
|
|
export interface OCRRecord {
|
|
id: string;
|
|
timestamp: number;
|
|
imagePreview: string;
|
|
analysis: OCRAnalysis;
|
|
}
|
|
|
|
// Translation Mode Types
|
|
export interface TranslationRecord {
|
|
id: string;
|
|
sourceText: string;
|
|
targetText: string;
|
|
sourceLang: string; // e.g. 'Detected Language' or 'English'
|
|
targetLang: string; // e.g. 'Japanese'
|
|
timestamp: number;
|
|
}
|
|
|
|
// Backup Data Type
|
|
export interface AppDataBackup {
|
|
version: number;
|
|
createdAt: number;
|
|
language: Language;
|
|
chatSessions: ChatSession[];
|
|
translationHistory: TranslationRecord[];
|
|
readingHistory?: ReadingLessonRecord[];
|
|
ocrHistory?: OCRRecord[];
|
|
listeningHistory?: ListeningLessonRecord[];
|
|
} |