smart tdee

This commit is contained in:
2026-06-16 04:38:23 +00:00
parent f2e98942ff
commit a3f01cd850
56 changed files with 2519 additions and 591 deletions
+71
View File
@@ -0,0 +1,71 @@
import json
import unittest
from unittest.mock import AsyncMock, patch
from app.vision.analyze import VisionService, format_user_message, format_vision_turn_hint
from app.vision.preprocess import PreparedImage
class VisionAnalyzeTests(unittest.TestCase):
def test_format_user_message_with_fitness_hints(self) -> None:
from app.vision.analyze import VisionResult
result = VisionResult(
parsed={
"description": "Экран тренировки бег",
"document_type": "fitness_workout",
"extracted_text": ["45 мин", "420 ккал"],
"tables": [{"title": "Пульс", "rows": [["средний", "152"]]}],
"fitness_hints": {"duration_min": 45, "active_calories": 420},
"confidence": "high",
},
raw_content="{}",
model="test-model",
)
text = format_user_message("запиши тренировку", result)
self.assertIn("[Скриншот: fitness_workout", text)
self.assertIn("420 ккал", text)
self.assertIn("Подпись: запиши тренировку", text)
def test_run_async_analyze(self) -> None:
import asyncio
prepared = PreparedImage(
jpeg_bytes=b"fakejpeg",
width=100,
height=100,
original_bytes=200,
compressed_bytes=100,
)
payload = {
"description": "Шаги за день",
"document_type": "fitness_steps",
"extracted_text": ["8432 шага"],
"tables": [],
"fitness_hints": {"steps": 8432},
"confidence": "high",
"notes": "",
}
async def _run() -> None:
service = VisionService()
with patch.object(
service.llm,
"complete_vision",
new=AsyncMock(return_value={"content": json.dumps(payload), "model": "vision-test", "usage": {}}),
):
result = await service.analyze_prepared(prepared, user_hint="шаги")
self.assertEqual(result.parsed["document_type"], "fitness_steps")
self.assertEqual(result.parsed["fitness_hints"]["steps"], 8432)
self.assertEqual(result.model, "vision-test")
asyncio.run(_run())
def test_format_vision_turn_hint(self) -> None:
self.assertEqual(format_vision_turn_hint("привет"), "")
self.assertIn("не видишь", format_vision_turn_hint("[Скриншот: other, confidence=high]\nОписание: test"))
self.assertIn("не видишь", format_vision_turn_hint("[Скриншот 2/3: other, confidence=high]\nОписание: test"))
if __name__ == "__main__":
unittest.main()