10 KiB
گزارش تغییرات API در ۶ کامیت اخیر
این فایل تغییرات مربوط به سه فایل زیر را نسبت به ۶ کامیت قبل (HEAD~6) مستند میکند:
irrigation_recommendation/urls.pyfertilization_recommendation/apps.pyfarm_ai_assistant/views.py
بازه مقایسه
- مبدا:
HEAD~6 - مقصد:
HEAD
نتیجه سریع
- در
irrigation_recommendation/urls.py، API آبیاری از مدل دارای endpoint بررسی وضعیت task فاصله گرفته و دو endpoint جدید برای لیست روشهای آبیاری و water stress اضافه شده است. - در
fertilization_recommendation/apps.py، در این بازه هیچ تغییری ثبت نشده است. - در
farm_ai_assistant/views.py، API چت از flow مبتنی بر task/polling به flow مستقیم request/response تغییر کرده و پشتیبانی ازhistory،image_urlsو ورودیهای multipart/JSON بهتر شده است.
1) تغییرات irrigation_recommendation/urls.py
وضعیت قبلی
مسیرهای زیر وجود داشتند:
config/->ConfigViewrecommend/->RecommendViewrecommend/status/<str:task_id>/->RecommendTaskStatusView
وضعیت فعلی
مسیرهای فعلی:
- `` ->
IrrigationMethodListView config/->ConfigViewrecommend/->RecommendViewwater-stress/->WaterStressView
تغییرات دقیق
الف) اضافه شدن endpoint ریشه برای لیست روشهای آبیاری
مسیر جدید:
GET irrigation_recommendation/- view:
IrrigationMethodListView - name:
irrigation-method-list
اثر:
- حالا این app علاوه بر recommendation، یک endpoint مستقل برای دریافت لیست روشهای آبیاری هم دارد.
ب) حذف endpoint بررسی وضعیت task
مسیر حذفشده:
recommend/status/<str:task_id>/- view:
RecommendTaskStatusView - name:
irrigation-recommendation-task-status
اثر:
- دیگر API رسمیای در
urls.pyبرای polling وضعیت task recommendation تعریف نشده است. - این تغییر از نظر معماری شبیه حذف flow تسکمحور در بخش AI assistant است.
ج) اضافه شدن endpoint جدید water stress
مسیر جدید:
POST irrigation_recommendation/water-stress/- view:
WaterStressView - name:
irrigation-water-stress
اثر:
- یک قابلیت جدید در API آبیاری اضافه شده که بهصورت جداگانه water stress را محاسبه/برمیگرداند.
چیزهایی که تغییر نکردهاند
config/recommend/
2) تغییرات fertilization_recommendation/apps.py
در بازه HEAD~6..HEAD برای این فایل هیچ diffای وجود ندارد.
وضعیت فعلی و قبلی یکسان است
مقدارهای مهم بدون تغییر ماندهاند:
default_auto_field = "django.db.models.BigAutoField"name = "fertilization_recommendation"verbose_name = "Fertilization Recommendation"
نتیجه
- از نظر ثبت app در Django، در این ۶ کامیت اخیر تغییری در
fertilization_recommendation/apps.pyاعمال نشده است. - اگر منظورت بررسی APIهای recommendation بوده، این فایل خودش route یا view API ندارد و فقط تنظیمات app را نگه میدارد.
3) تغییرات farm_ai_assistant/views.py
بزرگترین تغییرات این بازه در این فایل اتفاق افتاده است.
خلاصه معماری
API چت از این مدل:
- ثبت درخواست چت
- ساخت task در سرویس AI
- دریافت
task_id - polling برای status
به این مدل تغییر کرده:
- ارسال مستقیم درخواست چت
- دریافت مستقیم پاسخ assistant
- ذخیره همزمان پیام کاربر و پیام assistant
تغییرات مهم
الف) حذف flow مبتنی بر task
کلاسهای زیر حذف شدهاند:
ChatTaskCreateViewChatTaskStatusView
رفتار قبلی:
ChatTaskCreateViewدرخواست را به endpoint زیر در سرویس بیرونی میفرستاد:/rag/chat/generate
- سپس
ChatTaskStatusViewوضعیت task را از endpoint زیر میگرفت:/tasks/{task_id}/status
رفتار جدید:
- این دو کلاس حذف شدهاند و flow task-based از این فایل کنار رفته است.
اثر:
- دیگر پاسخ چت در دو مرحله create/status مدیریت نمیشود.
- polling مبتنی بر
task_idاز منطق این viewها حذف شده است.
ب) مستقیم شدن درخواست چت در ChatView
در ChatView.post، اکنون درخواست مستقیم به سرویس AI ارسال میشود:
- endpoint جدید آداپتر:
/api/rag/chat/
این یعنی:
- بهجای submit task و پیگیری وضعیت آن، پاسخ assistant در همان request برگردانده میشود.
ج) تغییر مدل ورودی از content به query
در payload ارسالی به adapter، حالا فیلد اصلی متن کاربر این است:
query
در نسخه قبلی، از content برای ساخت payload استفاده میشد.
الان:
contentدر منطق اصلی جای خود را بهqueryداده است.
اثر:
- کلاینتی که هنوز payload قدیمی مبتنی بر
contentمیفرستد، باید با قرارداد جدید view/serializer هماهنگ شود.
د) پشتیبانی از history
قابلیت جدید:
- history پیامها بهصورت ساختاریافته دریافت، نرمالسازی و به adapter ارسال میشود.
تغییرات مرتبط:
- اضافه شدن
_serialize_history_messages - اضافه شدن
_merge_history - اضافه شدن
historyبه payload ارسالی به سرویس بیرونی
اثر:
- API حالا میتواند context مکالمه را شفافتر و مستقل از صرفاً conversation id به سرویس AI بفرستد.
- اگر history در ورودی باشد، استفاده میشود؛ در غیر این صورت از پیامهای conversation برای ساخت history استفاده میشود.
ه) پشتیبانی از image_urls و فایل آپلودی
قابلیتهای جدید:
image_urlsبه payload اضافه شده است.- فایلهای آپلودشده نیز جمعآوری و به payload الصاق میشوند.
تغییرات مرتبط:
- اضافه شدن
_attach_uploaded_files - تبدیل
historyوimage_urlsبه JSON string هنگام multipart submission - ادغام
image_urlsوimagesدر ذخیره پیام کاربر
اثر:
- API چت حالا هم لینک تصویر و هم فایل تصویر آپلودی را پشتیبانی میکند.
- درخواستهای multipart برای سناریوهای image-based chat بهتر پشتیبانی میشوند.
و) مدیریت بهتر JSON و خطای Parse
قابلیتهای جدید:
- import شدن
ParseError - اضافه شدن
_parse_json_array - اضافه شدن
_prepare_chat_input - پاسخ ۴۰۰ اختصاصی برای JSON نامعتبر
رفتار جدید:
- اگر body نامعتبر باشد، API این پیام را برمیگرداند:
- invalid JSON / extra trailing characters
- فیلدهایی مثل
historyوimage_urlsاگر به شکل string JSON بیایند، parse میشوند.
اثر:
- endpoint چت در برابر فرمتهای مختلف درخواست مقاومتر شده است.
- احتمال خطا برای کلاینتهایی که multipart یا JSON string میفرستند کمتر شده است.
ز) تغییر در ساخت conversation جدید
رفتار جدید:
- عنوان conversation با
_generate_conversation_title(query)ساخته میشود. - اگر query خالی باشد، عنوان پیشفرض
Imageمیشود. - برای conversation جدید،
farm_contextبهصورت خالی{}ست میشود.
رفتار حذفشده:
- دیگر
farm_contextوtitleمستقیماً از payload برای update/create conversation استفاده نمیشوند. - منطق قبلی که conversation موجود را با
farm_contextیاtitleآپدیت میکرد حذف شده است.
اثر:
- کنترل عنوان مکالمه بیشتر به منطق داخلی view منتقل شده است.
- payload کلاینت اختیار کمتری روی title/farm_context conversation دارد.
ح) بهبود نرمالسازی پاسخ assistant
در نرمالسازی sectionها، این کلیدها هم پشتیبانی میشوند:
primaryActionvalidityPeriod
اثر:
- ساختار response assistant برای UIهای غنیتر آمادهتر شده است.
ط) حذف وابستگی به mock chat response
حذف شده:
CHAT_RESPONSE_DATA- متد
_build_mock_assistant_payload
اثر:
- منطق چت بیشتر به پاسخ واقعی adapter متکی شده و از mock response داخلی فاصله گرفته است.
ی) logging بیشتر برای دیباگ integration
موارد جدید:
- import شدن
logging - تعریف
logger - ثبت log برای response adapter و برخی وضعیتهای payload parsing/extraction
اثر:
- عیبیابی integration با سرویس AI سادهتر شده است.
جمعبندی نهایی
در این ۶ کامیت اخیر:
-
irrigation_recommendation/urls.py- endpoint بررسی وضعیت task حذف شده
- endpoint ریشه برای لیست روشهای آبیاری اضافه شده
- endpoint جدید
water-stress/اضافه شده
-
fertilization_recommendation/apps.py- هیچ تغییری نداشته است
-
farm_ai_assistant/views.py- flow چت task-based حذف شده
- درخواست مستقیم به
/api/rag/chat/جایگزین شده - پشتیبانی از
history،image_urlsو فایل آپلودی اضافه شده - مدیریت JSON/multipart بهتر شده
- title conversation از
queryساخته میشود - نرمالسازی response assistant گسترش یافته است