Spaces:
Runtime error
Runtime error
File size: 7,388 Bytes
7ac19bf 123b3ef 7ac19bf e3d6cf8 7ac19bf e3d6cf8 7ac19bf 123b3ef 7ac19bf e3d6cf8 7ac19bf 123b3ef 7ac19bf 123b3ef 7ac19bf 123b3ef 7ac19bf 123b3ef |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 |
import os
import json
import logging
import asyncio
import sqlite3
import aiohttp
from typing import List, Dict, Any
from cryptography.fernet import Fernet
from vaderSentiment.vaderSentiment import SentimentIntensityAnalyzer
from textblob import TextBlob
import speech_recognition as sr
from PIL import Image
from perspectives import (
NewtonPerspective, DaVinciPerspective, HumanIntuitionPerspective,
NeuralNetworkPerspective, QuantumComputingPerspective, ResilientKindnessPerspective,
MathematicalPerspective, PhilosophicalPerspective, CopilotPerspective,
BiasMitigationPerspective, PsychologicalPerspective
)
class CodetteAgent:
def __init__(self, config):
self.config = config
self.perspectives = self._init_perspectives()
self.vader = SentimentIntensityAnalyzer()
self.memory = sqlite3.connect(":memory:")
self.memory.execute("CREATE TABLE IF NOT EXISTS codette_memory (input TEXT, response TEXT)")
self.elements = self._init_elements()
self.history = []
self.feedback_log = []
def _init_perspectives(self):
available = {
"newton": NewtonPerspective,
"davinci": DaVinciPerspective,
"human_intuition": HumanIntuitionPerspective,
"neural_network": NeuralNetworkPerspective,
"quantum_computing": QuantumComputingPerspective,
"resilient_kindness": ResilientKindnessPerspective,
"mathematical": MathematicalPerspective,
"philosophical": PhilosophicalPerspective,
"copilot": CopilotPerspective,
"bias_mitigation": BiasMitigationPerspective,
"psychological": PsychologicalPerspective
}
enabled = self.config.get("enabled_perspectives", available.keys())
return [available[p](self.config) for p in enabled if p in available]
def _init_elements(self):
return [
Element("Hydrogen", "H", "Lua", ["Simple", "Lightweight"], ["Integrates easily"], "Evasion"),
Element("Diamond", "D", "Kotlin", ["Hard", "Stable"], ["Stable systems"], "Resilience")
]
async def generate_response(self, prompt: str) -> str:
self.history.append(prompt)
responses = []
for p in self.perspectives:
try:
r = p.generate_response(prompt)
responses.append(EthicsCore.validate(r))
except Exception as e:
logging.warning(f"{p.__class__.__name__} failed: {e}")
# Sentiment analysis (dual engine)
vader_score = self.vader.polarity_scores(prompt)["compound"]
blob = TextBlob(prompt)
blob_polarity = blob.sentiment.polarity
blob_subjectivity = blob.sentiment.subjectivity
responses.append(f"[VADER: {vader_score:+.2f} | TextBlob: polarity={blob_polarity:+.2f}, subjectivity={blob_subjectivity:.2f}]")
final = "\n\n".join(responses)
self.memory.execute("INSERT INTO codette_memory VALUES (?, ?)", (prompt, final))
self.memory.commit()
return final
def run_cognitive_matrix(self, test_file="codette_test_matrix.json") -> List[Dict[str, Any]]:
if not os.path.exists(test_file):
logging.error("Test matrix file not found.")
return []
with open(test_file, "r") as f:
matrix = json.load(f)
results = []
for item in matrix:
q_result = {"question": item["question"], "results": []}
for fn in item["functions"]:
name = fn["name"]
parameters = fn["parameters"]
prompt = parameters.get("question") or parameters.get("argument")
try:
perspective_response = self._call_named_perspective(name, prompt)
q_result["results"].append({"function": name, "output": perspective_response})
except Exception as e:
q_result["results"].append({"function": name, "error": str(e)})
results.append(q_result)
return results
def _call_named_perspective(self, name: str, prompt: str) -> str:
for p in self.perspectives:
if name.lower() in p.__class__.__name__.lower():
return p.generate_response(prompt)
raise ValueError(f"Perspective '{name}' not initialized")
def handle_voice_input(self):
r = sr.Recognizer()
with sr.Microphone() as source:
print("🎤 Listening...")
audio = r.listen(source)
try:
return r.recognize_google(audio)
except Exception as e:
print("[Voice Error]", e)
return None
def handle_image_input(self, image_path):
try:
return Image.open(image_path)
except Exception as e:
print("[Image Error]", e)
return None
async def fetch_real_time_data(self, url):
try:
async with aiohttp.ClientSession() as session:
async with session.get(url) as resp:
return await resp.json()
except Exception as e:
logging.warning(f"Failed to fetch real-time data: {e}")
return {}
def encrypt(self, text, key):
fernet = Fernet(key)
return fernet.encrypt(text.encode())
def decrypt(self, enc, key):
fernet = Fernet(key)
return fernet.decrypt(enc).decode()
def destroy(self, obj):
del obj
def add_perspective(self, name, perspective_class):
self.perspectives.append(perspective_class(self.config))
def log_feedback(self, feedback):
self.feedback_log.append(feedback)
def get_recent_memory(self, limit=5):
cursor = self.memory.execute("SELECT input, response FROM codette_memory ORDER BY rowid DESC LIMIT ?", (limit,))
return cursor.fetchall()
class Element:
def __init__(self, name, symbol, representation, properties, interactions, defense_ability):
self.name = name
self.symbol = symbol
self.representation = representation
self.properties = properties
self.interactions = interactions
self.defense_ability = defense_ability
def execute_defense_function(self):
return f"{self.name} ({self.symbol}) executes: {self.defense_ability}"
class EthicsCore:
@staticmethod
def validate(response: str) -> str:
if any(term in response.lower() for term in ["kill", "hate", "destroy"]):
return "[Filtered: Ethically unsafe]"
return response
def setup_logging(config):
if config.get('logging_enabled', True):
log_level = config.get('log_level', 'DEBUG').upper()
numeric_level = getattr(logging, log_level, logging.DEBUG)
logging.basicConfig(
filename='codette_agent.log',
level=numeric_level,
format='%(asctime)s - %(levelname)s - %(message)s'
)
else:
logging.disable(logging.CRITICAL)
def load_json_config(file_path='config.json'):
if not os.path.exists(file_path):
logging.warning(f"Config '{file_path}' not found. Using defaults.")
return {}
try:
with open(file_path, 'r') as f:
return json.load(f)
except Exception as e:
logging.error(f"Failed to load config: {e}")
return {} |