Skip to content

Commit ec643fc

Browse files
committed
feat: add initial model structure for knowledge management
1 parent f08b551 commit ec643fc

File tree

11 files changed

+78
-4
lines changed

11 files changed

+78
-4
lines changed

apps/common/utils/tool_code.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
import os
44
import subprocess
55
import sys
6-
import uuid
6+
import uuid_utils as uuid
77
from textwrap import dedent
88

99
from diskcache import Cache
@@ -18,7 +18,7 @@ class ToolExecutor:
1818
def __init__(self, sandbox=False):
1919
self.sandbox = sandbox
2020
if sandbox:
21-
self.sandbox_path = '/opt/maxkb/app/sandbox'
21+
self.sandbox_path = '/opt/maxkb-app/sandbox'
2222
self.user = 'sandbox'
2323
else:
2424
self.sandbox_path = os.path.join(PROJECT_DIR, 'data', 'sandbox')
@@ -35,7 +35,7 @@ def _createdir(self):
3535
os.umask(old_mask)
3636

3737
def exec_code(self, code_str, keywords):
38-
_id = str(uuid.uuid1())
38+
_id = str(uuid.uuid7())
3939
success = '{"code":200,"msg":"成功","data":exec_result}'
4040
err = '{"code":500,"msg":str(e),"data":None}'
4141
path = r'' + self.sandbox_path + ''

apps/knowledge/__init__.py

Whitespace-only changes.

apps/knowledge/admin.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
from django.contrib import admin
2+
3+
# Register your models here.

apps/knowledge/apps.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
from django.apps import AppConfig
2+
3+
4+
class KnowledgeConfig(AppConfig):
5+
default_auto_field = 'django.db.models.BigAutoField'
6+
name = 'knowledge'

apps/knowledge/migrations/__init__.py

Whitespace-only changes.

apps/knowledge/models/__init__.py

Whitespace-only changes.

apps/knowledge/models/knowledge.py

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
import uuid_utils.compat as uuid
2+
from django.db import models
3+
from django.db.models.signals import pre_delete
4+
from django.dispatch import receiver
5+
6+
from common.db.sql_execute import select_one
7+
from common.mixins.app_model_mixin import AppModelMixin
8+
from models_provider.models import Model
9+
from users.models import User
10+
11+
12+
class KnowledgeType(models.TextChoices):
13+
base = 0, '通用类型'
14+
web = 1, 'web站点类型'
15+
lark = 2, '飞书类型'
16+
yuque = 3, '语雀类型'
17+
18+
19+
def default_model():
20+
# todo : 这里需要从数据库中获取默认的模型
21+
return uuid.UUID('42f63a3d-427e-11ef-b3ec-a8a1595801ab')
22+
23+
24+
class DataSet(AppModelMixin):
25+
id = models.UUIDField(primary_key=True, max_length=128, default=uuid.uuid7, editable=False, verbose_name="主键id")
26+
name = models.CharField(max_length=150, verbose_name="知识库名称")
27+
desc = models.CharField(max_length=256, verbose_name="描述")
28+
user = models.ForeignKey(User, on_delete=models.DO_NOTHING, verbose_name="所属用户")
29+
type = models.IntegerField(verbose_name='类型', choices=KnowledgeType.choices, default=KnowledgeType.base)
30+
embedding_mode = models.ForeignKey(Model, on_delete=models.DO_NOTHING, verbose_name="向量模型",
31+
default=default_model)
32+
meta = models.JSONField(verbose_name="元数据", default=dict)
33+
34+
class Meta:
35+
db_table = "knowledge"
36+
37+
38+
class File(AppModelMixin):
39+
id = models.UUIDField(primary_key=True, max_length=128, default=uuid.uuid7, editable=False, verbose_name="主键id")
40+
file_name = models.CharField(max_length=256, verbose_name="文件名称", default="")
41+
loid = models.IntegerField(verbose_name="loid")
42+
meta = models.JSONField(verbose_name="文件关联数据", default=dict)
43+
44+
class Meta:
45+
db_table = "file"
46+
47+
def save(self, bytea=None, force_insert=False, force_update=False, using=None, update_fields=None):
48+
result = select_one("SELECT lo_from_bytea(%s, %s::bytea) as loid", [0, bytea])
49+
self.loid = result['loid']
50+
super().save()
51+
52+
def get_bytes(self):
53+
result = select_one(f'SELECT lo_get({self.loid}) as "data"', [])
54+
return result['data']
55+
56+
57+
@receiver(pre_delete, sender=File)
58+
def on_delete_file(sender, instance, **kwargs):
59+
select_one(f'SELECT lo_unlink({instance.loid})', [])

apps/knowledge/tests.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
from django.test import TestCase
2+
3+
# Create your tests here.

apps/knowledge/urls.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
from django.shortcuts import render
2+
3+
# Create your views here.

apps/knowledge/views/__init__.py

Whitespace-only changes.

0 commit comments

Comments
 (0)