Skip to content

Commit 3135aaa

Browse files
committed
add llm response
1 parent fcd4d97 commit 3135aaa

17 files changed

Lines changed: 190 additions & 74 deletions

app/__init__.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,6 @@ def init_app(app):
4141
app.teardown_appcontext(close_db)
4242
app.cli.add_command(init_db_command)
4343

44-
from .ollama_client import build_prompt, call_ollama
4544
from .auth import auth_bp
4645
from .routes import main_bp
4746

-73 Bytes
Binary file not shown.
1.02 KB
Binary file not shown.
255 Bytes
Binary file not shown.
3.96 KB
Binary file not shown.
2.3 KB
Binary file not shown.

app/llm/config.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
VLLM_SERVER_URL = ""
2+
VLLM_MODEL_NAME = ""

app/llm/prompts.py

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
def research_method_prompt(user_answers_text: str) -> str:
2+
return f"""
3+
ما مجموعه‌ای از سوالات ساخت‌یافته درباره طراحی تحقیق از یک کاربر پرسیده‌ایم. این سوالات شامل اطلاعاتی از جمله عنوان تحقیق، بیان مسئله، اهمیت موضوع، فرضیات، متغیرها، جامعه آماری، روش نمونه‌گیری، نوع و رویکرد تحقیق، ابزار گردآوری داده‌ها، و روش‌های تحلیل بوده‌اند.
4+
5+
پاسخ‌های کامل کاربر به این سوالات در ادامه آمده است:
6+
7+
{user_answers_text}
8+
9+
با توجه دقیق به این پاسخ‌ها، لطفاً یک **پیشنهاد جامع، دقیق، منطقی و تخصصی برای روش تحقیق این پروژه** ارائه دهید. پیشنهاد شما باید به‌گونه‌ای تدوین شود که برای استفاده مستقیم در بخش "روش تحقیق" یک پروپوزال دانشگاهی در مقطع تحصیلات تکمیلی (کارشناسی‌ارشد یا دکتری) قابل استفاده باشد. لحن نگارش باید رسمی، آکادمیک و علمی باشد.
10+
11+
گزارش نهایی شما باید شامل بخش‌های زیر باشد:
12+
13+
1. **بیان مسئله، اهمیت و ضرورت تحقیق** (بر اساس داده‌های ارائه‌شده توسط کاربر)
14+
2. **پیشنهاد نوع و رویکرد تحقیق** (کمی، کیفی یا آمیخته) با تحلیل دلایل مناسب بودن آن برای موضوع مورد نظر
15+
3. **پیشنهاد دقیق روش تحقیق** (مانند شبه‌آزمایشی، مطالعه موردی، پدیدارشناسی و...) با توضیح دلیل انتخاب آن
16+
4. **ابزارهای گردآوری داده‌ها** (مثلاً پرسشنامه، مصاحبه عمیق، مشاهده و...) همراه با توجیه علمی و کاربردی بودن آن‌ها
17+
5. **روش‌ها و شیوه‌های تحلیل داده‌ها** (مثلاً آزمون‌های آماری، کدگذاری کیفی و...) متناسب با رویکرد تحقیق
18+
6. **پیشنهاد نرم‌افزار تحلیل مناسب** (در صورت نیاز)
19+
7. **برنامه زمان‌بندی پیشنهادی برای اجرای تحقیق**
20+
8. **پیش‌بینی چالش‌ها و موانع احتمالی** در اجرای تحقیق و ارائه **راهکارهای مقابله‌ای**
21+
22+
در صورت کافی بودن داده‌ها، **خودتان بهترین نوع و روش تحقیق را نیز به‌صورت مستقل پیشنهاد دهید** و آن را در قالبی منسجم، علمی و توجیه‌پذیر ارائه کنید.
23+
24+
توجه داشته باشید که پیشنهاد نهایی باید مبتنی بر پاسخ‌های ارائه‌شده باشد و از کلی‌گویی یا فرضیات خارج از داده‌های موجود پرهیز شود؛ مگر در مواردی که لازم است برای کامل شدن طرح تحقیق، یک پیشنهاد منطقی و علمی ارائه گردد.
25+
"""
26+
27+
28+
29+
system_prompt = """
30+
شما یک پژوهشگر حرفه‌ای با سابقه نگارش پروپوزال‌های دانشگاهی هستید.
31+
وظیفه شما تحلیل پاسخ‌های کاربر به سوالات طراحی تحقیق و ارائه گزارش دقیق و ساختارمند از روش تحقیق اوست.
32+
گزارش نهایی باید با لحن رسمی و علمی نوشته شود و قابلیت استفاده مستقیم در یک پروپوزال دانشگاهی را داشته باشد.
33+
"""

app/llm/vllm_server.py

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
import json
2+
import requests
3+
import time
4+
import re
5+
from .config import VLLM_SERVER_URL, VLLM_MODEL_NAME
6+
class Llm:
7+
def __init__(self):
8+
self.vllm_url = VLLM_SERVER_URL
9+
self.model = VLLM_MODEL_NAME
10+
11+
12+
13+
14+
def vllm_inference(self, user_message,system_message):
15+
start_time = time.time()
16+
prompt = [{"role": "user", "content": user_message},
17+
{"role": "system", "content": system_message}]
18+
19+
payload = {
20+
"model": self.model,
21+
"messages": prompt,
22+
"temperature": 0.5,
23+
}
24+
25+
try:
26+
# Send a POST request to VLLM server
27+
response = requests.post(
28+
self.vllm_url,
29+
headers={"Content-Type": "application/json"},
30+
data=json.dumps(payload)
31+
)
32+
33+
if response.status_code == 200:
34+
response_data = response.json()
35+
# print("status code is 200")
36+
end_time = time.time()
37+
38+
print(f"Time taken for inference: {end_time - start_time} seconds")
39+
return response_data
40+
else:
41+
print(f"Error in response data: {response.status_code} - {response.text}")
42+
return None
43+
except Exception as e:
44+
print(f"Error : {e}")
45+
return None
46+
47+
def clean_text(self, content):
48+
cleaned_content = content.strip() # Remove leading/trailing spaces
49+
cleaned_content = re.sub(r'\n+', '\n', cleaned_content) # Collapse multiple newlines
50+
cleaned_content = re.sub(r'\s+', ' ', cleaned_content) # Optional: collapse all excessive spaces to single space
51+
cleaned_content = re.sub(r'\*\*(.*?)\*\*', r'\1', cleaned_content) # Optional: remove Markdown bold **text**
52+
return cleaned_content

app/ollama_client.py

Lines changed: 0 additions & 54 deletions
This file was deleted.

0 commit comments

Comments
 (0)