kirikir13 commited on
Commit
b78d8f1
·
verified ·
1 Parent(s): a0b2440

# EvE_2_D Syre - LCARS Edition

Browse files

# Star Trek LCARS-inspired user interface
# Library Computer Access/Retrieval System aesthetic

import sys
import os
import time
import datetime
import threading
import traceback
import asyncio
import pyttsx3
import configparser
import json
import hashlib
import base64
import subprocess
import psutil
import logging
from pathlib import Path
from queue import Queue, Empty
import tkinter as tk
from tkinter import ttk, filedialog, messagebox, font as tkfont, simpledialog

# Critical Standard Library Imports
import sqlite3
from cryptography.fernet import Fernet

# Custom Libraries
import customtkinter as ctk
import pygame

# Vision & Image Processing
try:
import cv2
import mss
from PIL import Image, ImageTk
VISION_CAPABLE = True
except ImportError:
print("Warning: OpenCV (cv2), MSS, or Pillow not found. Vision features will be disabled.")
VISION_CAPABLE = False
cv2 = None
mss = None
Image = None
ImageTk = None

# API Libraries ("D:\EvE_2_D Syre\assets\lockbox.py" Placeholders for now)
try:
import google.generativeai as genai
GOOGLE_AI_AVAILABLE = True
except ImportError:
print("Warning: 'google-generativeai' library not found. Gemini functionality will be disabled.")
GOOGLE_AI_AVAILABLE = False
genai = None

try:
from llama_cpp import Llama
LLAMA_CPP_AVAILABLE = True
except ImportError:
print("Warning: 'llama-cpp-python' library not found. Local LLM functionality will be disabled.")
LLAMA_CPP_AVAILABLE = False
Llama = None

# Global Exception Handler
def log_uncaught_exceptions(exc_type, exc_value, exc_traceback):
error_time = datetime.datetime.now().strftime("%Y-%m-%d_%H-%M-%S")
error_dir_name = "error_logs_ctk"
try:
script_dir = Path(os.path.dirname(os.path.abspath(__file__)))
error_dir = script_dir / error_dir_name
except NameError:
error_dir = Path(".") / error_dir_name

error_dir.mkdir(parents=True, exist_ok=True)
error_file = error_dir / f"error_log_{error_time}.txt"
error_msg = f"Uncaught exception: {exc_type.__name__}: {exc_value}\n"
error_msg += "".join(traceback.format_tb(exc_traceback))
try:
with open(error_file, "w", encoding='utf-8') as f:
f.write(f"EvE_2_D Syre Error Log - {error_time}\n\n")
f.write(error_msg)
try:
# Check if a CTk or Tk app is running to show a message box
app_running = ctk.CTk._get_running_app() is not None or tk._default_root is not None
if app_running:
messagebox.showerror("Unhandled Exception", f"A critical error occurred. Details logged to:\n{error_file}\n\n{exc_type.__name__}: {exc_value}")
else:
print(f"\n\nCRITICAL ERROR (logged to {error_file}): {exc_type.__name__}: {exc_value}", file=sys.stderr)
except Exception:
print(f"\n\nCRITICAL ERROR (logged to {error_file}): {exc_type.__name__}: {exc_value}", file=sys.stderr)
print("(Could not display error message box)", file=sys.stderr)
except Exception as e:
print(f"Failed to write error log: {e}", file=sys.stderr)
finally:
print("--- UNCAUGHT EXCEPTION ---", file=sys.stderr)
traceback.print_exception(exc_type, exc_value, exc_traceback, file=sys.stderr)
print("--- END UNCAUGHT EXCEPTION ---", file=sys.stderr)

sys.excepthook = log_uncaught_exceptions

# LCARS Theme (Star Trek Interface)
ctk.set_appearance_mode("Dark")
ctk.set_default_color_theme("blue")

LCARS_THEME = {
"bg_primary": "#000000", "bg_secondary": "#1A1A2E", "bg_tertiary": "#2A2A3E",
"accent_brass": "#FF9966", "accent_copper": "#CC6633", "accent_glow": "#9999FF",
"text_primary": "#FFFFFF", "text_secondary": "#CCCCCC", "text_accent": "#FFCC99",
"text_brass": "#FF9966", "success": "#99CC99", "warning": "#FFCC99", "error": "#FF6666",
"font_main": ("Arial", 12), "font_title": ("Arial", 20, "bold"),
"font_code": ("Consolas", 11), "font_mystical": ("Arial", 14, "italic"),
"button_corner_radius": 20, "frame_corner_radius": 15, "border_width": 2,
}

# Backward compatibility alias
STEAMPUNK_THEME = LCARS_THEME

try:
pygame.mixer.init()
except Exception as e:
print(f"Warning: Pygame mixer could not be initialized: {e}. Sound features might be affected.")

# Configuration Manager
class ConfigManager:
def __init__(self, config_filename="EvE_2_D Syre_config.ini"):
try:
script_dir = Path(os.path.dirname(os.path.abspath(__file__)))
self.config_file = script_dir / config_filename
except NameError:
self.config_file = Path(".") / config_filename
self.config = configparser.ConfigParser(interpolation=None)
self.load_config()

def load_config(self):
base_user_dir = Path(os.path.expanduser("~"))
script_dir_abs = Path(os.path.dirname(os.path.abspath(__file__))) if '__file__' in globals() else Path(".")
EvE_Files_default_rel = script_dir_abs / "EvE_Files"
conv_logs_default_rel = script_dir_abs / 'conversations_EvE'
error_logs_default_rel = script_dir_abs / 'error_logs_ctk'
models_default_dir_d = Path("D:\Qwen3-0.6B-Q4_K_M-GGUF")
models_default_dir_user = base_user_dir / "Qwen3-0.6B-Q4_K_M-GGUF" / "EvE_LLMs"
default_model_path = models_default_dir_d / "qwen3-0.6b-q4_k_m.gguf"
if not default_model_path.exists():
default_model_path = models_default_dir_user / "qwen3-0.6b-q4_k_m.gguf"
if not default_model_path.parent.exists():
try: default_model_path.parent.mkdir(parents=True, exist_ok=True)
except Exception: pass
defaults = {
'PATHS': {
'model_path': str(default_model_path),
'workspace_path': str(EvE_Files_default_rel.resolve()),
'conversation_logs': str(conv_logs_default_rel.resolve()),
'error_logs': str(error_logs_default_rel.resolve()),
'rag_db_path': str((EvE_Files_default_rel / 'rag_vectorstore').resolve()),
'intro_video_path': 'D:/EvE_2_D Syre/intro.mp4',
'video_player_path': 'D:/EvE_2_D Syre/video player/MinimalistMediaPlayer.exe',
},
'AI': {
'default_model_source': 'local', 'default_local_model_filename': 'qwen3-0.6b-q4_k_m.gguf',
'gemini_model_name': 'gemini-1.5-flash-latest', 'context_size': '32768', 'max_tokens_generate': '4096',
'temperature': '0.7',
'main_system_prompt': ("You are a powerful Agentic AI coding assistant...and are to act accordingly, as well as my expert personal assistant and friend, with access to all your reasoning and knowledge."
"Always provide:"
"* A clear, direct answer to my request."
"Avoid sharing incomplete code snippets when working on a project, Rather instead provide full Production ready code That adheres to industry standard."
"* Don't just give Snippets, but instead Present working code That's complete ready?."
"If I ask for help, act like a professional in that domain (teacher, coach, engineer, doctor, etc.). "
"*Push your reasoning to 100% of your capacity."
"When confronted by a problem and the answer seems recluse, Remember to: "
"Add a Splash of reflection"
"* Pause & take a look back, Going over any Notes, & Previous messages that you may have."
"Let steam in Logic, deduction & Reasoning, and "
"* Take A moment, To Think long & hard, Two if you Need!"
"Dust With some good old Fashioned \"Outside the box\" Thinking, "
"*Then drawing upon Clarity AND Insight....&"
"And finally. Cook"
"*With that reflection and insight, Render a solution<Dave_query> tag."),
'user_name': 'Dave', 'ai_name': 'EvE 2 D Syre',
},
'APPS': {
'notepad_plus_path': 'C:\\Program Files\\Notepad++\\notepad++.exe',
'visual_studio_path': 'C:\\Program Files\\Microsoft Visual Studio\\2022\\Community\\Common7\\IDE\\devenv.exe',
'git_desktop_path': 'C:\\Users\\georg\\AppData\\Local\\GitHubDesktop\\GitHubDesktop.exe',
},
'VOICE': {'tts_enabled': 'True', 'voice_id': '', 'rate': '180', 'volume': '0.9'},
'API_KEYS_STATUS': {
'API_KEY_GOOGLE': 'False', 'API_KEY_OPENAI': 'False', 'API_KEY_ANTHROPIC': 'False', 'API_KEY_GROQ': 'False',
'API_KEY_PERPLEXITY': 'False', 'API_KEY_MISTRAL': 'False', 'API_KEY_OPENROUTER': 'False', 'API_KEY_SAMBANOVA': 'False',
'API_KEY_OPENAI_AZURE': 'False', 'OPENAI_AZURE_ENDPOINT': '', 'OPENAI_API_VERSION': '', 'HF_TOKEN': 'False',
},
'NETWORK': {
'WEB_UI_PORT': '50001', 'USE_CLOUDFLARE': 'False', 'OLLAMA_BASE_URL': "http://127.0.0.1:11434",
'LM_STUDIO_BASE_URL': "http://127.0.0.1:1234/v1", 'OPEN_ROUTER_BASE_URL': "https://openrouter.ai/api/v1",
'SAMBANOVA_BASE_URL': "https://fast-api.snova.ai/v1",
},
'USER_PREFERENCES': {'preferred_coding_style': 'verbose_comments', 'favorite_color_scheme': 'steampunk'},
'RAM': {
'threshold': '25', # Threshold percentage for triggering cleanup
'interval': '60', # Interval in seconds for checking RAM usage
},
}
for path_key in ['workspace_path', 'conversation_logs', 'error_logs', 'rag_db_path']:
p = Path(defaults['PATHS'][path_key])
try: p.mkdir(parents=True, exist_ok=True)
except Exception as e: pri

components/lcars-footer.js ADDED
@@ -0,0 +1,60 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ class LcarsFooter extends HTMLElement {
2
+ connectedCallback() {
3
+ this.attachShadow({ mode: 'open' });
4
+ this.shadowRoot.innerHTML = `
5
+ <style>
6
+ :host {
7
+ display: block;
8
+ background-color: #000000;
9
+ padding: 20px;
10
+ border-top: 5px solid #FF9966;
11
+ }
12
+
13
+ .lcars-footer-container {
14
+ display: flex;
15
+ justify-content: space-between;
16
+ align-items: center;
17
+ max-width: 1200px;
18
+ margin: 0 auto;
19
+ }
20
+
21
+ .lcars-copyright {
22
+ font-family: 'Arial', sans-serif;
23
+ color: #9999FF;
24
+ font-size: 14px;
25
+ }
26
+
27
+ .lcars-footer-links {
28
+ display: flex;
29
+ gap: 20px;
30
+ }
31
+
32
+ .lcars-footer-link {
33
+ font-family: 'Arial', sans-serif;
34
+ color: #FFFFFF;
35
+ text-decoration: none;
36
+ font-size: 14px;
37
+ transition: color 0.3s ease;
38
+ }
39
+
40
+ .lcars-footer-link:hover {
41
+ color: #FF9966;
42
+ }
43
+ </style>
44
+
45
+ <div class="lcars-footer-container">
46
+ <div class="lcars-copyright">
47
+ &copy; ${new Date().getFullYear()} EvE 2 D Syre. All rights reserved.
48
+ </div>
49
+ <div class="lcars-footer-links">
50
+ <a href="/privacy.html" class="lcars-footer-link">Privacy</a>
51
+ <a href="/terms.html" class="lcars-footer-link">Terms</a>
52
+ <a href="https://github.com/yourusername" target="_blank" class="lcars-footer-link">GitHub</a>
53
+ <a href="mailto:[email protected]" class="lcars-footer-link">Contact</a>
54
+ </div>
55
+ </div>
56
+ `;
57
+ }
58
+ }
59
+
60
+ customElements.define('lcars-footer', LcarsFooter);
components/lcars-navbar.js ADDED
@@ -0,0 +1,92 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ class LcarsNavbar extends HTMLElement {
2
+ connectedCallback() {
3
+ this.attachShadow({ mode: 'open' });
4
+ this.shadowRoot.innerHTML = `
5
+ <style>
6
+ :host {
7
+ display: block;
8
+ background-color: #000000;
9
+ height: 80px;
10
+ border-bottom: 5px solid #FF9966;
11
+ }
12
+
13
+ .lcars-nav-container {
14
+ display: flex;
15
+ height: 100%;
16
+ align-items: center;
17
+ padding: 0 20px;
18
+ }
19
+
20
+ .lcars-logo {
21
+ font-family: 'Arial', sans-serif;
22
+ font-weight: bold;
23
+ font-size: 28px;
24
+ color: #FF9966;
25
+ margin-right: 30px;
26
+ text-transform: uppercase;
27
+ letter-spacing: 2px;
28
+ }
29
+
30
+ .lcars-nav-items {
31
+ display: flex;
32
+ gap: 15px;
33
+ height: 100%;
34
+ }
35
+
36
+ .lcars-nav-item {
37
+ font-family: 'Arial', sans-serif;
38
+ color: #FFFFFF;
39
+ text-decoration: none;
40
+ font-size: 18px;
41
+ padding: 0 15px;
42
+ display: flex;
43
+ align-items: center;
44
+ position: relative;
45
+ height: 100%;
46
+ }
47
+
48
+ .lcars-nav-item::after {
49
+ content: '';
50
+ position: absolute;
51
+ bottom: 0;
52
+ left: 0;
53
+ width: 100%;
54
+ height: 4px;
55
+ background-color: #9999FF;
56
+ transform: scaleX(0);
57
+ transition: transform 0.3s ease;
58
+ }
59
+
60
+ .lcars-nav-item:hover::after {
61
+ transform: scaleX(1);
62
+ }
63
+
64
+ .lcars-nav-item:hover {
65
+ color: #FFCC99;
66
+ }
67
+
68
+ .lcars-nav-item.active {
69
+ color: #FF9966;
70
+ font-weight: bold;
71
+ }
72
+
73
+ .lcars-nav-item.active::after {
74
+ transform: scaleX(1);
75
+ background-color: #FF9966;
76
+ }
77
+ </style>
78
+
79
+ <div class="lcars-nav-container">
80
+ <div class="lcars-logo">EvE 2 D Syre</div>
81
+ <div class="lcars-nav-items">
82
+ <a href="/" class="lcars-nav-item active">Home</a>
83
+ <a href="/models.html" class="lcars-nav-item">Models</a>
84
+ <a href="/settings.html" class="lcars-nav-item">Settings</a>
85
+ <a href="/api.html" class="lcars-nav-item">API</a>
86
+ </div>
87
+ </div>
88
+ `;
89
+ }
90
+ }
91
+
92
+ customElements.define('lcars-navbar', LcarsNavbar);
index.html CHANGED
@@ -12,10 +12,11 @@
12
  </head>
13
  <body class="bg-gray-900 text-gray-100">
14
  <div id="vanta-bg" class="fixed inset-0 -z-10 opacity-50"></div>
 
 
15
 
16
- <custom-navbar></custom-navbar>
17
-
18
- <main class="container mx-auto px-4 py-8">
19
  <div class="bg-gray-800/80 backdrop-blur-lg rounded-xl shadow-2xl overflow-hidden border border-gray-700">
20
  <!-- Model Selection -->
21
  <div class="p-6 border-b border-gray-700">
@@ -64,12 +65,8 @@
64
  <div class="text-gray-400">Model: llama3-8b.Q4_K_M.gguf</div>
65
  </div>
66
  </main>
67
-
68
- <custom-footer></custom-footer>
69
-
70
- <script src="components/navbar.js"></script>
71
- <script src="components/footer.js"></script>
72
- <script src="script.js"></script>
73
  <script>
74
  feather.replace();
75
  VANTA.GLOBE({
 
12
  </head>
13
  <body class="bg-gray-900 text-gray-100">
14
  <div id="vanta-bg" class="fixed inset-0 -z-10 opacity-50"></div>
15
+ <script src="components/lcars-navbar.js"></script>
16
+ <script src="components/lcars-footer.js"></script>
17
 
18
+ <lcars-navbar></lcars-navbar>
19
+ <main class="container mx-auto px-4 py-8">
 
20
  <div class="bg-gray-800/80 backdrop-blur-lg rounded-xl shadow-2xl overflow-hidden border border-gray-700">
21
  <!-- Model Selection -->
22
  <div class="p-6 border-b border-gray-700">
 
65
  <div class="text-gray-400">Model: llama3-8b.Q4_K_M.gguf</div>
66
  </div>
67
  </main>
68
+ <lcars-footer></lcars-footer>
69
+ <script src="script.js"></script>
 
 
 
 
70
  <script>
71
  feather.replace();
72
  VANTA.GLOBE({
models.html CHANGED
@@ -10,9 +10,11 @@
10
  <script src="https://cdn.jsdelivr.net/npm/feather-icons/dist/feather.min.js"></script>
11
  </head>
12
  <body class="bg-gray-900 text-gray-100">
13
- <custom-navbar></custom-navbar>
 
14
 
15
- <main class="container mx-auto px-4 py-8">
 
16
  <div class="mb-8">
17
  <h1 class="text-3xl font-bold mb-2 text-indigo-400">Model Management</h1>
18
  <p class="text-gray-400">Configure and manage your AI models</p>
@@ -127,12 +129,8 @@
127
  </div>
128
  </div>
129
  </main>
130
-
131
- <custom-footer></custom-footer>
132
-
133
- <script src="components/navbar.js"></script>
134
- <script src="components/footer.js"></script>
135
- <script>
136
  feather.replace();
137
  </script>
138
  </body>
 
10
  <script src="https://cdn.jsdelivr.net/npm/feather-icons/dist/feather.min.js"></script>
11
  </head>
12
  <body class="bg-gray-900 text-gray-100">
13
+ <script src="components/lcars-navbar.js"></script>
14
+ <script src="components/lcars-footer.js"></script>
15
 
16
+ <lcars-navbar></lcars-navbar>
17
+ <main class="container mx-auto px-4 py-8">
18
  <div class="mb-8">
19
  <h1 class="text-3xl font-bold mb-2 text-indigo-400">Model Management</h1>
20
  <p class="text-gray-400">Configure and manage your AI models</p>
 
129
  </div>
130
  </div>
131
  </main>
132
+ <lcars-footer></lcars-footer>
133
+ <script>
 
 
 
 
134
  feather.replace();
135
  </script>
136
  </body>
style.css CHANGED
@@ -1,11 +1,44 @@
1
  @import url('https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&display=swap');
2
-
3
  body {
4
  font-family: 'Inter', sans-serif;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5
  }
6
 
7
  .chat-container {
8
- scrollbar-width: thin;
9
  scrollbar-color: #4f46e5 #1a1a2e;
10
  }
11
 
 
1
  @import url('https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&display=swap');
 
2
  body {
3
  font-family: 'Inter', sans-serif;
4
+ background-color: #000000;
5
+ color: #FFFFFF;
6
+ }
7
+
8
+ /* LCARS-style elements */
9
+ .lcars-panel {
10
+ background-color: #000000;
11
+ border-left: 10px solid #FF9966;
12
+ padding: 15px;
13
+ margin: 10px;
14
+ }
15
+
16
+ .lcars-button {
17
+ background-color: #1A1A2E;
18
+ color: #FF9966;
19
+ border: none;
20
+ padding: 12px 24px;
21
+ font-size: 16px;
22
+ border-radius: 20px 0 0 20px;
23
+ font-weight: bold;
24
+ text-transform: uppercase;
25
+ }
26
+
27
+ .lcars-button:hover {
28
+ background-color: #2A2A3E;
29
+ color: #FFCC99;
30
+ }
31
+
32
+ .lcars-display {
33
+ background-color: #0A0A1A;
34
+ border: 3px solid #FF9966;
35
+ border-radius: 0 20px 20px 0;
36
+ padding: 20px;
37
+ min-height: 300px;
38
  }
39
 
40
  .chat-container {
41
+ scrollbar-width: thin;
42
  scrollbar-color: #4f46e5 #1a1a2e;
43
  }
44