Files

233 lines
10 KiB
Markdown
Raw Permalink Normal View History

2026-04-27 23:31:16 +03:30
# گزارش تغییرات API در ۶ کامیت اخیر
این فایل تغییرات مربوط به سه فایل زیر را نسبت به **۶ کامیت قبل** (`HEAD~6`) مستند می‌کند:
2026-05-02 06:16:36 +03:30
- `irrigation/urls.py`
- `fertilization/apps.py`
2026-04-27 23:31:16 +03:30
- `farm_ai_assistant/views.py`
## بازه مقایسه
- مبدا: `HEAD~6`
- مقصد: `HEAD`
## نتیجه سریع
2026-05-02 06:16:36 +03:30
- در `irrigation/urls.py`، API آبیاری از مدل دارای endpoint بررسی وضعیت task فاصله گرفته و دو endpoint جدید برای لیست روش‌های آبیاری و water stress اضافه شده است.
- در `fertilization/apps.py`، در این بازه **هیچ تغییری** ثبت نشده است.
2026-04-27 23:31:16 +03:30
- در `farm_ai_assistant/views.py`، API چت از flow مبتنی بر task/polling به flow مستقیم request/response تغییر کرده و پشتیبانی از `history`، `image_urls` و ورودی‌های multipart/JSON بهتر شده است.
2026-05-02 06:16:36 +03:30
## 1) تغییرات `irrigation/urls.py`
2026-04-27 23:31:16 +03:30
### وضعیت قبلی
مسیرهای زیر وجود داشتند:
- `config/` -> `ConfigView`
- `recommend/` -> `RecommendView`
- `recommend/status/<str:task_id>/` -> `RecommendTaskStatusView`
### وضعیت فعلی
مسیرهای فعلی:
- `` -> `IrrigationMethodListView`
- `config/` -> `ConfigView`
- `recommend/` -> `RecommendView`
- `water-stress/` -> `WaterStressView`
### تغییرات دقیق
#### الف) اضافه شدن endpoint ریشه برای لیست روش‌های آبیاری
مسیر جدید:
2026-05-02 06:16:36 +03:30
- `GET irrigation/`
2026-04-27 23:31:16 +03:30
- 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
مسیر جدید:
2026-05-02 06:16:36 +03:30
- `POST irrigation/water-stress/`
2026-04-27 23:31:16 +03:30
- view: `WaterStressView`
- name: `irrigation-water-stress`
اثر:
- یک قابلیت جدید در API آبیاری اضافه شده که به‌صورت جداگانه water stress را محاسبه/برمی‌گرداند.
### چیزهایی که تغییر نکرده‌اند
- `config/`
- `recommend/`
2026-05-02 06:16:36 +03:30
## 2) تغییرات `fertilization/apps.py`
2026-04-27 23:31:16 +03:30
در بازه `HEAD~6..HEAD` برای این فایل **هیچ diffای وجود ندارد**.
### وضعیت فعلی و قبلی یکسان است
مقدارهای مهم بدون تغییر مانده‌اند:
- `default_auto_field = "django.db.models.BigAutoField"`
2026-05-02 06:16:36 +03:30
- `name = "fertilization"`
2026-04-27 23:31:16 +03:30
- `verbose_name = "Fertilization Recommendation"`
### نتیجه
2026-05-02 06:16:36 +03:30
- از نظر ثبت app در Django، در این ۶ کامیت اخیر تغییری در `fertilization/apps.py` اعمال نشده است.
2026-04-27 23:31:16 +03:30
- اگر منظورت بررسی APIهای recommendation بوده، این فایل خودش route یا view API ندارد و فقط تنظیمات app را نگه می‌دارد.
## 3) تغییرات `farm_ai_assistant/views.py`
بزرگ‌ترین تغییرات این بازه در این فایل اتفاق افتاده است.
### خلاصه معماری
API چت از این مدل:
1. ثبت درخواست چت
2. ساخت task در سرویس AI
3. دریافت `task_id`
4. polling برای status
به این مدل تغییر کرده:
1. ارسال مستقیم درخواست چت
2. دریافت مستقیم پاسخ assistant
3. ذخیره هم‌زمان پیام کاربر و پیام assistant
### تغییرات مهم
#### الف) حذف flow مبتنی بر task
کلاس‌های زیر حذف شده‌اند:
- `ChatTaskCreateView`
- `ChatTaskStatusView`
رفتار قبلی:
- `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ها، این کلیدها هم پشتیبانی می‌شوند:
- `primaryAction`
- `validityPeriod`
اثر:
- ساختار 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 ساده‌تر شده است.
## جمع‌بندی نهایی
در این ۶ کامیت اخیر:
2026-05-02 06:16:36 +03:30
- `irrigation/urls.py`
2026-04-27 23:31:16 +03:30
- endpoint بررسی وضعیت task حذف شده
- endpoint ریشه برای لیست روش‌های آبیاری اضافه شده
- endpoint جدید `water-stress/` اضافه شده
2026-05-02 06:16:36 +03:30
- `fertilization/apps.py`
2026-04-27 23:31:16 +03:30
- هیچ تغییری نداشته است
- `farm_ai_assistant/views.py`
- flow چت task-based حذف شده
- درخواست مستقیم به `/api/rag/chat/` جایگزین شده
- پشتیبانی از `history`، `image_urls` و فایل آپلودی اضافه شده
- مدیریت JSON/multipart بهتر شده
- title conversation از `query` ساخته می‌شود
- نرمال‌سازی response assistant گسترش یافته است