このコミットが含まれているのは:
+49
-2
@@ -1,3 +1,7 @@
|
||||
"""
|
||||
DB の queries テーブルにたまってゐるクエリを AI に処理させ answers テーブルに流す.
|
||||
"""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import random
|
||||
@@ -6,12 +10,16 @@ from typing import TypedDict
|
||||
|
||||
from nizika_ai.config import DB
|
||||
from nizika_ai.consts import AnswerType, Character, Platform
|
||||
from nizika_ai.models import Answer, AnsweredFlag, Query, User
|
||||
from nizika_ai.models import Answer, AnsweredFlag, Query
|
||||
from nizika_ai.talk import Talk
|
||||
|
||||
|
||||
def main (
|
||||
) -> None:
|
||||
"""
|
||||
メーン処理
|
||||
"""
|
||||
|
||||
queries: list[Query] = Query.where ('answered', False).get ()
|
||||
if not queries:
|
||||
return
|
||||
@@ -48,6 +56,21 @@ def add_answer (
|
||||
user_name: str | None,
|
||||
histories: list[History],
|
||||
) -> None:
|
||||
"""
|
||||
AI の返答を DB に積む.
|
||||
|
||||
Parameters
|
||||
----------
|
||||
query: Query
|
||||
クエリ
|
||||
character: Character
|
||||
返答するキャラクタ
|
||||
user_name: str | None
|
||||
クエリの主
|
||||
histories: list[History]
|
||||
履歴
|
||||
"""
|
||||
|
||||
message: str | list[dict[str, str | dict[str, str]]]
|
||||
if query.image_url:
|
||||
message = [{ 'type': 'text', 'text': query.content },
|
||||
@@ -69,10 +92,19 @@ def add_answer (
|
||||
def add_answered_flags (
|
||||
answer: Answer,
|
||||
) -> None:
|
||||
"""
|
||||
返答済フラグを付与する.
|
||||
|
||||
Parameters
|
||||
----------
|
||||
answer: Answer
|
||||
返答モデル
|
||||
"""
|
||||
|
||||
answer_type: AnswerType
|
||||
try:
|
||||
answer_type = AnswerType (answer.answer_type)
|
||||
except Exception:
|
||||
except (TypeError, ValueError):
|
||||
return
|
||||
|
||||
if answer_type in (AnswerType.YOUTUBE_REPLY,):
|
||||
@@ -85,6 +117,17 @@ def add_answered_flag (
|
||||
answer: Answer,
|
||||
platform: Platform,
|
||||
) -> None:
|
||||
"""
|
||||
返答済フラグを付与する.
|
||||
|
||||
Parameters
|
||||
----------
|
||||
answer: Answer
|
||||
返答モデル
|
||||
platform: Platform
|
||||
プラットフォーム
|
||||
"""
|
||||
|
||||
answered_flag = AnsweredFlag ()
|
||||
answered_flag.answer_id = answer.id
|
||||
answered_flag.platform = platform.value
|
||||
@@ -93,6 +136,10 @@ def add_answered_flag (
|
||||
|
||||
|
||||
class History (TypedDict):
|
||||
"""
|
||||
会話履歴の 1 要素;ユーザや AI の発話を簡易に保持する型
|
||||
"""
|
||||
|
||||
role: str
|
||||
content: str
|
||||
|
||||
|
||||
新しい課題から参照
ユーザをブロックする