Spaces:
Running
Running
File size: 4,595 Bytes
2543f2c f35dc2e 8c853ac 097fb1d 2543f2c 29c5484 88a1e0a 2365ad3 88a1e0a df8f630 2543f2c 29c5484 88a1e0a df8f630 cad9104 f35dc2e cad9104 1c68ea4 df8f630 cad9104 f35dc2e cad9104 2365ad3 f35dc2e 2365ad3 88a1e0a df8f630 88a1e0a df8f630 f35dc2e df8f630 f35dc2e ca87238 2aca398 df8f630 29c5484 2aca398 f35dc2e 88a1e0a f35dc2e df8f630 2543f2c 88a1e0a df8f630 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 |
import gradio as gr
import os
from deep_translator import GoogleTranslator
from huggingface_hub import InferenceClient
# دریافت توکن از محیط (در Hugging Face Secrets تنظیم شود)
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 "<div style='color: red;'>❌ لطفاً همه فیلدها را پر کنید.</div>"
# ساخت پرامپت پایه
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"
)
# افزودن جزئیات بیشتر برای دکتری
if level == "دکتری":
extra = (
"Since this is a doctoral-level project, focus on proposing theoretical frameworks, "
"advanced modeling approaches, and in-depth methodological contributions."
)
else:
extra = (
"Focus on practical and applied thesis topics suitable for a master's level student."
)
prompt = base_prompt + extra
try:
# فراخوانی مدل DeepSeek با endpoint چت
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 Exception:
translated = english_output
# قالببندی HTML به لیست مرتب
items = [f"<li>{line}</li>" for line in translated.split("\n") if line.strip()]
translated_html = "<ol>" + "".join(items) + "</ol>"
return (
"<div>"
f"{translated_html}"
"<br><br>📢 برای مشاوره و راهنمایی تخصصی با گروه مشاوره کاسپین تماس بگیرید:<br>"
"<strong>021-88252497</strong>"
"</div>"
)
except Exception as e:
return f"<div style='color: red;'>❌ خطا در تماس با مدل DeepSeek: {e}</div>"
# CSS برای لودر (ساعت شنی)
css = """
/* اسپینر (ساعت شنی) */
.spinner {
display: none;
width: 60px;
height: 60px;
margin: 20px auto;
border: 6px solid #444;
border-top: 6px solid #1e88e5;
border-radius: 50%;
animation: spin 1s linear infinite;
}
@keyframes spin { to { transform: rotate(360deg); } }
/* هنگام پردازش (processing)، اسپینر را نمایش بده */
.gradio-container.processing .spinner {
display: block !important;
}
"""
# ساخت برنامه با Blocks
with gr.Blocks(css=css, theme="default") as app:
gr.Markdown("## 🎓 پیشنهادگر موضوع پایاننامه کاسپین")
with gr.Row():
with gr.Column(scale=1):
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(scale=1):
spinner = gr.HTML("<div class='spinner'></div>")
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()
|