Spaces:
Sleeping
Sleeping
| import gradio as gr | |
| from scripts.github_analyzer import GitHubAnalyzer | |
| from scripts.topic_list import TOPIC_LIST | |
| analyzer = GitHubAnalyzer() | |
| async def process_url( | |
| url: str, | |
| main_cat: str, | |
| sub_cat: str, | |
| use_gpu: bool | |
| ) -> tuple[str, str, str]: | |
| """ | |
| Process GitHub URL and generate topics | |
| Args: | |
| url: GitHub repository URL | |
| main_cat: Main category for classification | |
| sub_cat: Sub-category for classification | |
| use_gpu: Whether to use GPU for processing | |
| Returns: | |
| Tuple of (readme_topics, code_topics, dependencies) | |
| """ | |
| try: | |
| if not all([url, main_cat, sub_cat]): | |
| return "Please select all categories", "", "" | |
| analyzer.set_device("cuda" if use_gpu else "cpu") | |
| response = await analyzer.analyze_repository(url, main_cat, sub_cat) | |
| if not response.success: | |
| return response.errors[0].message, "", "" | |
| # Modified output format: only keywords without scores | |
| readme_topics = " ".join([ | |
| f"#{topic['topic'].lower()}" | |
| for topic in response.data["readme_topics"] | |
| ]) | |
| code_topics = " ".join([ | |
| f"#{topic['topic'].lower()}" | |
| for topic in response.data["code_topics"] | |
| ]) | |
| dependencies = " ".join([ | |
| f"#{dep.lower()}" | |
| for dep in response.data["dependencies"] | |
| ]) | |
| return readme_topics, code_topics, dependencies | |
| except Exception as e: | |
| return f"Error: {str(e)}", "", "" | |
| def create_interface(): | |
| """Create and configure the Gradio interface""" | |
| with gr.Blocks() as demo: | |
| gr.Markdown("# Enhanced GitHub Topic Generator") | |
| with gr.Row(): | |
| url_input = gr.Textbox( | |
| label="GitHub URL", | |
| placeholder="Enter GitHub repository URL" | |
| ) | |
| with gr.Row(): | |
| main_category = gr.Dropdown( | |
| choices=[None] + list(TOPIC_LIST.keys()), | |
| label="Main Category", | |
| value=None | |
| ) | |
| sub_category = gr.Dropdown( | |
| choices=[], | |
| label="Sub Category" | |
| ) | |
| with gr.Row(): | |
| use_gpu = gr.Checkbox( | |
| label="Use GPU (Check if you have CUDA-capable GPU)", | |
| value=False | |
| ) | |
| with gr.Row(): | |
| generate_btn = gr.Button("Generate Topics") | |
| with gr.Row(): | |
| readme_topics = gr.Textbox(label="README Topics") | |
| code_topics = gr.Textbox(label="Code Analysis Topics") | |
| dependencies = gr.Textbox(label="Dependencies") | |
| def update_sub_category(main_cat): | |
| """Update sub-category choices based on main category selection""" | |
| return gr.Dropdown( | |
| choices=list(TOPIC_LIST[main_cat].keys()) if main_cat else [] | |
| ) | |
| main_category.change( | |
| update_sub_category, | |
| inputs=main_category, | |
| outputs=sub_category | |
| ) | |
| generate_btn.click( | |
| process_url, | |
| inputs=[url_input, main_category, sub_category, use_gpu], | |
| outputs=[readme_topics, code_topics, dependencies] | |
| ) | |
| return demo | |
| if __name__ == "__main__": | |
| demo = create_interface() | |
| demo.launch(share=True) |