瀏覽代碼

Refactor structure

StrayWarrior 13 小時之前
父節點
當前提交
da0b4bbb73

+ 0 - 0
toolkit/__init__.py → pqai_agent/__init__.py


+ 6 - 8
agent_service.py → pqai_agent/agent_service.py

@@ -5,8 +5,7 @@ import re
 import signal
 import signal
 import sys
 import sys
 import time
 import time
-import random
-from typing import Dict, List, Tuple, Any, Optional
+from typing import Dict, List, Optional
 import logging
 import logging
 from datetime import datetime, timedelta
 from datetime import datetime, timedelta
 import traceback
 import traceback
@@ -15,21 +14,20 @@ import apscheduler.triggers.cron
 from apscheduler.schedulers.background import BackgroundScheduler
 from apscheduler.schedulers.background import BackgroundScheduler
 
 
 import chat_service
 import chat_service
-import configs
+from pqai_agent import configs
 import logging_service
 import logging_service
 from configs import apollo_config
 from configs import apollo_config
-from logging_service import logger
-from chat_service import CozeChat, ChatServiceType
+from pqai_agent.logging_service import logger
+from pqai_agent.chat_service import CozeChat, ChatServiceType
 from dialogue_manager import DialogueManager, DialogueState, DialogueStateCache
 from dialogue_manager import DialogueManager, DialogueState, DialogueStateCache
 from rate_limiter import MessageSenderRateLimiter
 from rate_limiter import MessageSenderRateLimiter
 from response_type_detector import ResponseTypeDetector
 from response_type_detector import ResponseTypeDetector
-from user_manager import UserManager, LocalUserManager, MySQLUserManager, MySQLUserRelationManager, UserRelationManager, \
+from pqai_agent.user_manager import UserManager, LocalUserManager, MySQLUserManager, MySQLUserRelationManager, UserRelationManager, \
     LocalUserRelationManager
     LocalUserRelationManager
-from openai import OpenAI
 from message_queue_backend import MessageQueueBackend, MemoryQueueBackend, AliyunRocketMQQueueBackend
 from message_queue_backend import MessageQueueBackend, MemoryQueueBackend, AliyunRocketMQQueueBackend
 from user_profile_extractor import UserProfileExtractor
 from user_profile_extractor import UserProfileExtractor
 import threading
 import threading
-from message import MessageType, Message, MessageChannel
+from pqai_agent.message import MessageType, Message, MessageChannel
 
 
 
 
 class AgentService:
 class AgentService:

+ 2 - 2
chat_service.py → pqai_agent/chat_service.py

@@ -10,8 +10,8 @@ from enum import Enum, auto
 
 
 import httpx
 import httpx
 
 
-import configs
-from logging_service import logger
+from pqai_agent import configs
+from pqai_agent.logging_service import logger
 import cozepy
 import cozepy
 from cozepy import Coze, TokenAuth, Message, ChatStatus, MessageType, JWTOAuthApp, JWTAuth
 from cozepy import Coze, TokenAuth, Message, ChatStatus, MessageType, JWTOAuthApp, JWTAuth
 import time
 import time

+ 0 - 0
configs/__init__.py → pqai_agent/configs/__init__.py


+ 0 - 0
configs/dev.yaml → pqai_agent/configs/dev.yaml


+ 0 - 0
configs/prod.yaml → pqai_agent/configs/prod.yaml


+ 1 - 1
database.py → pqai_agent/database.py

@@ -5,7 +5,7 @@
 # Copyright © 2024 StrayWarrior <i@straywarrior.com>
 # Copyright © 2024 StrayWarrior <i@straywarrior.com>
 
 
 import pymysql
 import pymysql
-from logging_service import logger
+from pqai_agent.logging_service import logger
 
 
 class MySQLManager:
 class MySQLManager:
     def __init__(self, config):
     def __init__(self, config):

+ 10 - 13
dialogue_manager.py → pqai_agent/dialogue_manager.py

@@ -2,29 +2,26 @@
 # -*- coding: utf-8 -*-
 # -*- coding: utf-8 -*-
 # vim:fenc=utf-8
 # vim:fenc=utf-8
 import random
 import random
-from enum import Enum, auto
+from enum import Enum
 from typing import Dict, List, Optional, Tuple, Any
 from typing import Dict, List, Optional, Tuple, Any
 from datetime import datetime
 from datetime import datetime
 import time
 import time
 import textwrap
 import textwrap
 
 
-import chat_service
-import prompt_templates
-from logging_service import logger
-
 import pymysql.cursors
 import pymysql.cursors
 
 
-import configs
 import cozepy
 import cozepy
 
 
-from database import MySQLManager
-from history_dialogue_service import HistoryDialogueService
+from pqai_agent import configs
+from pqai_agent.logging_service import logger
+from pqai_agent.database import MySQLManager
+from pqai_agent import chat_service, prompt_templates
+from pqai_agent.history_dialogue_service import HistoryDialogueService
 
 
-from chat_service import ChatServiceType
-from message import MessageType, Message
-from toolkit.lark_alert_for_human_intervention import LarkAlertForHumanIntervention
-from user_manager import UserManager
-from prompt_templates import *
+from pqai_agent.chat_service import ChatServiceType
+from pqai_agent.message import MessageType, Message
+from pqai_agent.toolkit.lark_alert_for_human_intervention import LarkAlertForHumanIntervention
+from pqai_agent.user_manager import UserManager
 
 
 class DummyVectorMemoryManager:
 class DummyVectorMemoryManager:
     def __init__(self, user_id):
     def __init__(self, user_id):

+ 3 - 3
history_dialogue_service.py → pqai_agent/history_dialogue_service.py

@@ -3,11 +3,11 @@
 # vim:fenc=utf-8
 # vim:fenc=utf-8
 
 
 import requests
 import requests
-from logging_service import logger
+from pqai_agent.logging_service import logger
 import time
 import time
 
 
-import configs
-from message import MessageType
+from pqai_agent import configs
+from pqai_agent.message import MessageType
 
 
 
 
 class HistoryDialogueService:
 class HistoryDialogueService:

+ 1 - 1
logging_service.py → pqai_agent/logging_service.py

@@ -5,7 +5,7 @@
 import logging
 import logging
 from logging.handlers import RotatingFileHandler
 from logging.handlers import RotatingFileHandler
 
 
-import configs
+from pqai_agent import configs
 
 
 COLORS = {
 COLORS = {
     'DEBUG': '\033[0m',    # 蓝色
     'DEBUG': '\033[0m',    # 蓝色

+ 0 - 0
message.py → pqai_agent/message.py


+ 4 - 4
message_queue_backend.py → pqai_agent/message_queue_backend.py

@@ -4,12 +4,12 @@
 
 
 import abc
 import abc
 import time
 import time
-from logging_service import logger
-from typing import Dict, Any, Optional
-import configs
+from pqai_agent.logging_service import logger
+from typing import Optional
+from pqai_agent import configs
 
 
 import logging_service
 import logging_service
-from message import Message, MessageType, MessageChannel
+from pqai_agent.message import Message, MessageType, MessageChannel
 
 
 import rocketmq
 import rocketmq
 from rocketmq import ClientConfiguration, Credentials, SimpleConsumer
 from rocketmq import ClientConfiguration, Credentials, SimpleConsumer

+ 0 - 0
prompt_templates.py → pqai_agent/prompt_templates.py


+ 1 - 1
rate_limiter.py → pqai_agent/rate_limiter.py

@@ -3,7 +3,7 @@
 # vim:fenc=utf-8
 # vim:fenc=utf-8
 
 
 import time
 import time
-from logging_service import logger
+from pqai_agent.logging_service import logger
 
 
 class MessageSenderRateLimiter:
 class MessageSenderRateLimiter:
     MAX_CHAR_PER_SECOND = 5
     MAX_CHAR_PER_SECOND = 5

+ 6 - 6
response_type_detector.py → pqai_agent/response_type_detector.py

@@ -7,13 +7,13 @@ from typing import Dict, List
 
 
 from openai import OpenAI
 from openai import OpenAI
 from datetime import datetime
 from datetime import datetime
-import chat_service
-import configs
-import prompt_templates
-from dialogue_manager import DialogueManager
-from logging_service import logger
-from message import MessageType
 import re
 import re
+from pqai_agent import chat_service
+from pqai_agent import configs
+from pqai_agent import prompt_templates
+from pqai_agent.dialogue_manager import DialogueManager
+from pqai_agent.logging_service import logger
+from pqai_agent.message import MessageType
 
 
 
 
 class ResponseTypeDetector:
 class ResponseTypeDetector:

+ 0 - 0
pqai_agent/toolkit/__init__.py


+ 1 - 1
toolkit/base.py → pqai_agent/toolkit/base.py

@@ -1,7 +1,7 @@
 from typing import List, Optional
 from typing import List, Optional
 import functools
 import functools
 import threading
 import threading
-from toolkit.function_tool import FunctionTool
+from pqai_agent.toolkit.function_tool import FunctionTool
 
 
 def with_timeout(timeout=None):
 def with_timeout(timeout=None):
     r"""Decorator that adds timeout functionality to functions.
     r"""Decorator that adds timeout functionality to functions.

+ 2 - 2
toolkit/function_tool.py → pqai_agent/toolkit/function_tool.py

@@ -1,5 +1,5 @@
 import inspect
 import inspect
-from inspect import Parameter, getsource, signature
+from inspect import Parameter, signature
 from typing import Any, Callable, Dict, Mapping, Optional, Tuple, Type
 from typing import Any, Callable, Dict, Mapping, Optional, Tuple, Type
 
 
 from docstring_parser import parse
 from docstring_parser import parse
@@ -13,7 +13,7 @@ import sys
 import os
 import os
 # FIXME
 # FIXME
 sys.path.append(os.curdir)
 sys.path.append(os.curdir)
-from logging_service import logger
+from pqai_agent.logging_service import logger
 
 
 
 
 def to_pascal(snake: str) -> str:
 def to_pascal(snake: str) -> str:

+ 2 - 2
toolkit/lark_alert_for_human_intervention.py → pqai_agent/toolkit/lark_alert_for_human_intervention.py

@@ -1,7 +1,7 @@
 from typing import List
 from typing import List
 
 
-from toolkit.base import BaseToolkit
-from toolkit.function_tool import FunctionTool
+from pqai_agent.toolkit.base import BaseToolkit
+from pqai_agent.toolkit.function_tool import FunctionTool
 import requests
 import requests
 
 
 
 

+ 5 - 5
user_manager.py → pqai_agent/user_manager.py

@@ -2,8 +2,8 @@
 # -*- coding: utf-8 -*-
 # -*- coding: utf-8 -*-
 # vim:fenc=utf-8
 # vim:fenc=utf-8
 
 
-from logging_service import logger
-from typing import Dict, Optional, Tuple, Any, List
+from pqai_agent.logging_service import logger
+from typing import Dict, Optional, List
 import json
 import json
 import time
 import time
 import os
 import os
@@ -11,8 +11,8 @@ import abc
 
 
 import pymysql.cursors
 import pymysql.cursors
 
 
-import configs
-from database import MySQLManager
+from pqai_agent import configs
+from pqai_agent.database import MySQLManager
 
 
 
 
 class UserManager(abc.ABC):
 class UserManager(abc.ABC):
@@ -117,7 +117,7 @@ class LocalUserManager(UserManager):
 
 
     def list_all_users(self):
     def list_all_users(self):
         user_ids = []
         user_ids = []
-        for root, dirs, files in os.walk('user_profiles/'):
+        for root, dirs, files in os.walk('../user_profiles/'):
             for file in files:
             for file in files:
                 if file.endswith('.json'):
                 if file.endswith('.json'):
                     user_ids.append(os.path.splitext(file)[0])
                     user_ids.append(os.path.splitext(file)[0])

+ 5 - 5
user_profile_extractor.py → pqai_agent/user_profile_extractor.py

@@ -3,13 +3,13 @@
 # vim:fenc=utf-8
 # vim:fenc=utf-8
 
 
 import json
 import json
-from typing import Dict, Any, Optional, List
+from typing import Dict, Optional, List
 
 
-import chat_service
-import configs
-from prompt_templates import USER_PROFILE_EXTRACT_PROMPT
+from pqai_agent import chat_service
+from pqai_agent import configs
+from pqai_agent.prompt_templates import USER_PROFILE_EXTRACT_PROMPT
 from openai import OpenAI
 from openai import OpenAI
-from logging_service import logger
+from pqai_agent.logging_service import logger
 
 
 
 
 class UserProfileExtractor:
 class UserProfileExtractor:

+ 0 - 0
pqai_agent_server/__init__.py


+ 9 - 11
api_server.py → pqai_agent_server/api_server.py

@@ -5,21 +5,19 @@
 import logging
 import logging
 import werkzeug.exceptions
 import werkzeug.exceptions
 from flask import Flask, request, jsonify
 from flask import Flask, request, jsonify
-from datetime import datetime, timedelta
+from datetime import datetime
 from argparse import ArgumentParser
 from argparse import ArgumentParser
 
 
 from openai import OpenAI
 from openai import OpenAI
-from message import MessageType
-import chat_service
-import configs
+from pqai_agent.message import MessageType
+from pqai_agent import configs
 import json
 import json
-import logging_service
-import prompt_templates
-from dialogue_manager import DialogueManager
-from history_dialogue_service import HistoryDialogueService
-from response_type_detector import ResponseTypeDetector
-from user_manager import MySQLUserManager, MySQLUserRelationManager
-from user_profile_extractor import UserProfileExtractor
+from pqai_agent import logging_service, chat_service, prompt_templates
+from pqai_agent.dialogue_manager import DialogueManager
+from pqai_agent.history_dialogue_service import HistoryDialogueService
+from pqai_agent.response_type_detector import ResponseTypeDetector
+from pqai_agent.user_manager import MySQLUserManager, MySQLUserRelationManager
+from pqai_agent.user_profile_extractor import UserProfileExtractor
 
 
 app = Flask('agent_api_server')
 app = Flask('agent_api_server')
 logger = logging_service.logger
 logger = logging_service.logger

+ 0 - 1
requirements.txt

@@ -49,7 +49,6 @@ urllib3==2.3.0
 websockets==14.2
 websockets==14.2
 wrapt==1.17.2
 wrapt==1.17.2
 zipp==3.21.0
 zipp==3.21.0
-
 docstring_parser~=0.16
 docstring_parser~=0.16
 pyapollos~=0.1.5
 pyapollos~=0.1.5
 Werkzeug~=3.1.3
 Werkzeug~=3.1.3

+ 2 - 2
scripts/disable_user_daily_push.py

@@ -12,8 +12,8 @@ import json
 import pymysql.cursors
 import pymysql.cursors
 
 
 sys.path.append(os.curdir)
 sys.path.append(os.curdir)
-import configs
-from user_manager import MySQLUserManager, MySQLUserRelationManager
+from pqai_agent import configs
+from pqai_agent.user_manager import MySQLUserManager, MySQLUserRelationManager
 
 
 if __name__ == '__main__':
 if __name__ == '__main__':
     config = configs.get()
     config = configs.get()

+ 3 - 3
scripts/mq_sender.py

@@ -1,9 +1,9 @@
 import os
 import os
 import sys
 import sys
 sys.path.append(os.curdir)
 sys.path.append(os.curdir)
-import configs
-from message import Message, MessageType, MessageChannel
-from message_queue_backend import AliyunRocketMQQueueBackend
+from pqai_agent import configs
+from pqai_agent.message import Message, MessageType, MessageChannel
+from pqai_agent.message_queue_backend import AliyunRocketMQQueueBackend
 import time
 import time
 from argparse import ArgumentParser
 from argparse import ArgumentParser
 
 

+ 2 - 2
scripts/profile_cleaner.py

@@ -8,8 +8,8 @@
 import sys
 import sys
 import os
 import os
 sys.path.append(os.curdir)
 sys.path.append(os.curdir)
-import configs
-from user_manager import MySQLUserManager
+from pqai_agent import configs
+from pqai_agent.user_manager import MySQLUserManager
 
 
 if __name__ == '__main__':
 if __name__ == '__main__':
     config = configs.get()
     config = configs.get()

+ 4 - 4
scripts/resend_lost_message.py

@@ -6,10 +6,10 @@ import re
 import sys
 import sys
 import os
 import os
 sys.path.append(os.curdir)
 sys.path.append(os.curdir)
-import configs
-from message import MessageChannel, Message, MessageType
-from message_queue_backend import AliyunRocketMQQueueBackend
-from user_manager import MySQLUserRelationManager
+from pqai_agent import configs
+from pqai_agent.message import MessageChannel, Message, MessageType
+from pqai_agent.message_queue_backend import AliyunRocketMQQueueBackend
+from pqai_agent.user_manager import MySQLUserRelationManager
 
 
 
 
 config = configs.get()
 config = configs.get()

+ 64 - 0
setup.py

@@ -0,0 +1,64 @@
+from setuptools import setup, find_packages
+
+setup(
+    name='pqai_agent',
+    version='0.1.0',
+    description='A Python package for Piaoquan AI Agent functionalities.',
+    author='FENG Zhoutian',
+    author_email='fengzhoutian@hotmail.com',
+    url='https://git.yishihui.com/Server/AgentCoreService',
+    packages=find_packages(),
+    install_requires=[
+        'annotated-types==0.7.0',
+        'anyio==4.9.0',
+        'APScheduler==3.11.0',
+        'Authlib==1.5.1',
+        'certifi==2025.1.31',
+        'cffi==1.17.1',
+        'charset-normalizer==3.4.1',
+        'cozepy==0.13.0',
+        'cryptography==44.0.2',
+        'Deprecated==1.2.18',
+        'distro==1.9.0',
+        'grpcio==1.71.0',
+        'grpcio-tools==1.71.0',
+        'httpcore==1.0.7',
+        'httpx==0.27.2',
+        'idna==3.10',
+        'importlib_metadata==8.6.1',
+        'iniconfig==2.1.0',
+        'jiter==0.9.0',
+        'openai==1.68.2',
+        'packaging==24.2',
+        'pluggy==1.5.0',
+        'protobuf==5.29.4',
+        'pycparser==2.22',
+        'pydantic==2.10.6',
+        'pydantic_core==2.27.2',
+        'PyJWT==2.10.1',
+        'PyMySQL==1.1.1',
+        'pytest==8.3.5',
+        'PyYAML==6.0.2',
+        'rocketmq-python-client==5.0.5',
+        'requests>=2.0.0',
+        'setuptools==78.1.0',
+        'sniffio==1.3.1',
+        'tqdm==4.67.1',
+        'typing_extensions==4.13.0',
+        'tzlocal==5.3.1',
+        'urllib3==2.3.0',
+        'websockets==14.2',
+        'wrapt==1.17.2',
+        'zipp==3.21.0',
+        'docstring_parser~=0.16',
+        'pyapollos~=0.1.5',
+        'Werkzeug~=3.1.3',
+        'Flask~=3.1.0',
+        'jsonschema~=4.23.0',
+    ],
+    classifiers=[
+        'Programming Language :: Python :: 3',
+        'Operating System :: OS Independent',
+    ],
+    python_requires='>=3.6',
+)

+ 0 - 0
tests/__init__.py


+ 5 - 7
unit_test.py → tests/unit_test.py

@@ -3,14 +3,12 @@
 # vim:fenc=utf-8
 # vim:fenc=utf-8
 
 
 import pytest
 import pytest
-from datetime import datetime, timedelta
-from typing import Dict, Optional, Tuple, Any
 from unittest.mock import Mock, MagicMock
 from unittest.mock import Mock, MagicMock
-from agent_service import AgentService, MemoryQueueBackend
-from dialogue_manager import DialogueState, TimeContext
-from message import MessageType, Message, MessageChannel
-from response_type_detector import ResponseTypeDetector
-from user_manager import LocalUserManager
+from pqai_agent.agent_service import AgentService, MemoryQueueBackend
+from pqai_agent.dialogue_manager import DialogueState, TimeContext
+from pqai_agent.message import MessageType, Message, MessageChannel
+from pqai_agent.response_type_detector import ResponseTypeDetector
+from pqai_agent.user_manager import LocalUserManager
 import time
 import time
 import logging
 import logging