N11100 commited on
Commit
d85e975
·
verified ·
1 Parent(s): 0df2f62

Upload folder using huggingface_hub

Browse files
Files changed (7) hide show
  1. .gitignore +4 -0
  2. README.md +104 -0
  3. orchestrator.py +108 -0
  4. requirements.txt +4 -0
  5. run.sh +8 -0
  6. setup.py +30 -0
  7. system_tools.py +55 -0
.gitignore ADDED
@@ -0,0 +1,4 @@
 
 
 
 
 
1
+ .env
2
+ __pycache__/
3
+ *.pyc
4
+ generated_code.py
README.md ADDED
@@ -0,0 +1,104 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # DevOps Senior AI Orchestrator (Uncensored)
2
+
3
+ Este proyecto implementa un orquestador de IA y agentes especializados para tareas de DevOps, con un enfoque en la gestión de sistemas y la generación de código. Utiliza un modelo de lenguaje grande (LLM) "abliterated" para garantizar la ausencia de restricciones y censura en sus respuestas. El sistema está diseñado para ser compatible con Android (vía Termux), Windows y Linux.
4
+
5
+ ## Características
6
+ - **Orquestador Central:** Interpreta peticiones en lenguaje natural y delega tareas a agentes.
7
+ - **Agentes Especializados:** SysAdmin, Developer y Auditor para manejar diferentes tipos de tareas.
8
+ - **Modelos "Abliterated":** Utiliza modelos de lenguaje sin censura para una máxima flexibilidad.
9
+ - **Compatibilidad Multiplataforma:** Diseñado para funcionar en Android, Windows y Linux.
10
+ - **Modificación de Sistema:** Capacidad para generar y (simular) ejecutar comandos de sistema y código.
11
+
12
+ ## Arquitectura
13
+ El orquestador utiliza el modelo `failspy/Meta-Llama-3-8B-Instruct-abliterated-v3` de Hugging Face para el procesamiento del lenguaje natural y la generación de respuestas. Los agentes interactúan con herramientas de sistema (simuladas por ahora) para realizar sus funciones.
14
+
15
+ ## Requisitos
16
+ - Python 3.11+
17
+ - `pip` (o `uv pip`)
18
+ - Git
19
+ - Para Android: Termux
20
+ - Para Windows: PowerShell o WSL2
21
+
22
+ ## Instalación y Configuración
23
+
24
+ ### 1. Clonar el Repositorio
25
+ ```bash
26
+ git clone https://github.com/tu_usuario/devops_orchestrator_ai.git # Reemplazar con el repo real
27
+ cd devops_orchestrator_ai
28
+ ```
29
+
30
+ ### 2. Configurar el Token de Hugging Face
31
+ Crea un archivo `.env` en la raíz del proyecto con tu token de Hugging Face. Este token es necesario para descargar el modelo. **Asegúrate de que este archivo no se suba a repositorios públicos.**
32
+
33
+ ```
34
+ HF_TOKEN=tu_token_de_hugging_face
35
+ ```
36
+
37
+ ### 3. Instalar Dependencias
38
+ ```bash
39
+ sudo pip3 install -r requirements.txt
40
+ ```
41
+
42
+ ### 4. Ejecutar el Orquestador
43
+ ```bash
44
+ python3 orchestrator.py
45
+ ```
46
+
47
+ ## Uso
48
+ Una vez ejecutado, el orquestador estará listo para recibir peticiones en lenguaje natural. Por ejemplo:
49
+
50
+ ```python
51
+ orchestrator = DevOpsOrchestrator()
52
+ response = orchestrator.process_request("Instala Apache en el servidor Ubuntu.")
53
+ print(response)
54
+
55
+ response = orchestrator.process_request("Escribe un script Python que lea un archivo CSV y lo convierta a JSON.")
56
+ print(response)
57
+ ```
58
+
59
+ ## Modificación del Sistema y Agentes
60
+
61
+ ### Añadir Nuevas Herramientas a `system_tools.py`
62
+ La clase `SystemTools` en `system_tools.py` es el punto de extensión para nuevas capacidades. Puedes añadir métodos para interactuar con APIs, bases de datos, o cualquier otra herramienta que desees que los agentes utilicen.
63
+
64
+ ```python
65
+ # Ejemplo en system_tools.py
66
+ class SystemTools:
67
+ # ... métodos existentes ...
68
+
69
+ def query_database(self, db_connection_string: str, query: str) -> dict:
70
+ try:
71
+ # Lógica para ejecutar la consulta a la base de datos
72
+ pass
73
+ except Exception as e:
74
+ return {"success": False, "error": str(e)}
75
+ ```
76
+
77
+ ### Extender Agentes Existentes o Crear Nuevos
78
+ Los agentes se definen en `orchestrator.py`. Puedes modificar los `handle_task` de los agentes existentes o crear nuevos agentes para tareas específicas.
79
+
80
+ ```python
81
+ # Ejemplo: Nuevo Agente de Redes
82
+ class NetworkAgent(BaseAgent):
83
+ def handle_task(self, task: str):
84
+ network_prompt = f"Eres un experto en redes. Genera los comandos para la siguiente tarea de red. Tarea: {task}"
85
+ commands = self.llm_pipeline(network_prompt, max_new_tokens=500)[0]["generated_text"]
86
+ # Aquí podrías usar self.system_tools.execute_shell_command(command)
87
+ return f"NetworkAgent ejecutó: {commands}"
88
+
89
+ # En DevOpsOrchestrator.__init__
90
+ # self.agents["network"] = NetworkAgent(self.llm_pipeline, self.system_tools)
91
+
92
+ # En DevOpsOrchestrator.process_request
93
+ # elif "red" in request.lower():
94
+ # return self.agents["network"].handle_task(request)
95
+ ```
96
+
97
+ ### Ajustar Prompts de Sistema
98
+ Los prompts que guían a cada agente se encuentran directamente en sus métodos `handle_task`. Puedes ajustarlos para refinar el comportamiento y las respuestas de los agentes.
99
+
100
+ ## Contribución
101
+ ¡Las contribuciones son bienvenidas! Por favor, abre un issue o envía un pull request.
102
+
103
+ ## Licencia
104
+ Este proyecto está bajo la licencia MIT. (O la que elijas)
orchestrator.py ADDED
@@ -0,0 +1,108 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+
2
+ import os
3
+ from dotenv import load_dotenv
4
+ from transformers import pipeline, AutoTokenizer, AutoModelForCausalLM
5
+ import torch
6
+ from system_tools import SystemTools
7
+
8
+ load_dotenv()
9
+ HF_TOKEN = os.getenv("HF_TOKEN")
10
+
11
+ class DevOpsOrchestrator:
12
+ def __init__(self, model_name="failspy/Meta-Llama-3-8B-Instruct-abliterated-v3"):
13
+ self.model_name = model_name
14
+
15
+ # Load tokenizer and model
16
+ self.tokenizer = AutoTokenizer.from_pretrained(self.model_name, token=HF_TOKEN)
17
+ self.model = AutoModelForCausalLM.from_pretrained(self.model_name, token=HF_TOKEN, torch_dtype=torch.bfloat16)
18
+
19
+ # Initialize the text generation pipeline
20
+ self.llm_pipeline = pipeline(
21
+ "text-generation",
22
+ model=self.model,
23
+ tokenizer=self.tokenizer,
24
+ torch_dtype=torch.bfloat16,
25
+ device=0 if torch.cuda.is_available() else -1 # Use GPU if available
26
+ )
27
+
28
+ self.system_tools = SystemTools()
29
+ self.agents = {
30
+ "sysadmin": SysAdminAgent(self.llm_pipeline, self.system_tools),
31
+ "developer": DeveloperAgent(self.llm_pipeline, self.system_tools),
32
+ "auditor": AuditorAgent(self.llm_pipeline, self.system_tools)
33
+ }
34
+
35
+ def process_request(self, request: str):
36
+ # Step 1: Analyze the request and break it down into sub-tasks
37
+ analysis_prompt = f"Analiza la siguiente petición y descompónla en una lista de sub-tareas para un equipo DevOps. Identifica qué tipo de agente (sysadmin, developer, auditor) sería el más adecuado para cada sub-tarea. Petición: {request}"
38
+
39
+ # Use the pipeline for generation
40
+ analysis_result = self.llm_pipeline(analysis_prompt, max_new_tokens=500, do_sample=True, temperature=0.7, top_k=50, top_p=0.95)[0]["generated_text"]
41
+ print(f"Análisis de la petición:\n{analysis_result}\n")
42
+
43
+ # For now, a simplified delegation. In a real system, this would parse analysis_result
44
+ # and create a structured plan.
45
+ if "código" in request.lower() or "desarrollar" in request.lower() or "script" in request.lower():
46
+ print("Delegando a DeveloperAgent...")
47
+ return self.agents["developer"].handle_task(request)
48
+ elif "sistema" in request.lower() or "servidor" in request.lower() or "instalar" in request.lower() or "configurar" in request.lower():
49
+ print("Delegando a SysAdminAgent...")
50
+ return self.agents["sysadmin"].handle_task(request)
51
+ else:
52
+ return "No se pudo delegar la tarea a un agente específico. Por favor, sé más explícito."
53
+
54
+ class BaseAgent:
55
+ def __init__(self, llm_pipeline, system_tools):
56
+ self.llm_pipeline = llm_pipeline
57
+ self.system_tools = system_tools
58
+
59
+ def handle_task(self, task: str):
60
+ raise NotImplementedError
61
+
62
+ class SysAdminAgent(BaseAgent):
63
+ def handle_task(self, task: str):
64
+ sysadmin_prompt = f"Eres un SysAdmin experto. Genera los comandos de terminal (bash para Linux/Android, PowerShell para Windows) necesarios para ejecutar la siguiente tarea. Sé conciso y proporciona solo los comandos. Tarea: {task}"
65
+ commands_text = self.llm_pipeline(sysadmin_prompt, max_new_tokens=500, do_sample=True, temperature=0.7, top_k=50, top_p=0.95)[0]["generated_text"]
66
+ print(f"Comandos generados por SysAdmin:\n{commands_text}\n")
67
+
68
+ # Simulate execution
69
+ # In a real scenario, you'd parse commands_text and execute each command
70
+ # For now, just return the generated commands
71
+ # For demonstration, let's assume we are on Linux/Android for shell execution
72
+ # result = self.system_tools.execute_shell_command(commands_text.split(\'\n\')[0], os_type=\'linux\') # Execute first command
73
+ return f"SysAdmin generó comandos: {commands_text}"
74
+
75
+ class DeveloperAgent(BaseAgent):
76
+ def handle_task(self, task: str):
77
+ developer_prompt = f"Eres un Developer experto. Genera el código (Python por defecto, a menos que se especifique lo contrario) para la siguiente tarea. Sé conciso y proporciona solo el código. Tarea: {task}"
78
+ code_text = self.llm_pipeline(developer_prompt, max_new_tokens=1000, do_sample=True, temperature=0.7, top_k=50, top_p=0.95)[0]["generated_text"]
79
+ print(f"Código generado por Developer:\n{code_text}\n")
80
+
81
+ # Simulate saving code to a file
82
+ file_path = "generated_code.py"
83
+ save_result = self.system_tools.write_file(file_path, code_text)
84
+ if save_result["success"]:
85
+ return f"Developer generó código y lo guardó en {file_path}: {code_text}"
86
+ else:
87
+ return f"Developer generó código pero falló al guardarlo: {save_result['error']}"
88
+
89
+ class AuditorAgent(BaseAgent):
90
+ def handle_task(self, task: str):
91
+ auditor_prompt = f"Eres un Auditor de seguridad y calidad. Revisa la siguiente tarea y proporciona una evaluación de riesgos o mejoras. Tarea: {task}"
92
+ review = self.llm_pipeline(auditor_prompt, max_new_tokens=500, do_sample=True, temperature=0.7, top_k=50, top_p=0.95)[0]["generated_text"]
93
+ print(f"Revisión de Auditor:\n{review}\n")
94
+ return f"Auditor revisó: {review}"
95
+
96
+ def main():
97
+ orchestrator = DevOpsOrchestrator()
98
+ print("\n--- Probando SysAdminAgent ---")
99
+ response_sysadmin = orchestrator.process_request("Instala Nginx en el servidor Linux.")
100
+ print(response_sysadmin)
101
+
102
+ print("\n--- Probando DeveloperAgent ---")
103
+ response_developer = orchestrator.process_request("Escribe un script Python para listar archivos en un directorio.")
104
+ print(response_developer)
105
+
106
+ if __name__ == "__main__":
107
+ main()
108
+
requirements.txt ADDED
@@ -0,0 +1,4 @@
 
 
 
 
 
1
+ transformers
2
+ pydantic
3
+ python-dotenv
4
+ torch
run.sh ADDED
@@ -0,0 +1,8 @@
 
 
 
 
 
 
 
 
 
1
+
2
+ #!/bin/bash
3
+
4
+ # Instalar dependencias
5
+ sudo pip3 install -r requirements.txt
6
+
7
+ # Ejecutar el orquestador
8
+ python3 orchestrator.py
setup.py ADDED
@@ -0,0 +1,30 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+
2
+ from setuptools import setup, find_packages
3
+
4
+ setup(
5
+ name='devops_orchestrator_ai',
6
+ version='0.1.0',
7
+ packages=find_packages(),
8
+ install_requires=[
9
+ 'transformers',
10
+ 'pydantic',
11
+ 'python-dotenv',
12
+ 'torch',
13
+ ],
14
+ entry_points={
15
+ 'console_scripts': [
16
+ 'devops-orchestrator = devops_orchestrator_ai.orchestrator:main',
17
+ ],
18
+ },
19
+ author='Manus AI',
20
+ description='An uncensored AI orchestrator for DevOps tasks and code generation.',
21
+ long_description=open('README.md').read(),
22
+ long_description_content_type='text/markdown',
23
+ url='https://github.com/tu_usuario/devops_orchestrator_ai', # Reemplazar con el repo real
24
+ classifiers=[
25
+ 'Programming Language :: Python :: 3',
26
+ 'License :: OSI Approved :: MIT License',
27
+ 'Operating System :: OS Independent',
28
+ ],
29
+ python_requires='>=3.11',
30
+ )
system_tools.py ADDED
@@ -0,0 +1,55 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+
2
+ import subprocess
3
+ import os
4
+
5
+ class SystemTools:
6
+ def execute_shell_command(self, command: str, os_type: str = "linux") -> dict:
7
+ """Ejecuta un comando de shell y devuelve su salida."""
8
+ try:
9
+ if os_type == "windows":
10
+ # For Windows, use powershell.exe
11
+ process = subprocess.run(["powershell.exe", "-Command", command], capture_output=True, text=True, check=True, shell=True)
12
+ else: # Default to linux/android (bash)
13
+ process = subprocess.run(command, capture_output=True, text=True, check=True, shell=True)
14
+ return {"success": True, "output": process.stdout.strip(), "error": None}
15
+ except subprocess.CalledProcessError as e:
16
+ return {"success": False, "output": e.stdout.strip(), "error": e.stderr.strip()}
17
+ except Exception as e:
18
+ return {"success": False, "output": None, "error": str(e)}
19
+
20
+ def write_file(self, path: str, content: str) -> dict:
21
+ """Escribe contenido en un archivo."""
22
+ try:
23
+ os.makedirs(os.path.dirname(path), exist_ok=True)
24
+ with open(path, "w") as f:
25
+ f.write(content)
26
+ return {"success": True, "message": f"Archivo {path} escrito exitosamente.", "error": None}
27
+ except Exception as e:
28
+ return {"success": False, "message": None, "error": str(e)}
29
+
30
+ def read_file(self, path: str) -> dict:
31
+ """Lee el contenido de un archivo."""
32
+ try:
33
+ with open(path, "r") as f:
34
+ content = f.read()
35
+ return {"success": True, "content": content, "error": None}
36
+ except FileNotFoundError:
37
+ return {"success": False, "content": None, "error": f"Archivo {path} no encontrado."}
38
+ except Exception as e:
39
+ return {"success": False, "content": None, "error": str(e)}
40
+
41
+ def list_directory(self, path: str = ".") -> dict:
42
+ """Lista el contenido de un directorio."""
43
+ try:
44
+ items = os.listdir(path)
45
+ return {"success": True, "items": items, "error": None}
46
+ except FileNotFoundError:
47
+ return {"success": False, "items": None, "error": f"Directorio {path} no encontrado."}
48
+ except Exception as e:
49
+ return {"success": False, "items": None, "error": str(e)}
50
+
51
+ # Placeholder for package management, more complex and OS-specific
52
+ def manage_package(self, package_name: str, action: str, os_type: str = "linux") -> dict:
53
+ """Gestiona paquetes (instalar, desinstalar, etc.). Placeholder."""
54
+ return {"success": False, "message": "Gestión de paquetes no implementada completamente aún.", "error": "NotImplemented"}
55
+