mirror of
https://github.com/langbot-app/LangBot.git
synced 2025-11-26 03:44:58 +08:00
refactor: move entities
This commit is contained in:
27
pkg/api/http/controller/groups/models.py
Normal file
27
pkg/api/http/controller/groups/models.py
Normal 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
|
||||
@@ -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')
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
|
||||
35
pkg/api/http/service/model.py
Normal file
35
pkg/api/http/service/model.py
Normal 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
|
||||
@@ -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
|
||||
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
0
pkg/entity/persistence/__init__.py
Normal file
0
pkg/entity/persistence/__init__.py
Normal file
@@ -1,4 +1,5 @@
|
||||
import sqlalchemy.orm
|
||||
import pydantic
|
||||
|
||||
|
||||
class Base(sqlalchemy.orm.DeclarativeBase):
|
||||
19
pkg/entity/persistence/model.py
Normal file
19
pkg/entity/persistence/model.py
Normal 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)
|
||||
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)
|
||||
@@ -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: 对扩展友好
|
||||
|
||||
|
||||
@@ -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"
|
||||
@@ -24,11 +25,15 @@ class ModelManager:
|
||||
|
||||
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)
|
||||
|
||||
Reference in New Issue
Block a user