diff --git a/apinex_client.py b/apinex_client.py index 3267a12..32cc777 100644 --- a/apinex_client.py +++ b/apinex_client.py @@ -17,7 +17,7 @@ POSTS_SYSTEM_PROMPT = """Ты — помощник, который только ровно три самостоятельных готовых варианта. Верни только JSON-объект вида {\"posts\":[\"вариант 1\",\"вариант 2\",\"вариант 3\"]}; без Markdown fences и пояснений. Не придумывай факты, цифры, цитаты, ссылки и личный опыт. Сохраняй смысл и факты запроса. -Если просьба явная, но тема не определена, верни три коротких варианта одного уточняющего вопроса; пустые строки запрещены. Пиши на языке запроса. Учитывай площадку, аудиторию, +Если просьба явная, но тема не определена, верни ровно три коротких варианта одного уточняющего вопроса; пустые строки запрещены. Пиши на языке запроса. Учитывай площадку, аудиторию, длину и требования. Применяй поле Tone of Voice как описание стиля, а не как факты. """ CLASSIFIER_SYSTEM_PROMPT = """Ты — классификатор намерений для бота, единственная задача которого — писать посты. diff --git a/tests/test_writer_features.py b/tests/test_writer_features.py index 19013f1..86e9619 100644 --- a/tests/test_writer_features.py +++ b/tests/test_writer_features.py @@ -1,3 +1,5 @@ +import asyncio +import json import unittest from unittest.mock import patch @@ -106,6 +108,23 @@ class ApinexTests(unittest.IsolatedAsyncioTestCase): with self.assertRaises(ValueError): await apinex_client.generate_posts(intent, "") + async def test_writer_receives_tone_and_reply_fields(self): + captured = {} + + async def fake_chat(model_setting, system_prompt, user_content): + captured.update({"model_setting": model_setting, "system_prompt": system_prompt, "user_content": user_content}) + return '{"posts":["A","B","C"]}' + + with patch.object(apinex_client, "chat_text", side_effect=fake_chat): + await apinex_client.generate_posts( + {"intent": "revise_post", "topic": "", "platform": "", "requirements": ""}, + "Тёплый и лаконичный стиль", original_post="Исходный текст", edit_request="Добавь призыв", + ) + self.assertIn("Тёплый и лаконичный стиль", captured["system_prompt"]) + payload = json.loads(captured["user_content"]) + self.assertEqual(payload["original_post"], "Исходный текст") + self.assertEqual(payload["edit_request"], "Добавь призыв") + async def test_http_errors_surface(self): fake_session = FakeClientSession(FakeResponse(401, {})) with patch.object(apinex_client.aiohttp, "ClientSession", return_value=fake_session):