opticparse-python / benchmark_simple.py
Nanny7's picture
initial deploy
bcf46c3
Raw
History Blame Contribute Delete
5.7 kB
import urllib.request, json, time, uuid, os
PYTHON = 'https://opticparse-python-sg.onrender.com'
NODE = 'https://opticparse-1opticparse-node-sg.onrender.com'
SUPABASE_URL = 'https://xxmvhvxeglsjbewlouqg.supabase.co'
# Load Supabase service key from .env in repo root
SERVICE_KEY = ''
env_path = os.path.join(os.path.dirname(__file__), '.env')
with open(env_path, encoding='utf-8') as f:
for line in f:
if line.startswith('SUPABASE_SERVICE_KEY='):
SERVICE_KEY = line.strip().split('=', 1)[1]
# Create test user
req = urllib.request.Request(
f'{SUPABASE_URL}/auth/v1/admin/users',
method='POST',
headers={'Content-Type': 'application/json', 'apikey': SERVICE_KEY, 'Authorization': f'Bearer {SERVICE_KEY}'},
data=json.dumps({'email': f'bench_{uuid.uuid4().hex[:6]}@test.com', 'password': 'Test123!', 'email_confirm': True}).encode()
)
user_id = json.loads(urllib.request.urlopen(req).read())['id']
# Generate OpticParse API key
req2 = urllib.request.Request(
f'{PYTHON}/gateway/keys/generate',
method='POST',
headers={'Content-Type': 'application/json'},
data=json.dumps({'user_id': user_id}).encode()
)
api_key = json.loads(urllib.request.urlopen(req2, timeout=30).read())['api_key']
print('API key (truncated):', api_key[:20] + '...')
def scrape(url, query, schema, name):
start = time.time()
try:
req = urllib.request.Request(
f'{PYTHON}/api/vision-scrape',
method='POST',
headers={'Content-Type': 'application/json', 'X-API-Key': api_key},
data=json.dumps({'target_url': url, 'extraction_query': query, 'response_schema': schema}).encode()
)
res = urllib.request.urlopen(req, timeout=90)
_ = json.loads(res.read())
elapsed = time.time() - start
print('PASS', name, f'({elapsed:.1f}s)')
return elapsed, True
except Exception as e:
elapsed = time.time() - start
print('FAIL', name, f'({elapsed:.1f}s)', str(e)[:80])
return elapsed, False
def phish(url, name, expected='safe'):
start = time.time()
try:
req = urllib.request.Request(
f'{NODE}/api/phish-detect',
method='POST',
headers={'Content-Type': 'application/json'},
data=json.dumps({'url': url}).encode()
)
res = urllib.request.urlopen(req, timeout=90)
body = json.loads(res.read())
elapsed = time.time() - start
verdict = body.get('verdict', '?')
confidence = body.get('confidence_score_percentage', 0)
cached = body.get('cached', False)
correct = verdict == expected
print(name, verdict, f'({confidence}%)', 'CACHED' if cached else 'FRESH', f'({elapsed:.1f}s)')
return elapsed, correct
except Exception as e:
elapsed = time.time() - start
print('FAIL', name, f'({elapsed:.1f}s)', str(e)[:60])
return elapsed, False
print('\n=== OPTICPARSE BENCHMARK ===')
opt_cases = [
('https://news.ycombinator.com', 'HN', {'posts': [{'title': 'string', 'points': 'number'}]}),
('https://github.com/trending', 'GitHub', {'repos': [{'name': 'string', 'stars': 'string'}]}),
('https://vercel.com/pricing', 'Vercel', {'plans': [{'name': 'string', 'price': 'string'}]}),
('https://www.cloudflare.com/plans/', 'Cloudflare', {'plans': [{'name': 'string', 'price': 'string'}]}),
('https://stripe.com/pricing', 'Stripe', {'products': [{'name': 'string', 'price': 'string'}]})
]
opt_times, opt_results = [], []
for url, name, schema in opt_cases:
t, r = scrape(url, f'Top items for {name}', schema, name)
opt_times.append(t); opt_results.append(r)
# cache test
t, r = scrape('https://news.ycombinator.com', 'HN Cache', {'posts': [{'title': 'string'}]}, 'HN Cache')
opt_times.append(t); opt_results.append(r)
opt_pass = sum(opt_results)
opt_avg = sum(opt_times) / len(opt_times) if opt_times else 0
print(f'OpticParse: {opt_pass}/{len(opt_results)} passed | Avg: {opt_avg:.1f}s')
print('\n=== PHISHVISION BENCHMARK ===')
ph_cases = [
('https://google.com', 'Google'),
('https://microsoft.com', 'Microsoft'),
('https://accounts.google.com', 'Google Login'),
('https://github.com/login', 'GitHub Login'),
('https://apple.com', 'Apple'),
('https://google.com', 'Google Cache')
]
ph_times, ph_results = [], []
for url, name in ph_cases:
t, r = phish(url, name)
ph_times.append(t); ph_results.append(r)
ph_pass = sum(ph_results)
ph_fresh = [t for t in ph_times if t >= 2]
ph_cached = [t for t in ph_times if t < 2]
ph_fresh_avg = sum(ph_fresh) / len(ph_fresh) if ph_fresh else 0
ph_cached_avg = sum(ph_cached) / len(ph_cached) if ph_cached else 0
print(f'PhishVision: {ph_pass}/{len(ph_results)} correct')
print(f'Fresh avg: {ph_fresh_avg:.1f}s')
print(f'Cached avg: {ph_cached_avg:.2f}s')
print('\n=== SECURITY TESTS ===')
# Fake key
try:
urllib.request.urlopen(urllib.request.Request(
f'{PYTHON}/api/vision-scrape', method='POST',
headers={'Content-Type': 'application/json', 'X-API-Key': 'fake-key-123'},
data=json.dumps({'target_url': 'https://example.com', 'extraction_query': 'test'}).encode()
), timeout=10)
print('Fake key NOT rejected')
except urllib.error.HTTPError as e:
print('Fake key rejected', e.code)
# Internal URL
try:
urllib.request.urlopen(urllib.request.Request(
f'{NODE}/api/phish-detect', method='POST',
headers={'Content-Type': 'application/json'},
data=json.dumps({'url': 'http://127.0.0.1/secret'}).encode()
), timeout=10)
print('Internal URL NOT blocked')
except urllib.error.HTTPError as e:
print('Internal URL blocked', e.code)