New file |
| | |
| | | # coding:utf-8 |
| | | |
| | | from fastapi import APIRouter, Depends, UploadFile, File |
| | | from app.api import Response, get_current_user |
| | | from app.models.base_model import get_db |
| | | from app.models.role_model import RoleData, RoleModel |
| | | from app.models.system import SystemData |
| | | from app.models.user_model import UserModel |
| | | from app.service.system import services_get_system_data, services_update_system_data, service_upload_logo_image |
| | | |
| | | system_router = APIRouter() |
| | | |
| | | |
| | | @system_router.get("/info", response_model=Response) |
| | | async def api_get_system_data(current_user: UserModel = Depends(get_current_user), db=Depends(get_db)): |
| | | |
| | | data = await services_get_system_data(db) |
| | | return Response(code=200, msg="successfully", data=data) |
| | | |
| | | |
| | | @system_router.put("/info", response_model=Response) |
| | | async def api_update_system_data(system: SystemData, u: UserModel = Depends(get_current_user), db=Depends(get_db)): |
| | | |
| | | data = await services_update_system_data(db, system.title, system.desc, system.logo) |
| | | if not data: |
| | | return Response(code=500, msg="failed", data=data) |
| | | return Response(code=200, msg="successfully", data=data) |
| | | |
| | | |
| | | @system_router.post("/upload", response_model=Response) |
| | | async def api_upload_logo_image(file: UploadFile = File(...)): |
| | | file_name = await service_upload_logo_image(file) |
| | | if not file_name: |
| | | return Response(code=500, msg="failed", data={"logo": ""}) |
| | | return Response(code=200, msg="successfully", data={"logo": file_name}) |
| | |
| | | data = await service_chat_parameters(db, chatId, current_user.id) |
| | | if not data: |
| | | status_code = http_400 |
| | | data = "{}" |
| | | data = json.dumps({"code": http_400}) |
| | | return Response(data, media_type="application/json", status_code=status_code) |
| | | |
| | | |
| | |
| | | ### --------- file path------------------ |
| | | ENV_CONF_PATH = "app/config/env_conf" |
| | | APP_SERVICE_PATH = "app/service/" |
| | | APP_STATIC_PATH = "app/static" |
| | | |
| | | |
| | | |
| | | ### -----------app register -------------- |
| | | RAGFLOW = "ragflow_app" |
| | |
| | | |
| | | |
| | | TMP_DICT = {chat_server: RAGFLOW, workflow_server: DIFY} |
| | | |
| | | |
| | | ###-------------------------------system------------------------------------------------- |
| | | SYSTEM_ID = 1 |
New file |
| | |
| | | smart_system: |
| | | title: SmartAI大模型平台 |
| | | desc: SmartAI大模型平台 |
| | |
| | | from app.models.base_model import SessionLocal |
| | | from app.service.v2.initialize_data import dialog_menu_sync, default_group_sync, default_role_sync, \ |
| | | basic_agent_sync, admin_account_sync |
| | | basic_agent_sync, admin_account_sync, sync_rg_api_token |
| | | |
| | | |
| | | async def sync_default_data(): |
| | |
| | | # await app_register_sync(db) # 注册的应用 |
| | | await basic_agent_sync(db) # 开发的agent |
| | | await admin_account_sync(db) # |
| | | await sync_rg_api_token(db) # |
| | | |
| | | except Exception as e: |
| | | print(e) |
| | |
| | | from .menu_model import * |
| | | from .label_model import * |
| | | from .v2.session_model import * |
| | | from .system import * |
| | | |
| | | |
| | | # 获取当前时区的时间 |
New file |
| | |
| | | from datetime import datetime |
| | | from typing import Optional |
| | | |
| | | from pydantic import BaseModel |
| | | from sqlalchemy import Column, Integer, String, DateTime, Table, ForeignKey, UniqueConstraint |
| | | from app.models.base_model import Base |
| | | |
| | | |
| | | |
| | | class SystemDataModel(Base): |
| | | __tablename__ = 'system_data' |
| | | id = Column(Integer, primary_key=True, index=True) |
| | | title = Column(String(255)) |
| | | desc = Column(String(1000)) |
| | | created_at = Column(DateTime, default=datetime.now()) |
| | | updated_at = Column(DateTime, default=datetime.now(), onupdate=datetime.now()) |
| | | |
| | | |
| | | def to_dict(self): |
| | | return { |
| | | # 'id': self.id, |
| | | 'title': self.title, |
| | | 'desc': self.desc, |
| | | } |
| | | |
| | | def __repr__(self): |
| | | return '<Role name:%r description:%r iconCls:%r seq:%r>\n' \ |
| | | % (self.NAME, self.DESCRIPTION, self.ICONCLS, self.SEQ) |
| | | |
| | | |
| | | class SystemData(BaseModel): |
| | | title: str |
| | | desc: str |
| | | logo: str |
New file |
| | |
| | | import os |
| | | import shutil |
| | | import uuid |
| | | from datetime import datetime |
| | | |
| | | import yaml |
| | | from fastapi import UploadFile |
| | | |
| | | from Log import logger |
| | | from app.api import pwd_context |
| | | from app.config.const import SYSTEM_ID, ENV_CONF_PATH, APP_STATIC_PATH |
| | | from app.models.system import SystemDataModel |
| | | |
| | | |
| | | async def services_get_system_data(db): |
| | | system = db.query(SystemDataModel).filter_by(id=SYSTEM_ID).first() |
| | | if not system: |
| | | with open(os.path.join(ENV_CONF_PATH, "system.yaml"), 'r', encoding='utf-8') as file: |
| | | # 加载JSON数据 |
| | | config = yaml.safe_load(file) |
| | | system = SystemDataModel(id=SYSTEM_ID, title=config["smart_system"]["title"], desc=config["smart_system"]["desc"]) |
| | | db.add(system) |
| | | db.commit() |
| | | db.refresh(system) |
| | | return system.to_dict() |
| | | |
| | | |
| | | async def services_update_system_data(db, title, desc, logo): |
| | | try: |
| | | shutil.move(os.path.join(APP_STATIC_PATH, logo), os.path.join(APP_STATIC_PATH, "logo.png")) |
| | | system = db.query(SystemDataModel).filter_by(id=SYSTEM_ID).first() |
| | | system.title = title |
| | | system.desc = desc |
| | | system.updated_at = datetime.now() |
| | | db.commit() |
| | | db.refresh(system) |
| | | return system.to_dict() |
| | | except Exception as e: |
| | | logger.error(e) |
| | | return {} |
| | | |
| | | |
| | | async def service_upload_logo_image(file: UploadFile): |
| | | file_name = str(uuid.uuid4()) |
| | | try: |
| | | save_path = os.path.join(APP_STATIC_PATH, file_name) |
| | | # 将上传的文件保存到本地 |
| | | with open(save_path, "wb") as buffer: |
| | | shutil.copyfileobj(file.file, buffer) |
| | | file.file.close() |
| | | return file_name |
| | | except Exception as e: |
| | | logger.error(f"保存失败: {str(e)}") |
| | | return "" |
| | |
| | | # ans = await chat.chat_parameters(url, params, headers) |
| | | # print(ans) |
| | | |
| | | ping_url = "http://192.168.20.116:11080/v1/system/version" |
| | | ping_url = "http://smartai.com:8294/v1/llm/list" |
| | | ping_url = "http://192.168.20.116:11080/v1/user/info" |
| | | # ping_url = "http://smartai.com:8294/v1/llm/list" |
| | | # ping_url = "http://192.168.20.119:13002/console/api/workspaces" |
| | | user_token = "eyJhbG|ciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjoiNjEzNzdiYzctZTViYy00YjhiLTgxYTYtNWZkOTVhODVlMmE4IiwiZXhwIjoxNzM5MjU3Njk1LCJpc3MiOiJTRUxGX0hPU1RFRCIsInN1YiI6IkNvbnNvbGUgQVBJIFBhc3Nwb3J0In0.w7xQrepd1dYR4iPXcbuthIZjdm45bTJFbolOM_SE9aQ" |
| | | user_token = "IjNmZTA4NmM2ZjJjMjExZWY4ZTc2MDI0MmFjMTIwMDA2Ig.Z7yNLg.XooARY7YHv-Zo1qLoXwCuDe8J0k" |
| | | user_token = "IjU4OTM5M2UyZjMyNzExZWZhZmVjMDI0MmFjMTIwMDA2Ig.Z702yg.Pmyy58wg-YBU5t50mHuqvwTDyjc" |
| | | # token = "Bearer {}" |
| | | token = "{}" |
| | | res = await chat.chat_ping(ping_url, {}, await chat.get_chat_headers(token.format(user_token))) |
| | |
| | | |
| | | |
| | | from Log import logger |
| | | from app.config.agent_base_url import RG_APP_TOKEN_LIST, RG_APP_NEW_TOKEN |
| | | # from app.api import pwd_context |
| | | from app.config.const import DIFY, ENV_CONF_PATH, RAGFLOW, smart_server, chat_server, workflow_server, TMP_DICT |
| | | from app.config.const import DIFY, ENV_CONF_PATH, RAGFLOW, smart_server, chat_server, workflow_server, TMP_DICT, \ |
| | | rg_api_token |
| | | from app.models import MenuCapacityModel, WebMenuModel, GroupModel, RoleModel, DialogModel, UserModel, UserAppModel, \ |
| | | cipher_suite, UserTokenModel |
| | | cipher_suite, UserTokenModel, ApiTokenModel |
| | | from app.service.auth import UserAppDao |
| | | from app.service.bisheng import BishengService |
| | | from app.service.difyService import DifyService |
| | | from app.service.ragflow import RagflowService |
| | | from app.service.service_token import get_new_token |
| | | from app.service.v2.app_driver.chat_data import ChatBaseApply |
| | | from app.service.v2.app_register import AppRegisterDao |
| | | from app.config.config import settings |
| | | from app.utils.password_handle import generate_password, password_encrypted, password_decrypted |
| | |
| | | # await user_app_dao.update_and_insert_data(v.get("name"), user_model.encrypted_password(v.get("pwd")), v.get("email"), u_id, str(v.get("id")), k) |
| | | except Exception as e: |
| | | print(e) |
| | | db.rollback() |
| | | |
| | | |
| | | async def sync_rg_api_token(db): |
| | | token = "" |
| | | try: |
| | | app_token = db.query(ApiTokenModel).filter_by(app_id=rg_api_token).first() |
| | | if app_token: |
| | | print("rg_api_token: 已经存在!") |
| | | return |
| | | user_token = db.query(UserTokenModel).filter(UserTokenModel.id == chat_server).first() |
| | | chat = ChatBaseApply() |
| | | token_list_url = f"{settings.fwr_base_url}{RG_APP_TOKEN_LIST}" |
| | | token_list = await chat.chat_get(token_list_url, {}, await chat.get_chat_headers(user_token.access_token)) |
| | | if token_list and token_list.get("code") == 0: |
| | | if len(token_list.get("data", [])) == 0: |
| | | print("rg_api_token: 创建成功!") |
| | | new_token_url = f"{settings.fwr_base_url}{RG_APP_NEW_TOKEN}" |
| | | new_token = await chat.chat_post(new_token_url, {}, await chat.get_chat_headers(user_token.access_token)) |
| | | if new_token and new_token.get("code") == 0: |
| | | token = new_token.get("data", {}).get("token") |
| | | else: |
| | | token = token_list.get("data")[0].get("token") |
| | | print("rg_api_token: 已有token!") |
| | | if token: |
| | | |
| | | db.add(ApiTokenModel(id=rg_api_token, app_id=rg_api_token, type="platform", token=token)) |
| | | db.commit() |
| | | print("rg_api_token: 更新成功!") |
| | | |
| | | except Exception as e: |
| | | print(e) |
| | | db.rollback() |
| | |
| | | from app.api.label import label_router |
| | | from app.api.llm import llm_router |
| | | from app.api.organization import dept_router |
| | | from app.api.system import system_router |
| | | from app.api.v2.chat import chat_router_v2 |
| | | from app.api.v2.public_api import public_api |
| | | from app.api.report import router as report_router |
| | |
| | | app.include_router(label_router, prefix='/api/label', tags=["label"]) |
| | | app.include_router(public_api, prefix='/v1/api', tags=["public_api"]) |
| | | app.include_router(chat_router_v2, prefix='/api/v1', tags=["chat1"]) |
| | | app.include_router(system_router, prefix='/api/system', tags=["system"]) |
| | | app.mount("/static", StaticFiles(directory="app/images"), name="static") |
| | | |
| | | if __name__ == "__main__": |