From 580406807956462803c9a3ab0e1238ce468a8dc5 Mon Sep 17 00:00:00 2001 From: Junjun Date: Wed, 4 Jun 2025 18:55:29 +0800 Subject: [PATCH 1/7] feat: default engine config --- backend/apps/db/engine.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/apps/db/engine.py b/backend/apps/db/engine.py index 055ea79e..4bfc7b54 100644 --- a/backend/apps/db/engine.py +++ b/backend/apps/db/engine.py @@ -12,7 +12,7 @@ from common.core.config import settings def get_engine_config(): return DatasourceConf(username=settings.POSTGRES_USER, password=settings.POSTGRES_PASSWORD, - host="127.0.0.1", port=settings.POSTGRES_PORT, database=settings.POSTGRES_DB, + host=settings.POSTGRES_SERVER, port=settings.POSTGRES_PORT, database=settings.POSTGRES_DB, dbSchema="public") From 21a5587e33b00260c33f901d95a075d56c92484d Mon Sep 17 00:00:00 2001 From: ulleo Date: Wed, 4 Jun 2025 19:05:11 +0800 Subject: [PATCH 2/7] feat: chat record list --- backend/apps/chat/api/chat.py | 2 +- backend/apps/chat/curd/chat.py | 14 ++- backend/apps/chat/models/chat_model.py | 2 +- backend/apps/datasource/crud/datasource.py | 2 + frontend/src/api/chat.ts | 31 +++-- frontend/src/views/chat/index.vue | 127 ++++++++++++--------- 6 files changed, 108 insertions(+), 70 deletions(-) diff --git a/backend/apps/chat/api/chat.py b/backend/apps/chat/api/chat.py index c1bbae9c..65052a8d 100644 --- a/backend/apps/chat/api/chat.py +++ b/backend/apps/chat/api/chat.py @@ -24,7 +24,7 @@ async def chats(session: SessionDep, current_user: CurrentUser): @router.get("/get/{chart_id}") -async def list_chat(session: SessionDep, current_user: CurrentUser, chart_id: int): +async def get_chat(session: SessionDep, current_user: CurrentUser, chart_id: int): try: return get_chat_with_records(chart_id=chart_id, session=session, current_user=current_user) except Exception as e: diff --git a/backend/apps/chat/curd/chat.py b/backend/apps/chat/curd/chat.py index 774e4967..358040b5 100644 --- a/backend/apps/chat/curd/chat.py +++ b/backend/apps/chat/curd/chat.py @@ -2,6 +2,7 @@ import datetime from typing import List from sqlalchemy import and_ +from sqlalchemy.orm import load_only from apps.chat.models.chat_model import Chat, ChatRecord, CreateChat, ChatInfo, RenameChat, ChatQuestion from apps.datasource.models.datasource import CoreDatasource @@ -55,7 +56,11 @@ def get_chat_with_records(session: SessionDep, chart_id: int, current_user: Curr chat_info.datasource_exists = True chat_info.datasource_name = ds.name - record_list = session.query(ChatRecord).filter( + record_list = session.query(ChatRecord).options( + load_only(ChatRecord.id, ChatRecord.chat_id, ChatRecord.create_time, ChatRecord.finish_time, + ChatRecord.question, ChatRecord.sql_answer, ChatRecord.sql, ChatRecord.data, + ChatRecord.chart_answer, ChatRecord.chart, ChatRecord.finish, ChatRecord.error, + ChatRecord.run_time)).filter( and_(Chat.create_by == current_user.id, ChatRecord.chat_id == chart_id)).order_by(ChatRecord.create_time).all() chat_info.records = record_list @@ -96,6 +101,9 @@ def create_chat(session: SessionDep, current_user: CurrentUser, create_chat_obj: chat_info.id = chat.id session.commit() + chat_info.datasource_exists = True + chat_info.datasource_name = ds.name + return chat_info @@ -214,6 +222,7 @@ def save_error_message(session: SessionDep, record_id: int, message: str) -> Cha record = session.query(ChatRecord).filter(ChatRecord.id == record_id).first() record.error = message record.finish = True + record.finish_time = datetime.datetime.now() result = ChatRecord(**record.model_dump()) @@ -242,11 +251,13 @@ def save_sql_exec_data(session: SessionDep, record_id: int, data: str) -> ChatRe return result + def finish_record(session: SessionDep, record_id: int) -> ChatRecord: if not record_id: raise Exception("Record id cannot be None") record = session.query(ChatRecord).filter(ChatRecord.id == record_id).first() record.finish = True + record.finish_time = datetime.datetime.now() result = ChatRecord(**record.model_dump()) @@ -257,4 +268,3 @@ def finish_record(session: SessionDep, record_id: int) -> ChatRecord: session.commit() return result - diff --git a/backend/apps/chat/models/chat_model.py b/backend/apps/chat/models/chat_model.py index b65af0ad..7687a375 100644 --- a/backend/apps/chat/models/chat_model.py +++ b/backend/apps/chat/models/chat_model.py @@ -2,7 +2,7 @@ from sqlmodel import SQLModel, Field from sqlalchemy import Column, Text, BigInteger, DateTime, Integer, Identity, Boolean from datetime import datetime from pydantic import BaseModel -from typing import List, Optional +from typing import List, Optional, Any from apps.template.generate_chart.generator import get_chart_template from apps.template.generate_sql.generator import get_sql_template diff --git a/backend/apps/datasource/crud/datasource.py b/backend/apps/datasource/crud/datasource.py index 1e1b597f..1ca5b222 100644 --- a/backend/apps/datasource/crud/datasource.py +++ b/backend/apps/datasource/crud/datasource.py @@ -225,6 +225,8 @@ def get_table_obj_by_ds(session: SessionDep, ds: CoreDatasource) -> List[TableAn def get_table_schema(session: SessionDep, ds: CoreDatasource) -> str: schema_str = "" table_objs = get_table_obj_by_ds(session=session, ds=ds) + if len(table_objs) == 0: + return schema_str db_name = table_objs[0].schema schema_str += f"【DB_ID】 {db_name}\n【Schema】\n" for obj in table_objs: diff --git a/frontend/src/api/chat.ts b/frontend/src/api/chat.ts index 8234805f..8660b22d 100644 --- a/frontend/src/api/chat.ts +++ b/frontend/src/api/chat.ts @@ -20,6 +20,7 @@ export interface ChatMessage { role: 'user' | 'assistant' create_time?: Date | string content?: string | number + record?: ChatRecord isTyping?: boolean isWelcome?: boolean } @@ -28,24 +29,32 @@ export class ChatRecord { id?: number chat_id?: number create_time?: Date | string - create_by?: number - datasource?: number - engine_type?: string + finish_time?: Date | string question?: string - answer?: string + sql_answer?: string + sql?: string + data?: string + chart_answer?: string + chart?: string + finish?: boolean = false + error?: string run_time: number = 0 constructor() - constructor(id: number, chat_id: number, create_time: Date | string, create_by: number, datasource: number, engine_type: string, question: string, answer: string, run_time: number) - constructor(id?: number, chat_id?: number, create_time?: Date | string, create_by?: number, datasource?: number, engine_type?: string, question?: string, answer?: string, run_time?: number) { + constructor(id: number, chat_id: number, create_time: Date | string, finish_time: Date | string | undefined, question: string, sql_answer: string | undefined, sql: string | undefined, data: string | undefined, chart_answer: string | undefined, chart: string | undefined, finish: boolean, error: string | undefined, run_time: number) + constructor(id?: number, chat_id?: number, create_time?: Date | string, finish_time?: Date | string, question?: string, sql_answer?: string, sql?: string, data?: string, chart_answer?: string, chart?: string, finish?: boolean, error?: string, run_time?: number) { this.id = id this.chat_id = chat_id this.create_time = getDate(create_time) - this.create_by = create_by - this.datasource = datasource - this.engine_type = engine_type + this.finish_time = getDate(finish_time) this.question = question - this.answer = answer + this.sql_answer = sql_answer + this.sql = sql + this.data = data + this.chart_answer = chart_answer + this.chart = chart + this.finish = finish + this.error = error this.run_time = run_time ?? 0 } } @@ -111,7 +120,7 @@ function toChatRecord(data?: any): ChatRecord | undefined { if (!data) { return undefined } - return new ChatRecord(data.id, data.number, data.create_time, data.create_by, data.datasource, data.engine_type, data.question, data.answer, data.run_time) + return new ChatRecord(data.id, data.chat_id, data.create_time, data.finish_time, data.question, data.sql_answer, data.sql, data.data, data.chart_answer, data.chart, data.finish, data.error, data.run_time) } function toChatRecordList(list: any = []): ChatRecord[] { diff --git a/frontend/src/views/chat/index.vue b/frontend/src/views/chat/index.vue index db5f0de8..548a3dcc 100644 --- a/frontend/src/views/chat/index.vue +++ b/frontend/src/views/chat/index.vue @@ -20,13 +20,31 @@
- From 663ad456f0774d4d0928263589c3003893c7b09b Mon Sep 17 00:00:00 2001 From: dataeaseShu Date: Thu, 5 Jun 2025 10:41:16 +0800 Subject: [PATCH 5/7] feat: typed --- frontend/src/views/chat/index.vue | 417 +++++++++++++++++------------- frontend/src/views/chat/typed.ts | 67 +++++ 2 files changed, 302 insertions(+), 182 deletions(-) create mode 100644 frontend/src/views/chat/typed.ts diff --git a/frontend/src/views/chat/index.vue b/frontend/src/views/chat/index.vue index 548a3dcc..cf80f458 100644 --- a/frontend/src/views/chat/index.vue +++ b/frontend/src/views/chat/index.vue @@ -1,18 +1,25 @@