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

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

View File

@@ -3,7 +3,7 @@ import sqlalchemy
import argon2
from .. import group
from .....persistence.entities import user
from .....entity.persistence import user
@group.group_class('user', '/api/v1/user')

View File

@@ -7,7 +7,7 @@ import quart
import quart_cors
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

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

View File

@@ -6,7 +6,7 @@ import jwt
import datetime
from ....core import app
from ....persistence.entities import user
from ....entity.persistence import user
from ....utils import constants

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 ..api.http.controller import main as http_controller
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 ..utils import logcache, ip
from . import taskmgr
@@ -112,6 +113,8 @@ class Application:
user_service: user_service.UserService = None
model_service: model_service.ModelsService = None
def __init__(self):
pass

View File

@@ -18,6 +18,7 @@ from ...platform import manager as im_mgr
from ...persistence import mgr as persistencemgr
from ...api.http.controller import main as http_controller
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 ...utils import logcache
from .. import taskmgr
@@ -123,5 +124,8 @@ class BuildAppStage(stage.BootingStage):
user_service_inst = user_service.UserService(ap)
ap.user_service = user_service_inst
model_service_inst = model_service.ModelsService(ap)
ap.model_service = model_service_inst
ctrl = controller.Controller(ap)
ap.ctrl = ctrl

View File

View File

@@ -1,4 +1,5 @@
import sqlalchemy.orm
import pydantic
class Base(sqlalchemy.orm.DeclarativeBase):

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)

View File

@@ -9,3 +9,5 @@ class User(Base):
id = sqlalchemy.Column(sqlalchemy.Integer, primary_key=True)
user = 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)

View File

@@ -7,7 +7,7 @@ import sqlalchemy.ext.asyncio as sqlalchemy_asyncio
import sqlalchemy
from . import database
from .entities import user, base
from ..entity.persistence import user, model, base
from ..core import app
from .databases import sqlite
@@ -34,6 +34,11 @@ class PersistenceManager:
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):
# TODO: 对扩展友好

View File

@@ -6,6 +6,7 @@ from . import entities, requester
from ...core import app
from ...discover import engine
from . import token
from ...entity.persistence import model
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"
@@ -23,12 +24,16 @@ class ModelManager:
requesters: dict[str, requester.LLMAPIRequester]
token_mgrs: dict[str, token.TokenManager]
models: list[model.LLMModel]
def __init__(self, ap: app.Application):
self.ap = ap
self.requester_components = []
self.model_list = []
self.requesters = {}
self.token_mgrs = {}
self.models = []
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():
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:
api_cls = component.get_python_component_class()
api_inst = api_cls(self.ap)