Add user_id for third-party system to record sessions. (#4206)

### What problem does this PR solve?


### Type of change

- [x] New Feature (non-breaking change which adds functionality)
- [x] Documentation Update

---------

Co-authored-by: writinwaters <93570324+writinwaters@users.noreply.github.com>
This commit is contained in:
Kevin Hu
2024-12-24 15:59:11 +08:00
committed by GitHub
parent b7a7413419
commit 03cbbf7784
5 changed files with 60 additions and 27 deletions

View File

@ -31,7 +31,6 @@ from peewee import (
)
from playhouse.pool import PooledMySQLDatabase, PooledPostgresqlDatabase
from api.db import SerializedType, ParserType
from api import settings
from api import utils
@ -926,6 +925,7 @@ class Conversation(DataBaseModel):
name = CharField(max_length=255, null=True, help_text="converastion name", index=True)
message = JSONField(null=True)
reference = JSONField(null=True, default=[])
user_id = CharField(max_length=255, null=True, help_text="user_id", index=True)
class Meta:
db_table = "conversation"
@ -1070,13 +1070,13 @@ def migrate_db():
pass
try:
migrate(
migrator.add_column("tenant_llm","max_tokens",IntegerField(default=8192,index=True))
migrator.add_column("tenant_llm", "max_tokens", IntegerField(default=8192, index=True))
)
except Exception:
pass
try:
migrate(
migrator.add_column("api_4_conversation","dsl",JSONField(null=True, default={}))
migrator.add_column("api_4_conversation", "dsl", JSONField(null=True, default={}))
)
except Exception:
pass
@ -1105,3 +1105,10 @@ def migrate_db():
)
except Exception:
pass
try:
migrate(
migrator.add_column("conversation", "user_id",
CharField(max_length=255, null=True, help_text="user_id", index=True))
)
except Exception:
pass

View File

@ -41,11 +41,14 @@ class API4ConversationService(CommonService):
@classmethod
@DB.connection_context()
def get_list(cls,dialog_id, tenant_id,
page_number, items_per_page, orderby, desc, id):
sessions = cls.model.select().where(cls.model.dialog_id ==dialog_id)
def get_list(cls, dialog_id, tenant_id,
page_number, items_per_page,
orderby, desc, id, user_id=None):
sessions = cls.model.select().where(cls.model.dialog_id == dialog_id)
if id:
sessions = sessions.where(cls.model.id == id)
if user_id:
sessions = sessions.where(cls.model.user_id == user_id)
if desc:
sessions = sessions.order_by(cls.model.getter_by(orderby).desc())
else:

View File

@ -28,12 +28,14 @@ class ConversationService(CommonService):
@classmethod
@DB.connection_context()
def get_list(cls,dialog_id,page_number, items_per_page, orderby, desc, id , name):
sessions = cls.model.select().where(cls.model.dialog_id ==dialog_id)
def get_list(cls, dialog_id, page_number, items_per_page, orderby, desc, id, name, user_id=None):
sessions = cls.model.select().where(cls.model.dialog_id == dialog_id)
if id:
sessions = sessions.where(cls.model.id == id)
if name:
sessions = sessions.where(cls.model.name == name)
if user_id:
sessions = sessions.where(cls.model.user_id == user_id)
if desc:
sessions = sessions.order_by(cls.model.getter_by(orderby).desc())
else:
@ -52,15 +54,16 @@ def structure_answer(conv, ans, message_id, session_id):
def get_value(d, k1, k2):
return d.get(k1, d.get(k2))
chunk_list = [{
"id": get_value(chunk, "chunk_id", "id"),
"content": get_value(chunk, "content", "content_with_weight"),
"document_id": get_value(chunk, "doc_id", "document_id"),
"document_name": get_value(chunk, "docnm_kwd", "document_name"),
"dataset_id": get_value(chunk, "kb_id", "dataset_id"),
"image_id": get_value(chunk, "image_id", "img_id"),
"positions": get_value(chunk, "positions", "position_int"),
} for chunk in reference.get("chunks", [])]
"id": get_value(chunk, "chunk_id", "id"),
"content": get_value(chunk, "content", "content_with_weight"),
"document_id": get_value(chunk, "doc_id", "document_id"),
"document_name": get_value(chunk, "docnm_kwd", "document_name"),
"dataset_id": get_value(chunk, "kb_id", "dataset_id"),
"image_id": get_value(chunk, "image_id", "img_id"),
"positions": get_value(chunk, "positions", "position_int"),
} for chunk in reference.get("chunks", [])]
reference["chunks"] = chunk_list
ans["id"] = message_id
@ -88,10 +91,11 @@ def completion(tenant_id, chat_id, question, name="New session", session_id=None
if not session_id:
session_id = get_uuid()
conv = {
"id":session_id ,
"id": session_id,
"dialog_id": chat_id,
"name": name,
"message": [{"role": "assistant", "content": dia[0].prompt_config.get("prologue")}]
"message": [{"role": "assistant", "content": dia[0].prompt_config.get("prologue")}],
"user_id": kwargs.get("user_id", "")
}
ConversationService.save(**conv)
yield "data:" + json.dumps({"code": 0, "message": "",
@ -226,4 +230,3 @@ def iframe_completion(dialog_id, question, session_id=None, stream=True, **kwarg
API4ConversationService.append_message(conv.id, conv.to_dict())
break
yield answer