fix
This commit is contained in:
@@ -3,7 +3,11 @@ from pathlib import Path
|
||||
from types import SimpleNamespace
|
||||
from unittest.mock import patch
|
||||
|
||||
from assistant_bot.yandex_ai import YandexAIClient, YandexSpeechRecognizer
|
||||
from assistant_bot.yandex_ai import (
|
||||
YandexAIClient,
|
||||
YandexSpeechRecognizer,
|
||||
describe_yandex_error,
|
||||
)
|
||||
|
||||
|
||||
class FakeCompletion:
|
||||
@@ -22,21 +26,37 @@ class FakeCompletion:
|
||||
return [SimpleNamespace(text=" готово ")]
|
||||
|
||||
|
||||
class FakeChatCompletions:
|
||||
def __init__(self, completion, list_models) -> None:
|
||||
self.completion = completion
|
||||
self.list = list_models
|
||||
self.requested_models = []
|
||||
|
||||
def __call__(self, model):
|
||||
self.requested_models.append(model)
|
||||
return self.completion
|
||||
|
||||
|
||||
class YandexAIClientTests(unittest.IsolatedAsyncioTestCase):
|
||||
def test_http_error_includes_safe_response_body(self) -> None:
|
||||
error = RuntimeError("forbidden")
|
||||
error.response = SimpleNamespace(
|
||||
status_code=403,
|
||||
text='{"error":{"message":"folder mismatch"}}',
|
||||
)
|
||||
|
||||
self.assertEqual(
|
||||
describe_yandex_error(error),
|
||||
'HTTP 403: {"error":{"message":"folder mismatch"}}',
|
||||
)
|
||||
|
||||
async def test_chat_uses_sdk_messages_and_json_mode(self) -> None:
|
||||
completion = FakeCompletion()
|
||||
requested_models = []
|
||||
|
||||
def completions(model):
|
||||
requested_models.append(model)
|
||||
return completion
|
||||
completions = FakeChatCompletions(completion, self._list_models)
|
||||
|
||||
sdk = SimpleNamespace(
|
||||
models=SimpleNamespace(completions=completions),
|
||||
chat=SimpleNamespace(
|
||||
completions=SimpleNamespace(
|
||||
list=self._list_models,
|
||||
)
|
||||
completions=completions,
|
||||
),
|
||||
)
|
||||
client = YandexAIClient(folder_id="folder-id", sdk=sdk)
|
||||
@@ -51,17 +71,38 @@ class YandexAIClientTests(unittest.IsolatedAsyncioTestCase):
|
||||
)
|
||||
|
||||
self.assertEqual(answer, "готово")
|
||||
self.assertEqual(requested_models, ["gpt://folder-id/yandexgpt"])
|
||||
self.assertEqual(
|
||||
completions.requested_models,
|
||||
["gpt://folder-id/yandexgpt"],
|
||||
)
|
||||
self.assertEqual(completion.configuration, {"response_format": "json"})
|
||||
self.assertEqual(
|
||||
completion.messages,
|
||||
[
|
||||
{"role": "system", "text": "Отвечай кратко"},
|
||||
{"role": "user", "text": "Привет"},
|
||||
{"role": "system", "content": "Отвечай кратко"},
|
||||
{"role": "user", "content": "Привет"},
|
||||
],
|
||||
)
|
||||
self.assertEqual(completion.timeout, 180)
|
||||
|
||||
async def test_chat_repairs_legacy_uri_without_folder_id(self) -> None:
|
||||
completion = FakeCompletion()
|
||||
completions = FakeChatCompletions(completion, self._list_models)
|
||||
sdk = SimpleNamespace(
|
||||
chat=SimpleNamespace(completions=completions),
|
||||
)
|
||||
client = YandexAIClient(folder_id="folder-id", sdk=sdk)
|
||||
|
||||
await client.chat(
|
||||
"gpt://qwen3.6-35b-a3b/latest",
|
||||
[{"role": "user", "content": "Привет"}],
|
||||
)
|
||||
|
||||
self.assertEqual(
|
||||
completions.requested_models,
|
||||
["gpt://folder-id/qwen3.6-35b-a3b/latest"],
|
||||
)
|
||||
|
||||
async def test_list_models_returns_sorted_uris(self) -> None:
|
||||
sdk = SimpleNamespace(
|
||||
chat=SimpleNamespace(
|
||||
|
||||
Reference in New Issue
Block a user