UPDATE
This commit is contained in:
@@ -2,7 +2,7 @@ from unittest.mock import patch
|
||||
|
||||
from django.test import SimpleTestCase
|
||||
|
||||
from rag.chat import build_rag_context
|
||||
from rag.chat import _normalize_history_messages, build_rag_context
|
||||
|
||||
|
||||
class ChatContextTests(SimpleTestCase):
|
||||
@@ -37,6 +37,22 @@ class ChatContextTests(SimpleTestCase):
|
||||
self.assertIn("farm chunk 1", sent_texts)
|
||||
self.assertIn("farm chunk 2", sent_texts)
|
||||
|
||||
def test_normalize_history_messages_supports_user_images(self):
|
||||
messages = _normalize_history_messages(
|
||||
[
|
||||
{"role": "user", "content": "این تصویر مزرعه است", "image_urls": ["https://example.com/a.jpg"]},
|
||||
{"role": "assistant", "content": "تصویر دریافت شد."},
|
||||
]
|
||||
)
|
||||
|
||||
self.assertEqual(len(messages), 2)
|
||||
self.assertEqual(messages[0]["role"], "user")
|
||||
self.assertIsInstance(messages[0]["content"], list)
|
||||
self.assertEqual(messages[0]["content"][0]["type"], "text")
|
||||
self.assertEqual(messages[0]["content"][1]["type"], "image_url")
|
||||
self.assertEqual(messages[1]["role"], "assistant")
|
||||
self.assertEqual(messages[1]["content"], "تصویر دریافت شد.")
|
||||
|
||||
@patch("rag.chat.search_with_texts", return_value=[])
|
||||
@patch("rag.chat.chunk_text", return_value=["farm chunk"])
|
||||
def test_build_rag_context_returns_full_farm_when_kb_empty(
|
||||
|
||||
@@ -144,6 +144,10 @@ class RecommendationServiceDefaultsTests(TestCase):
|
||||
"آبیاری قطرهای",
|
||||
)
|
||||
self.assertEqual(result["simulation_optimizer"]["engine"], "crop_simulation_heuristic")
|
||||
self.assertEqual(result["mergeMetadata"]["source"], "llm_with_fallback_merge")
|
||||
self.assertEqual(result["sections"][1]["provenance"]["sectionType"], "list")
|
||||
self.assertEqual(result["sections"][1]["provenance"]["fieldSources"]["title"], "llm")
|
||||
self.assertEqual(result["sections"][0]["provenance"]["fieldSources"]["amount"], "fallback")
|
||||
|
||||
@patch("rag.services.irrigation.calculate_forecast_water_needs", return_value=[])
|
||||
@patch("rag.services.irrigation.resolve_kc", return_value=0.9)
|
||||
@@ -185,6 +189,7 @@ class RecommendationServiceDefaultsTests(TestCase):
|
||||
self.assertEqual(self.farm.irrigation_method_id, sprinkler.id)
|
||||
self.assertEqual(result["selected_irrigation_method"]["id"], sprinkler.id)
|
||||
mock_build_irrigation_method_text.assert_called_once_with("بارانی")
|
||||
self.assertEqual(result["sections"][0]["provenance"]["fieldSources"]["content"], "llm")
|
||||
|
||||
@patch("rag.services.fertilization.build_plant_text", return_value="plant text")
|
||||
@patch("rag.services.fertilization.build_rag_context", return_value="")
|
||||
@@ -212,6 +217,8 @@ class RecommendationServiceDefaultsTests(TestCase):
|
||||
self.assertEqual(result["sections"][0]["fertilizerType"], "20-20-20")
|
||||
mock_build_plant_text.assert_called_once_with("گوجهفرنگی", "رویشی")
|
||||
self.assertEqual(result["simulation_optimizer"]["engine"], "crop_simulation_heuristic")
|
||||
self.assertEqual(result["sections"][2]["provenance"]["fieldSources"]["content"], "llm")
|
||||
self.assertEqual(result["sections"][0]["provenance"]["fieldSources"]["fertilizerType"], "fallback")
|
||||
|
||||
@patch("rag.services.fertilization.build_plant_text", return_value="plant text")
|
||||
@patch("rag.services.fertilization.build_rag_context", return_value="")
|
||||
@@ -238,3 +245,5 @@ class RecommendationServiceDefaultsTests(TestCase):
|
||||
|
||||
self.assertEqual(result["sections"][0]["applicationMethod"], "کودآبیاری")
|
||||
self.assertEqual(result["sections"][2]["type"], "warning")
|
||||
self.assertEqual(result["mergeMetadata"]["source"], "fallback_only")
|
||||
self.assertFalse(result["sections"][0]["provenance"]["llmProvided"])
|
||||
|
||||
Reference in New Issue
Block a user