| | |
| | | async def change_dialog_status(dialog: dialogDataUpdate, current_user: UserModel = Depends(get_current_user), db=Depends(get_db)): |
| | | if dialog.status not in ["0", "1"]: |
| | | return Response(code=400, msg="invalid parameter value", data={}) |
| | | is_create = await update_dialog_status_service(db, dialog.id, dialog.status) |
| | | is_create = await update_dialog_status_service(db, dialog.id, dialog.status, current_user.id) |
| | | if not is_create: |
| | | return Response(code=500, msg="dialog update failure", data={}) |
| | | return Response(code=200, msg="dialog update success", data={}) |
| | |
| | | DF_CHAT_AGENT= "/v1/chat-messages" |
| | | DF_CHAT_WORKFLOW= "/v1/workflows/run" |
| | | DF_CHAT_PARAMETERS= "/v1/parameters" |
| | | DF_CHAT_API_KEY= "/console/api/apps/{}/api-keys" |
| | |
| | | "img": "/src/assets/index/5.png", |
| | | "desc": "遍历已创建的文档知识库,生成完整和准确的答案,同时显示来源文档供您参考", |
| | | "describe": "垂域知识的问答助手,针对你的提问,我们将遍历已创建的文档知识库,生成完整和准确的答案,同时显示来源文档供您参考。", |
| | | "rank": 98, |
| | | "rank": 105, |
| | | "dialog": [ |
| | | { |
| | | "id": "e476db7cbdbb11ef82b50242ac130006", |
| | |
| | | "img": "/src/assets/index/1.png", |
| | | "desc": "能够理解和学习人类的语言,具备多轮对话的能力", |
| | | "describe": "我可以理解和学习人类的语言,具备多轮对话的能力,现在和我开始交流吧~", |
| | | "rank": 96, |
| | | "rank": 104, |
| | | "dialog": [ |
| | | { |
| | | "id": "90d533729c0211efbf6b0242ac160006", |
| | |
| | | "rank": 93, |
| | | "dialog": [ |
| | | { |
| | | "id": "basic_paper_talk", |
| | | "chat_id": "basic_paper_talk", |
| | | "id": "2f6ddf93-7ba6-4b2d-b991-d96421404600", |
| | | "chat_id": "2f6ddf93-7ba6-4b2d-b991-d96421404600", |
| | | "chat_type": "paperTalk", |
| | | "agentType": 3 |
| | | "agentType": 4 |
| | | } |
| | | ] |
| | | }, |
| | |
| | | import json |
| | | from datetime import datetime |
| | | |
| | | from sqlalchemy import or_ |
| | | |
| | | from app.config.const import Dialog_STATSU_DELETE |
| | | from app.config.agent_base_url import DF_CHAT_PARAMETERS, DF_CHAT_API_KEY |
| | | from app.config.config import settings |
| | | from app.config.const import Dialog_STATSU_DELETE, DF_TYPE, Dialog_STATSU_ON, workflow_server |
| | | from app.models import KnowledgeModel, GroupModel, DialogModel, ConversationModel, group_dialog_table, LabelWorkerModel, \ |
| | | LabelModel |
| | | from app.models.user_model import UserModel |
| | | LabelModel, ApiTokenModel |
| | | from app.models.user_model import UserModel, UserTokenModel |
| | | from Log import logger |
| | | from app.service.v2.app_driver.chat_data import ChatBaseApply |
| | | from app.service.v2.chat import get_chat_token, add_chat_token, get_app_token |
| | | |
| | | |
| | | async def get_dialog_list(db, user_id, keyword, label, status, page_size, page_index): |
| | |
| | | if keyword: |
| | | query = query.filter(DialogModel.name.like('%{}%'.format(keyword))) |
| | | |
| | | |
| | | query = query.order_by(DialogModel.update_date.desc()) |
| | | total = query.count() |
| | | if page_size: |
| | |
| | | for i in db.query(LabelModel.id, LabelModel.name, LabelWorkerModel.object_id).outerjoin(LabelWorkerModel, |
| | | LabelModel.id == LabelWorkerModel.label_id).filter( |
| | | LabelWorkerModel.object_id.in_(dialog_id_set)).all(): |
| | | |
| | | label_dict[i.object_id] = label_dict.get(i.object_id, []) +[{"labelId": i.id, "labelName": i.name}] |
| | | for r in rows: |
| | | r["user"] = user_dict.get(r["user_id"], {}) |
| | |
| | | return [i.to_json() for i in session_list] |
| | | |
| | | |
| | | |
| | | async def create_dialog_service(db, dialog_id, dialog_name, description, icon, dialog_type, mode, user_id): |
| | | try: |
| | | dialog_model = DialogModel(id=dialog_id,name=dialog_name, description=description,icon=icon, dialog_type=dialog_type, tenant_id=user_id, mode=mode,update_date=datetime.now(),create_date=datetime.now()) |
| | | dialog_model = DialogModel(id=dialog_id, name=dialog_name, description=description, icon=icon, |
| | | dialog_type=dialog_type, tenant_id=user_id, mode=mode, update_date=datetime.now(), |
| | | create_date=datetime.now()) |
| | | db.add(dialog_model) |
| | | db.commit() |
| | | db.refresh(dialog_model) |
| | |
| | | return True |
| | | |
| | | |
| | | async def update_dialog_status_service(db, dialog_id, status): |
| | | async def update_dialog_status_service(db, dialog_id, status, user_id): |
| | | try: |
| | | db.query(DialogModel).filter_by(id=dialog_id).update({"status":status, "update_date": datetime.now()}) |
| | | dialog = db.query(DialogModel).filter_by(id=dialog_id).first() |
| | | dialog.status = status |
| | | dialog.update_date = datetime.now() |
| | | # db.query(DialogModel).filter_by(id=dialog_id).update({"status":status, "update_date": datetime.now()}) |
| | | if dialog.dialog_type == DF_TYPE and status == Dialog_STATSU_ON: |
| | | chat = ChatBaseApply() |
| | | token = await get_chat_token(db, dialog_id) |
| | | if not token: |
| | | workflow = await get_app_token(db, workflow_server) |
| | | if workflow: |
| | | url = settings.dify_base_url + DF_CHAT_API_KEY.format(dialog_id) |
| | | param = await chat.chat_get(url, {}, await chat.get_headers(workflow.access_token)) |
| | | if param and param.get("data"): |
| | | token = param.get("data", [{}])[0].get("token") |
| | | token_id = param.get("data", [{}])[0].get("id") |
| | | await add_chat_token(db, {"id":token_id, "app_id": dialog_id, "type":"app", "token": token}) |
| | | # dialog.parameters = json.dumps(param) |
| | | else: |
| | | param = await chat.chat_post(url, {}, await chat.get_headers(workflow.access_token)) |
| | | if param: |
| | | token = param.get("token") |
| | | token_id = param.get("id") |
| | | await add_chat_token(db, {"id": token_id, "app_id": dialog_id, "type": "app", "token": token}) |
| | | if token: |
| | | url = settings.dify_base_url + DF_CHAT_PARAMETERS |
| | | param = await chat.chat_get(url, {"user": str(user_id)}, await chat.get_headers(token)) |
| | | if param: |
| | | dialog.parameters = json.dumps(param) |
| | | |
| | | db.commit() |
| | | except Exception as e: |
| | | logger.error(e) |
| | |
| | | return True |
| | | |
| | | |
| | | |
| | | async def delete_dialog_service(db, dialog_id): |
| | | try: |
| | | db.query(DialogModel).filter_by(id=dialog_id).update({"status":Dialog_STATSU_DELETE, "update_date": datetime.now()}) |
| | | db.query(DialogModel).filter_by(id=dialog_id).update( |
| | | {"status": Dialog_STATSU_DELETE, "update_date": datetime.now()}) |
| | | db.commit() |
| | | except Exception as e: |
| | | logger.error(e) |
| | |
| | | query = db.query(DialogModel).filter(DialogModel.status != Dialog_STATSU_DELETE) |
| | | id_list = [] |
| | | if label: |
| | | id_list = set([i.object_id for i in db.query(LabelWorkerModel).filter(LabelWorkerModel.label_id.in_(label)).all()]) |
| | | id_list = set( |
| | | [i.object_id for i in db.query(LabelWorkerModel).filter(LabelWorkerModel.label_id.in_(label)).all()]) |
| | | if user.permission != "admin": |
| | | dia_list = [j.id for i in user.groups for j in i.dialogs if not label or j.id in id_list] |
| | | query = query.filter(or_(DialogModel.tenant_id == user_id, DialogModel.id.in_(dia_list))) |
| | |
| | | for i in db.query(LabelModel.id, LabelModel.name, LabelWorkerModel.object_id).outerjoin(LabelWorkerModel, |
| | | LabelModel.id == LabelWorkerModel.label_id).filter( |
| | | LabelWorkerModel.object_id.in_(dialog_id_set)).all(): |
| | | |
| | | label_dict[i.object_id] = label_dict.get(i.object_id, []) +[{"labelId": i.id, "labelName": i.name}] |
| | | for r in rows: |
| | | r["user"] = user_dict.get(r["user_id"], {}) |
| | |
| | | DF_CHAT_WORKFLOW |
| | | from app.config.config import settings |
| | | from app.config.const import * |
| | | from app.models import DialogModel, ApiTokenModel |
| | | from app.models import DialogModel, ApiTokenModel, UserTokenModel |
| | | from app.models.v2.session_model import ChatSessionDao, ChatData |
| | | from app.service.v2.app_driver.chat_agent import ChatAgent |
| | | from app.service.v2.app_driver.chat_data import ChatBaseApply |
| | |
| | | logger.error(e) |
| | | return None |
| | | |
| | | async def get_app_token(db, app_id): |
| | | app_token = db.query(UserTokenModel).filter_by(id=app_id).first() |
| | | if app_token: |
| | | return app_token.access_token |
| | | return "" |
| | | |
| | | |
| | | |
| | | async def get_chat_token(db, app_id): |
| | | app_token = db.query(ApiTokenModel).filter_by(app_id=app_id).first() |
| | |
| | | return "" |
| | | |
| | | |
| | | async def add_chat_token(db, data): |
| | | try: |
| | | api_token = ApiTokenModel(**data) |
| | | db.add(api_token) |
| | | db.commit() |
| | | except Exception as e: |
| | | logger.error(e) |
| | | |
| | | |
| | | |
| | | async def get_chat_info(db, chat_id: str): |
| | | return db.query(DialogModel).filter_by(id=chat_id, status=Dialog_STATSU_ON).first() |
| | | |
| | |
| | | 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"], parameters = json.dumps(agent["parameters"])) |
| | | parameters = json.dumps(agent["parameters"])) |
| | | db.add(dialog) |
| | | db.commit() |
| | | db.refresh(dialog) |
| | |
| | | # password = generate_password(10) |
| | | # print(password) |
| | | |
| | | asyncio.run(password_encrypted("123456")) |
| | | asyncio.run(password_decrypted("gAAAAABnhyOiGUnAqK7FW_pHsXifje8WG1cirtF_eu3a44FrMYM3AkSBsWjsJrwpzUlD2GDzzZOS6yYu4Ie5gnkYuy8HVN3FBw==")) |
| | | asyncio.run(password_encrypted("zhaoqg123456")) |
| | | asyncio.run(password_decrypted("gAAAAABnh2Y-OYrpdm2QuW24j4QL3pxjkKZsHu37Vzl_mh8SrG5Roa5TThcBxcj7hqPq7NrA8OaL0WdsmpcpYDfpZCofBVjbbA==")) |