Spaces:
Sleeping
Sleeping
File size: 3,603 Bytes
b3e3a0c 7ebae40 b3e3a0c ac5eb89 7ebae40 2ba6c15 7ebae40 b3e3a0c 7ebae40 8065f07 b3e3a0c 7ebae40 b3e3a0c cbe25cd b3e3a0c ac5eb89 b3e3a0c 7ebae40 2ba6c15 7ebae40 |
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 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 |
import logging
import os
import tempfile
import time
import gradio as gr
from boilerplate_x.generator import ProjectGenerator
from blocks import customisation_block, github_repo_block
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger("gradio")
INTRO_MD = """
<center>
# Boilerplate-X
Create project boilerplate for any programming language in minutes, with just an idea. Powered by Langchain and chatGPT API.
[![GitHub](https://img.shields.io/badge/github-%23121011.svg?style=for-the-badge&logo=github&logoColor=white)](https://github.com/ajndkr/boilerplate-x)
</center>"""
BOOL2STR = {True: "yes", False: "no"}
def generate_boilerplate(
api_key: str,
prompt: str,
unit_tests: bool,
dockerization: bool,
github_actions: bool,
pre_commit_hooks: bool,
gh_token: str,
gh_repo_name: str,
private: bool,
):
"""Generates project boilerplate."""
if not api_key:
gr.Error("Please enter your OpenAI API key!")
os.environ["OPENAI_API_KEY"] = api_key
with tempfile.TemporaryDirectory() as output_path:
customisation_kwargs = {
"unit_tests": BOOL2STR[unit_tests],
"dockerization": BOOL2STR[dockerization],
"github_actions": BOOL2STR[github_actions],
"pre_commit_hooks": BOOL2STR[pre_commit_hooks],
}
if not gh_token:
gr.Error("Please enter your GitHub token!")
if not gh_repo_name:
gr.Error("Please enter your GitHub repository name!")
github_repo_creator_kwargs = {
"token": gh_token,
"repo_name": gh_repo_name,
"private": private,
"target_folder": output_path,
}
generator = ProjectGenerator(
prompt=prompt,
output_path=output_path,
verbose=True,
customisation_kwargs=customisation_kwargs,
github_repo_creator_kwargs=github_repo_creator_kwargs,
)
try:
logger.info("Generating project boilerplate...")
generator.generate_template()
except Exception as e:
logger.error(e)
raise gr.Error(e)
# wait for GitHub repo to be created
time.sleep(1)
return f"Your project is now available on {generator.github_repo_url} 🚀 !"
def build_app():
"""Builds the Gradio UI."""
block = gr.Blocks(title="Boilerplate X")
with block:
gr.Markdown(INTRO_MD)
openai_api_key = gr.Textbox(
placeholder="Paste your OpenAI API key",
label="OpenAI API Key",
lines=1,
type="password",
)
prompt = gr.Textbox(
placeholder="Enter your project idea",
label="Prompt",
lines=1,
)
(
unit_tests,
dockerization,
github_actions,
pre_commit_hooks,
) = customisation_block()
gh_token, gh_repo_name, private = github_repo_block()
generate = gr.Button("⚡ Generate Boilerplate ⚡")
output = gr.Markdown()
generate.click(
fn=generate_boilerplate,
inputs=[
openai_api_key,
prompt,
unit_tests,
dockerization,
github_actions,
pre_commit_hooks,
gh_token,
gh_repo_name,
private,
],
outputs=[output],
)
return block
if __name__ == "__main__":
app = build_app()
app.queue().launch()
|