\"新增 支持自定义Gemini模型名称配置\"

This commit is contained in:
2025-10-20 21:40:52 +08:00
parent 2b62027842
commit 206dfbf12d
2 changed files with 33 additions and 3 deletions

View File

@@ -13,6 +13,7 @@ export const SettingsModal: React.FC<SettingsModalProps> = ({ open, onOpenChange
const [geminiApiKey, setGeminiApiKey] = useState(''); const [geminiApiKey, setGeminiApiKey] = useState('');
const [uploadApiUrl, setUploadApiUrl] = useState(''); const [uploadApiUrl, setUploadApiUrl] = useState('');
const [uploadAssetUrl, setUploadAssetUrl] = useState(''); const [uploadAssetUrl, setUploadAssetUrl] = useState('');
const [modelName, setModelName] = useState('');
// 组件挂载时从localStorage加载设置 // 组件挂载时从localStorage加载设置
useEffect(() => { useEffect(() => {
@@ -21,11 +22,13 @@ export const SettingsModal: React.FC<SettingsModalProps> = ({ open, onOpenChange
const savedGeminiApiKey = localStorage.getItem('VITE_GEMINI_API_KEY') || ''; const savedGeminiApiKey = localStorage.getItem('VITE_GEMINI_API_KEY') || '';
const savedUploadApiUrl = localStorage.getItem('VITE_UPLOAD_API') || ''; const savedUploadApiUrl = localStorage.getItem('VITE_UPLOAD_API') || '';
const savedUploadAssetUrl = localStorage.getItem('VITE_UPLOAD_ASSET_URL') || ''; const savedUploadAssetUrl = localStorage.getItem('VITE_UPLOAD_ASSET_URL') || '';
const savedModelName = localStorage.getItem('VITE_GEMINI_MODEL_NAME') || 'gemini-2.5-flash-image-preview';
setAccessToken(savedAccessToken); setAccessToken(savedAccessToken);
setGeminiApiKey(savedGeminiApiKey); setGeminiApiKey(savedGeminiApiKey);
setUploadApiUrl(savedUploadApiUrl); setUploadApiUrl(savedUploadApiUrl);
setUploadAssetUrl(savedUploadAssetUrl); setUploadAssetUrl(savedUploadAssetUrl);
setModelName(savedModelName);
} }
}, [open]); }, [open]);
@@ -55,6 +58,12 @@ export const SettingsModal: React.FC<SettingsModalProps> = ({ open, onOpenChange
localStorage.removeItem('VITE_UPLOAD_ASSET_URL'); localStorage.removeItem('VITE_UPLOAD_ASSET_URL');
} }
if (modelName) {
localStorage.setItem('VITE_GEMINI_MODEL_NAME', modelName);
} else {
localStorage.removeItem('VITE_GEMINI_MODEL_NAME');
}
// 显示保存成功的提示 // 显示保存成功的提示
alert('设置已保存!'); alert('设置已保存!');
@@ -68,11 +77,13 @@ export const SettingsModal: React.FC<SettingsModalProps> = ({ open, onOpenChange
const defaultGeminiApiKey = import.meta.env.VITE_GEMINI_API_KEY || ''; const defaultGeminiApiKey = import.meta.env.VITE_GEMINI_API_KEY || '';
const defaultUploadApiUrl = import.meta.env.VITE_UPLOAD_API || ''; const defaultUploadApiUrl = import.meta.env.VITE_UPLOAD_API || '';
const defaultUploadAssetUrl = import.meta.env.VITE_UPLOAD_ASSET_URL || ''; 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); setAccessToken(defaultAccessToken);
setGeminiApiKey(defaultGeminiApiKey); setGeminiApiKey(defaultGeminiApiKey);
setUploadApiUrl(defaultUploadApiUrl); setUploadApiUrl(defaultUploadApiUrl);
setUploadAssetUrl(defaultUploadAssetUrl); setUploadAssetUrl(defaultUploadAssetUrl);
setModelName(defaultModelName);
}; };
return ( return (
@@ -160,6 +171,23 @@ export const SettingsModal: React.FC<SettingsModalProps> = ({ open, onOpenChange
URL前缀 URL前缀
</p> </p>
</div> </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>
<div className="flex justify-between pt-4"> <div className="flex justify-between pt-4">

View File

@@ -3,6 +3,8 @@ import { GoogleGenAI } from '@google/genai'
// 注意:在生产环境中,这应该通过后端代理处理 // 注意:在生产环境中,这应该通过后端代理处理
// 优先使用localStorage中的API密钥如果没有则使用环境变量中的最后使用默认值 // 优先使用localStorage中的API密钥如果没有则使用环境变量中的最后使用默认值
const API_KEY = localStorage.getItem('VITE_GEMINI_API_KEY') || import.meta.env.VITE_GEMINI_API_KEY || 'demo-key' 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 }) const genAI = new GoogleGenAI({ apiKey: API_KEY })
export interface GenerationRequest { export interface GenerationRequest {
@@ -144,7 +146,7 @@ export class GeminiService {
contents: Array<{ text: string } | { inlineData: { mimeType: string; data: string } }> contents: Array<{ text: string } | { inlineData: { mimeType: string; data: string } }>
config?: { httpOptions: { abortSignal: AbortSignal } } config?: { httpOptions: { abortSignal: AbortSignal } }
} = { } = {
model: 'gemini-2.5-flash-image-preview', model: MODEL_NAME,
contents, contents,
} }
@@ -383,7 +385,7 @@ export class GeminiService {
contents: Array<{ text: string } | { inlineData: { mimeType: string; data: string } }> contents: Array<{ text: string } | { inlineData: { mimeType: string; data: string } }>
config?: { httpOptions: { abortSignal: AbortSignal } } config?: { httpOptions: { abortSignal: AbortSignal } }
} = { } = {
model: 'gemini-2.5-flash-image-preview', model: MODEL_NAME,
contents, contents,
} }
@@ -552,7 +554,7 @@ export class GeminiService {
contents: Array<{ text: string } | { inlineData: { mimeType: string; data: string } }> contents: Array<{ text: string } | { inlineData: { mimeType: string; data: string } }>
config?: { httpOptions: { abortSignal: AbortSignal } } config?: { httpOptions: { abortSignal: AbortSignal } }
} = { } = {
model: 'gemini-2.5-flash-image-preview', model: MODEL_NAME,
contents: prompt, contents: prompt,
} }