@@ -130,16 +130,24 @@ async def _ensure_config_rows(self, db, config_dict: dict = None):
130130 if count [0 ] == 0 :
131131 image_timeout = 300
132132 video_timeout = 1500
133+ max_retries = 3
133134
134135 if config_dict :
135136 generation_config = config_dict .get ("generation" , {})
137+ flow_config = config_dict .get ("flow" , {})
136138 image_timeout = generation_config .get ("image_timeout" , 300 )
137139 video_timeout = generation_config .get ("video_timeout" , 1500 )
140+ max_retries = flow_config .get ("max_retries" , 3 )
141+
142+ try :
143+ max_retries = max (1 , int (max_retries ))
144+ except Exception :
145+ max_retries = 3
138146
139147 await db .execute ("""
140- INSERT INTO generation_config (id, image_timeout, video_timeout)
141- VALUES (1, ?, ?)
142- """ , (image_timeout , video_timeout ))
148+ INSERT INTO generation_config (id, image_timeout, video_timeout, max_retries )
149+ VALUES (1, ?, ?, ? )
150+ """ , (image_timeout , video_timeout , max_retries ))
143151
144152 # Ensure call_logic_config has a row
145153 cursor = await db .execute ("SELECT COUNT(*) FROM call_logic_config" )
@@ -432,6 +440,20 @@ async def check_and_migrate_db(self, config_dict: dict = None):
432440 except Exception as e :
433441 print (f" ✗ Failed to add column '{ col_name } ': { e } " )
434442
443+ # Check and add missing columns to generation_config table
444+ if await self ._table_exists (db , "generation_config" ):
445+ generation_columns_to_add = [
446+ ("max_retries" , "INTEGER DEFAULT 3" ),
447+ ]
448+
449+ for col_name , col_type in generation_columns_to_add :
450+ if not await self ._column_exists (db , "generation_config" , col_name ):
451+ try :
452+ await db .execute (f"ALTER TABLE generation_config ADD COLUMN { col_name } { col_type } " )
453+ print (f" ✓ Added column '{ col_name } ' to generation_config table" )
454+ except Exception as e :
455+ print (f" ✗ Failed to add column '{ col_name } ': { e } " )
456+
435457 # Check and add missing columns to captcha_config table
436458 if await self ._table_exists (db , "captcha_config" ):
437459 captcha_columns_to_add = [
@@ -647,6 +669,7 @@ async def init_db(self):
647669 id INTEGER PRIMARY KEY DEFAULT 1,
648670 image_timeout INTEGER DEFAULT 300,
649671 video_timeout INTEGER DEFAULT 1500,
672+ max_retries INTEGER DEFAULT 3,
650673 updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
651674 )
652675 """ )
@@ -1292,14 +1315,49 @@ async def get_generation_config(self) -> Optional[GenerationConfig]:
12921315 return GenerationConfig (** dict (row ))
12931316 return None
12941317
1295- async def update_generation_config (self , image_timeout : int , video_timeout : int ):
1318+ async def update_generation_config (
1319+ self ,
1320+ image_timeout : Optional [int ] = None ,
1321+ video_timeout : Optional [int ] = None ,
1322+ max_retries : Optional [int ] = None ,
1323+ ):
12961324 """Update generation configuration"""
12971325 async with self ._connect (write = True ) as db :
1298- await db .execute ("""
1299- UPDATE generation_config
1300- SET image_timeout = ?, video_timeout = ?, updated_at = CURRENT_TIMESTAMP
1301- WHERE id = 1
1302- """ , (image_timeout , video_timeout ))
1326+ db .row_factory = aiosqlite .Row
1327+ cursor = await db .execute ("SELECT * FROM generation_config WHERE id = 1" )
1328+ row = await cursor .fetchone ()
1329+ current = dict (row ) if row else {}
1330+
1331+ normalized_image_timeout = (
1332+ image_timeout
1333+ if image_timeout is not None
1334+ else current .get ("image_timeout" , 300 )
1335+ )
1336+ normalized_video_timeout = (
1337+ video_timeout
1338+ if video_timeout is not None
1339+ else current .get ("video_timeout" , 1500 )
1340+ )
1341+ try :
1342+ normalized_max_retries = (
1343+ max (1 , int (max_retries ))
1344+ if max_retries is not None
1345+ else max (1 , int (current .get ("max_retries" , 3 )))
1346+ )
1347+ except Exception :
1348+ normalized_max_retries = 3
1349+
1350+ if row :
1351+ await db .execute ("""
1352+ UPDATE generation_config
1353+ SET image_timeout = ?, video_timeout = ?, max_retries = ?, updated_at = CURRENT_TIMESTAMP
1354+ WHERE id = 1
1355+ """ , (normalized_image_timeout , normalized_video_timeout , normalized_max_retries ))
1356+ else :
1357+ await db .execute ("""
1358+ INSERT INTO generation_config (id, image_timeout, video_timeout, max_retries)
1359+ VALUES (1, ?, ?, ?)
1360+ """ , (normalized_image_timeout , normalized_video_timeout , normalized_max_retries ))
13031361 await db .commit ()
13041362
13051363 async def get_call_logic_config (self ) -> CallLogicConfig :
@@ -1531,6 +1589,7 @@ async def reload_config_to_memory(self):
15311589 if generation_config :
15321590 config .set_image_timeout (generation_config .image_timeout )
15331591 config .set_video_timeout (generation_config .video_timeout )
1592+ config .set_flow_max_retries (generation_config .max_retries )
15341593
15351594 # Reload call logic config
15361595 call_logic_config = await self .get_call_logic_config ()
0 commit comments