11from datetime import datetime
2- from typing import List , Optional
2+ from typing import List , Optional , Dict
33
44import numpy as np
55
2424from sqlalchemy .orm import sessionmaker # pylint: disable=C0413
2525from sqlalchemy .ext .declarative import declarative_base # pylint: disable=C0413
2626
27+ DEFAULT_LEN_DOCT = {
28+ "question_question" : 3000 ,
29+ "answer_answer" : 3000 ,
30+ "session_id" : 1000 ,
31+ "dep_name" : 1000 ,
32+ "dep_data" : 3000 ,
33+ }
2734
28- def get_models (table_prefix , db_type ):
35+
36+ def _get_table_len (config : Dict , column_alias : str ) -> int :
37+ if config and column_alias in config and config [column_alias ] > 0 :
38+ return config [column_alias ]
39+ return DEFAULT_LEN_DOCT .get (column_alias , 1000 )
40+
41+
42+ def get_models (table_prefix , db_type , table_len_config ):
2943 DynamicBase = declarative_base (class_registry = {}) # pylint: disable=C0103
3044
3145 class QuestionTable (DynamicBase ):
@@ -41,7 +55,10 @@ class QuestionTable(DynamicBase):
4155 id = Column (Integer , question_id_seq , primary_key = True , autoincrement = True )
4256 else :
4357 id = Column (Integer , primary_key = True , autoincrement = True )
44- question = Column (String (1000 ), nullable = False )
58+ question = Column (
59+ String (_get_table_len (table_len_config , "question_question" )),
60+ nullable = False ,
61+ )
4562 create_on = Column (DateTime , default = datetime .now )
4663 last_access = Column (DateTime , default = datetime .now )
4764 embedding_data = Column (LargeBinary , nullable = True )
@@ -61,7 +78,9 @@ class AnswerTable(DynamicBase):
6178 else :
6279 id = Column (Integer , primary_key = True , autoincrement = True )
6380 question_id = Column (Integer , nullable = False )
64- answer = Column (String (2000 ), nullable = False )
81+ answer = Column (
82+ String (_get_table_len (table_len_config , "answer_answer" )), nullable = False
83+ )
6584 answer_type = Column (Integer , nullable = False )
6685
6786 class SessionTable (DynamicBase ):
@@ -83,8 +102,13 @@ class SessionTable(DynamicBase):
83102 else :
84103 id = Column (Integer , primary_key = True , autoincrement = True )
85104 question_id = Column (Integer , nullable = False )
86- session_id = Column (String (500 ), nullable = False )
87- session_question = Column (String (2000 ), nullable = False )
105+ session_id = Column (
106+ String (_get_table_len (table_len_config , "session_id" )), nullable = False
107+ )
108+ session_question = Column (
109+ String (_get_table_len (table_len_config , "question_question" )),
110+ nullable = False ,
111+ )
88112
89113 class QuestionDepTable (DynamicBase ):
90114 """
@@ -102,8 +126,12 @@ class QuestionDepTable(DynamicBase):
102126 else :
103127 id = Column (Integer , primary_key = True , autoincrement = True )
104128 question_id = Column (Integer , nullable = False )
105- dep_name = Column (String (255 ), nullable = False )
106- dep_data = Column (String (1000 ), nullable = False )
129+ dep_name = Column (
130+ String (_get_table_len (table_len_config , "dep_name" )), nullable = False
131+ )
132+ dep_data = Column (
133+ String (_get_table_len (table_len_config , "dep_data" )), nullable = False
134+ )
107135 dep_type = Column (Integer , nullable = False )
108136
109137 return QuestionTable , AnswerTable , QuestionDepTable , SessionTable
@@ -134,10 +162,13 @@ def __init__(
134162 db_type : str = "sqlite" ,
135163 url : str = "sqlite:///./sqlite.db" ,
136164 table_name : str = "gptcache" ,
165+ table_len_config = None ,
137166 ):
167+ if table_len_config is None :
168+ table_len_config = {}
138169 self ._url = url
139170 self ._ques , self ._answer , self ._ques_dep , self ._session = get_models (
140- table_name , db_type
171+ table_name , db_type , table_len_config
141172 )
142173 self ._engine = create_engine (self ._url )
143174 self .Session = sessionmaker (bind = self ._engine ) # pylint: disable=invalid-name
0 commit comments