import React, { useState, useRef } from 'react';
import { useNavigate } from 'react-router-dom';
import Box from '@mui/material/Box';
import Slider from '@mui/material/Slider';
import Stack from '@mui/material/Stack';
import Button from '@mui/material/Button';
import IconButton from '@mui/material/IconButton';
import './IntialSetting.css';
import { FaTimes, FaEye, FaEyeSlash } from 'react-icons/fa';
function IntialSetting(props) {
// State variables for form controls
const [selectedProvider, setSelectedProvider] = useState("OpenAI");
const [modelTemperature, setModelTemperature] = useState(0.0);
const [modelTopP, setModelTopP] = useState(1.0);
const [showPassword, setShowPassword] = useState(false);
// Ref for the form and navigation hook
const formRef = useRef(null);
const navigate = useNavigate();
// Model options for different providers
const modelOptions = {
OpenAI: {
"GPT-4 Turbo": "gpt-4-turbo",
"GPT-4o": "gpt-4o",
"GPT-4o Latest": "gpt-4o-2024-11-20",
"GPT-4o Mini": "gpt-4o-mini",
"ChatGPT": "chatgpt-4o-latest",
},
Anthropic: {
"Claude 3.5 Sonnet": "claude-3-5-sonnet-20241022",
"Claude 3.5 Haiku": "claude-3-5-haiku-20241022",
"Claude 3 Opus": "claude-3-opus-20240229",
"Claude 3 Sonnet": "claude-3-sonnet-20240229",
"Claude 3 Haiku": "claude-3-haiku-20240307",
},
Google: {
"Gemini 1.5 Pro": "gemini-1.5-pro",
"Gemini 1.5 Flash": "gemini-1.5-flash",
"Gemini 2.0 Flash Lite": "gemini-2.0-flash-lite-preview-02-05",
"Gemini 2.0 Flash Experimental": "gemini-2.0-flash-exp",
"Gemini 2.0 Flash": "gemini-2.0-flash",
"Gemini 2.0 Pro Experimental": "gemini-2.0-pro-exp-02-05",
},
XAI: {
"Grok-2": "grok-2-latest",
"Grok Beta": "grok-beta",
},
};
// Reset form and state variables
const handleReset = (e) => {
e.preventDefault();
if (formRef.current) {
formRef.current.reset();
}
setSelectedProvider("OpenAI");
setModelTemperature(0.0);
setModelTopP(1.0);
};
// Handle form submission and save settings
const handleSave = async (e) => {
e.preventDefault();
const form = formRef.current;
// Retrieve form values
const modelProvider = form.elements["model-provider"].value;
const modelName = form.elements["model-name"].value;
const modelAPIKeys = form.elements["model-api"].value;
const braveAPIKey = form.elements["brave-api"].value;
const proxyList = form.elements["proxy-list"].value;
// Check for missing required fields
const missingFields = [];
if (!modelProvider || modelProvider.trim() === "") missingFields.push("Model Provider");
if (!modelName || modelName.trim() === "") missingFields.push("Model Name");
if (!modelAPIKeys || modelAPIKeys.trim() === "") missingFields.push("Model API Key");
if (!braveAPIKey || braveAPIKey.trim() === "") missingFields.push("Brave Search API Key");
if (missingFields.length > 0) {
props.openSnackbar(
"Please fill in the following required fields: " + missingFields.join(", "),
"error"
);
return;
}
// Build payload for backend
const payload = {
"Model_Provider": modelProvider.toLowerCase(),
"Model_Name": modelName,
"Model_API_Keys": modelAPIKeys,
"Brave_Search_API_Key": braveAPIKey,
"Model_Temperature": modelTemperature,
"Model_Top_P": modelTopP,
};
if (proxyList && proxyList.trim() !== "") {
payload["Proxy_List"] = proxyList;
}
// Show appropriate notification based on context
if (props.fromAiPage) {
props.openSnackbar(