Files
VianoBugAnalysis/tests/test_hypothesis_title_recovery.py

32 lines
1.7 KiB
Python

import copy
import json
from test_case_builder import case_setup
from test_case_interpreter import built_case, gateway
from test_hypothesis_builder import interpreted_case, ProposalAdapter, run
from viano_bug_analysis.analysis import HypothesisBuilder
from viano_bug_analysis.llm import ProviderResponse
from viano_bug_analysis.llm.answer_recovery import PATCH_PROMPT
from viano_bug_analysis.package import PackageReader
def test_duplicate_title_reuses_full_proposals_and_passes_registry_replay(interpreted_case):
store,*_=interpreted_case
class Adapter(ProposalAdapter):
async def generate(self,config,request,**kwargs):
if request['prompt_version']==PATCH_PROMPT:
self.requests.append(copy.deepcopy(request))
return ProviderResponse({'replacement':'Stored state after interaction'},'fixture',10,5)
return await super().generate(config,request,**kwargs)
def duplicate(payload,context):payload['hypotheses'][1]['title']=payload['hypotheses'][0]['title']
adapter=Adapter(duplicate);builder=HypothesisBuilder(store,gateway(adapter))
result=run(builder)
assert result.status=='COMPLETED' and len(adapter.requests)==2
old_size=sum(len(m['content']) for m in adapter.requests[0]['messages'])
patch_size=sum(len(m['content']) for m in adapter.requests[1]['messages'])
assert patch_size < old_size / 2
with PackageReader(result.package) as reader:
document=json.loads(reader.read_bytes(result.hypotheses_ref))
assert document['hypotheses'][1]['proposal']['title']=='Stored state after interaction'
assert len(document['hypotheses'])==3
assert run(builder).reused and len(adapter.requests)==2