Merge pull request 'main' (#34) from React-Group/interstellar_ai:main into main

Reviewed-on: https://interstellardevelopment.org/code/code/YasinOnm08/interstellar_ai/pulls/34
This commit is contained in:
YasinOnm08 2024-09-30 16:13:37 +02:00
commit 2650fb8205
12 changed files with 834 additions and 502 deletions

2
.gitignore vendored
View file

@ -43,3 +43,5 @@ __pycache__/
key.pem
cert.pem
api_key.txt
database.json

View file

@ -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()
}
}

View file

@ -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);
};

View file

@ -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);

View file

@ -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)

View file

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

View file

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

View file

@ -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
}

View file

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

View file

@ -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"})

View file

@ -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):