YmcAI commited on
Commit
94a6c20
·
1 Parent(s): 8d0066b

ajoute et implementation de la communication etre Satellite

Browse files
main.py ADDED
@@ -0,0 +1,32 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from stellar.base_stellar import Stellar
2
+ from satellites.atlasSat.atlas import Atlas
3
+ from satellites.lilithSat.lilith import Lilith
4
+ from satellites.pythagorasSat.pythagoras import Pythagoras
5
+ from satellites.shakaSat.shaka import Shaka
6
+ from satellites.edisonSat.edison import Edison
7
+ from satellites.yorkSat.york import York
8
+ from typing import Dict, Any
9
+
10
+ stellar = Stellar()
11
+ atlas = Atlas()
12
+ lilith = Lilith()
13
+ pythagoras = Pythagoras()
14
+ shaka = Shaka()
15
+ edison = Edison()
16
+ york = York()
17
+
18
+
19
+
20
+ stellar.register_satellites(atlas)
21
+ stellar.register_satellites(lilith)
22
+ stellar.register_satellites(pythagoras)
23
+ stellar.register_satellites(shaka)
24
+ stellar.register_satellites(edison)
25
+ stellar.register_satellites(york)
26
+
27
+ response = Stellar.route_communication("Atlas", "York", {"type": "check_resources"})
28
+
29
+ results = Stellar.broadcast_message("Atlas", {"type": "check_resources"})
30
+
31
+
32
+ print(results)
req.txt CHANGED
@@ -10,4 +10,5 @@ pandas
10
  psutil
11
  python-dotenv
12
  beautifulsoup4
 
13
 
 
10
  psutil
11
  python-dotenv
12
  beautifulsoup4
13
+ langchain-anthropic
14
 
satellites/atlasSat/atlas.py CHANGED
@@ -123,4 +123,33 @@ class Atlas(VegapunkSatellite):
123
  status.update({
124
  "Monitored_directories": self.monitored_directories,
125
  "Email_config": self.email_config
126
- })
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
123
  status.update({
124
  "Monitored_directories": self.monitored_directories,
125
  "Email_config": self.email_config
126
+ })
127
+
128
+
129
+
130
+ def proccess_communicatioon(self,sender_name:str,message:Dict[str,Any]) ->Dict[str,Any]:
131
+
132
+ if message.get("type") == "task":
133
+ task_result = self.process_task(message.get("task"))
134
+ return {"status": "Traitement effectué", "result": task_result}
135
+ elif message.get("type") == "email_config":
136
+ self.email_config = message.get("content")
137
+ return {"status": "Configuration email mise à jour", "result": self.email_config}
138
+ elif message.get("type") == "system_command":
139
+ command_result = self.execute_system_command(message.get("command"))
140
+ return {"status": "Commande système exécutée", "result": command_result}
141
+ elif message.get("type") == "file_management":
142
+ file_result = self.manage_files(message.get("action"), message.get("file_path"))
143
+ return {"status": "Gestion de fichier effectuée", "result": file_result}
144
+ elif message.get("type") == "monitor_directory":
145
+ monitor_result = self.monitor_directory(message.get("directory"))
146
+ return {"status": "Surveillance de répertoire effectuée", "result": monitor_result}
147
+ elif message.get("type") == "email":
148
+ email_result = self.send_email(message.get("to"), message.get("subject"), message.get("body"))
149
+ return {"status": "Email envoye", "result": email_result}
150
+ elif message.get("type") == "status_report":
151
+ result = self.report_status()
152
+ return {"status": "Rapport de status généré", "result": result}
153
+ elif message.get("type") == "check_changes":
154
+ changes = self.check_directory_changes()
155
+ return {"status": "Changements vérifiés", "result": changes}
satellites/base_satellite.py CHANGED
@@ -1,5 +1,5 @@
1
  from abc import ABC, abstractmethod
2
- from typing import Dict, Any
3
  import logging
4
 
5
 
@@ -60,12 +60,35 @@ class VegapunkSatellite(ABC):
60
  # Methode pour mettre a jour de la base de connaissance local du satellite depuis punkrecord
61
  pass
62
 
63
- # def communicate_with_other_satellite(self, satellite: VegapunkSatellite, message: Dict[str, Any]) -> Dict[str, Any]:
64
- # # Methode pour communiquer avec un autre satellite
65
- # pass
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
66
 
67
- #
68
- #
69
  # class Satellite:
70
  # def __init__(self, name, specialty):
71
  # self.name = name
 
1
  from abc import ABC, abstractmethod
2
+ from typing import Dict, Any,Optional
3
  import logging
4
 
5
 
 
60
  # Methode pour mettre a jour de la base de connaissance local du satellite depuis punkrecord
61
  pass
62
 
63
+ # Methode pour communiquer avec un autre satellite
64
+ def communicate_with_other_satellite(self, satellite: 'VegapunkSatellite', message: Dict[str, Any]) -> Optional[Dict[str, Any]]:
65
+ if not isinstance(satellite, VegapunkSatellite):
66
+ logging.error(f"Le satellite spécifié n'est pas valide :{type(satellite)}")
67
+ return None
68
+
69
+ try:
70
+ response = satellite.receive_communication(self.name,message)
71
+ logging.info(f"Communication avec {satellite.name} : {response}")
72
+ return response
73
+ except Exception as e:
74
+ logging.error(f"Erreur lors de la communication avec {satellite.name} : {str(e)}")
75
+ return None
76
+
77
+ def receive_communication(self, message: Dict[str, Any]) -> Dict[str, Any]:
78
+ # Methode pour recevoir une communication d'un autre satellite
79
+ logging.info(f"{self.name} a reçu un message : {message}")
80
+ return {"status": "Message reçu","from":{self.name}, "details": message}
81
+
82
+ @abstractmethod
83
+ def proccess_communicatioon(self,sender_name:str,message:Dict[str,Any])->Dict[str,Any]:
84
+ """
85
+ traite le message recu d'un autre satellite
86
+ a implementer dans chaque classe de satellite specifique
87
+ """
88
+ pass
89
+
90
+
91
 
 
 
92
  # class Satellite:
93
  # def __init__(self, name, specialty):
94
  # self.name = name
satellites/lilithSat/lilith.py CHANGED
@@ -2,6 +2,7 @@ from satellites.base_satellite import VegapunkSatellite
2
  from typing import Dict, Any, List
3
  import random
4
  from utils.logger import get_logger
 
5
 
6
  role = " Explorer des solution non conventionnel , creatove,voir risqué"
7
 
@@ -114,3 +115,23 @@ class Lilith(VegapunkSatellite):
114
  # Ici, vous pourriez implémenter la logique pour mettre à jour les approches créatives ou les domaines d'innovation
115
 
116
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2
  from typing import Dict, Any, List
3
  import random
4
  from utils.logger import get_logger
5
+ import logging
6
 
7
  role = " Explorer des solution non conventionnel , creatove,voir risqué"
8
 
 
115
  # Ici, vous pourriez implémenter la logique pour mettre à jour les approches créatives ou les domaines d'innovation
116
 
117
 
118
+ def proccess_communicatioon(self,sender_name:str,message:Dict[str,Any]) ->Dict[str,Any]:
119
+ if message.get("type") == "task":
120
+ task_result = self.process_task(message.get("task"))
121
+ return {"status": "Traitement effectué", "result": task_result}
122
+ elif message.get("type") == "generate_idea":
123
+ idea_result = self.generate_creative_idea(message.get("domain"))
124
+ return {"status": "Idée générée", "result": idea_result}
125
+ elif message.get("type") == "solve_problem":
126
+ solution_result = self.propose_unconventional_solution(message.get("problem"))
127
+ return {"status": "Solution proposée", "result": solution_result}
128
+ elif message.get("type") == "brainstorm":
129
+ brainstorm_result = self.conduct_brainstorming_session(message.get("topic"), message.get("duration"))
130
+ return {"status": "Session de brainstorming effectuée", "result": brainstorm_result}
131
+ elif message.get("type") == "challenge_assumption":
132
+ assumption_result = self.challenge_assumption(message.get("assumption"))
133
+ return {"status": "Assomption challengée", "result": assumption_result}
134
+ elif message.get("type") == "status_report":
135
+ result = self.report_status()
136
+ return {"status": "Rapport de status généré", "result": result}
137
+
satellites/pythagorasSat/pythagoras.py CHANGED
@@ -12,14 +12,18 @@ from bs4 import BeautifulSoup
12
  import json
13
  import os
14
  from dotenv import load_dotenv
 
15
  import requests
16
  import logging
17
 
18
  load_dotenv()
19
 
20
 
 
21
 
22
-
 
 
23
 
24
 
25
  role = "mathématiques, statistiques et analyse de données"
@@ -241,4 +245,25 @@ class Pythagoras(VegapunkSatellite):
241
  "Constantes_mathématiques": list(self.mathematical_constants.keys()),
242
  "Opérations_disponibles": ["mean", "median", "std_dev", "correlation"]
243
  })
244
- return status
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
12
  import json
13
  import os
14
  from dotenv import load_dotenv
15
+ from openai import OpenAI
16
  import requests
17
  import logging
18
 
19
  load_dotenv()
20
 
21
 
22
+ # client = OpenAI(os.getenv("LLM_API_KEY"))
23
 
24
+ client =OpenAI(
25
+ organization="LLM_API_KEY",
26
+ )
27
 
28
 
29
  role = "mathématiques, statistiques et analyse de données"
 
245
  "Constantes_mathématiques": list(self.mathematical_constants.keys()),
246
  "Opérations_disponibles": ["mean", "median", "std_dev", "correlation"]
247
  })
248
+ return status
249
+
250
+
251
+ def proccess_communicatioon(self,sender_name:str,message:Dict[str,Any]) ->Dict[str,Any]:
252
+ if message.get("type")== "task":
253
+ task_result = self.process_task(message.get("task"))
254
+ return {"status": "Traitement effectué", "result": task_result}
255
+ elif message.get("type") == "research":
256
+ research_result = self.conduct_research(message.get("topic"), message.get("depth"))
257
+ return {"status": "Recherche effectuée", "result": research_result}
258
+ elif message.get("type") == "information_extraction":
259
+ info_result = self.extract_information(message.get("content"), message.get("keywords", []))
260
+ return {"status": "Extraction d'information effectuée", "result": info_result}
261
+ elif message.get("type") == "update_constants":
262
+ self.mathematical_constants.update(message.get("constants", {}))
263
+ return {"status": "Constantes mises à jour", "result": self.mathematical_constants}
264
+ elif message.get("type") == "update_resources":
265
+ self.resources.update(message.get("resources", {}))
266
+ return {"status": "Ressources mises à jour", "result": self.resources}
267
+ elif message.get("type") == "update_external_apis":
268
+ self.external_apis.update(message.get("apis", {}))
269
+ return {"status": "APIs mises à jour", "result": self.external_apis}
satellites/shakaSat/shaka.py CHANGED
@@ -1,5 +1,5 @@
1
  from satellites.base_satellite import VegapunkSatellite
2
- from typing import Dict, Any, List
3
  import nltk
4
  from nltk.tokenize import word_tokenize
5
  from nltk.corpus import stopwords
@@ -163,13 +163,6 @@ class Shaka(VegapunkSatellite):
163
  def log_activity(self, activity: str):
164
  logging.info(activity)
165
 
166
- def communicate_with_stellar(self, message: Dict[str, Any]) -> Dict[str, Any]:
167
- print(f"{self.name} envoie un message à Stellar: {message}")
168
- return {"Statut": "Message reçu", "message": "Stellar a bien reçu le message"}
169
-
170
- def update_from_punkrecord(self):
171
- print(f"{self.name} met à jour sa base de connaissances depuis Punkrecord")
172
- self.add_to_knowledge_base("Last_update", "Nouveaux patterns détectés dans les données")
173
 
174
  def perform_advanced_analyse(self, data: Dict[str, Any]) -> Dict[str, Any]:
175
  text_analyse = self._analyse_text(data.get('text', ''))
@@ -180,3 +173,33 @@ class Shaka(VegapunkSatellite):
180
  "Analyse_logique": logical_analyse,
181
  "Conclusions": "Analyse intégrale basée sur le texte et les raisonnements logiques"
182
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  from satellites.base_satellite import VegapunkSatellite
2
+ from typing import Dict, Any, List, Optional
3
  import nltk
4
  from nltk.tokenize import word_tokenize
5
  from nltk.corpus import stopwords
 
163
  def log_activity(self, activity: str):
164
  logging.info(activity)
165
 
 
 
 
 
 
 
 
166
 
167
  def perform_advanced_analyse(self, data: Dict[str, Any]) -> Dict[str, Any]:
168
  text_analyse = self._analyse_text(data.get('text', ''))
 
173
  "Analyse_logique": logical_analyse,
174
  "Conclusions": "Analyse intégrale basée sur le texte et les raisonnements logiques"
175
  }
176
+
177
+ def communicate_with_stellar(self, message: Dict[str, Any]) -> Dict[str, Any]:
178
+ print(f"{self.name} envoie un message à Stellar: {message}")
179
+ return {"Statut": "Message reçu", "message": "Stellar a bien reçu le message"}
180
+
181
+ def update_from_punkrecord(self):
182
+ print(f"{self.name} met à jour sa base de connaissances depuis Punkrecord")
183
+ self.add_to_knowledge_base("Last_update", "Nouveaux patterns détectés dans les données")
184
+ return {"Statut": "Mise à jour effectuée"}
185
+
186
+ def proccess_communicatioon(self, sender_name: str, message: Dict[str, Any]) -> Dict[str, Any]:
187
+ # logique a shaka pour traiter le message
188
+ if message.get("type") == "ethics_check":
189
+ result = self.check_ethics(message.get("content"))
190
+ return {"status": "Traitement effectué", "result": result}
191
+ elif message.get("type") == "fact_check":
192
+ result = self.verify_facts(message.get("claim"))
193
+ return {"status": "Traitement effectué", "result": result}
194
+ elif message.get("type") == "task":
195
+ task_result = self.process_task(message.get("task"))
196
+ return {"status": "Traitement effectué", "result": task_result}
197
+ elif message.get("type") == "recommendations":
198
+ result = self.provide_ethical_recommendations(message.get("content"))
199
+ return {"status": "Traitement effectué", "result": result}
200
+ elif message.get("type") == "toggle_ethical_filter":
201
+ result = self.toggle_ethical_filter()
202
+ return {"status": "Traitement effectué", "result": result}
203
+
204
+
205
+
stellar/base_stellar.py ADDED
@@ -0,0 +1,32 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from satellites.base_satellite import VegapunkSatellite
2
+ from abc import ABC, abstractmethod
3
+ from typing import Dict, Any,Optional
4
+ import logging
5
+
6
+
7
+
8
+
9
+ class Stellar:
10
+ def __init__(self):
11
+ self.satellites = {} # dictionnaire pour stocke les references satellites
12
+
13
+
14
+ def register_satellites(self,satellite:VegapunkSatellite)->None:
15
+ self.satellites[satellite.name] = satellite
16
+
17
+ def route_communication(self, sender_name: str, target_name: str, message: Dict[str, Any]) -> Optional[Dict[str, Any]]:
18
+ if sender_name not in self.satellites or target_name not in self.satellites:
19
+ logging.error(f"Impossible de router le message de {sender_name} à {target_name}")
20
+ return None
21
+
22
+ sender_name = self.satellites[sender_name]
23
+ target_name = self.satellites[target_name]
24
+
25
+ return sender_name.communicate_with_stellar(target_name, message)
26
+
27
+ def broadcast_message(self, sender_name: str, message: Dict[str, Any]) -> Dict[str, Dict[str, Any]]:
28
+ results = {}
29
+ for satellite_name, satellite in self.satellites.items():
30
+ if satellite_name != sender_name:
31
+ results[satellite_name] = satellite.communicate_with_stellar(self.satellites[sender_name], message)
32
+ return results
tests/pythagoras_test.py CHANGED
@@ -57,6 +57,28 @@ def test_pythagoras():
57
  stat_result = pythagoras.process_task(stat_task)
58
  print("Résultat du test statistique:", stat_result)
59
  print("\n\n")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
60
 
61
  print("Connexion au Punkrecord")
62
  pythagoras.update_from_punkrecord()
 
57
  stat_result = pythagoras.process_task(stat_task)
58
  print("Résultat du test statistique:", stat_result)
59
  print("\n\n")
60
+ # Exemple de données pour l'analyse
61
+ sample_data = [
62
+ {"x": 1, "y": 2, "z": 3},
63
+ {"x": 2, "y": 4, "z": 6},
64
+ {"x": 3, "y": 6, "z": 9},
65
+ {"x": 4, "y": 8, "z": 12},
66
+ {"x": 5, "y": 10, "z": 15}
67
+ ]
68
+
69
+ # Ajout de tâches à la file d'attente
70
+ pythagoras.add_task({"type": "analyze_data", "data": sample_data})
71
+ pythagoras.add_task({"type": "conduct_research", "topic": "Intelligence Artificielle", "depth": "deep"})
72
+ pythagoras.add_task({"type": "extract_information",
73
+ "content": "L'intelligence artificielle (IA) est un domaine de l'informatique qui vise à créer des machines capables de simuler l'intelligence humaine. Elle englobe des sous-domaines tels que l'apprentissage automatique, le traitement du langage naturel et la vision par ordinateur.",
74
+ "keywords": ["apprentissage automatique", "traitement du langage naturel"]})
75
+
76
+ # Traitement des tâches
77
+ while task := pythagoras.get_next_task():
78
+ result = pythagoras.process_task(task)
79
+ print(f"Résultat de la tâche : {result}")
80
+
81
+ print("\n\n")
82
 
83
  print("Connexion au Punkrecord")
84
  pythagoras.update_from_punkrecord()