forked from React-Group/interstellar_ai
main #34
12 changed files with 834 additions and 502 deletions
2
.gitignore
vendored
2
.gitignore
vendored
|
@ -43,3 +43,5 @@ __pycache__/
|
|||
key.pem
|
||||
cert.pem
|
||||
api_key.txt
|
||||
|
||||
database.json
|
||||
|
|
|
@ -9,7 +9,6 @@ import { resolve } from "path";
|
|||
import { FFmpeg } from "@ffmpeg/ffmpeg";
|
||||
import { fetchFile, toBlobURL } from "@ffmpeg/util"
|
||||
|
||||
|
||||
const InputOutputBackend: React.FC = () => {
|
||||
// # variables
|
||||
type Message = {
|
||||
|
@ -42,15 +41,15 @@ const InputOutputBackend: React.FC = () => {
|
|||
content: `You are in the timezone: ${timeZone}.
|
||||
You use the time format ${timeFormat}.
|
||||
You use the date format ${dateFormat} for all references of dates.
|
||||
You use the ${preferredMeasurement} system.
|
||||
You use the ${preferredMeasurement} system.
|
||||
You use the currency ${preferredCurrency}.
|
||||
You will only answer in the language (you will receive the country code) ${preferredLanguage}.
|
||||
But in the case the user specifically states to answer in another language, do that. Speaking in
|
||||
another language is not stating you should answer in that language.
|
||||
Additionally, under no circumstances translate your answer into multiple languages.`,
|
||||
Additionally, under no circumstances ever translate your answer into multiple languages.`,
|
||||
},
|
||||
{ role: "assistant", content: "Hello! How can I help you?" },
|
||||
]);
|
||||
{ role: "assistant", content: "Hello! How may I help you?" },
|
||||
]);
|
||||
}
|
||||
}, [preferredCurrency, preferredLanguage, timeFormat, dateFormat, preferredMeasurement, timeZone]);
|
||||
|
||||
|
@ -174,7 +173,15 @@ const InputOutputBackend: React.FC = () => {
|
|||
if (postWorkerRef.current) {
|
||||
addMessage("user", inputValue)
|
||||
console.log("input:", inputValue);
|
||||
postWorkerRef.current.postMessage({ messages: [...messages, { role: "user", content: inputValue }], ai_model: "llama3.2", access_token: accessToken })
|
||||
const type = localStorage.getItem('type')
|
||||
var api_key: string = ""
|
||||
if (type != null && type != 'local') {
|
||||
const try_key = localStorage.getItem(type)
|
||||
if (try_key) {
|
||||
api_key = try_key
|
||||
}
|
||||
}
|
||||
postWorkerRef.current.postMessage({ messages: [...messages, { role: "user", content: inputValue }], ai_model: localStorage.getItem('model'), model_type: type, access_token: accessToken, api_key: api_key })
|
||||
startGetWorker()
|
||||
}
|
||||
}
|
||||
|
|
|
@ -18,27 +18,28 @@ if all went well, you will get the status 200 in response.data.status
|
|||
to check if the request was accepted or declined, check response.data.response, it will be either true or false depending on if it worked, or not.
|
||||
*/
|
||||
|
||||
export const sendToDatabase = (data: any): Promise<boolean> => {
|
||||
return axios.post("http://localhost:5000/interstellar_ai/db", data)
|
||||
.then(response => {
|
||||
const status = response.data.status;
|
||||
const success = response.data.response;
|
||||
postMessage({ status, success });
|
||||
return success; // Ensure success is returned to the caller
|
||||
})
|
||||
.catch(error => {
|
||||
postMessage({ status: 500, success: false });
|
||||
return false; // Return false in case of an error
|
||||
});
|
||||
export const sendToDatabase = async (data: any): Promise<boolean> => {
|
||||
try {
|
||||
const response = await axios.post("http://localhost:5000/interstellar_ai/db", data);
|
||||
const status = response.data.status;
|
||||
const success = response.data.response;
|
||||
postMessage({ status, success });
|
||||
console.log(status);
|
||||
return success;
|
||||
} catch (error) {
|
||||
postMessage({ status: 500, success: false });
|
||||
console.log("NO");
|
||||
return false;
|
||||
}
|
||||
};
|
||||
|
||||
// Functions for each action
|
||||
export const createAccount = async (username: string, email: string, password: string) => {
|
||||
const data = {
|
||||
action: "create_account",
|
||||
username,
|
||||
email,
|
||||
password,
|
||||
username: username,
|
||||
email: email,
|
||||
password: password,
|
||||
};
|
||||
return await sendToDatabase(data);
|
||||
};
|
||||
|
|
|
@ -1,14 +1,15 @@
|
|||
import axios from "axios";
|
||||
|
||||
onmessage = (e) => {
|
||||
const { messages, ai_model = "llama3.2", access_token } = e.data
|
||||
|
||||
const { messages, ai_model, model_type, access_token, api_key } = e.data
|
||||
|
||||
|
||||
const Message = {
|
||||
messages: messages,
|
||||
ai_model: "llama3.2",
|
||||
model_type: "local",
|
||||
access_token: access_token
|
||||
ai_model: ai_model,
|
||||
model_type: model_type,
|
||||
access_token: access_token,
|
||||
api_key: api_key
|
||||
}
|
||||
|
||||
console.log(Message);
|
||||
|
|
|
@ -6,7 +6,6 @@ export const sendToVoiceRecognition = (audio_data: Blob): Promise<string> => {
|
|||
const formdata = new FormData()
|
||||
formdata.append("audio", audio_data)
|
||||
|
||||
const dataSend = { option: "offline", type: "basic", audio: audio_data }
|
||||
return axios.post("http://localhost:5000/interstellar_ai/api/voice_recognition", formdata)
|
||||
.then((response) => {
|
||||
console.log(response.data)
|
||||
|
|
|
@ -55,9 +55,12 @@ const Login: React.FC = () => {
|
|||
const savedAccountName = localStorage.getItem('accountName');
|
||||
|
||||
// Check if savedAccountName or savedAccountEmail is not null before passing to checkCredentials
|
||||
const accountIdentifier = savedAccountName || savedAccountEmail;
|
||||
var accountIdentifier = savedAccountName || savedAccountEmail;
|
||||
if (!accountIdentifier) {
|
||||
accountIdentifier = accountName
|
||||
}
|
||||
|
||||
if (accountIdentifier && password === savedAccountPassword) {
|
||||
if (accountIdentifier && password) {
|
||||
const success = await checkCredentials(accountIdentifier, password);
|
||||
if (success) {
|
||||
setIsLoggedIn(true); // Successful login
|
||||
|
|
|
@ -240,6 +240,9 @@ const Models: React.FC = () => {
|
|||
console.log(model)
|
||||
console.log(category)
|
||||
console.log(modelList[category][model as keyof typeof modelList[typeof category]]);
|
||||
console.log(modelList[category]['model_type' as keyof typeof modelList[typeof category]])
|
||||
localStorage.setItem("model", modelList[category][model as keyof typeof modelList[typeof category]])
|
||||
localStorage.setItem("type", modelList[category]['model_type' as keyof typeof modelList[typeof category]])
|
||||
}
|
||||
|
||||
return (
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -92,5 +92,66 @@ export const applyBlackTheme = () => {
|
|||
document.documentElement.style.setProperty('--input-border-color', '#3c3c3c'); // Input border color
|
||||
document.documentElement.style.setProperty('--font-family', "'Poppins', 'sans-serif'"); // Font family
|
||||
document.documentElement.style.setProperty('--font-size', '16px'); // Font size
|
||||
document.documentElement.style.setProperty('--burger-menu-background-color', '#79832e'); // Font size
|
||||
document.documentElement.style.setProperty('--burger-menu-background-color', '# 79832e'); // Font size
|
||||
};
|
||||
|
||||
export const applyCustomTheme = () => {
|
||||
// Theme variables
|
||||
const themeVariables = {
|
||||
backgroundColor: localStorage.getItem('backgroundColor'),
|
||||
textColor: localStorage.getItem('textColor'),
|
||||
inputBackgroundColor: localStorage.getItem('inputBackgroundColor'),
|
||||
inputButtonColor: localStorage.getItem('inputButtonColor'),
|
||||
inputButtonHoverColor: localStorage.getItem('inputButtonHoverColor'),
|
||||
userMessageBackgroundColor: localStorage.getItem('userMessageBackgroundColor'),
|
||||
userMessageTextColor: localStorage.getItem('userMessageTextColor'),
|
||||
aiMessageBackgroundColor: localStorage.getItem('aiMessageBackgroundColor'),
|
||||
aiMessageTextColor: localStorage.getItem('aiMessageTextColor'),
|
||||
buttonBackgroundColor: localStorage.getItem('buttonBackgroundColor'),
|
||||
buttonHoverBackgroundColor: localStorage.getItem('buttonHoverBackgroundColor'),
|
||||
modelsBackgroundColor: localStorage.getItem('modelsBackgroundColor'),
|
||||
historyBackgroundColor: localStorage.getItem('historyBackgroundColor'),
|
||||
leftPanelBackgroundColor: localStorage.getItem('leftPanelBackgroundColor'),
|
||||
conversationBackgroundColor: localStorage.getItem('conversationBackgroundColor'),
|
||||
popUpTextColor: localStorage.getItem('popUpTextColor'),
|
||||
inputBorderColor: localStorage.getItem('inputBorderColor'),
|
||||
fontFamily: localStorage.getItem('fontFamily'),
|
||||
fontSize: localStorage.getItem('fontSize'),
|
||||
burgerMenu: localStorage.getItem('burgerMenu'),
|
||||
faqBackgroundColor: localStorage.getItem('faqBackgroundColor'),
|
||||
faqHeadingColor: localStorage.getItem('faqHeadingColor'),
|
||||
faqItemBackgroundColor: localStorage.getItem('faqItemBackgroundColor'),
|
||||
faqItemHeadingColor: localStorage.getItem('faqItemHeadingColor'),
|
||||
faqItemTextColor: localStorage.getItem('faqItemTextColor'),
|
||||
faqItemHoverBackgroundColor: localStorage.getItem('faqItemHoverBackgroundColor'),
|
||||
popupBackgroundColor: localStorage.getItem('popupBackgroundColor'),
|
||||
overlayTextColor: localStorage.getItem('overlayTextColor'),
|
||||
};
|
||||
|
||||
document.documentElement.style.setProperty('--background-color', themeVariables.backgroundColor || '#121212'); // Main background color
|
||||
document.documentElement.style.setProperty('--text-color', themeVariables.textColor || '#e0e0e0'); // Main text color
|
||||
document.documentElement.style.setProperty('--input-background-color', themeVariables.inputBackgroundColor || '#1e1e1e'); // Input fields background
|
||||
document.documentElement.style.setProperty('--input-button-color', themeVariables.inputButtonColor || '#3c3c3c'); // Button color
|
||||
document.documentElement.style.setProperty('--input-button-hover-color', themeVariables.inputButtonHoverColor || '#5a5a5a'); // Button hover color
|
||||
document.documentElement.style.setProperty('--user-message-background-color', themeVariables.userMessageBackgroundColor || '#000000'); // User messages background
|
||||
document.documentElement.style.setProperty('--user-message-text-color', themeVariables.userMessageTextColor || '#ffffff'); // User messages text color
|
||||
document.documentElement.style.setProperty('--ai-message-background-color', themeVariables.aiMessageBackgroundColor || '#202020'); // AI messages background
|
||||
document.documentElement.style.setProperty('--ai-message-text-color', themeVariables.aiMessageTextColor || '#ffffff'); // AI messages text color
|
||||
document.documentElement.style.setProperty('--button-background-color', themeVariables.buttonBackgroundColor || '#3c3c3c'); // Button background color
|
||||
document.documentElement.style.setProperty('--button-hover-background-color', themeVariables.buttonHoverBackgroundColor || '#5a5a5a'); // Button hover color
|
||||
document.documentElement.style.setProperty('--models-background-color', themeVariables.modelsBackgroundColor || '#1e1e1e'); // Models section background
|
||||
document.documentElement.style.setProperty('--history-background-color', themeVariables.historyBackgroundColor || '#1a1a1a'); // History background
|
||||
document.documentElement.style.setProperty('--left-panel-background-color', themeVariables.leftPanelBackgroundColor || '#1e1e1e'); // Left panel background
|
||||
document.documentElement.style.setProperty('--conversation-background-color', themeVariables.conversationBackgroundColor || '#2c2c2c'); // Conversation container background
|
||||
document.documentElement.style.setProperty('--faq-background-color', themeVariables.faqBackgroundColor || '#2c2c2c'); // FAQ section background
|
||||
document.documentElement.style.setProperty('--faq-heading-color', themeVariables.faqHeadingColor || '#ffffff'); // FAQ heading color
|
||||
document.documentElement.style.setProperty('--faq-item-background-color', themeVariables.faqItemBackgroundColor || '#3c3c3c'); // FAQ items background
|
||||
document.documentElement.style.setProperty('--faq-item-heading-color', themeVariables.faqItemHeadingColor || '#ffffff'); // FAQ items heading color
|
||||
document.documentElement.style.setProperty('--faq-item-text-color', themeVariables.faqItemTextColor || '#e0e0e0'); // FAQ items text color
|
||||
document.documentElement.style.setProperty('--faq-item-hover-background-color', themeVariables.faqItemHoverBackgroundColor || '#5a5a5a'); // FAQ items hover background
|
||||
document.documentElement.style.setProperty('--input-border-color', themeVariables.inputBorderColor || '#3c3c3c'); // Input border color
|
||||
document.documentElement.style.setProperty('--font-family', themeVariables.fontFamily || "'Poppins', 'sans-serif'"); // Font family
|
||||
document.documentElement.style.setProperty('--font-size', themeVariables.fontSize || '16px'); // Font size
|
||||
document.documentElement.style.setProperty('--burger-menu-background-color', themeVariables.burgerMenu || '#79832e'); // Burger menu background color
|
||||
|
||||
}
|
||||
|
|
29
app/page.tsx
29
app/page.tsx
|
@ -7,6 +7,8 @@ import Documentation from './components/Documentation'; // Ensure the import pat
|
|||
import History from './components/History';
|
||||
import Models from './components/Models';
|
||||
import Credits from './components/Credits';
|
||||
import Settings from './components/Settings';
|
||||
import { applyIOMarketTheme, applyWhiteTheme, applyBlackTheme, applyCustomTheme } from './components/theme'
|
||||
import Head from 'next/head';
|
||||
import './styles/master.css';
|
||||
|
||||
|
@ -26,6 +28,33 @@ const LandingPage: React.FC = () => {
|
|||
}
|
||||
};
|
||||
|
||||
const [selectedTheme, setSelectedTheme] = useState<string>('');
|
||||
|
||||
useEffect(() => {
|
||||
const savedTheme = localStorage.getItem('selectedTheme');
|
||||
if (savedTheme) {
|
||||
setSelectedTheme(savedTheme);
|
||||
// Apply the saved theme on initial load
|
||||
switch (savedTheme) {
|
||||
case 'IOMARKET':
|
||||
applyIOMarketTheme();
|
||||
break;
|
||||
case 'WHITE':
|
||||
applyWhiteTheme();
|
||||
break;
|
||||
case 'BLACK':
|
||||
applyBlackTheme();
|
||||
break;
|
||||
case 'CUSTOM':
|
||||
applyCustomTheme();
|
||||
break;
|
||||
default:
|
||||
applyIOMarketTheme();
|
||||
break;
|
||||
}
|
||||
}
|
||||
}, []); // Runs only once when the component mounts
|
||||
|
||||
return (
|
||||
<>
|
||||
<Header
|
||||
|
|
16
py/api.py
16
py/api.py
|
@ -89,20 +89,20 @@ class API:
|
|||
|
||||
@self.app.route('/interstellar_ai/db', methods=['POST'])
|
||||
def db_manipulate():
|
||||
action = request.args.get('action')
|
||||
data = request.args.get('data')
|
||||
sent_data = request.get_json()
|
||||
action = sent_data.get('action')
|
||||
if action == "create_account":
|
||||
return jsonify({'status': 200, 'response': self.db.add_user(data)})
|
||||
return jsonify({'status': 200, 'response': self.db.add_user(sent_data)})
|
||||
elif action == "change_password":
|
||||
return jsonify({'status': 200, 'response': self.db.update_password(data)})
|
||||
return jsonify({'status': 200, 'response': self.db.update_password(sent_data)})
|
||||
elif action == "get_data":
|
||||
return jsonify({'status': 200, 'response': self.db.get_data(data)})
|
||||
return jsonify({'status': 200, 'response': self.db.get_data(sent_data)})
|
||||
elif action == "change_data":
|
||||
return jsonify({'status': 200, 'response': self.db.change_data(data)})
|
||||
return jsonify({'status': 200, 'response': self.db.change_data(sent_data)})
|
||||
elif action == "check_credentials":
|
||||
return jsonify({'status': 200, 'response': self.db.check_credentials(data)})
|
||||
return jsonify({'status': 200, 'response': self.db.check_credentials(sent_data)})
|
||||
elif action == "delete_account":
|
||||
return jsonify({'status': 200, 'response': self.db.delete_user(data)})
|
||||
return jsonify({'status': 200, 'response': self.db.delete_user(sent_data)})
|
||||
|
||||
return jsonify({'status': 401, 'response': "Invalid action"})
|
||||
|
||||
|
|
35
py/db.py
35
py/db.py
|
@ -9,11 +9,15 @@ class DB:
|
|||
self.database = {}
|
||||
|
||||
def ensure_username(self, data):
|
||||
if hasattr(data, 'username'):
|
||||
return data.get['username']
|
||||
elif hasattr(data, 'email'):
|
||||
print(data)
|
||||
print(self.database)
|
||||
if 'username' in data:
|
||||
print("usr")
|
||||
return data.get('username')
|
||||
elif 'email' in data:
|
||||
print("email")
|
||||
for index, entry in self.database:
|
||||
if entry.get['email'] == data.get['email']:
|
||||
if entry.get('email') == data.get('email'):
|
||||
return index
|
||||
|
||||
@staticmethod
|
||||
|
@ -23,19 +27,22 @@ class DB:
|
|||
return hashed_password
|
||||
|
||||
def add_user(self, data):
|
||||
username = data.get['username']
|
||||
password = data.get['password']
|
||||
email = data.get['email']
|
||||
username = data.get('username')
|
||||
password = data.get('password')
|
||||
email = data.get('email')
|
||||
hashed_password = self.hash_password(password)
|
||||
user_data = {"hashed_password": hashed_password, "email": email, "data": None}
|
||||
if username not in self.database:
|
||||
self.database[username] = user_data
|
||||
print("yes")
|
||||
self.save_database()
|
||||
return True
|
||||
print("fail")
|
||||
return False
|
||||
|
||||
def delete_user(self, data):
|
||||
username = self.ensure_username(data)
|
||||
data = data.get['data']
|
||||
data = data.get('data')
|
||||
if not self.check_credentials(data):
|
||||
return False
|
||||
|
||||
|
@ -45,7 +52,7 @@ class DB:
|
|||
|
||||
def change_data(self, data):
|
||||
username = self.ensure_username(data)
|
||||
data = data.get['data']
|
||||
data = data.get('data')
|
||||
if not self.check_credentials(data):
|
||||
return False
|
||||
|
||||
|
@ -55,7 +62,7 @@ class DB:
|
|||
|
||||
def update_password(self, data):
|
||||
username = self.ensure_username(data)
|
||||
new_password = data.get['new_password']
|
||||
new_password = data.get('new_password')
|
||||
if not self.check_credentials(data):
|
||||
return False
|
||||
|
||||
|
@ -66,12 +73,15 @@ class DB:
|
|||
|
||||
def check_credentials(self, data):
|
||||
username = self.ensure_username(data)
|
||||
password = data.get['password']
|
||||
password = data.get('password')
|
||||
if username not in self.database:
|
||||
print("no username")
|
||||
print(username)
|
||||
return False
|
||||
|
||||
stored_hashed_password = self.database[username]["hashed_password"]
|
||||
entered_hashed_password = self.hash_password(password)
|
||||
print(stored_hashed_password == entered_hashed_password)
|
||||
return stored_hashed_password == entered_hashed_password
|
||||
|
||||
def get_data(self, data):
|
||||
|
@ -79,7 +89,7 @@ class DB:
|
|||
if not self.check_credentials(data):
|
||||
return None
|
||||
|
||||
send_back = self.database[username].get['data']
|
||||
send_back = self.database[username].get('data')
|
||||
return send_back
|
||||
|
||||
def save_database(self):
|
||||
|
@ -90,6 +100,7 @@ class DB:
|
|||
|
||||
else:
|
||||
with open("database.json", 'w') as file:
|
||||
print("saving")
|
||||
json.dump(self.database, file)
|
||||
|
||||
def load_database(self):
|
||||
|
|
Loading…
Reference in a new issue