refactor: move entities

This commit is contained in:
Junyan Qin
2025-03-10 22:34:45 +08:00
parent a0fd152d19
commit c1f4de425a
14 changed files with 105 additions and 8 deletions
+27
View File
@@ -0,0 +1,27 @@
import quart
from .. import group
from .....entity.persistence import model
@group.group_class('models/llm', '/api/v1/provider/models/llm')
class LLMModelsRouterGroup(group.RouterGroup):
async def initialize(self) -> None:
@self.route('', methods=['GET', 'POST'])
async def _() -> str:
if quart.request.method == 'GET':
return self.success(data={
'models': await self.ap.model_service.get_llm_models()
})
elif quart.request.method == 'POST':
pass
@self.route('/<model_uuid>', methods=['GET', 'PUT', 'DELETE'])
async def _(model_uuid: str) -> str:
if quart.request.method == 'GET':
pass
elif quart.request.method == 'PUT':
pass
elif quart.request.method == 'DELETE':
pass
+1 -1
View File
@@ -3,7 +3,7 @@ import sqlalchemy
import argon2 import argon2
from .. import group from .. import group
from .....persistence.entities import user from .....entity.persistence import user
@group.group_class('user', '/api/v1/user') @group.group_class('user', '/api/v1/user')
+1 -1
View File
@@ -7,7 +7,7 @@ import quart
import quart_cors import quart_cors
from ....core import app, entities as core_entities from ....core import app, entities as core_entities
from .groups import logs, system, settings, plugins, stats, user from .groups import logs, system, settings, plugins, stats, user, models
from . import group from . import group
+35
View File
@@ -0,0 +1,35 @@
from __future__ import annotations
import sqlalchemy
from ....core import app
from ....entity.persistence import model
class ModelsService:
ap: app.Application
def __init__(self, ap: app.Application) -> None:
self.ap = ap
async def get_llm_models(self) -> list[model.LLMModel]:
result = await self.ap.persistence_mgr.execute_async(
sqlalchemy.select(model.LLMModel)
)
result_list = result.all()
return result_list
async def create_llm_model(self, model: model.LLMModel) -> None:
pass
async def get_llm_model(self, model_uuid: str) -> model.LLMModel:
pass
async def update_llm_model(self, model: model.LLMModel) -> None:
pass
async def delete_llm_model(self, model_uuid: str) -> None:
pass
+1 -1
View File
@@ -6,7 +6,7 @@ import jwt
import datetime import datetime
from ....core import app from ....core import app
from ....persistence.entities import user from ....entity.persistence import user
from ....utils import constants from ....utils import constants
+3
View File
@@ -25,6 +25,7 @@ from ..utils import version as version_mgr, proxy as proxy_mgr, announce as anno
from ..persistence import mgr as persistencemgr from ..persistence import mgr as persistencemgr
from ..api.http.controller import main as http_controller from ..api.http.controller import main as http_controller
from ..api.http.service import user as user_service from ..api.http.service import user as user_service
from ..api.http.service import model as model_service
from ..discover import engine as discover_engine from ..discover import engine as discover_engine
from ..utils import logcache, ip from ..utils import logcache, ip
from . import taskmgr from . import taskmgr
@@ -112,6 +113,8 @@ class Application:
user_service: user_service.UserService = None user_service: user_service.UserService = None
model_service: model_service.ModelsService = None
def __init__(self): def __init__(self):
pass pass
+4
View File
@@ -18,6 +18,7 @@ from ...platform import manager as im_mgr
from ...persistence import mgr as persistencemgr from ...persistence import mgr as persistencemgr
from ...api.http.controller import main as http_controller from ...api.http.controller import main as http_controller
from ...api.http.service import user as user_service from ...api.http.service import user as user_service
from ...api.http.service import model as model_service
from ...discover import engine as discover_engine from ...discover import engine as discover_engine
from ...utils import logcache from ...utils import logcache
from .. import taskmgr from .. import taskmgr
@@ -123,5 +124,8 @@ class BuildAppStage(stage.BootingStage):
user_service_inst = user_service.UserService(ap) user_service_inst = user_service.UserService(ap)
ap.user_service = user_service_inst ap.user_service = user_service_inst
model_service_inst = model_service.ModelsService(ap)
ap.model_service = model_service_inst
ctrl = controller.Controller(ap) ctrl = controller.Controller(ap)
ap.ctrl = ctrl ap.ctrl = ctrl
View File
@@ -1,4 +1,5 @@
import sqlalchemy.orm import sqlalchemy.orm
import pydantic
class Base(sqlalchemy.orm.DeclarativeBase): class Base(sqlalchemy.orm.DeclarativeBase):
+19
View File
@@ -0,0 +1,19 @@
import sqlalchemy
from .base import Base
class LLMModel(Base):
"""LLM 模型"""
__tablename__ = 'llm_models'
uuid = sqlalchemy.Column(sqlalchemy.String(255), primary_key=True)
name = sqlalchemy.Column(sqlalchemy.String(255), nullable=False)
description = sqlalchemy.Column(sqlalchemy.String(255), nullable=False)
requester = sqlalchemy.Column(sqlalchemy.String(255), nullable=False)
requester_config = sqlalchemy.Column(sqlalchemy.JSON, nullable=False, default={})
api_keys = sqlalchemy.Column(sqlalchemy.JSON, nullable=False)
abilities = sqlalchemy.Column(sqlalchemy.JSON, nullable=False, default=[])
extra_args = sqlalchemy.Column(sqlalchemy.JSON, nullable=False, default={})
updated_at = sqlalchemy.Column(sqlalchemy.DateTime, nullable=False)
created_at = sqlalchemy.Column(sqlalchemy.DateTime, nullable=False)
@@ -9,3 +9,5 @@ class User(Base):
id = sqlalchemy.Column(sqlalchemy.Integer, primary_key=True) id = sqlalchemy.Column(sqlalchemy.Integer, primary_key=True)
user = sqlalchemy.Column(sqlalchemy.String(255), nullable=False) user = sqlalchemy.Column(sqlalchemy.String(255), nullable=False)
password = sqlalchemy.Column(sqlalchemy.String(255), nullable=False) password = sqlalchemy.Column(sqlalchemy.String(255), nullable=False)
created_at = sqlalchemy.Column(sqlalchemy.DateTime, nullable=False)
updated_at = sqlalchemy.Column(sqlalchemy.DateTime, nullable=False)
+6 -1
View File
@@ -7,7 +7,7 @@ import sqlalchemy.ext.asyncio as sqlalchemy_asyncio
import sqlalchemy import sqlalchemy
from . import database from . import database
from .entities import user, base from ..entity.persistence import user, model, base
from ..core import app from ..core import app
from .databases import sqlite from .databases import sqlite
@@ -34,6 +34,11 @@ class PersistenceManager:
await self.create_tables() await self.create_tables()
# auto migrate
async with self.get_db_engine().connect() as conn:
await conn.run_sync(self.meta.drop_all)
await conn.run_sync(self.meta.create_all)
async def create_tables(self): async def create_tables(self):
# TODO: 对扩展友好 # TODO: 对扩展友好
+5 -4
View File
@@ -6,6 +6,7 @@ from . import entities, requester
from ...core import app from ...core import app
from ...discover import engine from ...discover import engine
from . import token from . import token
from ...entity.persistence import model
from .requesters import bailianchatcmpl, chatcmpl, anthropicmsgs, moonshotchatcmpl, deepseekchatcmpl, ollamachat, giteeaichatcmpl, volcarkchatcmpl, xaichatcmpl, zhipuaichatcmpl, lmstudiochatcmpl, siliconflowchatcmpl, volcarkchatcmpl from .requesters import bailianchatcmpl, chatcmpl, anthropicmsgs, moonshotchatcmpl, deepseekchatcmpl, ollamachat, giteeaichatcmpl, volcarkchatcmpl, xaichatcmpl, zhipuaichatcmpl, lmstudiochatcmpl, siliconflowchatcmpl, volcarkchatcmpl
FETCH_MODEL_LIST_URL = "https://api.qchatgpt.rockchin.top/api/v2/fetch/model_list" FETCH_MODEL_LIST_URL = "https://api.qchatgpt.rockchin.top/api/v2/fetch/model_list"
@@ -24,11 +25,15 @@ class ModelManager:
token_mgrs: dict[str, token.TokenManager] token_mgrs: dict[str, token.TokenManager]
models: list[model.LLMModel]
def __init__(self, ap: app.Application): def __init__(self, ap: app.Application):
self.ap = ap self.ap = ap
self.requester_components = []
self.model_list = [] self.model_list = []
self.requesters = {} self.requesters = {}
self.token_mgrs = {} self.token_mgrs = {}
self.models = []
async def get_model_by_name(self, name: str) -> entities.LLMModelInfo: async def get_model_by_name(self, name: str) -> entities.LLMModelInfo:
"""通过名称获取模型 """通过名称获取模型
@@ -46,10 +51,6 @@ class ModelManager:
for k, v in self.ap.provider_cfg.data['keys'].items(): for k, v in self.ap.provider_cfg.data['keys'].items():
self.token_mgrs[k] = token.TokenManager(k, v) self.token_mgrs[k] = token.TokenManager(k, v)
# for api_cls in requester.preregistered_requesters:
# api_inst = api_cls(self.ap)
# await api_inst.initialize()
# self.requesters[api_inst.name] = api_inst
for component in self.requester_components: for component in self.requester_components:
api_cls = component.get_python_component_class() api_cls = component.get_python_component_class()
api_inst = api_cls(self.ap) api_inst = api_cls(self.ap)