MistriDevLab / app.py
acecalisto3's picture
Update app.py
e1c400c verified
raw
history blame
5.01 kB
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__)
@app.route("/")
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)