add readming mode
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
import pytest
|
||||
|
||||
import json
|
||||
import logging
|
||||
import re
|
||||
import threading
|
||||
|
||||
@@ -98,7 +99,29 @@ def test_ai_tutor_translates_full_document(monkeypatch):
|
||||
user_prompt = payload["messages"][1]["content"]
|
||||
assert "[0] Hello." in user_prompt
|
||||
assert "[1] Nice to meet you." in user_prompt
|
||||
assert timeout == 45.0
|
||||
assert timeout == 120.0
|
||||
|
||||
|
||||
def test_ai_tutor_translation_timeout_can_be_configured(monkeypatch):
|
||||
request_payloads = []
|
||||
|
||||
def fake_post(endpoint, headers, json, timeout):
|
||||
request_payloads.append((json, timeout))
|
||||
return _translation_response_from_prompt(json)
|
||||
|
||||
monkeypatch.setattr("sentence_api.ai_tutor.requests.post", fake_post)
|
||||
tutor = AITutor(
|
||||
"https://ai.test/v1",
|
||||
"secret",
|
||||
"test-model",
|
||||
1,
|
||||
translation_timeout_seconds=180,
|
||||
)
|
||||
|
||||
translated = tutor.translate_sentences([(0, "Hello.")])
|
||||
|
||||
assert translated == {0: "中文0"}
|
||||
assert request_payloads[0][1] == 180
|
||||
|
||||
|
||||
def _translation_response_from_prompt(payload):
|
||||
@@ -248,3 +271,43 @@ def test_ai_tutor_retries_when_translation_stays_english(monkeypatch):
|
||||
|
||||
assert translated == {0: "你好。"}
|
||||
assert calls["count"] >= 2
|
||||
|
||||
|
||||
def test_ai_tutor_logs_raw_response_when_translation_json_is_invalid(monkeypatch, caplog):
|
||||
def fake_post(endpoint, headers, json, timeout):
|
||||
return FakeResponse(
|
||||
body={"choices": [{"message": {"content": "definitely not translation json"}}]}
|
||||
)
|
||||
|
||||
monkeypatch.setattr("sentence_api.ai_tutor.requests.post", fake_post)
|
||||
tutor = AITutor("https://ai.test/v1", "secret", "test-model", 1)
|
||||
|
||||
with caplog.at_level(logging.WARNING, logger="sentence_api.ai_tutor"):
|
||||
with pytest.raises(AITutorError):
|
||||
tutor.translate_sentences([(0, "Hello.")])
|
||||
|
||||
assert any(
|
||||
"Translation response parse failed" in record.getMessage()
|
||||
and "definitely not translation json" in record.getMessage()
|
||||
for record in caplog.records
|
||||
)
|
||||
|
||||
|
||||
def test_ai_tutor_logs_invalid_translation_before_repair(monkeypatch, caplog):
|
||||
def fake_post(endpoint, headers, json, timeout):
|
||||
return FakeResponse(
|
||||
body={"choices": [{"message": {"content": '{"0":"Still English."}'}}]}
|
||||
)
|
||||
|
||||
monkeypatch.setattr("sentence_api.ai_tutor.requests.post", fake_post)
|
||||
tutor = AITutor("https://ai.test/v1", "secret", "test-model", 1)
|
||||
|
||||
with caplog.at_level(logging.WARNING, logger="sentence_api.ai_tutor"):
|
||||
with pytest.raises(AITutorError):
|
||||
tutor.translate_sentences([(0, "Hello.")])
|
||||
|
||||
assert any(
|
||||
"Translation response failed validation" in record.getMessage()
|
||||
and "Still English." in record.getMessage()
|
||||
for record in caplog.records
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user