Files
weiyu/modules/python/app/redisPubsub.py

147 lines
3.9 KiB
Python
Raw Normal View History

2024-12-14 10:43:18 +08:00
'''
Author: jackning 270580156@qq.com
Date: 2024-08-29 18:21:14
LastEditors: jackning 270580156@qq.com
LastEditTime: 2024-08-31 10:18:58
Description: bytedesk.com https://github.com/Bytedesk/bytedesk
Please be aware of the BSL license restrictions before installing Bytedesk IM
selling, reselling, or hosting Bytedesk IM as a service is a breach of the terms and automatically terminates your rights under the license.
仅支持企业内部员工自用严禁私自用于销售二次销售或者部署SaaS方式销售
Business Source License 1.1: https://github.com/Bytedesk/bytedesk/blob/main/LICENSE
contact: 270580156@qq.com
技术/商务联系270580156@qq.com
Copyright (c) 2024 by bytedesk.com, All Rights Reserved.
'''
import json
import logging
from typing import List
import redis
from app.config import get_settings
from app.consts import DELETE_FILE_ERROR, DELETE_FILE_SUCCESS, PARSE_FILE_ERROR, PARSE_FILE_SUCCESS, ANSWER, ANSWER_FINISHED, pubsubChannel
#
redisClient = redis.Redis(host=get_settings().REDIS_HOST,
password=get_settings().REDIS_PASSWORD,
port=get_settings().REDIS_PORT,
decode_responses=True)
#
def publishParseFileSuccess(fileUid: str, docIds: List[str]) -> None:
content = json.dumps({
"fileUid": fileUid,
"docIds": docIds
})
message = json.dumps({
"type": PARSE_FILE_SUCCESS,
"content": content,
}, ensure_ascii=False)
defaultPublish(content=message)
def publishParseFileError(fileUid: str, errorMsg: str) -> None:
content = json.dumps({
"fileUid": fileUid,
"errorMsg": errorMsg,
})
message = json.dumps({
"type": PARSE_FILE_ERROR,
"content": content,
}, ensure_ascii=False)
defaultPublish(content=message)
def publishDeleteFileSuccess(fileUid: str) -> None:
content = json.dumps({
"fileUid": fileUid,
})
message = json.dumps({
"type": DELETE_FILE_SUCCESS,
"content": content,
}, ensure_ascii=False)
defaultPublish(content=message)
def publishDeleteFileError(fileUid: str, errorMsg: str) -> None:
content = json.dumps({
"fileUid": fileUid,
"errorMsg": errorMsg,
})
message = json.dumps({
"type": DELETE_FILE_ERROR,
"content": content,
}, ensure_ascii=False)
defaultPublish(content=message)
def publishAnswerMessage(
id: int,
uid: str,
threadTopic: str,
kbUid: str,
question: str,
answer: str,
model: str,
created: int) -> None:
#
content = json.dumps({
"id": id,
"uid": uid,
"threadTopic": threadTopic,
"kbUid": kbUid,
"question": question,
"answer": answer,
"model": model,
"created": created
})
message = json.dumps({
"type": ANSWER,
"content": content,
}, ensure_ascii=False)
defaultPublish(content=message)
return
def publishAnswerFinished(
id: int,
uid: str,
threadTopic: str,
kbUid: str,
question: str,
answer: str,
model: str,
created: int,
promptTokens: str,
completionTokens: str,
totalTokens: str) -> None:
#
content = json.dumps({
"id": id,
"uid": uid,
"threadTopic": threadTopic,
"kbUid": kbUid,
"question": question,
"answer": answer,
"model": model,
"created": created,
"promptTokens": promptTokens,
"completionTokens": completionTokens,
"totalTokens": totalTokens
})
message = json.dumps({
"type": ANSWER_FINISHED,
"content": content,
}, ensure_ascii=False)
defaultPublish(content=message)
return
#
def defaultPublish(content: str) -> None:
publish(pubsubChannel, content)
def publish(channel, message):
# logging.info(f'publish {message} to channel: {channel}')
redisClient.publish(channel, message)