File size: 3,676 Bytes
2543f2c
f35dc2e
8c853ac
097fb1d
2543f2c
1bd73ac
88a1e0a
 
 
 
1bd73ac
2365ad3
88a1e0a
2543f2c
88a1e0a
 
 
cad9104
f35dc2e
 
 
 
 
cad9104
1c68ea4
9c119e5
 
 
 
 
 
 
cad9104
 
f35dc2e
2365ad3
 
 
 
 
 
 
 
f35dc2e
2365ad3
14cf527
88a1e0a
9c119e5
 
 
14cf527
9c119e5
 
f35dc2e
ca87238
2aca398
9c119e5
29c5484
2aca398
 
f35dc2e
14cf527
f35dc2e
88a1e0a
f35dc2e
14cf527
 
 
 
 
 
1bd73ac
 
 
 
 
 
 
14cf527
1bd73ac
 
 
 
 
 
 
 
 
2543f2c
88a1e0a
1bd73ac
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
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"
    )
    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"<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>"

# اینجا کد Blocks با نمایش لوگو
with gr.Blocks(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()