File size: 3,878 Bytes
5bcdd9a
bce0618
5bcdd9a
bce0618
5bcdd9a
1e50313
bce0618
5bcdd9a
 
 
bce0618
5bcdd9a
 
 
634aaa9
5bcdd9a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
0d182a2
5bcdd9a
 
0d182a2
5bcdd9a
 
 
 
 
 
 
9521739
 
1e50313
9521739
 
c631e04
 
 
 
5bcdd9a
 
 
 
 
 
9258bc4
 
5bcdd9a
 
0d182a2
 
 
5bcdd9a
 
bce0618
0d182a2
5bcdd9a
 
 
 
 
 
9258bc4
bce0618
5bcdd9a
9258bc4
5bcdd9a
 
 
 
 
 
 
 
 
 
 
 
dc615f4
5bcdd9a
 
 
 
 
 
 
 
9258bc4
79d819b
5bcdd9a
 
 
 
 
bce0618
5bcdd9a
dc615f4
5bcdd9a
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
import gradio as gr
import os
import json
import logging
from transformers import pipeline
import utils  # Ensure this import is present

# Setup logging
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)

FILE_DIR = os.path.dirname(os.path.abspath(__file__))
EXAMPLES_PATH = os.path.join(FILE_DIR, 'examples.json')
OUTPUT_DIR = os.path.join(os.path.dirname(FILE_DIR), "auto_gpt_workspace")

# Create output directory if it doesn't exist
if not os.path.exists(OUTPUT_DIR):
    os.makedirs(OUTPUT_DIR)

# Custom CSS for styling
CSS = """
#chatbot {font-family: monospace;}
#files .generating {display: none;}
#files .min {min-height: 0px;}
"""

# UI Components
def get_api_key():
    return gr.Textbox(label="Hugging Face API Key", type="password")

def get_ai_name():
    return gr.Textbox(label="AI Name", placeholder="e.g. Entrepreneur-GPT")

def get_ai_role():
    return gr.Textbox(label="AI Role", placeholder="e.g. an AI designed to autonomously develop and run businesses.")

def get_description():
    return gr.Textbox(label="Project Description", placeholder="Enter a brief description of the project.")

def get_top_5_goals():
    return gr.Dataframe(row_count=(5, "fixed"), col_count=(1, "fixed"), headers=["AI Goals - Enter up to 5"], type="array")

def get_inferred_tasks():
    return gr.Textbox(label="Inferred Tasks", interactive=False)

def get_generated_files():
    """Get HTML element to display generated files."""
    files_list = utils.format_directory(OUTPUT_DIR)  # This function should list files in the directory
    return gr.HTML(f"<h3>Generated Files:</h3><pre><code style='overflow-x: auto'>{files_list}</pre></code>")

def get_download_btn():
    """Get download all files button."""
    return gr.Button("Download All Files", elem_id="download-btn")

class AutoAPI:
    def __init__(self, huggingface_key, ai_name, ai_role, top_5_goals):
        self.huggingface_key = huggingface_key
        self.ai_name = ai_name
        self.ai_role = ai_role
        self.top_5_goals = top_5_goals
        # Replace 'your-model-name' with a valid model identifier
        self.nlp_model = pipeline("text2text-generation", model="your-actual-model-name")

    def infer_tasks(self, description):
        # Use the NLP model to generate tasks based on the description
        tasks = self.nlp_model(description)
        return tasks[0]['generated_text'].split(',')

def start(huggingface_key, ai_name, ai_role, top_5_goals, description):
    try:
        auto_api = AutoAPI(huggingface_key, ai_name, ai_role, top_5_goals)
        logger.info("AutoAPI started with AI Name: %s, AI Role: %s", ai_name, ai_role)
        
        # Infer tasks based on the role and description
        tasks = auto_api.infer_tasks(description)
        logger.info("Inferred tasks: %s", tasks)
        
        return gr.Column(visible=False), gr.Column(visible=True), gr.update(value=tasks)
    except Exception as e:
        logger.error("Failed to start AutoAPI: %s", str(e))
        return gr.Column(visible=True), gr.Column(visible=False), gr.update(value=[])

# Main Gradio Interface
with gr.Blocks(css=CSS) as demo:
    gr.Markdown("# AutoGPT Task Inference")
    
    with gr.Row():
        api_key = get_api_key()
        ai_name = get_ai_name()
        ai_role = get_ai_role()
    
    description = get_description()
    top_5_goals = get_top_5_goals()
    
    start_btn = gr.Button("Start")
    main_pane = gr.Column(visible=False)
    setup_pane = gr.Column(visible=True)
    
    inferred_tasks = get_inferred_tasks()
    
    start_btn.click(
        start,
        inputs=[api_key, ai_name, ai_role, top_5_goals, description],
        outputs=[setup_pane, main_pane, inferred_tasks]
    )

    with main_pane:
        get_generated_files()
        get_download_btn()

# Launch the Gradio app
if __name__ == "__main__":
    demo.launch()