From 9f116ea7e8f7d53a22b4dce10de942d564818a01 Mon Sep 17 00:00:00 2001 From: zhaoqingang <zhaoqg0118@163.com> Date: 星期三, 15 一月 2025 14:01:22 +0800 Subject: [PATCH] tmp --- app/config/env_conf/default_agent_conf.json | 88 ++++++++- alembic/versions/019bbe8d4833_dialogs_add_parameters.py | 92 ++++++++++ alembic/versions/37606c5a9b9e_account_token.py | 136 +++++++++++++++ app/config/env_conf/config.yaml | 13 app/service/user.py | 13 + app/utils/password_handle.py | 22 ++ app/api/v2/chat.py | 3 app/api/auth.py | 13 + app/service/auth.py | 12 app/service/v2/app_driver/chat_data.py | 2 app/models/__init__.py | 1 app/service/v2/chat.py | 31 +- app/config/env_conf/config116.yaml | 13 app/init_config/init_run_data.py | 1 app/models/user_model.py | 9 app/task/fetch_agent.py | 29 ++- app/task/sync_account_token.py | 1 main.py | 8 app/models/dialog_model.py | 1 app/service/v2/initialize_data.py | 3 app/models/token_model.py | 4 21 files changed, 412 insertions(+), 83 deletions(-) diff --git a/alembic/versions/019bbe8d4833_dialogs_add_parameters.py b/alembic/versions/019bbe8d4833_dialogs_add_parameters.py new file mode 100644 index 0000000..d8b2a14 --- /dev/null +++ b/alembic/versions/019bbe8d4833_dialogs_add_parameters.py @@ -0,0 +1,92 @@ +"""dialogs add parameters + +Revision ID: 019bbe8d4833 +Revises: 37606c5a9b9e +Create Date: 2025-01-15 11:26:21.253007 + +""" +from typing import Sequence, Union + +from alembic import op +import sqlalchemy as sa +from sqlalchemy.dialects import mysql + +# revision identifiers, used by Alembic. +revision: str = '019bbe8d4833' +down_revision: Union[str, None] = '37606c5a9b9e' +branch_labels: Union[str, Sequence[str], None] = None +depends_on: Union[str, Sequence[str], None] = None + + +def upgrade() -> None: + # ### commands auto generated by Alembic - please adjust! ### + op.drop_table('user_tenant') + op.drop_table('knowledgebase') + op.drop_table('apps') + op.drop_table('dialog') + op.drop_table('flow') + op.add_column('dialogs', sa.Column('parameters', sa.Text(), nullable=True)) + # ### end Alembic commands ### + + +def downgrade() -> None: + # ### commands auto generated by Alembic - please adjust! ### + op.drop_column('dialogs', 'parameters') + op.create_table('flow', + sa.Column('id', mysql.VARCHAR(length=255), nullable=False), + sa.Column('name', mysql.VARCHAR(length=255), nullable=False), + sa.Column('status', mysql.INTEGER(), autoincrement=False, nullable=False), + sa.Column('description', mysql.VARCHAR(length=255), nullable=False), + sa.Column('user_id', mysql.INTEGER(), autoincrement=False, nullable=False), + sa.PrimaryKeyConstraint('id'), + mysql_collate='utf8mb4_0900_ai_ci', + mysql_default_charset='utf8mb4', + mysql_engine='InnoDB' + ) + op.create_table('dialog', + sa.Column('id', mysql.VARCHAR(length=255), nullable=False), + sa.Column('name', mysql.VARCHAR(length=255), nullable=False), + sa.Column('status', mysql.VARCHAR(length=1), nullable=False), + sa.Column('description', mysql.VARCHAR(length=255), nullable=False), + sa.Column('tenant_id', mysql.VARCHAR(length=36), nullable=False), + sa.PrimaryKeyConstraint('id'), + mysql_collate='utf8mb4_0900_ai_ci', + mysql_default_charset='utf8mb4', + mysql_engine='InnoDB' + ) + op.create_table('apps', + sa.Column('id', mysql.VARCHAR(length=36), nullable=False), + sa.Column('name', mysql.VARCHAR(length=255), nullable=False), + sa.Column('status', mysql.VARCHAR(length=16), nullable=False), + sa.Column('description', mysql.TEXT(), nullable=False), + sa.Column('tenant_id', mysql.VARCHAR(length=36), nullable=False), + sa.Column('mode', mysql.VARCHAR(length=36), nullable=False), + sa.PrimaryKeyConstraint('id'), + mysql_collate='utf8mb4_0900_ai_ci', + mysql_default_charset='utf8mb4', + mysql_engine='InnoDB' + ) + op.create_table('knowledgebase', + sa.Column('id', mysql.VARCHAR(length=36), nullable=False), + sa.Column('name', mysql.VARCHAR(length=128), nullable=True), + sa.Column('permission', mysql.VARCHAR(length=32), nullable=True), + sa.Column('tenant_id', mysql.VARCHAR(length=32), nullable=True), + sa.Column('description', mysql.TEXT(), nullable=True), + sa.Column('status', mysql.VARCHAR(length=1), nullable=True), + sa.Column('doc_num', mysql.INTEGER(), autoincrement=False, nullable=True), + sa.PrimaryKeyConstraint('id'), + mysql_collate='utf8mb4_0900_ai_ci', + mysql_default_charset='utf8mb4', + mysql_engine='InnoDB' + ) + op.create_table('user_tenant', + sa.Column('id', mysql.VARCHAR(length=36), nullable=False), + sa.Column('tenant_id', mysql.VARCHAR(length=32), nullable=True), + sa.Column('user_id', mysql.VARCHAR(length=32), nullable=True), + sa.Column('role', mysql.VARCHAR(length=32), nullable=True), + sa.PrimaryKeyConstraint('id'), + mysql_collate='utf8mb4_0900_ai_ci', + mysql_default_charset='utf8mb4', + mysql_engine='InnoDB' + ) + # ### end Alembic commands ### diff --git a/alembic/versions/37606c5a9b9e_account_token.py b/alembic/versions/37606c5a9b9e_account_token.py new file mode 100644 index 0000000..830dc1d --- /dev/null +++ b/alembic/versions/37606c5a9b9e_account_token.py @@ -0,0 +1,136 @@ +"""account token + +Revision ID: 37606c5a9b9e +Revises: +Create Date: 2025-01-15 09:57:58.619279 + +""" +from typing import Sequence, Union + +from alembic import op +import sqlalchemy as sa +from sqlalchemy.dialects import mysql + +# revision identifiers, used by Alembic. +revision: str = '37606c5a9b9e' +down_revision: Union[str, None] = None +branch_labels: Union[str, Sequence[str], None] = None +depends_on: Union[str, Sequence[str], None] = None + + +def upgrade() -> None: + # ### commands auto generated by Alembic - please adjust! ### + op.drop_table('flow') + op.drop_table('dialog') + op.drop_table('apps') + op.drop_table('user_tenant') + op.drop_table('knowledgebase') + op.drop_index('session_id_ix', table_name='chat_sessions') + op.drop_index('tenant_id_ix', table_name='chat_sessions') + op.drop_index('update_tine_ix', table_name='chat_sessions') + op.drop_table('chat_sessions') + op.alter_column('chat_api_tokens', 'app_id', + existing_type=mysql.VARCHAR(charset='utf8mb3', collation='utf8mb3_general_ci', length=36), + nullable=True) + op.alter_column('chat_api_tokens', 'type', + existing_type=mysql.VARCHAR(charset='utf8mb3', collation='utf8mb3_general_ci', length=16), + nullable=True) + op.drop_index('app_id_ix', table_name='chat_api_tokens') + op.create_index(op.f('ix_chat_api_tokens_app_id'), 'chat_api_tokens', ['app_id'], unique=False) + op.drop_index('update_ix_index', table_name='conversation') + # ### end Alembic commands ### + + +def downgrade() -> None: + # ### commands auto generated by Alembic - please adjust! ### + op.create_index('update_ix_index', 'conversation', ['update_time'], unique=False) + op.drop_index(op.f('ix_chat_api_tokens_app_id'), table_name='chat_api_tokens') + op.create_index('app_id_ix', 'chat_api_tokens', ['app_id'], unique=False) + op.alter_column('chat_api_tokens', 'type', + existing_type=mysql.VARCHAR(charset='utf8mb3', collation='utf8mb3_general_ci', length=16), + nullable=False) + op.alter_column('chat_api_tokens', 'app_id', + existing_type=mysql.VARCHAR(charset='utf8mb3', collation='utf8mb3_general_ci', length=36), + nullable=False) + op.create_table('chat_sessions', + sa.Column('id', mysql.VARCHAR(charset='utf8mb3', collation='utf8mb3_general_ci', length=36), nullable=False), + sa.Column('name', mysql.VARCHAR(charset='utf8mb3', collation='utf8mb3_general_ci', length=255), nullable=True), + sa.Column('agent_id', mysql.VARCHAR(charset='utf8mb3', collation='utf8mb3_general_ci', length=255), nullable=True), + sa.Column('agent_type', mysql.INTEGER(), autoincrement=False, nullable=True), + sa.Column('create_date', mysql.DATETIME(), nullable=True), + sa.Column('update_date', mysql.DATETIME(), nullable=True), + sa.Column('tenant_id', mysql.INTEGER(), autoincrement=False, nullable=True), + sa.Column('message', mysql.LONGTEXT(charset='utf8mb3', collation='utf8mb3_general_ci'), nullable=True), + sa.Column('reference', mysql.LONGTEXT(charset='utf8mb3', collation='utf8mb3_general_ci'), nullable=True), + sa.Column('conversation_id', mysql.VARCHAR(charset='utf8mb3', collation='utf8mb3_general_ci', length=36), nullable=True), + sa.Column('event_type', mysql.VARCHAR(charset='utf8mb3', collation='utf8mb3_general_ci', length=16), nullable=True), + sa.Column('session_type', mysql.VARCHAR(charset='utf8mb3', collation='utf8mb3_general_ci', length=16), nullable=True), + sa.PrimaryKeyConstraint('id'), + mysql_default_charset='utf8mb3', + mysql_engine='InnoDB', + mysql_row_format='DYNAMIC' + ) + op.create_index('update_tine_ix', 'chat_sessions', ['update_date'], unique=False) + op.create_index('tenant_id_ix', 'chat_sessions', ['tenant_id'], unique=False) + op.create_index('session_id_ix', 'chat_sessions', ['conversation_id'], unique=False) + op.create_table('knowledgebase', + sa.Column('id', mysql.VARCHAR(length=36), nullable=False), + sa.Column('name', mysql.VARCHAR(length=128), nullable=True), + sa.Column('create_date', mysql.DATETIME(), nullable=True), + sa.Column('update_date', mysql.DATETIME(), nullable=True), + sa.Column('tenant_id', mysql.VARCHAR(length=32), nullable=True), + sa.Column('description', mysql.TEXT(), nullable=True), + sa.Column('status', mysql.VARCHAR(length=1), nullable=True), + sa.Column('documents', mysql.INTEGER(), autoincrement=False, nullable=True), + sa.Column('icon', mysql.VARCHAR(length=128), nullable=True), + sa.Column('knowledge_type', mysql.VARCHAR(length=1), nullable=True), + sa.Column('permission', mysql.VARCHAR(length=32), nullable=True), + sa.PrimaryKeyConstraint('id'), + mysql_collate='utf8mb4_0900_ai_ci', + mysql_default_charset='utf8mb4', + mysql_engine='InnoDB' + ) + op.create_table('user_tenant', + sa.Column('id', mysql.VARCHAR(length=36), nullable=False), + sa.Column('tenant_id', mysql.VARCHAR(length=32), nullable=True), + sa.Column('user_id', mysql.VARCHAR(length=32), nullable=True), + sa.Column('role', mysql.VARCHAR(length=32), nullable=True), + sa.PrimaryKeyConstraint('id'), + mysql_collate='utf8mb4_0900_ai_ci', + mysql_default_charset='utf8mb4', + mysql_engine='InnoDB' + ) + op.create_table('apps', + sa.Column('id', mysql.VARCHAR(length=36), nullable=False), + sa.Column('name', mysql.VARCHAR(length=255), nullable=False), + sa.Column('status', mysql.VARCHAR(length=16), nullable=False), + sa.Column('description', mysql.TEXT(), nullable=False), + sa.Column('tenant_id', mysql.VARCHAR(length=36), nullable=False), + sa.PrimaryKeyConstraint('id'), + mysql_collate='utf8mb4_0900_ai_ci', + mysql_default_charset='utf8mb4', + mysql_engine='InnoDB' + ) + op.create_table('dialog', + sa.Column('id', mysql.VARCHAR(length=255), nullable=False), + sa.Column('name', mysql.VARCHAR(length=255), nullable=False), + sa.Column('status', mysql.VARCHAR(length=1), nullable=False), + sa.Column('description', mysql.VARCHAR(length=255), nullable=False), + sa.Column('tenant_id', mysql.VARCHAR(length=36), nullable=False), + sa.PrimaryKeyConstraint('id'), + mysql_collate='utf8mb4_0900_ai_ci', + mysql_default_charset='utf8mb4', + mysql_engine='InnoDB' + ) + op.create_table('flow', + sa.Column('id', mysql.VARCHAR(length=255), nullable=False), + sa.Column('name', mysql.VARCHAR(length=255), nullable=False), + sa.Column('status', mysql.INTEGER(), autoincrement=False, nullable=False), + sa.Column('description', mysql.VARCHAR(length=255), nullable=False), + sa.Column('user_id', mysql.INTEGER(), autoincrement=False, nullable=False), + sa.PrimaryKeyConstraint('id'), + mysql_collate='utf8mb4_0900_ai_ci', + mysql_default_charset='utf8mb4', + mysql_engine='InnoDB' + ) + # ### end Alembic commands ### diff --git a/app/api/auth.py b/app/api/auth.py index c028ad1..3637cda 100644 --- a/app/api/auth.py +++ b/app/api/auth.py @@ -111,6 +111,7 @@ user = authenticate_user(db, login_data.username, password) if not user: return Response(code=400, msg="Incorrect username or password") + """ app_register = AppRegisterDao(db).get_apps() token_dict = {} for app in app_register: @@ -136,12 +137,13 @@ token_dict[app["id"]] = token except Exception as e: return Response(code=500, msg=f"Failed to login with {app['id']}: {str(e)}") - + """ # 鍒涘缓鏈湴token access_token = create_access_token(data={"sub": user.username, "user_id": user.id}) - await update_token(db, user.id, access_token, token_dict) - await update_user_token(db, user.id, token_dict) + # await update_token(db, user.id, access_token, token_dict) + # await update_user_token(db, user.id, token_dict) + ''' result = await pdb.execute(select(AppToken).where(AppToken.id == user.id)) db_app_token = result.scalars().first() if isinstance(access_token, bytes): @@ -158,6 +160,7 @@ db_app_token.app_token = json.dumps(token_dict) await pdb.commit() await pdb.refresh(db_app_token) + ''' return Response(code=200, msg="Login successful", data={ "access_token": access_token, "token_type": "bearer", @@ -176,6 +179,7 @@ db_user = db.query(UserModel).filter(UserModel.username == user.username).first() if db_user: return Response(code=200, msg="Username already registered") + """ app_register = AppRegisterDao(db).get_apps() register_dict = {} token = "" @@ -202,7 +206,8 @@ register_dict[app['id']] = {"id":register_info.get("id"), "name": name, "email": register_info.get("email")} except Exception as e: return Response(code=500, msg=f"Failed to register with {app['id']}: {str(e)}") - user_id = await save_register_user(db, user.username, password, user.email, app_password, register_dict) + """ + user_id = await save_register_user(db, user.username, password, user.email, "", {}) if not user_id: return Response(code=500, msg=f"Failed to register with app") return Response(code=200, msg="User registered successfully",data={"userFlag": user_id}) diff --git a/app/api/v2/chat.py b/app/api/v2/chat.py index b8ec8c7..0d6b9a5 100644 --- a/app/api/v2/chat.py +++ b/app/api/v2/chat.py @@ -58,7 +58,8 @@ data = await service_chat_parameters(db, chatId, 1) if not data: status_code = http_400 - return Response(json.dumps(data), media_type="application/json", status_code=status_code) + data = "{}" + return Response(data, media_type="application/json", status_code=status_code) # @chat_router_v2.get("/{chatId}/parameters") # async def api_chat_parameters(chatId:str, db: Session = Depends(get_db)): # current_user: UserModel = Depends(get_current_user) diff --git a/app/config/env_conf/config.yaml b/app/config/env_conf/config.yaml index 5bdca69..b3a8273 100644 --- a/app/config/env_conf/config.yaml +++ b/app/config/env_conf/config.yaml @@ -1,10 +1,10 @@ secret_key: your-secret-key -sgb_base_url: http://192.168.20.116:13001 -sgb_websocket_url: ws://192.168.20.116:13001 -fwr_base_url: http://192.168.20.116:11080 -database_url: mysql+pymysql://root:rag_gateway@192.168.20.116:23306/rag_gateway +sgb_base_url: http://192.168.20.119:13001 +sgb_websocket_url: ws://192.168.20.119:13001 +fwr_base_url: http://192.168.20.119:11080 +database_url: mysql+pymysql://root:infini_rag_flow@192.168.20.119:5455/rag_basic sgb_db_url: mysql+pymysql://root:1234@192.168.20.119:13306/bisheng -fwr_db_url: mysql+pymysql://root:infini_rag_flow@192.168.20.116:15455/rag_flow +fwr_db_url: mysql+pymysql://root:infini_rag_flow@192.168.20.119:15455/rag_flow PUBLIC_KEY: | -----BEGIN PUBLIC KEY----- MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArq9XTUSeYr2+N1h3Afl/z8Dse/2yD0ZGrKwx+EEEcdsBLca9Ynmx3nIB5obmLlSfmskLpBo0UACBmB5rEjBp2Q2f3AG3Hjd4B+gNCG6BDaawuDlgANIhGnaTLrIqWrrcm4EMzJOnAOI1fgzJRsOOUEfaS318Eq9OVO3apEyCCt0lOQK6PuksduOjVxtltDav+guVAA068NrPYmRNabVKRNLJpL8w4D44sfth5RvZ3q9t+6RTArpEtc5sh5ChzvqPOzKGMXW83C95TxmXqpbK6olN4RevSfVjEAgCydH6HN6OhtOQEcnrU97r9H0iZOWwbw3pVrZiUkuRD1R56Wzs2wIDAQAB @@ -17,10 +17,9 @@ basic_paper_url: http://192.168.20.231:8000 dify_base_url: http://192.168.20.116 dify_api_token: app-YmOAMDsPpDDlqryMHnc9TzTO -postgresql_database_url: postgresql+asyncpg://kong:kongpass@192.168.20.116:15433/kong +postgresql_database_url: postgresql+asyncpg://kong:kongpass@192.168.20.119:5432/kong dify_workflow_clean: app-OpF0drPu0XcgqcekQpT4FA8a dify_workflow_report: app-0MAkdFWqh9zxwmU69O0BFU1s dify_database_url: postgresql+psycopg2://postgres:difyai123456@192.168.20.116:15432/dify - diff --git a/app/config/env_conf/config1.yaml b/app/config/env_conf/config116.yaml similarity index 79% rename from app/config/env_conf/config1.yaml rename to app/config/env_conf/config116.yaml index b3a8273..5bdca69 100644 --- a/app/config/env_conf/config1.yaml +++ b/app/config/env_conf/config116.yaml @@ -1,10 +1,10 @@ secret_key: your-secret-key -sgb_base_url: http://192.168.20.119:13001 -sgb_websocket_url: ws://192.168.20.119:13001 -fwr_base_url: http://192.168.20.119:11080 -database_url: mysql+pymysql://root:infini_rag_flow@192.168.20.119:5455/rag_basic +sgb_base_url: http://192.168.20.116:13001 +sgb_websocket_url: ws://192.168.20.116:13001 +fwr_base_url: http://192.168.20.116:11080 +database_url: mysql+pymysql://root:rag_gateway@192.168.20.116:23306/rag_gateway sgb_db_url: mysql+pymysql://root:1234@192.168.20.119:13306/bisheng -fwr_db_url: mysql+pymysql://root:infini_rag_flow@192.168.20.119:15455/rag_flow +fwr_db_url: mysql+pymysql://root:infini_rag_flow@192.168.20.116:15455/rag_flow PUBLIC_KEY: | -----BEGIN PUBLIC KEY----- MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArq9XTUSeYr2+N1h3Afl/z8Dse/2yD0ZGrKwx+EEEcdsBLca9Ynmx3nIB5obmLlSfmskLpBo0UACBmB5rEjBp2Q2f3AG3Hjd4B+gNCG6BDaawuDlgANIhGnaTLrIqWrrcm4EMzJOnAOI1fgzJRsOOUEfaS318Eq9OVO3apEyCCt0lOQK6PuksduOjVxtltDav+guVAA068NrPYmRNabVKRNLJpL8w4D44sfth5RvZ3q9t+6RTArpEtc5sh5ChzvqPOzKGMXW83C95TxmXqpbK6olN4RevSfVjEAgCydH6HN6OhtOQEcnrU97r9H0iZOWwbw3pVrZiUkuRD1R56Wzs2wIDAQAB @@ -17,9 +17,10 @@ basic_paper_url: http://192.168.20.231:8000 dify_base_url: http://192.168.20.116 dify_api_token: app-YmOAMDsPpDDlqryMHnc9TzTO -postgresql_database_url: postgresql+asyncpg://kong:kongpass@192.168.20.119:5432/kong +postgresql_database_url: postgresql+asyncpg://kong:kongpass@192.168.20.116:15433/kong dify_workflow_clean: app-OpF0drPu0XcgqcekQpT4FA8a dify_workflow_report: app-0MAkdFWqh9zxwmU69O0BFU1s dify_database_url: postgresql+psycopg2://postgres:difyai123456@192.168.20.116:15432/dify + diff --git a/app/config/env_conf/default_agent_conf.json b/app/config/env_conf/default_agent_conf.json index 70c35f7..396fbb9 100644 --- a/app/config/env_conf/default_agent_conf.json +++ b/app/config/env_conf/default_agent_conf.json @@ -5,28 +5,96 @@ "name": "鎶ヨ〃鍚堝苟", "description": "鎶ヨ〃鍚堝苟", "icon": "intellFrame4", - "agentType": "excelMerge" + "agentType": "excelMerge", + "parameters": { + "retriever_resource": { + "enabled": false + }, + "user_input_form": [ + { + "file-list": { + "allowed_file_extensions": [ + "xlsx" + ], + "allowed_file_types": [ + "document" + ], + "allowed_file_upload_methods": [ + "local_file" + ], + "label": "鏂囨。瑙f瀽绔�", + "max_length": 30, + "options": [], + "required": true, + "type": "file-list", + "variable": "file_list" + } + } + ], + "file_upload":{ + "enabled": false + } + } }, { "id": "basic_excel_talk", "name": "鏅鸿兘鏁版嵁", "description": "鏅鸿兘鏁版嵁", "icon": "intellFrame4", - "agentType": "excelTalk" + "agentType": "excelTalk", + "parameters": { + "retriever_resource": { + "enabled": true + }, + "user_input_form": [ + { + "file-list": { + "allowed_file_extensions": [ + "xlsx", "xls","csv","db" + ], + "allowed_file_types": [ + "document" + ], + "allowed_file_upload_methods": [ + "local_file" + ], + "label": "涓婁紶鏂囨。", + "max_length": 30, + "options": [], + "required": true, + "type": "file-list", + "variable": "file_list", + "fileUploadConfig": { + "file_size_limit": 30, + "batch_count_limit": 5, + "image_file_size_limit": 10, + "video_file_size_limit": 100, + "audio_file_size_limit": 50, + "workflow_file_upload_limit": 100 + } + } + } + ], + "file_upload":{ + "enabled": false + } + } }, { "id": "basic_question_talk", "name": "鍑洪缁勫嵎", "description": "鍑洪缁勫嵎", "icon": "intellFrame4", - "agentType": "questionTalk" - }, - { - "id": "basic_paper_talk", - "name": "鏂囨。鍑哄嵎", - "description": "鏂囨。鍑哄嵎", - "icon": "intellFrame4", - "agentType": "paperTalk" + "agentType": "questionTalk", + "parameters": { + "retriever_resource": { + "enabled": true + }, + "user_input_form": [], + "file_upload":{ + "enabled": false + } + } } ], "bs": [] diff --git a/app/init_config/init_run_data.py b/app/init_config/init_run_data.py index ddb32e7..8bcff03 100644 --- a/app/init_config/init_run_data.py +++ b/app/init_config/init_run_data.py @@ -1,6 +1,7 @@ from app.models.base_model import SessionLocal from app.service.v2.initialize_data import dialog_menu_sync, default_group_sync, default_role_sync, app_register_sync, \ basic_agent_sync, admin_account_sync +from app.task.fetch_agent import sync_resources_from_json async def sync_default_data(): diff --git a/app/models/__init__.py b/app/models/__init__.py index 126abc8..9f8a749 100644 --- a/app/models/__init__.py +++ b/app/models/__init__.py @@ -16,6 +16,7 @@ from .public_api_model import * from .menu_model import * from .label_model import * +from .v2.session_model import * # 鑾峰彇褰撳墠鏃跺尯鐨勬椂闂� diff --git a/app/models/dialog_model.py b/app/models/dialog_model.py index 4a6a29e..1ab181f 100644 --- a/app/models/dialog_model.py +++ b/app/models/dialog_model.py @@ -23,6 +23,7 @@ dialog_type = Column(String(1)) # 骞冲彴 # agent_id = Column(String(36)) mode = Column(String(36)) + parameters = Column(Text) def get_id(self): return str(self.id) diff --git a/app/models/token_model.py b/app/models/token_model.py index 7ad0e01..ef120dc 100644 --- a/app/models/token_model.py +++ b/app/models/token_model.py @@ -94,8 +94,8 @@ class ApiTokenModel(Base): __tablename__ = "chat_api_tokens" - id = Column(String(32), primary_key=True) - app_id = Column(String(32), index=True) + id = Column(String(36), primary_key=True) + app_id = Column(String(36), index=True) type = Column(String(16)) token = Column(String(255)) created_at = Column(DateTime, default=datetime.now()) diff --git a/app/models/user_model.py b/app/models/user_model.py index 10b3fed..8dc7183 100644 --- a/app/models/user_model.py +++ b/app/models/user_model.py @@ -254,11 +254,4 @@ 'password': self.password, 'access_token': self.access_token, 'refresh_token': self.refresh_token, - } - @staticmethod - def encrypted_password(password): - return cipher_suite.encrypt(password.encode("utf-8")).decode("utf-8") - - @staticmethod - def decrypted_password(password): - return cipher_suite.decrypt(password).decode("utf-8") \ No newline at end of file + } \ No newline at end of file diff --git a/app/service/auth.py b/app/service/auth.py index 8c6544c..8354200 100644 --- a/app/service/auth.py +++ b/app/service/auth.py @@ -83,23 +83,21 @@ try: hashed_password = pwd_context.hash(password) db_user = UserModel(username=username, hashed_password=hashed_password, email=email, sync_flag=sync_flag) - pwd = db_user.encrypted_password(app_password) - db_user.password = pwd + # pwd = db_user.encrypted_password(app_password) + # db_user.password = pwd db_user.roles = [db.query(RoleModel).filter(RoleModel.role_type == 2).first()] db_user.groups = [db.query(GroupModel).filter(GroupModel.group_type == 2).first()] db.add(db_user) db.commit() db.refresh(db_user) + ''' user_id = db_user.id for k, v in register_dict.items(): await UserAppDao(db).update_and_insert_data(v.get("name"), pwd, v.get("email"), user_id, str(v.get("id")), k) - + ''' except Exception as e: logger.error(e) - # db.roolback() - if user_id: - db.query(UserModel).filter(UserModel.id == user_id).delete() - db.commit + db.rollback() return False return sync_flag diff --git a/app/service/user.py b/app/service/user.py index 015d404..b6c916e 100644 --- a/app/service/user.py +++ b/app/service/user.py @@ -58,10 +58,13 @@ async def create_user(db, user_name, email, phone, login_name, password, roles, groups, user_id): try: - app_register = AppRegisterDao(db).get_apps() + register_dict = {} token = "" + + """ app_password = await generate_password() + app_register = AppRegisterDao(db).get_apps() for app in app_register: if app["id"] == RAGFLOW: service = RagflowService(settings.fwr_base_url) @@ -82,26 +85,28 @@ except Exception as e: logger.error(e) return False - + """ # 瀛樺偍鐢ㄦ埛淇℃伅 hashed_password = pwd_context.hash(password) sync_flag = str(uuid.uuid4()) user_model = UserModel(username=user_name, hashed_password=hashed_password, email=email, ## ragflow_id=ragflow_info.get("id"),bisheng_id=bisheng_info.get("user_id"), phone=phone, login_name=login_name,sync_flag=sync_flag) - pwd = user_model.encrypted_password(app_password) + # pwd = user_model.encrypted_password(app_password) + # user_model.password = pwd user_model.roles = [db.get(RoleModel, roleId) for roleId in roles] - user_model.password = pwd if groups: user_model.groups = [db.get(GroupModel, groupId) for groupId in groups] user_model.creator = user_id db.add(user_model) db.commit() db.refresh(user_model) + """ u_id = user_model.id user_app_dao = UserAppDao(db) for k, v in register_dict.items(): await user_app_dao.update_and_insert_data(v.get("name"), pwd, v.get("email"), u_id, str(v.get("id")), k) + """ except Exception as e: logger.error(e) # db.rollback() diff --git a/app/service/v2/app_driver/chat_data.py b/app/service/v2/app_driver/chat_data.py index dad38e2..308f0fc 100644 --- a/app/service/v2/app_driver/chat_data.py +++ b/app/service/v2/app_driver/chat_data.py @@ -24,7 +24,7 @@ async def chat_post(self, url, data, headers): res = await self.http_post(url, data, headers) - if res.status_code == 200: + if res.status_code == 200 or res.status_code == 201: return res.json() else: return {} diff --git a/app/service/v2/chat.py b/app/service/v2/chat.py index ddd17a2..2575e70 100644 --- a/app/service/v2/chat.py +++ b/app/service/v2/chat.py @@ -200,21 +200,22 @@ chat_info = db.query(DialogModel).filter_by(id=chat_id).first() if not chat_info: return {} - if chat_info.dialog_type == RG_TYPE: - return {"retriever_resource": - { - "enabled": True - } - } - elif chat_info.dialog_type == BASIC_TYPE: - ... - elif chat_info.dialog_type == DF_TYPE: - token = await get_chat_token(db, chat_id) - if not token: - return {} - url = settings.dify_base_url + DF_CHAT_PARAMETERS - chat = ChatBaseApply() - return await chat.chat_get(url, {"user": str(user_id)}, await chat.get_headers(token)) + return chat_info.parameters + # if chat_info.dialog_type == RG_TYPE: + # return {"retriever_resource": + # { + # "enabled": True + # } + # } + # elif chat_info.dialog_type == BASIC_TYPE: + # ... + # elif chat_info.dialog_type == DF_TYPE: + # token = await get_chat_token(db, chat_id) + # if not token: + # return {} + # url = settings.dify_base_url + DF_CHAT_PARAMETERS + # chat = ChatBaseApply() + # return await chat.chat_get(url, {"user": str(user_id)}, await chat.get_headers(token)) async def service_chat_sessions(db, chat_id, name): diff --git a/app/service/v2/initialize_data.py b/app/service/v2/initialize_data.py index 958af75..08da5fb 100644 --- a/app/service/v2/initialize_data.py +++ b/app/service/v2/initialize_data.py @@ -135,6 +135,7 @@ dialog.name = agent["name"] dialog.description = agent["description"] dialog.icon = agent["icon"] + dialog.parameters = json.dumps(agent["parameters"]) db.commit() except Exception as e: logger.error(e) @@ -142,7 +143,7 @@ try: dialog = DialogModel(id=agent["id"], name=agent["name"], description=agent["description"], icon=agent["icon"], tenant_id=user.id if user else "", dialog_type="3", - agent_id=agent["id"]) + agent_id=agent["id"], parameters = json.dumps(agent["parameters"])) db.add(dialog) db.commit() db.refresh(dialog) diff --git a/app/task/fetch_agent.py b/app/task/fetch_agent.py index bbb4da9..f361265 100644 --- a/app/task/fetch_agent.py +++ b/app/task/fetch_agent.py @@ -240,6 +240,15 @@ def get_data_from_ragflow_v2(names: List[str]) -> List[Dict]: db = SessionRagflow() + para = { + "user_input_form": [], + "retriever_resource": { + "enabled": True + }, + "file_upload": { + "enabled": False + } + } try: if names: query = db.query(Dialog.id, Dialog.name, Dialog.description, Dialog.status, Dialog.tenant_id) \ @@ -251,13 +260,13 @@ results = query.all() formatted_results = [ {"id": row[0], "name": row[1], "description": row[2], "status": "1" if row[3] == "1" else "2", - "user_id": str(row[4]), "mode": "agent-dialog"} for row in results] + "user_id": str(row[4]), "mode": "agent-dialog", "parameters": para} for row in results] return formatted_results finally: db.close() -def get_data_from_dify_v2(names: List[str]) -> List[Dict]: +def get_data_from_dy_v2(names: List[str]) -> List[Dict]: db = SessionDify() try: if names: @@ -269,7 +278,7 @@ results = query.all() formatted_results = [ {"id": str(row[0]), "name": row[1], "description": row[2], "status": "1", - "user_id": str(row[4]), "mode": row[5]} for row in results] + "user_id": str(row[4]), "mode": row[5], "parameters": {}} for row in results] return formatted_results finally: db.close() @@ -286,14 +295,12 @@ if existing_agent: existing_agent.name = row["name"] existing_agent.description = row["description"] - # existing_agent.status = row["status"] existing_agent.mode = row["mode"] - # existing_agent.tenant_id = get_rag_user_id(db, row["user_id"], type_dict[dialog_type]) else: existing = DialogModel(id=row["id"], status=row["status"], name=row["name"], description=row["description"], tenant_id=get_rag_user_id(db, row["user_id"], type_dict[dialog_type]), - dialog_type=dialog_type, mode=row["mode"]) + dialog_type=dialog_type, mode=row["mode"], parameters=json.dumps(row["parameters"])) db.add(existing) db.commit() for dialog in db.query(DialogModel).filter_by(dialog_type=dialog_type).all(): @@ -332,12 +339,12 @@ ragflow_data = get_data_from_ragflow_v2([]) if ragflow_data: update_ids_in_local_v2(ragflow_data, "1") - elif app["id"] == BISHENG: - bisheng_data = get_data_from_bisheng_v2([]) - if bisheng_data: - update_ids_in_local_v2(bisheng_data, "2") + # elif app["id"] == BISHENG: + # bisheng_data = get_data_from_bisheng_v2([]) + # if bisheng_data: + # update_ids_in_local_v2(bisheng_data, "2") elif app["id"] == DIFY: - dify_data = get_data_from_dify_v2([]) + dify_data = get_data_from_dy_v2([]) if dify_data: update_ids_in_local_v2(dify_data, "4") print("v2 Agents synchronized successfully") diff --git a/app/task/sync_account_token.py b/app/task/sync_account_token.py index 9d2ee32..1e7747c 100644 --- a/app/task/sync_account_token.py +++ b/app/task/sync_account_token.py @@ -9,5 +9,6 @@ 4.token鑾峰彇锛歭ogin df:/console/api/workspaces rg:/v1/system/version + 5.璺熸柊鏈湴token鍜宬ong缃戝叧token :return: """ \ No newline at end of file diff --git a/app/utils/password_handle.py b/app/utils/password_handle.py index 8852a11..a6e421b 100644 --- a/app/utils/password_handle.py +++ b/app/utils/password_handle.py @@ -2,6 +2,10 @@ import random import string +from cryptography.fernet import Fernet +from app.config.config import settings + +cipher_suite = Fernet(settings.PASSWORD_KEY.encode("utf-8")) async def generate_password(length=10): if length < 6: # 鑷冲皯闇�瑕�3浣嶅瘑鐮佷互鍖呭惈鎵�鏈夊繀瑕佺殑瀛楃 @@ -24,8 +28,22 @@ # 灏嗗垪琛ㄨ浆鎹负瀛楃涓� return ''.join(password) + +async def password_encrypted(password): + hash_pwd = cipher_suite.encrypt(password.encode("utf-8")).decode("utf-8") + print(hash_pwd) + return hash_pwd + + +async def password_decrypted(hash_password): + pwd = cipher_suite.decrypt(hash_password).decode("utf-8") + print(pwd) + return pwd if __name__ == "__main__": # 鐢熸垚涓�涓�10浣嶇殑瀵嗙爜 - asyncio.run(generate_password(10)) + # asyncio.run(generate_password(10)) # password = generate_password(10) - # print(password) \ No newline at end of file + # print(password) + + asyncio.run(password_encrypted("123456")) + asyncio.run(password_decrypted("gAAAAABnhyOiGUnAqK7FW_pHsXifje8WG1cirtF_eu3a44FrMYM3AkSBsWjsJrwpzUlD2GDzzZOS6yYu4Ie5gnkYuy8HVN3FBw==")) \ No newline at end of file diff --git a/main.py b/main.py index b4bbe0a..fc24d9c 100644 --- a/main.py +++ b/main.py @@ -43,11 +43,11 @@ - # await sync_default_data() + await sync_default_data() # - # sync_agents_v2() - # sync_knowledge() - # sync_resources_from_json() + sync_agents_v2() + sync_knowledge() + sync_resources_from_json() yield # 鍦ㄥ簲鐢ㄥ叧闂椂鎵ц娓呯悊鎿嶄綔锛堝鏋滈渶瑕侊級 pass -- Gitblit v1.8.0