32 lines
1.7 KiB
Python
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
|