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 (
-