From 1532cb4ebf85b830087f528385c1996b14b9856e Mon Sep 17 00:00:00 2001 From: mostafa7171 Date: Sun, 1 Feb 2026 16:51:45 +0330 Subject: [PATCH] update get_ai_response --- .idea/vcs.xml | 6 ++ Houshyar/__pycache__/settings.cpython-312.pyc | Bin 2404 -> 2426 bytes Houshyar/__pycache__/urls.cpython-312.pyc | Bin 0 -> 1075 bytes Houshyar/__pycache__/wsgi.cpython-312.pyc | Bin 0 -> 619 bytes chat/__pycache__/__init__.cpython-312.pyc | Bin 0 -> 125 bytes chat/__pycache__/admin.cpython-312.pyc | Bin 0 -> 169 bytes chat/__pycache__/apps.cpython-312.pyc | Bin 0 -> 366 bytes chat/__pycache__/models.cpython-312.pyc | Bin 0 -> 166 bytes chat/__pycache__/schema.cpython-312.pyc | Bin 0 -> 8555 bytes chat/__pycache__/urls.cpython-312.pyc | Bin 0 -> 273 bytes chat/__pycache__/views.cpython-312.pyc | Bin 0 -> 2842 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 136 bytes chat/schema.py | 76 ------------------ chat/urls.py | 2 +- chat/views.py | 4 +- db.sqlite3 | 0 16 files changed, 9 insertions(+), 79 deletions(-) create mode 100644 .idea/vcs.xml create mode 100644 Houshyar/__pycache__/urls.cpython-312.pyc create mode 100644 Houshyar/__pycache__/wsgi.cpython-312.pyc create mode 100644 chat/__pycache__/__init__.cpython-312.pyc create mode 100644 chat/__pycache__/admin.cpython-312.pyc create mode 100644 chat/__pycache__/apps.cpython-312.pyc create mode 100644 chat/__pycache__/models.cpython-312.pyc create mode 100644 chat/__pycache__/schema.cpython-312.pyc create mode 100644 chat/__pycache__/urls.cpython-312.pyc create mode 100644 chat/__pycache__/views.cpython-312.pyc create mode 100644 chat/migrations/__pycache__/__init__.cpython-312.pyc create mode 100644 db.sqlite3 diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..94a25f7 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/Houshyar/__pycache__/settings.cpython-312.pyc b/Houshyar/__pycache__/settings.cpython-312.pyc index bd8701346c7d06fa79f82ec2ee20aad739066161..c6140412e26c142ff47158fc2c99fdb44efe8034 100644 GIT binary patch delta 86 zcmaDN^h=2MG%qg~0}yQTs?QAH$lJrj$T4{q(=@SLd_}3nCGlxRiMgre`9;~cSdudm pOEw!YpJZa>-TaF+j)_ryawJC}JEss+1K%gH$s0M=v#0_M0szSJ8rJ{- delta 63 zcmew*^hAjFG%qg~0}x#EsLwRs$lJrj$ToQv)3nWQ%qN)`xi<^2#W69ePR{2DWM>y* RYT)}MH2FBkdKP7%4gfuX5V-&V diff --git a/Houshyar/__pycache__/urls.cpython-312.pyc b/Houshyar/__pycache__/urls.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..be500ee31c5a7e7020b2d257f94b1cf0c5882d39 GIT binary patch literal 1075 zcmb7DF>ljA7(F|7lRBgo3n0O82$j@QYXcGtR-r$S~(f5|+XN<8X`RA|4|SGtNdhl%C_f ziZR^Dd6FS1F;B$~Oo)(>vs_{U6^($B!M6mz6CT`D9F%bkNvi1RlsHQ;5*P}M0|%-V zOPPtl_ahbxFB+kA$m($+qdrdk2i_fDvW$en*I-|b7ryiKJ)(+B1kPrjhNb3mY)N|8 zgO8&Kq7)LEF)jlL2b@tz$9aH>t&9MGW1(Px6T8LLFuH|eguK!V^@g5R=O|tC%p=dh|lRP5nP=!#= z)7JD6*ZFLh!9XQN9goK1Wfu;rD1&KS)8p`T;I+sKyHbYo&uVuQHuP11^`x$Dl)PQn zb$;rr=^BNNB1%%%EG(UP(X7yWb7kM(vrtC-z4)^`d>gVgn TmzR#M+b4Eo(fruv9YydP%&$C; literal 0 HcmV?d00001 diff --git a/Houshyar/__pycache__/wsgi.cpython-312.pyc b/Houshyar/__pycache__/wsgi.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e0899c23b4c7f8b11c4186e2ab3e1f2c61502879 GIT binary patch literal 619 zcmYjPF>ezw6t?d|Q(b5T745`eA(lvR7Z!#JAyrLDgCHGJgcKoN-1E!DkF0Ep6Q6Ng%=3J8@7jTbg0B>YW zs<(oGsYv^5Ol7P}PmxLjkikR08I07CQ2~Qgs96Hi1V=jNf%m7Fv)jP=tr$#LoP}3x zm8>tc-mIaOSluOsaJMh|`<=dE|*eM1|c(8k%Of7aajf?7Z8cRttep477Imh>N! C^|Sf_ literal 0 HcmV?d00001 diff --git a/chat/__pycache__/__init__.cpython-312.pyc b/chat/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5532a38d0db11aed2ba6ac06265c1466b1e4f4fe GIT binary patch literal 125 zcmX@j%ge<81bLqInIQTxh(HIQS%4zb87dhx8U0o=6fpsLpFwJV$v9iZc;uHBXH+H@ y#Uy7Wmc+!zXXa&=#K-FuRQ}?y$<0qG%}KQ@Vg)K@1ma>4<0CU8BV!RWkOctRaT-7X literal 0 HcmV?d00001 diff --git a/chat/__pycache__/admin.cpython-312.pyc b/chat/__pycache__/admin.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e4b346f3f2f530bc2822b89f6cf224ba1077b6b4 GIT binary patch literal 169 zcmX@j%ge<81bLqInNC3ZF^B^LOi;#W0U%>KLkdF*V-7mQTYM>5iFxVyddc~DB}JJ@Ma)12D;Yk6)cullwu$ z<7#Gzx+tbf7ERWdAdV*EEl$UR0_Xg^w9NEmh%|&`gmOL$02$L6QW>HcQy8L{QW&F{ zE15KzZ*e(iB$hz*-C{`wvi&q!ZgIrN=OyN*#>d~{ijU9DPbtj-v3cU-3riDopfW5V zdL_eWkomtPoULL!@=J>|Die!hK&Heb78Dfg6;u|1`~)UgfQ({xAko5bgIloCrHBV6 z;|FvGcS=@bUV6SBNLvxee-Mq_AQo65FOc<%!v^9QyCQxd7v!~K5g_q_nURt4E`#D1 QHbzFF36ftKfD~9407$k`MgRZ+ literal 0 HcmV?d00001 diff --git a/chat/__pycache__/models.cpython-312.pyc b/chat/__pycache__/models.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..860bf0ee1720c1368c0f1ca2ca6111fccca2e8c3 GIT binary patch literal 166 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 literal 0 HcmV?d00001 diff --git a/chat/__pycache__/urls.cpython-312.pyc b/chat/__pycache__/urls.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d7e0683e803e2864f1af27e7ebd109a2746eea2e GIT binary patch literal 273 zcmX@j%ge<81P24_GaG>PV-N=hSfGs020+Gih7^Vr#vF!R#wbQc5SuB7DVI5lnUR5s zA(b(OIhA=e6GVMFV-!mzize$!5Lc7&7E3{5Nd}PSPfsn0Pt1%jN-ZwP&nr%?Vo5B{ z*7wt7y~Ul9m6(^FuUA@>Q(VLh)OCw1IU}(|uPigQytoMDj9c75IiNWusYQ9kD;Yk6 zjQ%CzY!%~?Us{||nOGD9(hvhOK(C=2tEf0;$`12YppQzLf~Cr}9hF1tkL literal 0 HcmV?d00001 diff --git a/chat/__pycache__/views.cpython-312.pyc b/chat/__pycache__/views.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..51e695806505d2bdbaf87573feaf5cb22dc64a15 GIT binary patch literal 2842 zcmZuzS!^4}8J;D%%jG4ChwRXDEc!?sr6P6Ol7%2JWyzNuS(aowCJYcO?uuG!$)#qN zmT6EeQ}|F(6?LENA_)?-1uP$k<2pd!ilXpaUrZ=~mTL=5TJ#}rbft&Fed#}>)^yzt zuruGx|Nk@pHUI2iJRT>4_U`0QL-h&2VupV~^Wwb5`Lqj<}O(Ye85Q%^wA5#={A(kyr zJRy;snk5oo?sQJd#!dhVr6eseBP*JONn!@8nZ$fvA{uOS<#%K*lEZ2`k~^QgFkFaC z_YNHrN$>f>k-~&H-#eWqb03Z64h&rGNzM-}MCK2QBg11|saYYP7t;sN<)$Sqrle&h z(jy;>^^kMDGd)wiL(25r(US)v{ql5|Iu#R6_Yd^+jdxAvx+jkgjr3>JCk~xT#^=>p zRTw%kh7XNK#)eLfUpRZRCw=BvK^|2S*{(~cdkcLBQpsc81FyfcIv-5sbJVOIU}ig&9IH1o}5Z< z1+5kx4tgtm8?zAHTd0WAwdMcr(v;(kCcX;(B2#3@+Zt;!h!)W*GaB8w*3yv3Z?*?E zGnpol<}#_p#-5g<<^P__rjRMQXcf64oU~}uJmwDRCKEMAt=Ysyn`nQ)-`}!kku9?6 zfJtkNX4)>YqNB)sibQ9Th2Hf!yU00^7Bo52+f39L({DAfiPEhmYK)>=^b|R<=`%}; zdEk9zk-cb7?`&|HNNf%POz$%1jWHc=U=yYHny4|pvWaiRsmK>uG4Pq?wMf0!kTB8f zk=l#2edhW;gx^|pX#35%=qox*JD_;@7x@cNjust1b}SFp#|35qUAA683ru@(%;3$N zXs{B-D!vjtvvoDYG6`d8J}+ZQ#I)!cTt*cog&3~-n2@tG>d|(qVa;R3u%(HbHMmO> zmS+li>T72hn*O-5q~EDr4I6j$JNhGiMSnCH-jnYK`W|PU;~@|pR&M;Qv|PEN-+8ti z)>mpX{h|I?zX!|uZz|U)$6$>=f1B=IgO#iLA1a@~_CF6lTQ=^7D}RKo9_wG#4y#-P zG9~GcYARgUVdt*^J_O2A>8mV2&bg1gau8`rozX@ryvORk~)|_0!-kFd-`v|t<>)8 zl^bDj)1%jwdF2G){01}w6~Qr}=QrWHBcpIWCuGTjgbkZ0XhM4nra5g`p@LxtAWVyh z5j;LMHJ<3}>Pig7h7%JbXU>jHPGMRl44x(iRB&S0aw^db`^4ml#My~cnBGN$ODZy$ zY1oppf(Gx3n#m~=t@Z>+SQ0eqidj`oO2n{lc>wRAk}T1%oHHCFmy=SCN*HVo%dnNJ zrb`d#a(cAgY1p^U$380MHlG%nf|wSDnt};xo8bcY|{)jXMnGJla8bCEuSB$_K2-Z!c}J_w>-_{ap*^%AP`sCoM@ zi$5!_dE3g~wlAHl-XE2YfA0!B_iooc!Kd3gp1LE?1EIA*v>b?Tvess26SjUk#fMIBG26c-P59b zgPV3+fGdqw-6*gnxa!{rbB^)1>aBZkzYiz8!&W)O`AQ!F_On%oy@@X!t@?TPJo7x% z_C@QjTh~HeD zD&kn~Uz-l(Zuuv&P$hWJ)28Ux%(r}x?mPDj?%!3GF25wS^#0i&3lBG=C(VxGZtIg! z({P9NNe2tKJ&1P$-PkFng=|WV*25%9Nfqvqib<6I+hF?O)ItwGBUs2t3o4$gr+NtT z;kCtRLlV>X6WgiejyISZKSKo5x7FDG27{SowL4{SD*O%!GNw5OmjbdWN|LiuMyOvY zdu;qfVszvJrq2eZ^}Uu-chLqwgbzUXlK%k8MqZIV#4(uC{|7PyUDe7k%roR&M}6yP z_g~S_I_g|U9qTCc57b??A=kX6WY_r*OZJMxd)vO^|JKn_;=X4bO9z+UTV(D@U58x#?Gynhq literal 0 HcmV?d00001 diff --git a/chat/migrations/__pycache__/__init__.cpython-312.pyc b/chat/migrations/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2371675f6d4def1736f61f44d650b78d2d4ac586 GIT binary patch literal 136 zcmX@j%ge<81bLqInIQTxh(HIQS%4zb87dhx8U0o=6fpsLpFwJVsXJT6c;uHBXH+H@ z#Uy7Wmc-;{rWYlaWaj4;$Hd2H=4F<|$LkeT{^GF7%}*)KNwq6t1?po2;$jfvBQql- JV-Yiu1pssR9^?Q3 literal 0 HcmV?d00001 diff --git a/chat/schema.py b/chat/schema.py index 357511f..168adc5 100644 --- a/chat/schema.py +++ b/chat/schema.py @@ -148,84 +148,8 @@ MODELS_SCHEMA = { } } -from datetime import datetime, timedelta -from django.utils import timezone -def apply_date_filter(queryset, date_filter): - if not date_filter: - return queryset - - field = date_filter.get("field", "Date") - filter_type = date_filter.get("type") - value = date_filter.get("value") - - now = timezone.now() - - # امروز - if filter_type == "today": - start = now.replace(hour=0, minute=0, second=0, microsecond=0) - end = start + timedelta(days=1) - return queryset.filter( - **{f"{field}__gte": start, f"{field}__lt": end} - ) - - # دیروز - if filter_type == "yesterday": - start = (now - timedelta(days=1)).replace( - hour=0, minute=0, second=0, microsecond=0 - ) - end = start + timedelta(days=1) - return queryset.filter( - **{f"{field}__gte": start, f"{field}__lt": end} - ) - - # n روز گذشته - if filter_type == "last_n_days" and value: - start = now - timedelta(days=int(value)) - return queryset.filter(**{f"{field}__gte": start}) - - # این هفته - if filter_type == "this_week": - start = now - timedelta(days=now.weekday()) - start = start.replace(hour=0, minute=0, second=0, microsecond=0) - return queryset.filter(**{f"{field}__gte": start}) - - # این ماه - if filter_type == "this_month": - start = now.replace(day=1, hour=0, minute=0, second=0, microsecond=0) - return queryset.filter(**{f"{field}__gte": start}) - - # n ماه گذشته - if filter_type == "last_n_month" and value: - start = now - for _ in range(int(value)): - start = (start.replace(day=1) - timedelta(days=1)).replace(day=1) - start = start.replace(hour=0, minute=0, second=0, microsecond=0) - return queryset.filter(**{f"{field}__gte": start}) - - # این سال - if filter_type == "this_year": - start = now.replace( - month=1, day=1, hour=0, minute=0, second=0, microsecond=0 - ) - return queryset.filter(**{f"{field}__gte": start}) - - # n سال گذشته - if filter_type == "last_n_year" and value: - start = now.replace( - year=now.year - int(value), - month=1, - day=1, - hour=0, - minute=0, - second=0, - microsecond=0 - ) - return queryset.filter(**{f"{field}__gte": start}) - - return queryset - def clean_gpt_json(text): """ diff --git a/chat/urls.py b/chat/urls.py index 381660d..eb17f0b 100644 --- a/chat/urls.py +++ b/chat/urls.py @@ -3,5 +3,5 @@ from django.urls import path from chat.views import get_ai_response urlpatterns = [ - path("get_ai_response/", get_ai_response), + path("ask/", get_ai_response), ] \ No newline at end of file diff --git a/chat/views.py b/chat/views.py index a354ac8..0164101 100644 --- a/chat/views.py +++ b/chat/views.py @@ -1,5 +1,4 @@ import requests -from django.db.models import Sum from django.views.decorators.csrf import csrf_exempt from rest_framework import status from rest_framework.decorators import api_view, permission_classes @@ -7,7 +6,7 @@ from rest_framework.permissions import AllowAny from rest_framework.response import Response from openai import OpenAI -from schema import get_filters_from_question, apply_date_filter +from chat.schema import get_filters_from_question API_KEY = "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" # ⚠️ جایگزین با کلیدت کن RSI_URL='https://rsibackend.rasadyar.com/app/get_ai_response/' @@ -37,6 +36,7 @@ def get_ai_response(request): verify=False ) + result_data = result_data.json() # تولید پاسخ نهایی با GPT prompt = f""" diff --git a/db.sqlite3 b/db.sqlite3 new file mode 100644 index 0000000..e69de29