From cf75f2d60fddb4d551121740c2e9eef78185b1a3 Mon Sep 17 00:00:00 2001 From: huty Date: Mon, 29 Dec 2025 22:23:48 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E8=87=B3=20v0.11.0=5F2025122?= =?UTF-8?q?9=20=E7=89=88=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- App.tsx | 14 +- README.md | 182 +++++++------------ components/ChatBubble.tsx | 7 + releases/HTY1024-APP-SKR-0.11.0_20251229.zip | Bin 0 -> 98691 bytes services/geminiService.ts | 71 +++++--- views/ChatView.tsx | 50 ++++- 6 files changed, 161 insertions(+), 163 deletions(-) create mode 100644 releases/HTY1024-APP-SKR-0.11.0_20251229.zip diff --git a/App.tsx b/App.tsx index da8e26d..53c56fa 100644 --- a/App.tsx +++ b/App.tsx @@ -13,7 +13,7 @@ import ToastContainer, { ToastMessage } from './components/Toast'; import ConfirmModal from './components/ConfirmModal'; import Onboarding from './components/Onboarding'; import { MessageCircle, Palette, Mic2, Settings, Globe, Sparkles, BookOpen, Languages, Download, Upload, FileText, X, ScanText, Key, Save, Trash2, Menu, BrainCircuit, Link, Headphones, AlertTriangle, Home } from 'lucide-react'; -import { AppMode, Language, ChatMessage, TranslationRecord, AppDataBackup, Role, MessageType, ReadingLessonRecord, AVAILABLE_CHAT_MODELS, ChatSession, OCRRecord, ListeningLessonRecord } from './types'; +import { AppMode, Language, ChatMessage, TranslationRecord, AppDataBackup, Role, MessageType, ReadingLessonRecord, ChatSession, OCRRecord, ListeningLessonRecord } from './types'; import { translations } from './utils/localization'; import { USER_API_KEY_STORAGE, USER_BASE_URL_STORAGE } from './services/geminiService'; @@ -25,7 +25,6 @@ const STORAGE_KEYS = { LISTENING_HISTORY: 'sakura_listening_history', OCR_HISTORY: 'sakura_ocr_history', LANGUAGE: 'sakura_language', - SELECTED_MODEL: 'sakura_selected_model', HAS_SEEN_ONBOARDING: 'sakura_has_seen_onboarding' }; @@ -66,7 +65,6 @@ const App: React.FC = () => { const [listeningHistory, setListeningHistory] = useState(() => safeJSONParse(STORAGE_KEYS.LISTENING_HISTORY, [])); const [ocrHistory, setOcrHistory] = useState(() => safeJSONParse(STORAGE_KEYS.OCR_HISTORY, [])); - const [selectedModel, setSelectedModel] = useState(() => safeJSONParse(STORAGE_KEYS.SELECTED_MODEL, AVAILABLE_CHAT_MODELS[0].id)); const [hasSeenOnboarding, setHasSeenOnboarding] = useState(() => !!localStorage.getItem(STORAGE_KEYS.HAS_SEEN_ONBOARDING)); const [isSettingsOpen, setIsSettingsOpen] = useState(false); const [isSidebarOpen, setIsSidebarOpen] = useState(false); @@ -124,7 +122,6 @@ const App: React.FC = () => { useEffect(() => { saveToStorage(STORAGE_KEYS.LISTENING_HISTORY, listeningHistory); }, [listeningHistory]); useEffect(() => { saveToStorage(STORAGE_KEYS.OCR_HISTORY, ocrHistory); }, [ocrHistory]); useEffect(() => { saveToStorage(STORAGE_KEYS.LANGUAGE, language); }, [language]); - useEffect(() => { saveToStorage(STORAGE_KEYS.SELECTED_MODEL, selectedModel); }, [selectedModel]); useEffect(() => { // Only update welcome message if session is empty/default @@ -509,7 +506,7 @@ const App: React.FC = () => {
{currentView === AppMode.HOME && } - {currentView === AppMode.CHAT && } + {currentView === AppMode.CHAT && } {currentView === AppMode.TRANSLATION && setTranslationHistory(prev => [...prev, rec])} clearHistory={clearTranslationHistory} onDeleteHistoryItem={deleteTranslationRecord} />} {currentView === AppMode.SPEAKING && } {currentView === AppMode.CREATIVE && } @@ -542,12 +539,7 @@ const App: React.FC = () => {
-
-

{t.settings.modelTitle}

- -
+

{t.settings.backupTitle}

diff --git a/README.md b/README.md index 50b0df3..eaf7824 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,4 @@ - # Sakura Sensei 🌸 - AI Japanese Tutor ![React](https://img.shields.io/badge/React-19.0-blue?logo=react) @@ -8,7 +7,7 @@ ![Vite](https://img.shields.io/badge/Vite-5.0-purple?logo=vite) ![Tailwind CSS](https://img.shields.io/badge/Tailwind-3.4-cyan?logo=tailwindcss) -**Sakura Sensei** is an immersive, all-in-one Japanese learning platform powered by Google's latest Gemini models. It provides a personalized tutor, realistic roleplay scenarios, custom reading/listening materials, and creative tools to make learning Japanese engaging and effective. +**Sakura Sensei** is a next-generation language learning platform powered by Google's state-of-the-art **Gemini 3** and **Veo** models. It transcends traditional learning apps by offering a context-aware AI tutor, real-time pronunciation scoring, and generative media tools to create a truly immersive Japanese learning environment. [English](#english) | [日本語](#japanese) | [中文](#chinese) @@ -17,32 +16,33 @@ ## 🇬🇧 English -### ✨ Features +### ✨ Key Features -* **Tutor Dojo (Chat):** - * Free chat with Sakura (AI Tutor) using `gemini-3-pro-preview` (Reasoning) or `gemini-3-flash-preview`. - * **Voice Interaction:** Real-time Speech-to-Text (STT) and high-quality Text-to-Speech (TTS). - * **Thinking Mode:** Visualize the AI's reasoning process for complex grammar explanations. - * **Share:** Export chat history as Text, File, or Image (screenshot). -* **Reading Hall:** - * Generates custom reading lessons based on your topic and JLPT level (Beginner N5 - Advanced N1). - * Includes vocabulary lists, grammar analysis, and translations. - * **Contextual Tutor:** Ask questions specifically about the generated text. -* **Listening Lab:** - * AI-generated conversations and monologues with comprehension quizzes. - * Audio playback with speed controls and transcript toggles. -* **Roleplay (Speaking):** - * Practice realistic scenarios (Cafe, Hotel, Immigration, etc.). - * **AI Feedback:** Receive instant scoring on pronunciation, fluency, and grammar corrections. -* **Creative Atelier:** - * **Paint:** Generate images using `imagen-4.0` to visualize vocabulary. - * **Dream Video:** Generate short videos using `veo-3.1` (requires specific API access). -* **Toolbox:** - * **Scanner (OCR):** Upload or snap photos of Japanese text for instant analysis and study notes. - * **Translator:** Text and Image translation with audio support. -* **Data Management:** - * Local storage for history (Chat, Reading, Listening, OCR). - * Backup and Restore functionality (JSON). +#### 🗣️ Tutor Dojo (Context-Aware Chat) +* **Dual-Model Intelligence:** Switch instantly between **Gemini 3 Flash** (Fast & Responsive) and **Gemini 3 Pro** (Deep Reasoning) directly within the chat interface. +* **Deep Context:** The AI remembers your conversation history, allowing for natural, flowing dialogue and follow-up corrections. +* **Thinking Mode:** Visualize the AI's "thought process" as it breaks down complex grammar rules or cultural nuances before answering. +* **Multimodal Input:** Chat via text, voice (speech-to-text), or by uploading images for analysis. + +#### 🎭 Roleplay (Speaking Practice) +* **Real-world Scenarios:** Practice checking into a hotel, ordering at a konbini, or passing immigration. +* **AI Audio Feedback:** Receive instant, actionable feedback on your pronunciation, intonation, and grammar. +* **Native TTS:** High-fidelity Japanese Text-to-Speech powered by Gemini. + +#### 📜 Reading Hall & 🎧 Listening Lab +* **Custom Lesson Generation:** Generate unique reading materials and listening scripts tailored exactly to your JLPT level (N5–N1) and interests. +* **Interactive Study:** Click to translate, hear pronunciations, or ask the tutor specific questions about the generated content. +* **Comprehension Quizzes:** Test your understanding with AI-generated quizzes. + +#### 🎨 Creative Atelier +* **Visual Learning:** Generate images using **Imagen 3** to visualize vocabulary. +* **Video Immersion:** Create short, AI-generated videos using **Veo** to see cultural concepts in motion. + +#### 🧰 Toolbox +* **OCR Scanner:** Snap a photo of a textbook or menu; the AI extracts the text, translates it, and explains the grammar. +* **Smart Translator:** Context-aware translation for text and images. + +--- ### 🚀 Getting Started @@ -59,11 +59,11 @@ 3. **Set up API Key:** * Get your API key from [Google AI Studio](https://aistudio.google.com/). - * Create a `.env` file in the root directory: + * **Option A (Recommended):** Create a `.env` file in the root directory: ```env VITE_API_KEY=your_gemini_api_key_here ``` - * *Alternatively, you can enter the API Key directly in the app's Settings menu.* + * **Option B:** Enter the key directly in the app's **Settings** menu. 4. **Run the app:** ```bash @@ -72,118 +72,62 @@ ### 🛠 Tech Stack -* **Frontend:** React 19, TypeScript, Vite -* **Styling:** Tailwind CSS, Lucide React (Icons) -* **AI Integration:** `@google/genai` SDK -* **Models Used:** - * Text/Reasoning: `gemini-3-pro-preview`, `gemini-3-flash-preview` - * Audio: `gemini-2.5-flash-preview-tts` - * Vision/OCR: `gemini-3-flash-preview` - * Image Gen: `imagen-4.0-generate-001`, `gemini-2.5-flash-image` - * Video: `veo-3.1-fast-generate-preview` +* **Core:** React 19, TypeScript, Vite +* **Styling:** Tailwind CSS, Lucide React, Framer Motion-style CSS animations +* **AI SDK:** `@google/genai` +* **Models:** + * **Reasoning:** `gemini-3-pro-preview` / `gemini-3-flash-preview` + * **Speech:** `gemini-2.5-flash-preview-tts` + * **Vision:** `gemini-3-flash-preview` (OCR/Multimodal) + * **Image Generation:** `imagen-4.0-generate-001` + * **Image Editing:** `gemini-2.5-flash-image` + * **Video Generation:** `veo-3.1-fast-generate-preview` --- ## 🇯🇵 日本語 -**さくら先生**は、Googleの最新Geminiモデルを搭載した没入型の日本語学習プラットフォームです。文法解説、ロールプレイ、読解・聴解練習など、あらゆる学習ニーズに対応します。 +**さくら先生**は、Googleの最新Geminiモデル(Gemini 3 / Veo)を搭載した、没入型の日本語学習プラットフォームです。文脈を理解するAIとの会話、発音のリアルタイム分析、そして生成AIによる教材作成機能で、あなたの日本語学習を加速させます。 ### ✨ 主な機能 * **学習道場 (チャット):** - * `gemini-3-pro-preview` を活用した高度な推論能力を持つAIチューターとの会話。 - * 音声入力・音声再生対応。思考モード(Thinking Mode)でAIの考え方を可視化。 - * チャット履歴の画像共有機能。 -* **読書の間:** - * トピックと難易度(N5〜N1)を指定して、オリジナルの読み物を生成。 - * 単語リスト、文法解説、翻訳付き。テキストについてAIに質問可能。 -* **聴解ラボ:** - * リスニング練習用の会話スクリプトとクイズを自動生成。 - * 音声再生、スクリプトの表示/非表示切り替え。 + * 文脈を記憶するAIチューターと自然な会話が可能。 + * **モデル切り替え機能:** 高速な `Gemini 3 Flash` と、深い推論を行う `Gemini 3 Pro` を用途に合わせて選択可能。 + * **Thinking Mode:** 複雑な文法解説を行う際、AIの思考プロセスを可視化。 * **会話道場 (ロールプレイ):** - * カフェ、駅、入国審査などのリアルなシナリオで会話練習。 - * 発音、流暢さ、文法ミスに対する即時フィードバック機能。 + * カフェ、駅、ホテルなど、リアルな場面での会話練習。 + * 発音や文法ミスに対する即時フィードバック。 +* **読書の間 & 聴解ラボ:** + * トピックと難易度(N5〜N1)を指定して、あなただけの教材を自動生成。 + * 理解度クイズや、テキストに関する質疑応答機能付き。 * **アトリエ:** - * 画像生成 (`imagen-4.0`) や動画生成 (`veo-3.1`) で学習を視覚的にサポート。 + * `Imagen 3` による画像生成や `Veo` による動画生成で、視覚的に単語を記憶。 * **ツールボックス:** - * **スキャナー (OCR):** カメラや画像から日本語テキストを抽出し、解説を生成。 - * **翻訳機:** テキスト・画像の翻訳と音声再生。 -* **設定・データ:** - * 学習履歴のローカル保存とバックアップ/復元機能。 - -### 🚀 始め方 - -1. **リポジトリのクローン:** - ```bash - git clone https://github.com/yourusername/sakura-sensei.git - ``` - -2. **依存関係のインストール:** - ```bash - npm install - ``` - -3. **APIキーの設定:** - * [Google AI Studio](https://aistudio.google.com/) でAPIキーを取得してください。 - * `.env` ファイルを作成するか、アプリ内の「設定」メニューからキーを入力します。 - -4. **起動:** - ```bash - npm run dev - ``` + * **OCRスキャナー:** カメラで撮影した日本語テキストを瞬時に分析・解説。 --- ## 🇨🇳 中文 -**樱花老师 (Sakura Sensei)** 是一个基于 Google Gemini 模型的全能型 AI 日语学习助手。它集成了对话练习、阅读生成、听力训练和实时纠错功能,为您提供沉浸式的日语学习体验。 +**樱花老师 (Sakura Sensei)** 是一款基于 Google 最新 Gemini 3 和 Veo 模型的下一代 AI 日语学习助手。它具备上下文记忆功能,提供深度推理、发音纠正以及多模态生成工具,为您打造身临其境的日语学习体验。 ### ✨ 主要功能 -* **学习道场 (Tutor Chat):** - * 与 AI 导师自由对话,支持 `gemini-3-pro` 深度推理模式。 - * 支持语音输入 (STT) 和高质量语音朗读 (TTS)。 - * 支持将对话记录导出为图片、文本或文件。 -* **阅读室:** - * 根据您感兴趣的主题和 JLPT 等级 (N5-N1) 生成阅读文章。 - * 自动提取词汇表、语法点和翻译。支持针对文章内容的提问。 -* **听力实验室:** - * 生成包含理解测验的听力对话脚本。 - * 支持音频播放控制和脚本隐藏/显示。 -* **对话道场 (Roleplay):** - * 在真实场景(如便利店、机场、酒店)中进行角色扮演。 - * AI 会对您的发音、流利度和语法进行打分并提供建议。 +* **学习道场 (智能对话):** + * **双模型支持:** 在聊天界面直接切换 `Gemini 3 Flash` (极速) 和 `Gemini 3 Pro` (深度推理)。 + * **上下文记忆:** AI 能够记住之前的对话内容,提供连贯的辅导。 + * **思维链模式:** 可视化 AI 的思考过程,深度解析复杂语法。 +* **对话道场 (角色扮演):** + * 模拟真实场景(如便利店、机场入境),提供实时语音评分与建议。 +* **阅读室 & 听力实验室:** + * 根据您的 JLPT 等级 (N5-N1) 和兴趣,一键生成专属的阅读文章和听力测试。 * **创意工作室:** - * 使用 AI 生成图片或视频来辅助记忆单词和场景。 -* **实用工具:** - * **扫描仪 (OCR):** 拍照识别日语文本,生成学习笔记。 - * **翻译机:** 支持文本和图片翻译,带发音功能。 -* **数据隐私:** - * 所有聊天和学习记录均存储在本地浏览器中 (LocalStorage)。 - * 支持数据的备份与恢复 (JSON 格式)。 - -### 🚀 快速开始 - -1. **克隆项目:** - ```bash - git clone https://github.com/yourusername/sakura-sensei.git - ``` - -2. **安装依赖:** - ```bash - npm install - ``` - -3. **配置 API Key:** - * 前往 [Google AI Studio](https://aistudio.google.com/) 获取 Gemini API Key。 - * 在项目根目录创建 `.env` 文件,或直接在应用“设置”中输入 Key。 - -4. **运行应用:** - ```bash - npm run dev - ``` + * 利用 `Imagen` 生成助记图片,或使用 `Veo` 生成短视频辅助学习。 +* **实用工具箱:** + * **OCR 扫描:** 拍照识别日语文本,自动生成生词本和语法解析。 --- @@ -191,4 +135,4 @@ MIT License. -Powered by [Google Gemini API](https://ai.google.dev/). \ No newline at end of file +Powered by [Google Gemini API](https://ai.google.dev/). diff --git a/components/ChatBubble.tsx b/components/ChatBubble.tsx index 4f7ae98..69d9361 100644 --- a/components/ChatBubble.tsx +++ b/components/ChatBubble.tsx @@ -28,6 +28,13 @@ const ChatBubble: React.FC = ({ message, language, onUpdateMess const t = translations[language].chat; const tCommon = translations[language].common; + // Prevent rendering empty chat bubbles (e.g. initial placeholder before stream starts) + // This ensures the "thinking" loader in ChatView is the only thing shown initially + const isEmpty = !message.content?.trim() && !message.metadata?.imageUrl && !message.metadata?.audioUrl; + if (isEmpty) { + return null; + } + const stopAudio = () => { if (audioSourceRef.current) { audioSourceRef.current.stop(); diff --git a/releases/HTY1024-APP-SKR-0.11.0_20251229.zip b/releases/HTY1024-APP-SKR-0.11.0_20251229.zip new file mode 100644 index 0000000000000000000000000000000000000000..c011e7ea84b55349731f1eaf52ac65391d9bb976 GIT binary patch literal 98691 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 Vdt$^Rlp+bC|Ok|3APLx#9o- literal 0 HcmV?d00001 diff --git a/services/geminiService.ts b/services/geminiService.ts index ed7167a..90de1c9 100644 --- a/services/geminiService.ts +++ b/services/geminiService.ts @@ -1,7 +1,7 @@ import { GoogleGenAI, Modality, Type } from "@google/genai"; -import { PronunciationFeedback, Language, ReadingLesson, ReadingDifficulty, OCRAnalysis, ListeningLesson } from "../types"; +import { PronunciationFeedback, Language, ReadingLesson, ReadingDifficulty, OCRAnalysis, ListeningLesson, ChatMessage, Role, MessageType } from "../types"; import { base64ToUint8Array, uint8ArrayToBase64 } from "../utils/audioUtils"; export const USER_API_KEY_STORAGE = 'sakura_user_api_key'; @@ -118,13 +118,24 @@ class GeminiService { } } + // Helper to format history + private _formatHistory(history: ChatMessage[]): any[] { + return history + .filter(msg => (msg.type === MessageType.TEXT || msg.type === MessageType.AUDIO) && msg.content) + .map(msg => ({ + role: msg.role, + parts: [{ text: msg.content }] + })); + } + private _getChatConfig( prompt: string, imageBase64?: string, useThinking: boolean = false, language: Language = 'en', modelOverride?: string, - aiSpeakingLanguage: 'ja' | 'native' = 'native' + aiSpeakingLanguage: 'ja' | 'native' = 'native', + history: ChatMessage[] = [] ) { // Ensure model name is clean let modelName = useThinking @@ -135,20 +146,6 @@ class GeminiService { modelName = modelName.replace(/['"]/g, ''); const targetLangName = LANGUAGE_MAP[language]; - const parts: any[] = []; - - if (imageBase64) { - parts.push({ - inlineData: { - mimeType: 'image/jpeg', - data: imageBase64 - } - }); - parts.push({ text: `Analyze this image in the context of learning Japanese. Explain in ${targetLangName}: ` + prompt }); - } else { - parts.push({ text: prompt }); - } - let instruction = ""; if (aiSpeakingLanguage === 'ja') { instruction = `You are Sakura, a Japanese language tutor. @@ -164,6 +161,32 @@ class GeminiService { - Provide your explanations, translations, and feedback in ${targetLangName}.`; } + // Build contents + // 1. History + const contents = this._formatHistory(history); + + // 2. Current Turn + const currentParts: any[] = []; + + if (imageBase64) { + const cleanBase64 = imageBase64.replace(/^data:image\/\w+;base64,/, ""); + currentParts.push({ + inlineData: { + mimeType: 'image/jpeg', + data: cleanBase64 + } + }); + currentParts.push({ text: `Analyze this image in the context of learning Japanese. Explain in ${targetLangName}: ` + prompt }); + } else { + currentParts.push({ text: prompt }); + } + + // Append current turn + contents.push({ + role: 'user', + parts: currentParts + }); + const config: any = { systemInstruction: instruction, }; @@ -172,7 +195,7 @@ class GeminiService { config.thinkingConfig = { thinkingBudget: 32768 }; } - return { modelName, parts, config }; + return { modelName, contents, config }; } // 1. Text Chat Response - Returns { text, model } @@ -182,15 +205,16 @@ class GeminiService { useThinking: boolean = false, language: Language = 'en', modelOverride?: string, - aiSpeakingLanguage: 'ja' | 'native' = 'native' + aiSpeakingLanguage: 'ja' | 'native' = 'native', + history: ChatMessage[] = [] ): Promise<{ text: string, model: string }> { const ai = this.getAi(); - const { modelName, parts, config } = this._getChatConfig(prompt, imageBase64, useThinking, language, modelOverride, aiSpeakingLanguage); + const { modelName, contents, config } = this._getChatConfig(prompt, imageBase64, useThinking, language, modelOverride, aiSpeakingLanguage, history); return this.retryOperation(async () => { const response = await ai.models.generateContent({ model: modelName, - contents: { parts }, + contents: contents, config: config }); return { @@ -207,16 +231,17 @@ class GeminiService { useThinking: boolean = false, language: Language = 'en', modelOverride?: string, - aiSpeakingLanguage: 'ja' | 'native' = 'native' + aiSpeakingLanguage: 'ja' | 'native' = 'native', + history: ChatMessage[] = [] ): AsyncGenerator<{ text: string, model: string }> { const ai = this.getAi(); - const { modelName, parts, config } = this._getChatConfig(prompt, imageBase64, useThinking, language, modelOverride, aiSpeakingLanguage); + const { modelName, contents, config } = this._getChatConfig(prompt, imageBase64, useThinking, language, modelOverride, aiSpeakingLanguage, history); // Initial stream connection with retry logic const stream = await this.retryOperation(async () => { return await ai.models.generateContentStream({ model: modelName, - contents: { parts }, + contents: contents, config: config }); }); diff --git a/views/ChatView.tsx b/views/ChatView.tsx index a2d13f6..94b8a61 100644 --- a/views/ChatView.tsx +++ b/views/ChatView.tsx @@ -1,11 +1,11 @@ import React, { useState, useRef, useEffect } from 'react'; -import { ChatMessage, Role, MessageType, Language, ChatSession } from '../types'; +import { ChatMessage, Role, MessageType, Language, ChatSession, AVAILABLE_CHAT_MODELS } from '../types'; import { geminiService } from '../services/geminiService'; import ChatBubble from '../components/ChatBubble'; import AudioRecorder from '../components/AudioRecorder'; -import { Send, Image as ImageIcon, BrainCircuit, Loader2, Plus, History, MessageSquare, Trash2, X, Sparkles, PanelRightClose, PanelRightOpen, Share2, Download, FileText, Image as ImageIconLucide, Languages } from 'lucide-react'; +import { Send, Image as ImageIcon, BrainCircuit, Loader2, Plus, History, MessageSquare, Trash2, X, Sparkles, PanelRightClose, PanelRightOpen, Share2, Download, FileText, Image as ImageIconLucide, Languages, ChevronDown } from 'lucide-react'; import { translations } from '../utils/localization'; import html2canvas from 'html2canvas'; @@ -18,7 +18,6 @@ interface ChatViewProps { onDeleteSession: (id: string) => void; onClearAllSessions: () => void; onUpdateSession: (id: string, messages: ChatMessage[]) => void; - selectedModel?: string; addToast: (type: 'success' | 'error' | 'info', msg: string) => void; } @@ -31,7 +30,6 @@ const ChatView: React.FC = ({ onDeleteSession, onClearAllSessions, onUpdateSession, - selectedModel, addToast }) => { const t = translations[language].chat; @@ -45,6 +43,11 @@ const ChatView: React.FC = ({ const [useThinking, setUseThinking] = useState(false); const [attachedImage, setAttachedImage] = useState(null); + // Local Model State + const [selectedModel, setSelectedModel] = useState(() => { + return localStorage.getItem('sakura_chat_selected_model') || AVAILABLE_CHAT_MODELS[0].id; + }); + // Settings State const [aiSpeakingLanguage, setAiSpeakingLanguage] = useState<'ja' | 'native'>('ja'); const [isShareMenuOpen, setIsShareMenuOpen] = useState(false); @@ -56,6 +59,10 @@ const ChatView: React.FC = ({ const messagesContainerRef = useRef(null); const fileInputRef = useRef(null); + useEffect(() => { + localStorage.setItem('sakura_chat_selected_model', selectedModel); + }, [selectedModel]); + const scrollToBottom = () => { messagesEndRef.current?.scrollIntoView({ behavior: 'smooth' }); }; @@ -124,7 +131,8 @@ const ChatView: React.FC = ({ useThinking, language, selectedModel, - aiSpeakingLanguage + aiSpeakingLanguage, + messages // Pass history (prior to current message) ); for await (const chunk of stream) { @@ -199,7 +207,15 @@ const ChatView: React.FC = ({ // 4. Stream Response let fullText = ""; let modelUsed = ""; - const stream = geminiService.generateTextStream(transcription, undefined, false, language, selectedModel, aiSpeakingLanguage); + const stream = geminiService.generateTextStream( + transcription, + undefined, + false, + language, + selectedModel, + aiSpeakingLanguage, + messages // Pass history + ); for await (const chunk of stream) { fullText += chunk.text; @@ -393,10 +409,24 @@ const ChatView: React.FC = ({ {/* Header / Toolbar */}
-
- - {selectedModel ? selectedModel.replace('gemini-', '').replace('-preview', '') : 'AI'} -
+
+
+ + + {AVAILABLE_CHAT_MODELS.find(m => m.id === selectedModel)?.name.split('(')[0].trim() || 'Gemini'} + + + +
+
{/* AI Language Toggle */}