fix(api): constrain shopping suggestion enums

This commit is contained in:
Piotr Oleszczyk 2026-03-08 12:06:39 +01:00
parent cebea2ac86
commit 5d9d18bd05
2 changed files with 17 additions and 4 deletions

View file

@ -255,12 +255,12 @@ class InventoryUpdate(SQLModel):
class ProductSuggestion(PydanticBase):
category: str
category: ProductCategory
product_type: str
key_ingredients: list[str]
target_concerns: list[str]
why_needed: str
recommended_time: str
recommended_time: DayTime
frequency: str
@ -274,12 +274,12 @@ class ShoppingSuggestionResponse(PydanticBase):
class _ProductSuggestionOut(PydanticBase):
category: str
category: ProductCategory
product_type: str
key_ingredients: list[str]
target_concerns: list[str]
why_needed: str
recommended_time: str
recommended_time: DayTime
frequency: str
@ -981,6 +981,11 @@ ZASADY:
7. Jeśli użytkownik ma uszkodzoną barierę, unikaj silnych eksfoliantów i retinoidów
8. Zwracaj uwagę na ewentualne konflikty polecanych składników z tymi, które użytkownik już posiada (np. nie polecaj peptydów miedziowych jeśli użytkownik nadużywa kwasów)
9. Odpowiadaj w języku polskim
10. Używaj wyłącznie dozwolonych wartości enumów poniżej - nie twórz synonimów typu "night", "evening" ani "treatment"
DOZWOLONE WARTOŚCI ENUMÓW:
- category: "cleanser" | "toner" | "essence" | "serum" | "moisturizer" | "spf" | "mask" | "exfoliant" | "hair_treatment" | "tool" | "spot_treatment" | "oil"
- recommended_time: "am" | "pm" | "both"
Format odpowiedzi - zwróć wyłącznie JSON zgodny z podanym schematem."""

View file

@ -121,6 +121,14 @@ def test_suggest_shopping(client, session):
assert data["reasoning"] == "Test shopping"
kwargs = mock_gemini.call_args.kwargs
assert "USER PROFILE:" in kwargs["contents"]
assert (
'category: "cleanser" | "toner" | "essence"'
in kwargs["config"].system_instruction
)
assert (
'recommended_time: "am" | "pm" | "both"'
in kwargs["config"].system_instruction
)
assert "function_handlers" in kwargs
assert "get_product_details" in kwargs["function_handlers"]