File size: 2,503 Bytes
2543f2c
792f710
8c853ac
d751a8f
2543f2c
a95f6dc
792f710
4f768b5
a95f6dc
4f768b5
792f710
4f768b5
792f710
1c68ea4
4f768b5
d751a8f
2543f2c
a95f6dc
2543f2c
792f710
b98b6c1
 
 
792f710
e63032a
 
 
d751a8f
 
ae1598f
d751a8f
ae1598f
 
 
 
 
2543f2c
1c68ea4
ae1598f
a95f6dc
 
792f710
1c68ea4
 
 
4f768b5
2543f2c
a95f6dc
2543f2c
 
 
 
 
 
 
 
 
4f768b5
ae1598f
 
2543f2c
 
d751a8f
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
import gradio as gr
from transformers import AutoTokenizer, AutoModelForCausalLM
from deep_translator import GoogleTranslator
import torch

# انتخاب مدل پایدار
model_id = "google/gemma-7b-it"

# بارگذاری مدل و توکنایزر
tokenizer = AutoTokenizer.from_pretrained(model_id)
model = AutoModelForCausalLM.from_pretrained(
    model_id,
    torch_dtype=torch.float16 if torch.cuda.is_available() else torch.float32,
    device_map="auto"
)
model.eval()

# تابع اصلی پیشنهاد موضوع پایان‌نامه
def generate_topics(field, major, keywords, audience, level):
    prompt = f"""<bos>[INST]Suggest 3 academic thesis topics based on the following:
Field: {field}
Specialization: {major}
Keywords: {keywords}
Target Audience: {audience}
Level: {level}[/INST]"""

    inputs = tokenizer(prompt, return_tensors="pt").to(model.device)
    with torch.no_grad():
        outputs = model.generate(**inputs, max_new_tokens=256)
    english_output = tokenizer.decode(outputs[0], skip_special_tokens=True).strip()

    if not english_output:
        return "<div dir='rtl' style='color: red;'>❌ مشکلی در تولید موضوعات رخ داد. لطفاً دوباره تلاش کنید.</div>"

    translated_output = GoogleTranslator(source='en', target='fa').translate(english_output).strip()
    translated_output_html = translated_output.replace("\n", "<br>")

    html_output = (
        "<div dir='rtl' style='text-align: right; font-family: Tahoma, sans-serif; "
        "font-size: 16px; line-height: 1.8; min-height: 250px; max-height: 400px; "
        "overflow-y: auto; border: 1px solid #ccc; padding: 10px; background-color: #fdfdfd;'>"
        f"{translated_output_html}"
        "<br><br>📢 برای مشاوره و راهنمایی تخصصی با گروه مشاوره کاسپین تماس بگیرید:<br>"
        "<strong>021-88252497</strong></div>"
    )
    return html_output

# رابط کاربری Gradio
iface = gr.Interface(
    fn=generate_topics,
    inputs=[
        gr.Textbox(label="رشته"),
        gr.Textbox(label="گرایش"),
        gr.Textbox(label="کلیدواژه‌ها"),
        gr.Textbox(label="جامعه هدف"),
        gr.Dropdown(choices=["کارشناسی ارشد", "دکتری"], label="مقطع")
    ],
    outputs=gr.HTML(label="موضوعات پیشنهادی"),
    title="🎓 پیشنهادگر موضوع پایان‌نامه کاسپین",
    theme="default"
)

iface.launch()