You've already forked Nano-Banana-AI-Image-Editor
\"新增 支持自定义Gemini模型名称配置\"
This commit is contained in:
@@ -13,6 +13,7 @@ export const SettingsModal: React.FC<SettingsModalProps> = ({ 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<SettingsModalProps> = ({ 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<SettingsModalProps> = ({ 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<SettingsModalProps> = ({ 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<SettingsModalProps> = ({ open, onOpenChange
|
||||
图像上传后返回的URL前缀
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div className="space-y-2">
|
||||
<label htmlFor="modelName" className="text-sm font-medium text-gray-700">
|
||||
模型名称
|
||||
</label>
|
||||
<input
|
||||
id="modelName"
|
||||
type="text"
|
||||
value={modelName}
|
||||
onChange={(e) => 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="输入模型名称"
|
||||
/>
|
||||
<p className="text-xs text-gray-500">
|
||||
用于AI图像生成和编辑的Google Gemini模型名称
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div className="flex justify-between pt-4">
|
||||
|
||||
@@ -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,
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user