diff --git a/src/components/SettingsModal.tsx b/src/components/SettingsModal.tsx
index 1942c8a..19f6daa 100644
--- a/src/components/SettingsModal.tsx
+++ b/src/components/SettingsModal.tsx
@@ -13,6 +13,7 @@ export const SettingsModal: React.FC = ({ open, onOpenChange
const [geminiApiKey, setGeminiApiKey] = useState('');
const [uploadApiUrl, setUploadApiUrl] = useState('');
const [uploadAssetUrl, setUploadAssetUrl] = useState('');
+ const [modelName, setModelName] = useState('');
// 组件挂载时从localStorage加载设置
useEffect(() => {
@@ -21,11 +22,13 @@ export const SettingsModal: React.FC = ({ open, onOpenChange
const savedGeminiApiKey = localStorage.getItem('VITE_GEMINI_API_KEY') || '';
const savedUploadApiUrl = localStorage.getItem('VITE_UPLOAD_API') || '';
const savedUploadAssetUrl = localStorage.getItem('VITE_UPLOAD_ASSET_URL') || '';
+ const savedModelName = localStorage.getItem('VITE_GEMINI_MODEL_NAME') || 'gemini-2.5-flash-image-preview';
setAccessToken(savedAccessToken);
setGeminiApiKey(savedGeminiApiKey);
setUploadApiUrl(savedUploadApiUrl);
setUploadAssetUrl(savedUploadAssetUrl);
+ setModelName(savedModelName);
}
}, [open]);
@@ -55,6 +58,12 @@ export const SettingsModal: React.FC = ({ open, onOpenChange
localStorage.removeItem('VITE_UPLOAD_ASSET_URL');
}
+ if (modelName) {
+ localStorage.setItem('VITE_GEMINI_MODEL_NAME', modelName);
+ } else {
+ localStorage.removeItem('VITE_GEMINI_MODEL_NAME');
+ }
+
// 显示保存成功的提示
alert('设置已保存!');
@@ -68,11 +77,13 @@ export const SettingsModal: React.FC = ({ open, onOpenChange
const defaultGeminiApiKey = import.meta.env.VITE_GEMINI_API_KEY || '';
const defaultUploadApiUrl = import.meta.env.VITE_UPLOAD_API || '';
const defaultUploadAssetUrl = import.meta.env.VITE_UPLOAD_ASSET_URL || '';
+ const defaultModelName = import.meta.env.VITE_GEMINI_MODEL_NAME || 'gemini-2.5-flash-image-preview';
setAccessToken(defaultAccessToken);
setGeminiApiKey(defaultGeminiApiKey);
setUploadApiUrl(defaultUploadApiUrl);
setUploadAssetUrl(defaultUploadAssetUrl);
+ setModelName(defaultModelName);
};
return (
@@ -160,6 +171,23 @@ export const SettingsModal: React.FC = ({ open, onOpenChange
图像上传后返回的URL前缀
+
+
+
+
setModelName(e.target.value)}
+ className="w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-yellow-500 focus:border-transparent"
+ placeholder="输入模型名称"
+ />
+
+ 用于AI图像生成和编辑的Google Gemini模型名称
+
+
diff --git a/src/services/geminiService.ts b/src/services/geminiService.ts
index 6c960c5..f3c57d8 100644
--- a/src/services/geminiService.ts
+++ b/src/services/geminiService.ts
@@ -3,6 +3,8 @@ import { GoogleGenAI } from '@google/genai'
// 注意:在生产环境中,这应该通过后端代理处理
// 优先使用localStorage中的API密钥,如果没有则使用环境变量中的,最后使用默认值
const API_KEY = localStorage.getItem('VITE_GEMINI_API_KEY') || import.meta.env.VITE_GEMINI_API_KEY || 'demo-key'
+// 优先使用localStorage中的模型名称,如果没有则使用环境变量中的,最后使用默认值
+const MODEL_NAME = localStorage.getItem('VITE_GEMINI_MODEL_NAME') || import.meta.env.VITE_GEMINI_MODEL_NAME || 'gemini-2.5-flash-image-preview'
const genAI = new GoogleGenAI({ apiKey: API_KEY })
export interface GenerationRequest {
@@ -144,7 +146,7 @@ export class GeminiService {
contents: Array<{ text: string } | { inlineData: { mimeType: string; data: string } }>
config?: { httpOptions: { abortSignal: AbortSignal } }
} = {
- model: 'gemini-2.5-flash-image-preview',
+ model: MODEL_NAME,
contents,
}
@@ -383,7 +385,7 @@ export class GeminiService {
contents: Array<{ text: string } | { inlineData: { mimeType: string; data: string } }>
config?: { httpOptions: { abortSignal: AbortSignal } }
} = {
- model: 'gemini-2.5-flash-image-preview',
+ model: MODEL_NAME,
contents,
}
@@ -552,7 +554,7 @@ export class GeminiService {
contents: Array<{ text: string } | { inlineData: { mimeType: string; data: string } }>
config?: { httpOptions: { abortSignal: AbortSignal } }
} = {
- model: 'gemini-2.5-flash-image-preview',
+ model: MODEL_NAME,
contents: prompt,
}