コミットを比較

...

18 コミット

作成者 SHA1 メッセージ 日付
みてるぞ 1f75763038 糸ç細部 2025-11-29 05:13:47 +09:00
みてるぞ 5dae2ae038 修正 2025-10-26 17:57:20 +09:00
みてるぞ 559e96607f 細部 2025-10-26 06:05:11 +09:00
みてるぞ 3d8032ffd4 細部 2025-10-26 05:56:21 +09:00
みてるぞ e4ac495194 Merge branch 'main' of https://git.miteruzo.com/miteruzo/nizika_ai 2025-10-26 05:48:54 +09:00
みてるぞ 83f06aa79b 細部 2025-10-26 05:48:29 +09:00
みてるぞ 28ea19f135 Merge branch 'main' of https://git.miteruzo.com/miteruzo/nizika_ai 2025-10-26 05:47:10 +09:00
みてるぞ 1baa0fd832 Query へのリレーション変更 2025-10-26 05:47:02 +09:00
みてるぞ ff695263ec queries.transfer_data 追加 2025-10-23 00:02:09 +09:00
みてるぞ 882409e1d4 バグ 2025-10-22 23:42:22 +09:00
みてるぞ 3be6d9063c バグ直し 2025-10-21 22:27:08 +09:00
みてるぞ 4e5bd13ab4 #3 2025-08-17 04:04:13 +09:00
みてるぞ 3fd16bd1c2 細部 2025-01-10 00:15:07 +09:00
みてるぞ 9e136a7cb3 サービス分離 ( #3 ) 2024-12-24 23:36:02 +09:00
みてるぞ 58fb37296a #3 2024-12-24 02:05:36 +09:00
みてるぞ 0dcc8656a1 #3 2024-12-24 01:46:25 +09:00
みてるぞ d46fe05b42 #3 2024-12-24 01:36:13 +09:00
みてるぞ ed7ca3b698 #3 タイムスタンプを削除 2024-12-23 11:13:02 +00:00
7個のファイルの変更36行の追加103行の削除
+1 -1
ファイルの表示
@@ -3,7 +3,7 @@ from __future__ import annotations
import os
from typing import TypedDict
from eloquent import DatabaseManager, Model
from eloquent import DatabaseManager, Model # type: ignore
CONFIG: dict[str, DbConfig] = { 'mysql': { 'driver': 'mysql',
'host': 'localhost',
-1
ファイルの表示
@@ -5,4 +5,3 @@ OPENAI_ORGANISATION: str = 'org-XXXXXXXXXXXXXXXXXXXXXXXX'
# API Key
OPENAI_API_KEY: str = 'sk-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
+5 -8
ファイルの表示
@@ -1,13 +1,6 @@
from enum import Enum
class AnswerType (Enum):
YOUTUBE_REPLY = 1
BLUESKY_REPLY = 2
YOUTUBE_SYSTEM = 3
BLUESKY_SYSTEM = 4
class Character (Enum):
DEERJIKA = 1
GOATOH = 2
@@ -27,4 +20,8 @@ class QueryType (Enum):
YOUTUBE_COMMENT = 1
BLUESKY_COMMENT = 2
YOUTUBE_SYSTEM = 3
BLUESKY_SYSTEM = 3
BLUESKY_SYSTEM = 4
KIRIBAN = 5
NICO_REPORT = 6
SNACK_TIME = 7
HOT_SPRING = 8
+11
ファイルの表示
@@ -0,0 +1,11 @@
from __future__ import annotations
from config import CONFIG
from eloquent import DatabaseManager, Schema
DB = DatabaseManager (CONFIG)
SCHEMA = Schema (DB)
with SCHEMA.table ('queries') as t:
t.json ('transfer_data').nullable ().default (None).comment ('受渡しデータ')
+18 -6
ファイルの表示
@@ -2,7 +2,8 @@ from __future__ import annotations
from datetime import datetime
from eloquent import Model
from eloquent import Model # type: ignore
from eloquent.query import QueryBuilder # type: ignore
from .config import DB
@@ -27,16 +28,21 @@ class Answer (Model):
query_id: int
character: int
content: str
answer_type: int
sent_at: datetime
__timestamps__ = False
@property
def query (
def query_rel (
self,
) -> Query:
return self.belongs_to (Query)
return self.belongs_to (Query, 'query_id')
@property
def answered_flags (
self,
) -> list[AnsweredFlag]:
return self.has_many (AnsweredFlag)
def answered (
self,
@@ -60,7 +66,9 @@ class Query (Model):
model: int
sent_at: datetime
answered: bool
transfer_data: dict[str, str] | None
__casts__ = { 'transfer_data': 'json' }
__timestamps__ = False
@property
@@ -81,11 +89,13 @@ class QueryAnswerHistory (Model):
query_id: int
answer_id: int
__timestamps__ = False
@property
def query (
def query_rel (
self,
) -> Query:
return self.belongs_to (Query)
return self.belongs_to (Query, 'query_id')
@property
def answer (
@@ -100,3 +110,5 @@ class User (Model):
code: str
name: str
icon: bytes
__timestamps__ = False
-86
ファイルの表示
@@ -1,86 +0,0 @@
from __future__ import annotations
import random
from datetime import datetime
from typing import TypedDict
from config import DB
from consts import AnswerType, Character, Platform
from models import Answer, AnsweredFlag, Query, User
from talk import Talk
def main (
) -> None:
DB.begin_transaction ()
queries: list[Query] = Query.where ('answered', False).get ()
if not queries:
return
query: Query = random.choice (queries)
user: User = query.user
user_name: str | None = None
if query.user_id is not None:
user_name = user.name
histories: list[History] = []
for history in query.answer_histories:
if history.query is not None:
histories.append ({ 'role': 'user', 'content': history.query.content })
histories.append ({ 'role': 'assistant', 'content': history.content })
for character in [Character.DEERJIKA, Character.GOATOH]:
if query.target_character & character.value:
add_answer (query, character, user_name, histories)
query.answered = True
query.save ()
DB.commit ()
def add_answer (
query: Query,
character: Character,
user_name: str | None,
histories: list[History],
) -> None:
message: str | list[dict[str, str | dict[str, str]]]
if query.image_url is None:
message = query.content
else:
message = [{ 'type': 'text', 'text': query.content },
{ 'type': 'image_url', 'image_url': query.image_url }]
answer = Answer ()
answer.query_id = query.id
answer.character = character.value
answer.content = Talk.main (message, user_name, histories,
goatoh_mode = character == Character.GOATOH)
answer.answer_type = query.query_type
answer.sent_at = datetime.now ()
answer.save ()
add_answered_flags (answer)
def add_answered_flags (
answer: Answer,
) -> None:
if answer.answer_type in [AnswerType.YOUTUBE_REPLY]:
add_answered_flag (answer, Platform.YOUTUBE)
if answer.answer_type in [AnswerType.BLUESKY_REPLY]:
add_answered_flag (answer, Platform.BLUESKY)
def add_answered_flag (
answer: Answer,
platform: Platform,
) -> None:
answered_flag = AnsweredFlag ()
answered_flag.answer_id = answer.id
answered_flag.platform = platform.value
answered_flag.answered = False
answered_flag.save ()
class History (TypedDict):
role: str
content: str
if __name__ == '__main__':
main ()
+1 -1
ファイルの表示
@@ -15,7 +15,7 @@ from openai.types.chat import (ChatCompletionAssistantMessageParam,
ChatCompletionUserMessageParam)
from openai.types.chat.chat_completion_message import ChatCompletionMessage
from connection import OPENAI_API_KEY, OPENAI_ORGANISATION # type: ignore
from .connection import OPENAI_API_KEY, OPENAI_ORGANISATION # type: ignore
class Talk: