Преглед изворни кода

Fix index=true (#1734)

### What problem does this PR solve?

### Type of change

- [x] Refactoring
---------

Co-authored-by: Kevin Hu <kevinhu.sh@gmail.com>
tags/v0.9.0
H пре 1 година
родитељ
комит
aac460ad29
No account linked to committer's email address
1 измењених фајлова са 192 додато и 135 уклоњено
  1. 192
    135
      api/db/db_models.py

+ 192
- 135
api/db/db_models.py Прегледај датотеку

@@ -144,10 +144,10 @@ def remove_field_name_prefix(field_name):
class BaseModel(Model):
create_time = BigIntegerField(null=True)
create_date = DateTimeField(null=True)
update_time = BigIntegerField(null=True)
update_date = DateTimeField(null=True)
create_time = BigIntegerField(null=True, index=True)
create_date = DateTimeField(null=True, index=True)
update_time = BigIntegerField(null=True, index=True)
update_date = DateTimeField(null=True, index=True)
def to_json(self):
# This function is obsolete
@@ -234,7 +234,7 @@ class BaseModel(Model):
def insert(cls, __data=None, **insert):
if isinstance(__data, dict) and __data:
__data[cls._meta.combined["create_time"]
] = utils.current_timestamp()
] = utils.current_timestamp()
if insert:
insert["create_time"] = utils.current_timestamp()
@@ -248,7 +248,7 @@ class BaseModel(Model):
return {}
normalized[cls._meta.combined["update_time"]
] = utils.current_timestamp()
] = utils.current_timestamp()
for f_n in AUTO_DATE_TIMESTAMP_FIELD_PREFIX:
if {f"{f_n}_time", f"{f_n}_date"}.issubset(cls._meta.combined.keys()) and \
@@ -373,9 +373,9 @@ def fill_db_model_object(model_object, human_model_dict):
class User(DataBaseModel, UserMixin):
id = CharField(max_length=32, primary_key=True)
access_token = CharField(max_length=255, null=True)
nickname = CharField(max_length=100, null=False, help_text="nicky name")
password = CharField(max_length=255, null=True, help_text="password")
access_token = CharField(max_length=255, null=True, index=True)
nickname = CharField(max_length=100, null=False, help_text="nicky name", index=True)
password = CharField(max_length=255, null=True, help_text="password", index=True)
email = CharField(
max_length=255,
null=False,
@@ -386,28 +386,32 @@ class User(DataBaseModel, UserMixin):
max_length=32,
null=True,
help_text="English|Chinese",
default="Chinese" if "zh_CN" in os.getenv("LANG", "") else "English")
default="Chinese" if "zh_CN" in os.getenv("LANG", "") else "English",
index=True)
color_schema = CharField(
max_length=32,
null=True,
help_text="Bright|Dark",
default="Bright")
default="Bright",
index=True)
timezone = CharField(
max_length=64,
null=True,
help_text="Timezone",
default="UTC+8\tAsia/Shanghai")
last_login_time = DateTimeField(null=True)
is_authenticated = CharField(max_length=1, null=False, default="1")
is_active = CharField(max_length=1, null=False, default="1")
is_anonymous = CharField(max_length=1, null=False, default="0")
login_channel = CharField(null=True, help_text="from which user login")
default="UTC+8\tAsia/Shanghai",
index=True)
last_login_time = DateTimeField(null=True, index=True)
is_authenticated = CharField(max_length=1, null=False, default="1", index=True)
is_active = CharField(max_length=1, null=False, default="1", index=True)
is_anonymous = CharField(max_length=1, null=False, default="0", index=True)
login_channel = CharField(null=True, help_text="from which user login", index=True)
status = CharField(
max_length=1,
null=True,
help_text="is it validate(0: wasted,1: validate)",
default="1")
is_superuser = BooleanField(null=True, help_text="is root", default=False)
default="1",
index=True)
is_superuser = BooleanField(null=True, help_text="is root", default=False, index=True)
def __str__(self):
return self.email
@@ -422,35 +426,41 @@ class User(DataBaseModel, UserMixin):
class Tenant(DataBaseModel):
id = CharField(max_length=32, primary_key=True)
name = CharField(max_length=100, null=True, help_text="Tenant name")
public_key = CharField(max_length=255, null=True)
llm_id = CharField(max_length=128, null=False, help_text="default llm ID")
name = CharField(max_length=100, null=True, help_text="Tenant name", index=True)
public_key = CharField(max_length=255, null=True, index=True)
llm_id = CharField(max_length=128, null=False, help_text="default llm ID", index=True)
embd_id = CharField(
max_length=128,
null=False,
help_text="default embedding model ID")
help_text="default embedding model ID",
index=True)
asr_id = CharField(
max_length=128,
null=False,
help_text="default ASR model ID")
help_text="default ASR model ID",
index=True)
img2txt_id = CharField(
max_length=128,
null=False,
help_text="default image to text model ID")
help_text="default image to text model ID",
index=True)
rerank_id = CharField(
max_length=128,
null=False,
help_text="default rerank model ID")
help_text="default rerank model ID",
index=True)
parser_ids = CharField(
max_length=256,
null=False,
help_text="document processors")
credit = IntegerField(default=512)
help_text="document processors",
index=True)
credit = IntegerField(default=512, index=True)
status = CharField(
max_length=1,
null=True,
help_text="is it validate(0: wasted,1: validate)",
default="1")
default="1",
index=True)
class Meta:
db_table = "tenant"
@@ -458,15 +468,16 @@ class Tenant(DataBaseModel):
class UserTenant(DataBaseModel):
id = CharField(max_length=32, primary_key=True)
user_id = CharField(max_length=32, null=False)
tenant_id = CharField(max_length=32, null=False)
role = CharField(max_length=32, null=False, help_text="UserTenantRole")
invited_by = CharField(max_length=32, null=False)
user_id = CharField(max_length=32, null=False, index=True)
tenant_id = CharField(max_length=32, null=False, index=True)
role = CharField(max_length=32, null=False, help_text="UserTenantRole", index=True)
invited_by = CharField(max_length=32, null=False, index=True)
status = CharField(
max_length=1,
null=True,
help_text="is it validate(0: wasted,1: validate)",
default="1")
default="1",
index=True)
class Meta:
db_table = "user_tenant"
@@ -474,15 +485,16 @@ class UserTenant(DataBaseModel):
class InvitationCode(DataBaseModel):
id = CharField(max_length=32, primary_key=True)
code = CharField(max_length=32, null=False)
visit_time = DateTimeField(null=True)
user_id = CharField(max_length=32, null=True)
tenant_id = CharField(max_length=32, null=True)
code = CharField(max_length=32, null=False, index=True)
visit_time = DateTimeField(null=True, index=True)
user_id = CharField(max_length=32, null=True, index=True)
tenant_id = CharField(max_length=32, null=True, index=True)
status = CharField(
max_length=1,
null=True,
help_text="is it validate(0: wasted,1: validate)",
default="1")
default="1",
index=True)
class Meta:
db_table = "invitation_code"
@@ -498,12 +510,14 @@ class LLMFactories(DataBaseModel):
tags = CharField(
max_length=255,
null=False,
help_text="LLM, Text Embedding, Image2Text, ASR")
help_text="LLM, Text Embedding, Image2Text, ASR",
index=True)
status = CharField(
max_length=1,
null=True,
help_text="is it validate(0: wasted,1: validate)",
default="1")
default="1",
index=True)
def __str__(self):
return self.name
@@ -523,18 +537,22 @@ class LLM(DataBaseModel):
model_type = CharField(
max_length=128,
null=False,
help_text="LLM, Text Embedding, Image2Text, ASR")
fid = CharField(max_length=128, null=False, help_text="LLM factory id")
help_text="LLM, Text Embedding, Image2Text, ASR",
index=True)
fid = CharField(max_length=128, null=False, help_text="LLM factory id", index=True)
max_tokens = IntegerField(default=0)
tags = CharField(
max_length=255,
null=False,
help_text="LLM, Text Embedding, Image2Text, Chat, 32k...")
help_text="LLM, Text Embedding, Image2Text, Chat, 32k...",
index=True)
status = CharField(
max_length=1,
null=True,
help_text="is it validate(0: wasted,1: validate)",
default="1")
default="1",
index=True)
def __str__(self):
return self.llm_name
@@ -544,23 +562,27 @@ class LLM(DataBaseModel):
class TenantLLM(DataBaseModel):
tenant_id = CharField(max_length=32, null=False)
tenant_id = CharField(max_length=32, null=False, index=True)
llm_factory = CharField(
max_length=128,
null=False,
help_text="LLM factory name")
help_text="LLM factory name",
index=True)
model_type = CharField(
max_length=128,
null=True,
help_text="LLM, Text Embedding, Image2Text, ASR")
help_text="LLM, Text Embedding, Image2Text, ASR",
index=True)
llm_name = CharField(
max_length=128,
null=True,
help_text="LLM name",
default="")
api_key = CharField(max_length=1024, null=True, help_text="API KEY")
default="",
index=True)
api_key = CharField(max_length=1024, null=True, help_text="API KEY", index=True)
api_base = CharField(max_length=255, null=True, help_text="API Base")
used_tokens = IntegerField(default=0)
used_tokens = IntegerField(default=0, index=True)
def __str__(self):
return self.llm_name
@@ -573,7 +595,7 @@ class TenantLLM(DataBaseModel):
class Knowledgebase(DataBaseModel):
id = CharField(max_length=32, primary_key=True)
avatar = TextField(null=True, help_text="avatar base64 string")
tenant_id = CharField(max_length=32, null=False)
tenant_id = CharField(max_length=32, null=False, index=True)
name = CharField(
max_length=128,
null=False,
@@ -583,35 +605,40 @@ class Knowledgebase(DataBaseModel):
max_length=32,
null=True,
default="Chinese" if "zh_CN" in os.getenv("LANG", "") else "English",
help_text="English|Chinese")
help_text="English|Chinese",
index=True)
description = TextField(null=True, help_text="KB description")
embd_id = CharField(
max_length=128,
null=False,
help_text="default embedding model ID")
help_text="default embedding model ID",
index=True)
permission = CharField(
max_length=16,
null=False,
help_text="me|team",
default="me")
created_by = CharField(max_length=32, null=False)
doc_num = IntegerField(default=0)
token_num = IntegerField(default=0)
chunk_num = IntegerField(default=0)
similarity_threshold = FloatField(default=0.2)
vector_similarity_weight = FloatField(default=0.3)
default="me",
index=True)
created_by = CharField(max_length=32, null=False, index=True)
doc_num = IntegerField(default=0, index=True)
token_num = IntegerField(default=0, index=True)
chunk_num = IntegerField(default=0, index=True)
similarity_threshold = FloatField(default=0.2, index=True)
vector_similarity_weight = FloatField(default=0.3, index=True)
parser_id = CharField(
max_length=32,
null=False,
help_text="default parser ID",
default=ParserType.NAIVE.value)
default=ParserType.NAIVE.value,
index=True)
parser_config = JSONField(null=False, default={"pages": [[1, 1000000]]})
status = CharField(
max_length=1,
null=True,
help_text="is it validate(0: wasted,1: validate)",
default="1")
default="1",
index=True)
def __str__(self):
return self.name
@@ -627,18 +654,22 @@ class Document(DataBaseModel):
parser_id = CharField(
max_length=32,
null=False,
help_text="default parser ID")
help_text="default parser ID",
index=True)
parser_config = JSONField(null=False, default={"pages": [[1, 1000000]]})
source_type = CharField(
max_length=128,
null=False,
default="local",
help_text="where dose this document come from")
type = CharField(max_length=32, null=False, help_text="file extension")
help_text="where dose this document come from",
index=True)
type = CharField(max_length=32, null=False, help_text="file extension",
index=True)
created_by = CharField(
max_length=32,
null=False,
help_text="who created it")
help_text="who created it",
index=True)
name = CharField(
max_length=255,
null=True,
@@ -647,27 +678,31 @@ class Document(DataBaseModel):
location = CharField(
max_length=255,
null=True,
help_text="where dose it store")
size = IntegerField(default=0)
token_num = IntegerField(default=0)
chunk_num = IntegerField(default=0)
progress = FloatField(default=0)
help_text="where dose it store",
index=True)
size = IntegerField(default=0, index=True)
token_num = IntegerField(default=0, index=True)
chunk_num = IntegerField(default=0, index=True)
progress = FloatField(default=0, index=True)
progress_msg = TextField(
null=True,
help_text="process message",
default="")
process_begin_at = DateTimeField(null=True)
process_begin_at = DateTimeField(null=True, index=True)
process_duation = FloatField(default=0)
run = CharField(
max_length=1,
null=True,
help_text="start to run processing or cancel.(1: run it; 2: cancel)",
default="0")
default="0",
index=True)
status = CharField(
max_length=1,
null=True,
help_text="is it validate(0: wasted,1: validate)",
default="1")
default="1",
index=True)
class Meta:
db_table = "document"
@@ -676,8 +711,7 @@ class Document(DataBaseModel):
class File(DataBaseModel):
id = CharField(
max_length=32,
primary_key=True,
)
primary_key=True)
parent_id = CharField(
max_length=32,
null=False,
@@ -691,7 +725,8 @@ class File(DataBaseModel):
created_by = CharField(
max_length=32,
null=False,
help_text="who created it")
help_text="who created it",
index=True)
name = CharField(
max_length=255,
null=False,
@@ -700,14 +735,15 @@ class File(DataBaseModel):
location = CharField(
max_length=255,
null=True,
help_text="where dose it store")
size = IntegerField(default=0)
type = CharField(max_length=32, null=False, help_text="file extension")
help_text="where dose it store",
index=True)
size = IntegerField(default=0, index=True)
type = CharField(max_length=32, null=False, help_text="file extension", index=True)
source_type = CharField(
max_length=128,
null=False,
default="",
help_text="where dose this document come from")
help_text="where dose this document come from", index=True)
class Meta:
db_table = "file"
@@ -716,8 +752,7 @@ class File(DataBaseModel):
class File2Document(DataBaseModel):
id = CharField(
max_length=32,
primary_key=True,
)
primary_key=True)
file_id = CharField(
max_length=32,
null=True,
@@ -737,10 +772,13 @@ class Task(DataBaseModel):
id = CharField(max_length=32, primary_key=True)
doc_id = CharField(max_length=32, null=False, index=True)
from_page = IntegerField(default=0)
to_page = IntegerField(default=-1)
begin_at = DateTimeField(null=True)
begin_at = DateTimeField(null=True, index=True)
process_duation = FloatField(default=0)
progress = FloatField(default=0)
progress = FloatField(default=0, index=True)
progress_msg = TextField(
null=True,
help_text="process message",
@@ -749,49 +787,56 @@ class Task(DataBaseModel):
class Dialog(DataBaseModel):
id = CharField(max_length=32, primary_key=True)
tenant_id = CharField(max_length=32, null=False)
tenant_id = CharField(max_length=32, null=False, index=True)
name = CharField(
max_length=255,
null=True,
help_text="dialog application name")
help_text="dialog application name",
index=True)
description = TextField(null=True, help_text="Dialog description")
icon = TextField(null=True, help_text="icon base64 string")
language = CharField(
max_length=32,
null=True,
default="Chinese" if "zh_CN" in os.getenv("LANG", "") else "English",
help_text="English|Chinese")
help_text="English|Chinese",
index=True)
llm_id = CharField(max_length=128, null=False, help_text="default llm ID")
llm_setting = JSONField(null=False, default={"temperature": 0.1, "top_p": 0.3, "frequency_penalty": 0.7,
"presence_penalty": 0.4, "max_tokens": 512})
prompt_type = CharField(
max_length=16,
null=False,
default="simple",
help_text="simple|advanced")
help_text="simple|advanced",
index=True)
prompt_config = JSONField(null=False, default={"system": "", "prologue": "您好,我是您的助手小樱,长得可爱又善良,can I help you?",
"parameters": [], "empty_response": "Sorry! 知识库中未找到相关内容!"})
similarity_threshold = FloatField(default=0.2)
vector_similarity_weight = FloatField(default=0.3)
top_n = IntegerField(default=6)
top_k = IntegerField(default=1024)
do_refer = CharField(
max_length=1,
null=False,
help_text="it needs to insert reference index into answer or not",
default="1")
rerank_id = CharField(
max_length=128,
null=False,
help_text="default rerank model ID")
help_text="default rerank model ID",
kb_ids = JSONField(null=False, default=[])
status = CharField(
max_length=1,
null=True,
help_text="is it validate(0: wasted,1: validate)",
default="1")
default="1",
index=True)
class Meta:
db_table = "dialog"
@@ -800,7 +845,7 @@ class Dialog(DataBaseModel):
class Conversation(DataBaseModel):
id = CharField(max_length=32, primary_key=True)
dialog_id = CharField(max_length=32, null=False, index=True)
name = CharField(max_length=255, null=True, help_text="converastion name")
name = CharField(max_length=255, null=True, help_text="converastion name", index=True)
message = JSONField(null=True)
reference = JSONField(null=True, default=[])
@@ -809,8 +854,8 @@ class Conversation(DataBaseModel):
class APIToken(DataBaseModel):
tenant_id = CharField(max_length=32, null=False)
token = CharField(max_length=255, null=False)
tenant_id = CharField(max_length=32, null=False, index=True)
token = CharField(max_length=255, null=False, index=True)
dialog_id = CharField(max_length=32, null=False, index=True)
class Meta:
@@ -821,13 +866,14 @@ class APIToken(DataBaseModel):
class API4Conversation(DataBaseModel):
id = CharField(max_length=32, primary_key=True)
dialog_id = CharField(max_length=32, null=False, index=True)
user_id = CharField(max_length=255, null=False, help_text="user_id")
user_id = CharField(max_length=255, null=False, help_text="user_id", index=True)
message = JSONField(null=True)
reference = JSONField(null=True, default=[])
tokens = IntegerField(default=0)
duration = FloatField(default=0)
round = IntegerField(default=0)
thumb_up = IntegerField(default=0)
duration = FloatField(default=0, index=True)
round = IntegerField(default=0, index=True)
thumb_up = IntegerField(default=0, index=True)
class Meta:
db_table = "api_4_conversation"
@@ -836,10 +882,11 @@ class API4Conversation(DataBaseModel):
class UserCanvas(DataBaseModel):
id = CharField(max_length=32, primary_key=True)
avatar = TextField(null=True, help_text="avatar base64 string")
user_id = CharField(max_length=255, null=False, help_text="user_id")
user_id = CharField(max_length=255, null=False, help_text="user_id", index=True)
title = CharField(max_length=255, null=True, help_text="Canvas title")
description = TextField(null=True, help_text="Canvas description")
canvas_type = CharField(max_length=32, null=True, help_text="Canvas type")
canvas_type = CharField(max_length=32, null=True, help_text="Canvas type", index=True)
dsl = JSONField(null=True, default={})
class Meta:
@@ -850,8 +897,9 @@ class CanvasTemplate(DataBaseModel):
id = CharField(max_length=32, primary_key=True)
avatar = TextField(null=True, help_text="avatar base64 string")
title = CharField(max_length=255, null=True, help_text="Canvas title")
description = TextField(null=True, help_text="Canvas description")
canvas_type = CharField(max_length=32, null=True, help_text="Canvas type")
canvas_type = CharField(max_length=32, null=True, help_text="Canvas type", index=True)
dsl = JSONField(null=True, default={})
class Meta:
@@ -859,35 +907,44 @@ class CanvasTemplate(DataBaseModel):
def migrate_db():
with DB.transaction():
migrator = MySQLMigrator(DB)
try:
migrate(
migrator.add_column('file', 'source_type', CharField(max_length=128, null=False, default="", help_text="where dose this document come from"))
)
except Exception as e:
pass
try:
migrate(
migrator.add_column('tenant', 'rerank_id', CharField(max_length=128, null=False, default="BAAI/bge-reranker-v2-m3", help_text="default rerank model ID"))
)
except Exception as e:
pass
try:
migrate(
migrator.add_column('dialog', 'rerank_id', CharField(max_length=128, null=False, default="", help_text="default rerank model ID"))
)
except Exception as e:
pass
try:
migrate(
migrator.add_column('dialog', 'top_k', IntegerField(default=1024))
)
except Exception as e:
pass
try:
migrate(
migrator.alter_column_type('tenant_llm', 'api_key', CharField(max_length=1024, null=True, help_text="API KEY"))
)
except Exception as e:
pass
with DB.transaction():
migrator = MySQLMigrator(DB)
try:
migrate(
migrator.add_column('file', 'source_type', CharField(max_length=128, null=False, default="",
help_text="where dose this document come from",
index=True))
)
except Exception as e:
pass
try:
migrate(
migrator.add_column('tenant', 'rerank_id',
CharField(max_length=128, null=False, default="BAAI/bge-reranker-v2-m3",
help_text="default rerank model ID"))
)
except Exception as e:
pass
try:
migrate(
migrator.add_column('dialog', 'rerank_id', CharField(max_length=128, null=False, default="",
help_text="default rerank model ID"))
)
except Exception as e:
pass
try:
migrate(
migrator.add_column('dialog', 'top_k', IntegerField(default=1024))
)
except Exception as e:
pass
try:
migrate(
migrator.alter_column_type('tenant_llm', 'api_key',
CharField(max_length=1024, null=True, help_text="API KEY", index=True))
)
except Exception as e:
pass

Loading…
Откажи
Сачувај