import gradio as gr from huggingface_hub import InferenceClient, HfApi import os import requests from typing import List, Dict, Union import traceback from PIL import Image from io import BytesIO import asyncio from gradio_client import Client import time import threading import json HF_TOKEN = os.getenv("HF_TOKEN") hf_client = InferenceClient("CohereForAI/c4ai-command-r-plus-08-2024", token=HF_TOKEN) hf_api = HfApi(token=HF_TOKEN) def get_headers(): if not HF_TOKEN: raise ValueError("Hugging Face token not found in environment variables") return {"Authorization": f"Bearer {HF_TOKEN}"} def get_app_py_content(space_id: str) -> str: app_py_url = f"https://huggingface.co/spaces/{space_id}/raw/main/app.py" try: response = requests.get(app_py_url, headers=get_headers()) if response.status_code == 200: return response.text else: return f"app.py file not found or inaccessible for space: {space_id}" except requests.RequestException: return f"Error fetching app.py content for space: {space_id}" def summarize_code(app_content: str) -> str: system_message = "당신은 Python 코드를 분석하고 요약하는 AI 조수입니다. 주어진 코드를 3줄 이내로 간결하게 요약해주세요." user_message = f"다음 Python 코드를 3줄 이내로 요약해주세요:\n\n{app_content}" messages = [ {"role": "system", "content": system_message}, {"role": "user", "content": user_message} ] try: response = hf_client.chat_completion(messages, max_tokens=200, temperature=0.7) return response.choices[0].message.content except Exception as e: return f"요약 생성 중 오류 발생: {str(e)}" def analyze_code(app_content: str) -> str: system_message = """당신은 Python 코드를 분석하는 AI 조수입니다. 주어진 코드를 분석하여 다음 항목에 대해 설명해주세요: A. 배경 및 필요성 B. 기능적 효용성 및 가치 C. 특장점 D. 적용 대상 및 타겟 E. 기대효과 기존 및 유사 프로젝트와 비교하여 분석해주세요.""" user_message = f"다음 Python 코드를 분석해주세요:\n\n{app_content}" messages = [ {"role": "system", "content": system_message}, {"role": "user", "content": user_message} ] try: response = hf_client.chat_completion(messages, max_tokens=1000, temperature=0.7) return response.choices[0].message.content except Exception as e: return f"분석 생성 중 오류 발생: {str(e)}" def explain_usage(app_content: str) -> str: system_message = "당신은 Python 코드를 분석하여 사용법을 설명하는 AI 조수입니다. 주어진 코드를 바탕으로 마치 화면을 보는 것처럼 사용법을 상세히 설명해주세요." user_message = f"다음 Python 코드의 사용법을 설명해주세요:\n\n{app_content}" messages = [ {"role": "system", "content": system_message}, {"role": "user", "content": user_message} ] try: response = hf_client.chat_completion(messages, max_tokens=800, temperature=0.7) return response.choices[0].message.content except Exception as e: return f"사용법 설명 생성 중 오류 발생: {str(e)}" def analyze_space(url: str): try: # URL에서 space_id 추출 space_id = url.split('spaces/')[-1] app_content = get_app_py_content(space_id) summary = summarize_code(app_content) analysis = analyze_code(app_content) usage = explain_usage(app_content) return summary, analysis, usage, app_content except Exception as e: print(f"Error in analyze_space: {str(e)}") print(traceback.format_exc()) return f"오류가 발생했습니다: {str(e)}", "", "", "" def create_ui(): try: css = """ footer {visibility: hidden;} .output-group { border: 1px solid #ddd; border-radius: 5px; padding: 10px; margin-bottom: 20px; } .scroll-lock { overflow: auto !important; max-height: 400px !important; } """ with gr.Blocks(css=css, theme="Nymbo/Nymbo_Theme") as demo: gr.Markdown("# HuggingFace Space Analyzer") with gr.Row(): with gr.Column(scale=6): # 왼쪽 60% url_input = gr.Textbox(label="HuggingFace Space URL") analyze_button = gr.Button("분석") with gr.Group(elem_classes="output-group scroll-lock"): summary_output = gr.Textbox(label="요약 (3줄 이내)", lines=3) with gr.Group(elem_classes="output-group scroll-lock"): analysis_output = gr.Textbox(label="분석", lines=15) with gr.Group(elem_classes="output-group scroll-lock"): usage_output = gr.Textbox(label="사용법", lines=10) with gr.Column(scale=4): # 오른쪽 40% with gr.Group(elem_classes="output-group scroll-lock"): app_py_content = gr.Code(language="python", label="메인 소스코드", lines=30) analyze_button.click( analyze_space, inputs=[url_input], outputs=[summary_output, analysis_output, usage_output, app_py_content] ) return demo except Exception as e: print(f"Error in create_ui: {str(e)}") print(traceback.format_exc()) raise if __name__ == "__main__": try: demo = create_ui() demo.launch() except Exception as e: print(f"Error in main: {str(e)}") print(traceback.format_exc())