diff --git a/src/Pages/MainPage.jsx b/src/Pages/MainPage.jsx index dee76fd..bdcfbf2 100644 --- a/src/Pages/MainPage.jsx +++ b/src/Pages/MainPage.jsx @@ -18,6 +18,8 @@ export default function MainPage() { content: "Hi there, User can i help you with anything?", }, ]); + const [selectedModel, setSelectedModel] = useState("cosmos"); + const [apiKey, setApiKey] = useState(""); const chatContainerRef = useRef(null); useEffect(() => { if (chatContainerRef.current) { @@ -30,7 +32,10 @@ export default function MainPage() { return ( <>
- +
diff --git a/src/components/Input.jsx b/src/components/Input.jsx index 408b928..b66f559 100644 --- a/src/components/Input.jsx +++ b/src/components/Input.jsx @@ -3,7 +3,15 @@ import { useEffect, useState } from "react"; import { useRef } from "react"; import sound from "../assets/done.wav"; import axios from "axios"; -export default function input({ state, setFirstMessage, setIsLoad, btnState }) { + +export default function Input({ + state, + setFirstMessage, + setIsLoad, + btnState, + model, + apiKey, +}) { const [btnAvailable, setBtnAvailable] = btnState; const [messages, setMessages] = state; const [inputValue, setInputValue] = useState(""); @@ -24,17 +32,64 @@ export default function input({ state, setFirstMessage, setIsLoad, btnState }) { setBtnAvailable(false); try { - const response = await axios.post( - "https://api.pawan.krd/cosmosrp/v1", - { - model: "cosmosrp", - messages: newMessage, - }, - { - headers: { "Content-Type": "application/json" }, - } - ); - const data = response.data.choices[0].message.content; + let response; + switch (model) { + case "cosmos": + response = await axios.post( + "https://api.pawan.krd/cosmosrp/v1", + { + model: "cosmosrp", + messages: newMessage, + }, + { + headers: { "Content-Type": "application/json" }, + } + ); + break; + case "openrouter": + response = await axios.post( + "https://openrouter.ai/api/v1/chat/completions", + { + model: "gryphe/mythomax-l2-13b", + messages: newMessage, + }, + { + headers: { + "Content-Type": "application/json", + Authorization: `Bearer ${apiKey}`, + }, + } + ); + break; + case "gemini": + response = await axios.post( + "https://generativelanguage.googleapis.com/v1beta/models/gemini-pro:generateContent", + { + contents: newMessage + .slice(1) + .map(({ role: a, content: b, ...rest }) => ({ + role: a == "assistant" ? "model" : "user", + parts: [{ text: b }], + })), + }, + { + headers: { + "Content-Type": "application/json", + }, + params: { + key: apiKey, + }, + } + ); + break; + default: + throw new Error("Invalid model selected"); + } + + const data = + model == "gemini" + ? response.data.candidates[0].content.parts[0].text + : response.data.choices[0].message.content; setMessages([...newMessage, { role: "assistant", content: data }]); } catch (error) { console.log(error); @@ -47,6 +102,7 @@ export default function input({ state, setFirstMessage, setIsLoad, btnState }) { } } } + return (
diff --git a/src/components/Navbar.jsx b/src/components/Navbar.jsx index 68d9f7b..77370d5 100644 --- a/src/components/Navbar.jsx +++ b/src/components/Navbar.jsx @@ -1,8 +1,30 @@ import Logo from "./Logo"; -export default function Navbar() { + +export default function Navbar({ modelState, keyState }) { + const [selectedModel, setSelectedModel] = modelState; + const [apiKey, setApiKey] = keyState; + return ( -
+
+
+ + setApiKey(e.target.value)} + className="bg-secondary-100 text-white p-2 rounded-md" + /> +
); }