Files
deerflow-code/offline-backend-20260512/backend/_debug_test.py
T
2026-08-03 19:27:54 +08:00

59 lines
2.4 KiB
Python

import asyncio
import logging
logging.basicConfig(level=logging.DEBUG)
from sqlalchemy.ext.asyncio import async_sessionmaker, create_async_engine
from sqlalchemy import select
from deerflow.persistence.base import Base
from deerflow.persistence.maf_roundtable import make_maf_roundtable_store
from deerflow.persistence.maf_roundtable.model import MafRoundtableConversationEventRow, MafRoundtableConversationRow
from app.maf_roundtable.conversation_service import MafConversationService
class FakeMafConfig:
enabled = True
default_mode = 'structured'
default_model_name = 'test-model'
default_reasoning_effort = None
default_manager_agent_id = 'mgr-agent'
default_max_rounds = 8
default_write_policy = 'confirm_high_risk'
admin_diagnostic_access = True
async def main():
engine = create_async_engine('sqlite+aiosqlite://')
async with engine.begin() as conn:
import deerflow.persistence.maf_roundtable.model
await conn.run_sync(Base.metadata.create_all)
sf = async_sessionmaker(engine, expire_on_commit=False)
store = make_maf_roundtable_store(sf)
svc = MafConversationService(store, maf_config=FakeMafConfig())
conv = await svc.create_conversation(user_id='u1', title='Test')
# Monkey-patch _publish_conversation_event to trace calls
orig = svc._publish_conversation_event
async def traced_publish(*args, **kwargs):
print(f' _publish_conversation_event called: event_type={kwargs.get("event_type")}')
result = await orig(*args, **kwargs)
print(f' _publish_conversation_event returned: {result}')
return result
svc._publish_conversation_event = traced_publish
try:
result = await svc.send_message(conversation_id=conv['id'], user_id='u1', content='Hello')
print(f'send_message result: {result}')
except Exception as e:
import traceback
print(f'send_message ERROR: {type(e).__name__}: {e}')
traceback.print_exc()
async with sf() as session:
events = (await session.execute(select(MafRoundtableConversationEventRow))).scalars().all()
for e in events:
print(f' event: seq={e.seq} type={e.event_type}')
conv_row = (await session.execute(
select(MafRoundtableConversationRow).where(MafRoundtableConversationRow.id == conv['id'])
)).scalars().first()
print(f'last_stream_seq={conv_row.last_stream_seq}')
await engine.dispose()
asyncio.run(main())