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: response = 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_output = response.choices[0].message.content.strip() try: translated = GoogleTranslator(source='en', target='fa').translate(english_output) except: translated = english_output items = [f"
  • {line}
  • " for line in translated.split("\n") if line.strip()] translated_html = "
      " + "".join(items) + "
    " return ( "
    " f"{translated_html}" "

    📢 برای مشاوره و راهنمایی تخصصی با گروه مشاوره کاسپین تماس بگیرید:
    " "021-88252497" "
    " ) except Exception as e: return f"
    ❌ خطا در تماس با مدل DeepSeek: {e}
    " # CSS سفارشی custom_css = """ /* پس‌زمینه کلی سفید و متن مشکی */ body, .gradio-container { background-color: white !important; color: black !important; } /* تیتر Markdown */ .gradio-container .markdown h2 { color: black !important; } /* استایل ورودی‌ها و دکمه‌ها */ input, textarea, select, button { background-color: white !important; color: black !important; border: 1px solid #ccc !important; } /* باکس خروجی: پس‌زمینه روشن و حاشیه مشکی */ #output_box { background-color: #f9f9f9 !important; color: black !important; border: 1px solid #333 !important; padding: 15px; border-radius: 4px; } /* برداشتن تم تیره Gradio */ .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()