Raiff1982's picture
Update aicore.py
42f42cb verified
raw
history blame
4.65 kB
import asyncio
import json
import logging
import torch
import tkinter as tk
from tkinter import messagebox
from threading import Thread
from typing import Dict, Any
# Set up logging
logging.basicConfig(level=logging.INFO)
class AICore:
def __init__(self):
if not torch.cuda.is_available():
raise RuntimeError("GPU not available. Ensure CUDA is installed and a compatible GPU is present.")
self.device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
logging.info(f"Using device: {self.device}")
async def generate_response(self, query: str) -> Dict[str, Any]:
# Simulate AI response generation
await asyncio.sleep(1) # Simulate processing time
return {
"query": query,
"response": f"AI response to: {query}",
"insights": ["Insight 1", "Insight 2"],
"security_level": 2,
"safety_analysis": {"toxicity": 0.1, "bias": 0.05, "privacy": []}
}
async def check_health(self) -> Dict[str, Any]:
# Simulate health check
await asyncio.sleep(1) # Simulate processing time
return {
"memory_usage": 30, # Example memory usage percentage
"cpu_load": 20, # Example CPU load percentage
"gpu_memory": self.get_gpu_memory(), # Get GPU memory usage
"response_time": 0.5 # Example response time in seconds
}
def get_gpu_memory(self) -> float:
if torch.cuda.is_available():
return torch.cuda.memory_allocated() / 1e9 # Convert bytes to GB
return 0.0
async def shutdown(self):
# Simulate shutdown process
await asyncio.sleep(1) # Simulate cleanup time
logging.info("AI Core shutdown complete.")
class AIApp(tk.Tk):
def __init__(self, ai_core):
super().__init__()
self.ai_core = ai_core
self.title("AI System Interface")
self.geometry("800x600")
self._running = True
self.create_widgets()
self._start_health_monitoring()
def create_widgets(self):
self.query_label = tk.Label(self, text="Enter your query:")
self.query_label.pack(pady=10)
self.query_entry = tk.Entry(self, width=100)
self.query_entry.pack(pady=10)
self.submit_button = tk.Button(self, text="Submit", command=self.submit_query)
self.submit_button.pack(pady=10)
self.response_area = tk.Text(self, height=20, width=100)
self.response_area.pack(pady=10)
self.status_bar = tk.Label(self, text="Ready", bd=1, relief=tk.SUNKEN, anchor=tk.W)
self.status_bar.pack(side=tk.BOTTOM, fill=tk.X)
def submit_query(self):
query = self.query_entry.get()
self.status_bar.config(text="Processing...")
Thread(target=self._run_async_task, args=(self.ai_core.generate_response(query),)).start()
def _run_async_task(self, coroutine):
"""Run async task in a separate thread"""
loop = asyncio.new_event_loop()
asyncio.set_event_loop(loop)
try:
result = loop.run_until_complete(coroutine)
self.after(0, self._display_result, result)
except Exception as e:
self.after(0, self._show_error, str(e))
finally:
loop.close()
def _display_result(self, result: Dict):
"""Display results in the GUI"""
self.response_area.insert(tk.END, json.dumps(result, indent=2) + "\n\n")
self.status_bar.config(text="Query processed successfully")
def _show_error(self, message: str):
"""Display error messages to the user"""
messagebox.showerror("Error", message)
self.status_bar.config(text=f"Error: {message}")
def _start_health_monitoring(self):
"""Periodically check system health"""
def update_health():
if self._running:
health = asyncio.run(self.ai_core.check_health())
self.status_bar.config(
text=f"System Health - Memory: {health['memory_usage']}% | "
f"CPU: {health['cpu_load']}% | GPU: {health['gpu_memory']}GB | "
f"Response Time: {health['response_time']:.2f}s"
)
self.after(5000, update_health)
update_health()
async def main():
"""The main function initializes the AI system and starts the GUI."""
print("🧠 Hybrid AI System Initializing (Local Models)")
ai = AICore() # Initialize the AI core
app = AIApp(ai)
app.mainloop()
await ai.shutdown()
if __name__ == "__main__":
asyncio.run(main())