models: Add chat tables

This commit is contained in:
Fam Zheng 2025-08-23 21:40:00 +01:00
parent 65892036c1
commit bd2d2eb358
2 changed files with 67 additions and 1 deletions

View File

@ -0,0 +1,37 @@
# Generated by Django 4.2.23 on 2025-08-23 20:39
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('products', '0104_alter_datalabel_name'),
]
operations = [
migrations.CreateModel(
name='ChatSession',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('session_id', models.CharField(db_index=True, max_length=128, unique=True, verbose_name='会话ID')),
('created_at', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
('consumer', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='chat_sessions', to='products.consumerinfo', verbose_name='消费者')),
('tenant', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='chat_sessions', to='products.tenant', verbose_name='租户')),
],
),
migrations.CreateModel(
name='ChatMessage',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('role', models.CharField(choices=[('user', '用户'), ('assistant', '助手'), ('system', '系统')], max_length=20, verbose_name='角色')),
('message_type', models.CharField(choices=[('text', '文本'), ('image', '图片'), ('file', '文件'), ('system', '系统消息'), ('ai_response', 'AI回复')], default='text', max_length=20, verbose_name='消息类型')),
('text_content', models.TextField(verbose_name='消息内容')),
('file_oss_bucket', models.TextField(blank=True, null=True, verbose_name='文件OSS桶')),
('file_oss_path', models.TextField(blank=True, null=True, verbose_name='文件OSS路径')),
('created_at', models.DateTimeField(auto_now_add=True, verbose_name='发送时间')),
('session', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='messages', to='products.chatsession', verbose_name='会话')),
],
),
]

View File

@ -442,3 +442,32 @@ class DataLabel(models.Model):
def __str__(self):
return f"{self.name}: created {self.create_time} updated {self.update_time}"
class ChatSession(models.Model):
session_id = models.CharField(max_length=128, unique=True, db_index=True, verbose_name="会话ID")
tenant = models.ForeignKey(Tenant, related_name="chat_sessions", null=True, blank=True, on_delete=models.CASCADE, verbose_name="租户")
consumer = models.ForeignKey(ConsumerInfo, related_name="chat_sessions", null=True, blank=True, on_delete=models.CASCADE, verbose_name="消费者")
created_at = models.DateTimeField(auto_now_add=True, verbose_name="创建时间")
class ChatMessage(models.Model):
MESSAGE_TYPE_CHOICES = [
('text', '文本'),
('image', '图片'),
('file', '文件'),
('system', '系统消息'),
('ai_response', 'AI回复'),
]
ROLE_CHOICES = [
('user', '用户'),
('assistant', '助手'),
('system', '系统'),
]
session = models.ForeignKey(ChatSession, related_name="messages", on_delete=models.CASCADE, verbose_name="会话")
role = models.CharField(max_length=20, choices=ROLE_CHOICES, verbose_name="角色")
message_type = models.CharField(max_length=20, choices=MESSAGE_TYPE_CHOICES, default='text', verbose_name="消息类型")
text_content = models.TextField(verbose_name="消息内容")
file_oss_bucket = models.TextField(null=True, blank=True, verbose_name="文件OSS桶")
file_oss_path = models.TextField(null=True, blank=True, verbose_name="文件OSS路径")
created_at = models.DateTimeField(auto_now_add=True, verbose_name="发送时间")