Skip to content

Commit 67572a5

Browse files
committed
fix(core): multi-turn task agent
1 parent e2e90d7 commit 67572a5

13 files changed

Lines changed: 80 additions & 34 deletions

File tree

src/server/core/acontext_core/infra/async_mq.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -180,7 +180,7 @@ async def _process_message(self, config: ConsumerConfig, message: Message) -> No
180180
timeout=config.timeout,
181181
)
182182
_end_s = perf_counter()
183-
LOG.info(
183+
LOG.debug(
184184
f"Queue: {config.queue_name} processed in {_end_s - _start_s:.4f}s"
185185
)
186186
except ValidationError as e:

src/server/core/acontext_core/infra/db.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
1-
from ast import Or
2-
import os
1+
import traceback
32
from typing import AsyncGenerator, Optional
43
from contextlib import asynccontextmanager
54

@@ -141,6 +140,7 @@ async def get_session_context(self) -> AsyncGenerator[AsyncSession, None]:
141140
await session.commit()
142141
except Exception as e:
143142
logger.error(f"DB Session failed: {str(e)}. Rollback...")
143+
logger.error(traceback.format_exc(), extra={"__internal__": True})
144144
await session.rollback()
145145
raise e
146146
finally:

src/server/core/acontext_core/llm/agent/task.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,10 @@ async def task_agent_curd(
8080
use_tools = llm_return.tool_calls
8181
just_finish = False
8282
async with DB_CLIENT.get_session_context() as db_session:
83+
r = await TD.fetch_current_tasks(db_session, session_id)
84+
current_tasks, eil = r.unpack()
85+
if eil:
86+
return r
8387
use_ctx = TaskCtx(
8488
db_session=db_session,
8589
session_id=session_id,

src/server/core/acontext_core/llm/tool/task_lib/append.py

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,9 @@ async def _append_messages_to_task_handler(
2626
)
2727
actually_task_id = ctx.task_ids_index[task_order - 1]
2828
actually_message_ids = [
29-
ctx.message_ids_index[i]
29+
ctx.message_ids_index[i - 1]
3030
for i in message_order_indexes
31-
if i < len(ctx.message_ids_index)
31+
if i <= len(ctx.message_ids_index)
3232
]
3333
if not actually_message_ids:
3434
return Result.resolve(
@@ -39,8 +39,13 @@ async def _append_messages_to_task_handler(
3939
actually_message_ids,
4040
actually_task_id,
4141
)
42-
return r
43-
pass
42+
return (
43+
Result.resolve(
44+
f"Messages {message_order_indexes} appended to task {task_order}"
45+
)
46+
if r.ok()
47+
else r
48+
)
4449

4550

4651
_append_messages_to_task_tool = (

src/server/core/acontext_core/llm/tool/task_lib/append_planning.py

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -29,11 +29,10 @@ async def _append_messages_to_planning_section_handler(
2929
ctx.session_id,
3030
actually_message_ids,
3131
)
32-
_, eil = r.unpack()
33-
if eil:
34-
return r
35-
return Result.resolve(
36-
f"Messages {message_order_indexes} appended to planning section"
32+
return (
33+
Result.resolve(f"Messages {message_order_indexes} appended to planning section")
34+
if r.ok()
35+
else r
3736
)
3837

3938

src/server/core/acontext_core/llm/tool/task_lib/update.py

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,9 +30,13 @@ async def update_task_handler(
3030
ctx.db_session,
3131
actually_task_id,
3232
status=status,
33-
patch_data={
34-
"task_description": description,
35-
},
33+
patch_data=(
34+
{
35+
"task_description": description,
36+
}
37+
if description
38+
else None
39+
),
3640
)
3741
t, eil = r.unpack()
3842
if eil:

src/server/core/acontext_core/schema/env.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ class CoreConfig(BaseModel):
2929
mq_consumer_handler_timeout: float = 96
3030
mq_default_message_ttl_seconds: int = 7 * 24 * 60 * 60
3131
mq_default_dlx_ttl_days: int = 7
32-
mq_default_max_retries: int = 1
32+
mq_default_max_retries: int = 3
3333
mq_default_retry_delay_unit_sec: float = 1.0
3434

3535
# Database Configuration

src/server/core/acontext_core/schema/orm/message.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ class Message(CommonMixin):
102102
metadata={
103103
"db": Column(
104104
UUID(as_uuid=True),
105-
ForeignKey("tasks.id", ondelete="CASCADE"),
105+
ForeignKey("tasks.id", ondelete="SET NULL"),
106106
nullable=True,
107107
)
108108
},

src/server/core/acontext_core/schema/result.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,3 +36,8 @@ def unpack(self) -> tuple[Optional[T], Optional[Error]]:
3636
if self.error.status != Code.SUCCESS:
3737
return None, self.error
3838
return self.data, None
39+
40+
def ok(self) -> bool:
41+
if self.error.status != Code.SUCCESS:
42+
return False
43+
return True

src/server/core/acontext_core/service/controller/message.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,6 @@ async def process_session_pending_message(session_id: asUUID):
4141
]
4242

4343
r = await AT.task_agent_curd(session_id, previous_messages_data, messages_data)
44-
4544
async with DB_CLIENT.get_session_context() as session:
4645
await MD.update_message_status_to(
4746
session, pending_message_ids, TaskStatus.SUCCESS

0 commit comments

Comments
 (0)