Spaces:
Sleeping
Sleeping
import os | |
import subprocess | |
import random | |
import json | |
from flask import Flask, render_template | |
from datetime import datetime | |
from gradio import Blocks | |
from safe_search import safe_search | |
from i_search import google, i_search as i_s | |
from agent import ( | |
ACTION_PROMPT, | |
ADD_PROMPT, | |
COMPRESS_HISTORY_PROMPT, | |
LOG_PROMPT, | |
LOG_RESPONSE, | |
MODIFY_PROMPT, | |
PREFIX, | |
SEARCH_QUERY, | |
READ_PROMPT, | |
TASK_PROMPT, | |
UNDERSTAND_TEST_RESULTS_PROMPT, | |
) | |
from utils import parse_action, parse_file_content, read_python_module_structure | |
from huggingface_hub import cached_download, hf_hub_url | |
from transformers import InferenceClient | |
app = Flask(__name__) | |
def index(): | |
return render_template("index.html") | |
class App(Blocks): | |
def __init__(self): | |
super().__init__() | |
self.app_state = {"components": []} | |
self.terminal_history = "" | |
self.components_registry = { | |
"Button": { | |
"properties": { | |
"label": "Click Me", | |
"onclick": "" | |
}, | |
"description": "A clickable button", | |
"code_snippet": "gr.Button(value='{{label}}', variant='primary')" | |
}, | |
"Text Input": { | |
"properties": { | |
"value": "", | |
"placeholder": "Enter text" | |
}, | |
"description": "A field for entering text", | |
"code_snippet": "gr.Textbox(label='{{placeholder}}')" | |
}, | |
"Image": { | |
"properties": { | |
"src": "#", | |
"alt": "Image" | |
}, | |
"description": "Displays an image", | |
"code_snippet": "gr.Image(label='{{alt}}')" | |
}, | |
"Dropdown": { | |
"properties": { | |
"choices": ["Option 1", "Option 2"], | |
"value": "" | |
}, | |
"description": "A dropdown menu for selecting options", | |
"code_snippet": "gr.Dropdown(choices={{choices}}, label='Dropdown')" | |
} | |
} | |
self.nlp_model_names = [ | |
"google/flan-t5-small", | |
"Qwen/CodeQwen1.5-7B-Chat-GGUF", | |
"bartowski/Codestral-22B-v0.1-GGUF", | |
"bartowski/AutoCoder-GGUF" | |
] | |
self.nlp_models = [] | |
self.initialize_nlp_models() | |
def initialize_nlp_models(self): | |
for nlp_model_name in self.nlp_model_names: | |
try: | |
cached_download(hf_hub_url(nlp_model_name, revision="main")) | |
self.nlp_models.append(InferenceClient(nlp_model_name)) | |
except: | |
self.nlp_models.append(None) | |
def get_nlp_response(self, input_text, model_index): | |
if self.nlp_models[model_index]: | |
response = self.nlp_models[model_index].text_generation(input_text) | |
return response.generated_text | |
else: | |
return "NLP model not available." | |
class Component: | |
def __init__(self, type, properties=None, id=None): | |
self.id = id or random.randint(1000, 9999) | |
self.type = type | |
self.properties = properties or self.components_registry[type]["properties"].copy() | |
def to_dict(self): | |
return { | |
"id": self.id, | |
"type": self.type, | |
"properties": self.properties, | |
} | |
def render(self): | |
if self.type == "Dropdown": | |
self.properties["choices"] = str(self.properties["choices"]).replace("[", "").replace("]", "").replace("'", "") | |
return self.components_registry[self.type]["code_snippet"].format(**self.properties) | |
def update_app_canvas(self): | |
components_html = "".join([f"<div>Component ID: {component['id']}, Type: {component['type']}, Properties: {component['properties']}</div>" for component in self.app_state["components"]]) | |
return components_html | |
def add_component(self, component_type): | |
if component_type in self.components_registry: | |
new_component = self.Component(component_type) | |
self.app_state["components"].append(new_component.to_dict()) | |
return ( | |
self.update_app_canvas(), | |
f"System: Added component: {component_type}\n", | |
) | |
else: | |
return None, f"Error: Invalid component type: {component_type}\n" | |
def run_terminal_command(self, command, history): | |
output = "" | |
try: | |
process = subprocess.Popen(command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) | |
output, error = process.communicate() | |
if error: | |
output = error | |
except Exception as e: | |
output = str(e) | |
self.terminal_history += f"{command}\n{output.decode('utf-8')}\n" | |
return self.terminal_history | |
if __name__ == "__main__": | |
app.run(debug=True) |