Files
hope-voice-api/tests/unit/test_chat_runs_limits.py
T

34 lines
1.6 KiB
Python

"""Offline storage-limit stop intent regression."""
import asyncio
from control.accounts import Accounts, token_hash
from control.chat_store import ChatStore
from control.chat_runs import ChatRuns
def test_event_capacity_failure_persists_stop_and_reserved_terminal(tmp_path):
async def scenario():
accounts = Accounts(str(tmp_path/'limit.db'))
owner = accounts.create('test','Test','admin','offline-test-password')
store = ChatStore(accounts)
cid = store.create_conversation(owner['id'])['id']
rid = store.send(owner['id'],cid,'Hi','key')['run']['id']
store.update_run(owner['id'],rid,'running')
runs = ChatRuns(accounts,store,adapter=object())
runs.metadata(owner['id'],rid,{'conversation_id':cid,'payload':{},'upstream_id':'upstream','assistant_id':None})
original = store.append_event
def limited(owner,rid,event,data):
if event == 'progress':
raise ValueError('storage limit')
return original(owner,rid,event,data)
store.append_event = limited
try:
await runs.emit(owner['id'],rid,'progress',{'status':'working'})
except ValueError:
pass
metadata = runs.metadata(owner['id'],rid)
assert metadata['stop_requested'] and metadata['storage_failed']
assert await runs.consume_status(owner['id'],rid,metadata,{'status':'cancelled'})
assert store.get_run(owner['id'],rid)['run']['status'] == 'failed'
assert store.events(owner['id'],rid)[-1]['event'] == 'done'
accounts.close()
asyncio.run(scenario())