mirror of
https://github.com/langbot-app/LangBot.git
synced 2026-07-22 12:26:08 +00:00
refactor: move entities
This commit is contained in:
@@ -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
|
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')
|
||||||
|
|||||||
@@ -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
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
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
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
import sqlalchemy.orm
|
import sqlalchemy.orm
|
||||||
|
import pydantic
|
||||||
|
|
||||||
|
|
||||||
class Base(sqlalchemy.orm.DeclarativeBase):
|
class Base(sqlalchemy.orm.DeclarativeBase):
|
||||||
@@ -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)
|
||||||
@@ -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: 对扩展友好
|
||||||
|
|
||||||
|
|||||||
@@ -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"
|
||||||
@@ -23,12 +24,16 @@ class ModelManager:
|
|||||||
requesters: dict[str, requester.LLMAPIRequester]
|
requesters: dict[str, requester.LLMAPIRequester]
|
||||||
|
|
||||||
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)
|
||||||
|
|||||||
Reference in New Issue
Block a user