Spaces:
Sleeping
Sleeping
| 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. | |
| [](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: | |
| raise gr.Error("Please enter your GitHub token!") | |
| if not gh_repo_name: | |
| raise 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() | |