feat: input de modelo manual para OpenRouter
This commit is contained in:
@@ -35,8 +35,10 @@ export const ApiKeySetup: React.FC<ApiKeySetupProps> = ({ onKeySave }) => {
|
|||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
const providerConfig = PROVIDERS.find(p => p.id === provider);
|
const providerConfig = PROVIDERS.find(p => p.id === provider);
|
||||||
if (providerConfig && !providerConfig.models.includes(model)) {
|
if (providerConfig && provider !== 'openrouter' && !providerConfig.models.includes(model)) {
|
||||||
setModel(providerConfig.defaultModel);
|
setModel(providerConfig.defaultModel);
|
||||||
|
} else if (provider === 'openrouter' && !model) {
|
||||||
|
setModel(providerConfig?.defaultModel || '');
|
||||||
}
|
}
|
||||||
setAvailableModels([]);
|
setAvailableModels([]);
|
||||||
setTestStatus('idle');
|
setTestStatus('idle');
|
||||||
@@ -310,7 +312,16 @@ export const ApiKeySetup: React.FC<ApiKeySetupProps> = ({ onKeySave }) => {
|
|||||||
<label htmlFor="model-selector" className="block text-xs font-semibold text-slate-500 dark:text-slate-400 uppercase tracking-wider mb-2">
|
<label htmlFor="model-selector" className="block text-xs font-semibold text-slate-500 dark:text-slate-400 uppercase tracking-wider mb-2">
|
||||||
Modelo{availableModels.length > 0 && <span className="text-green-600 ml-1">(detectado automaticamente)</span>}
|
Modelo{availableModels.length > 0 && <span className="text-green-600 ml-1">(detectado automaticamente)</span>}
|
||||||
</label>
|
</label>
|
||||||
{availableModels.length > 0 ? (
|
{provider === 'openrouter' ? (
|
||||||
|
<input
|
||||||
|
type="text"
|
||||||
|
id="model-selector"
|
||||||
|
value={model}
|
||||||
|
onChange={(e) => setModel(e.target.value)}
|
||||||
|
placeholder="Ex: google/gemini-2.5-flash"
|
||||||
|
className="block w-full rounded-xl border-slate-300 dark:border-slate-600 bg-white/50 dark:bg-slate-700/50 py-3 px-4 text-slate-900 dark:text-slate-100 shadow-sm focus:border-blue-500 focus:ring-blue-500 sm:text-sm transition-all"
|
||||||
|
/>
|
||||||
|
) : availableModels.length > 0 ? (
|
||||||
<select
|
<select
|
||||||
id="model-selector"
|
id="model-selector"
|
||||||
value={model}
|
value={model}
|
||||||
|
|||||||
@@ -245,14 +245,7 @@ const testOpenRouter = async (apiKey: string): Promise<TestResult> => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
return {
|
return {
|
||||||
success: true,
|
success: true
|
||||||
models: [
|
|
||||||
{ id: 'google/gemini-2.5-flash', name: 'Gemini 2.5 Flash' },
|
|
||||||
{ id: 'google/gemini-2.5-pro', name: 'Gemini 2.5 Pro' },
|
|
||||||
{ id: 'anthropic/claude-3.5-sonnet', name: 'Claude 3.5 Sonnet' },
|
|
||||||
{ id: 'openai/gpt-4o', name: 'GPT-4o' },
|
|
||||||
{ id: 'meta-llama/llama-3.1-70b-instruct', name: 'Llama 3.1 70B' }
|
|
||||||
]
|
|
||||||
};
|
};
|
||||||
} catch (error: any) {
|
} catch (error: any) {
|
||||||
return { success: false, error: error.message || 'Erro ao conectar com OpenRouter' };
|
return { success: false, error: error.message || 'Erro ao conectar com OpenRouter' };
|
||||||
|
|||||||
Reference in New Issue
Block a user