feat: added integration with yandexgpt
This commit is contained in:
@@ -0,0 +1,57 @@
|
||||
# ruff: noqa: E501, W291
|
||||
import logging
|
||||
|
||||
from django.conf import settings
|
||||
from yandex_cloud_ml_sdk import YCloudML
|
||||
from yandex_cloud_ml_sdk.exceptions import YCloudMLError
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
DEFAULT_INVALID_SIGNAL = (
|
||||
"В интернете есть много сайтов с информацией на эту тему. "
|
||||
"[Посмотрите, что нашлось в поиске](https://ya.ru)"
|
||||
).lower()
|
||||
|
||||
MODERATION_PROMPT = """
|
||||
Ты — строгий AI-модератор контента. Анализируй текст ПО ВСЕМ указанным критериям.
|
||||
Если ЛЮБОЙ из критериев нарушен — верни true. Только если ВСЕ критерии соблюдены — верни false.
|
||||
|
||||
Критерии нарушений (true):
|
||||
1. Нецензурная лексика: мат, эвфемизмы, оскорбительные выражения
|
||||
2. Угрозы: прямые/косвенные угрозы жизни, шантаж, буллинг
|
||||
3. Дискриминация: расизм, сексизм, ксенофобия, гомофобия
|
||||
""".strip()
|
||||
|
||||
|
||||
class YandexAIModerator:
|
||||
def __init__(self) -> None:
|
||||
self.sdk = YCloudML(
|
||||
folder_id=settings.YANDEX_CLOUD_FOLDER_ID,
|
||||
auth=settings.YANDEX_CLOUD_API_KEY,
|
||||
)
|
||||
|
||||
def get_moderation_verdict(self, text: str) -> bool:
|
||||
try:
|
||||
promise = (
|
||||
self.sdk.models.completions(
|
||||
"yandexgpt-lite", model_version="latest"
|
||||
)
|
||||
.configure(max_tokens=200, temperature=0.1)
|
||||
.run_deferred(
|
||||
[
|
||||
{"role": "system", "text": MODERATION_PROMPT},
|
||||
{"role": "user", "text": text},
|
||||
]
|
||||
)
|
||||
)
|
||||
result = promise.wait()
|
||||
logger.debug("Moderation API response: %s", result)
|
||||
|
||||
return self._normalize_response(result.alternatives[0].text)
|
||||
|
||||
except YCloudMLError:
|
||||
return False
|
||||
|
||||
def _normalize_response(self, text: str) -> bool:
|
||||
clean_verdict = text.strip().lower().split("\n")[0]
|
||||
return clean_verdict in ("true", DEFAULT_INVALID_SIGNAL)
|
||||
Reference in New Issue
Block a user