Files
OpenResearch/scripts/test-opencode-routing.py
T
Wu ShuwenandDaniel Kim f1b6c2d8f0 Use selected OpenCode models and remove AI skill screening (#670)
* fix: avoid inference during OpenCode detection

* Bind OpenCode auxiliary generation and remove AI skill screening

---------

Co-authored-by: Daniel Kim <sox8502@gmail.com>
2026-10-22 14:57:58 -07:00

98 lines
5.3 KiB
Python

#!/usr/bin/env python3
"""Verify native auxiliary routing with real V1/V2 binaries and a loopback provider."""
import argparse
import json
from pathlib import Path
import runpy
import tempfile
import threading
native = runpy.run_path(str(Path(__file__).with_name('test-opencode-compat.py')))
Provider, request, wait_for = native['Provider'], native['request'], native['wait_for']
SELECTED = 'claude-haiku-4-5'
DEFAULT = 'claude-sonnet-4-5'
def main():
parser = argparse.ArgumentParser(description=__doc__)
parser.add_argument('--v1', required=True)
parser.add_argument('--v2', required=True)
args = parser.parse_args()
root = Path(tempfile.mkdtemp(prefix='orx-routing-'))
Provider.read_file = root / 'fixture.txt'
Provider.read_file.write_text('routing fixture')
fake = native['http'].server.ThreadingHTTPServer(('127.0.0.1', 0), Provider)
threading.Thread(target=fake.serve_forever, daemon=True).start()
provider = f'http://127.0.0.1:{fake.server_port}/v1'
try:
for generation, binary in [(1, args.v1), (2, args.v2)]:
key = 'agent' if generation == 1 else 'agents'
inline = {key: {name: {'model': f'anthropic/{SELECTED}'} for name in ['title', 'compaction']}}
if generation == 1:
inline['small_model'] = f'anthropic/{SELECTED}'
configured = {
'provider': {'anthropic': {
'models': {model: {'limit': {'context': 200000, 'output': 4096}} for model in [DEFAULT, SELECTED]},
'options': {'baseURL': provider, 'apiKey': 'fixture-key'},
}},
key: {name: {'model': f'anthropic/{DEFAULT}'} for name in ['title', 'compaction']},
}
with native['server'](str(Path(binary).resolve()), root / f'v{generation}', generation, provider,
config_overrides=configured, inline=inline) as (url, process, log):
def agents():
body = request(url + ('/agent' if generation == 1 else '/api/agent'))
return body if generation == 1 else body['data']
def configured_agents():
listed = agents()
selected = [agent for agent in listed if agent['name' if generation == 1 else 'id'] in ['title', 'compaction']]
return listed if len(selected) == 2 and all(agent.get('model') for agent in selected) else None
listed = wait_for(configured_agents, process, log)
for name in ['title', 'compaction']:
agent = next(agent for agent in listed if agent['name' if generation == 1 else 'id'] == name)
assert agent['model']['providerID'] == 'anthropic', agent
assert agent['model']['modelID' if generation == 1 else 'id'] == SELECTED, agent
Provider.calls.clear()
Provider.reply = '## Objective\n- Preserve the selected model routing fixture.'
text = 'routing fixture ' * 6000
if generation == 1:
session = request(url + '/session', 'POST', {})['id']
request(f'{url}/session/{session}/message', 'POST', {
'parts': [{'type': 'text', 'text': text}],
'model': {'providerID': 'anthropic', 'modelID': SELECTED},
})
wait_for(lambda: len(Provider.calls) >= 2, process, log)
before = len(Provider.calls)
request(f'{url}/session/{session}/summarize', 'POST', {'providerID': 'anthropic', 'modelID': SELECTED})
else:
session = request(url + '/api/session', 'POST', {
'model': {'providerID': 'anthropic', 'id': SELECTED},
'location': {'directory': str(root / 'v2' / 'project')},
})['data']['id']
native['prompt_v2'](url, session, text, process, log)
wait_for(lambda: len(Provider.calls) >= 2, process, log)
before = len(Provider.calls)
item = request(f'{url}/api/session/{session}/compact', 'POST', {})['data']['id']
def compacted():
try:
message = request(f'{url}/api/session/{session}/message/{item}')['data']
except AssertionError:
return None
if message.get('status') == 'failed':
raise RuntimeError(json.dumps(message))
return message if message.get('status') == 'completed' else None
wait_for(compacted, process, log)
assert len(Provider.calls) > before, 'compaction made no generation request'
models = [call.get('model') for call in Provider.calls]
assert models and set(models) == {SELECTED}, models
(root / f'v{generation}-request-models.json').write_text(json.dumps(models))
print(f'PASS V{generation}: chat, native title, compaction all used {SELECTED}; {len(models)} observed requests', flush=True)
Provider.reply = 'fixture reply'
finally:
fake.shutdown()
fake.server_close()
print(f'Evidence: {root}', flush=True)
if __name__ == '__main__':
main()