import gradio as gr import os from deep_translator import GoogleTranslator from huggingface_hub import InferenceClient # دریافت توکن HF_TOKEN = os.environ.get("HUGGINGFACE_API_TOKEN") if not HF_TOKEN: raise RuntimeError("Missing HUGGINGFACE_API_TOKEN secret") hf_client = InferenceClient(token=HF_TOKEN) def generate_topics(field, major, keywords, audience, level): if not all([field.strip(), major.strip(), keywords.strip(), audience.strip()]): return "
❌ لطفاً همه فیلدها را پر کنید.
" base_prompt = ( f"Suggest 3 academic thesis topics based on the following:\n" f"Field: {field}\n" f"Specialization: {major}\n" f"Keywords: {keywords}\n" f"Target Audience: {audience}\n" f"Level: {level}\n" ) extra = ( "Since this is a doctoral-level project, focus on proposing theoretical frameworks, " "advanced modeling approaches, and in-depth methodological contributions." if level == "دکتری" else "Focus on practical and applied thesis topics suitable for a master's level student." ) prompt = base_prompt + extra try: resp = hf_client.chat.completions.create( model="deepseek-ai/DeepSeek-Prover-V2-671B", messages=[ {"role":"system","content":"You are an academic advisor assistant."}, {"role":"user","content":prompt} ], temperature=0.7, max_tokens=512 ) english = resp.choices[0].message.content.strip() try: translated = GoogleTranslator(source='en', target='fa').translate(english) except: translated = english items = [f"
  • {l}
  • " for l in translated.split("\n") if l.strip()] html = "
      " + "".join(items) + "
    " return ( "
    " f"{html}" "

    📢 برای مشاوره تخصصی و ارائه موضوع های حرفه ای با کاسپین تماس بگیرید:
    " "021-88252497" "
    " ) except Exception as e: return f"
    ❌ خطا: {e}
    " # CSS سفارشی (سفید/مشکی + پنهان‌سازی فوتر + اصلاح باکس پاسخ) custom_css = """ body, .gradio-container { background-color: white !important; color: black !important; } input, textarea, select, button { background-color: white !important; color: black !important; border: 1px solid #ccc !important; } /* تیتر و Markdown */ .markdown, .markdown h1, .markdown h2, .markdown h3, .markdown p { color: black !important; } /* باکس خروجی: پس‌زمینه کاملاً سفید و متن مشکی، شامل تمام زیرالمان‌ها */ #output_box { background-color: white !important; border: 1px solid #333 !important; padding: 15px !important; border-radius: 4px !important; } #output_box, #output_box * { color: black !important; } /* پنهان‌سازی کامل فوتر Gradio */ footer { display: none !important; } /* غیرفعال‌سازی تم تیره */ .gradio-container.dark { background-color: white !important; color: black !important; } """ with gr.Blocks(css=custom_css, theme="default") as app: gr.Image(value="logo.png", interactive=False, show_label=False) gr.Markdown("## 🎓 پیشنهادگر موضوع پایان‌نامه کاسپین") with gr.Row(): with gr.Column(): field = gr.Textbox(label="رشته", placeholder="مثال: کامپیوتر") major = gr.Textbox(label="گرایش", placeholder="مثال: هوش مصنوعی") keywords = gr.Textbox(label="کلیدواژه‌ها", placeholder="مثال: یادگیری عمیق، بینایی ماشین") audience = gr.Textbox(label="جامعه هدف", placeholder="مثال: دانشجویان دکتری") level = gr.Dropdown(["کارشناسی ارشد","دکتری"], label="مقطع") submit = gr.Button("🎯 پیشنهاد موضوع") with gr.Column(): output = gr.HTML(elem_id="output_box") submit.click( fn=generate_topics, inputs=[field, major, keywords, audience, level], outputs=output ) if __name__ == "__main__": app.launch()