32 lines
1.6 KiB
Python
32 lines
1.6 KiB
Python
import argparse
|
|
import json
|
|
from pathlib import Path
|
|
from .core import HTTPProvider, CommandProvider, LeanVerifier, solve
|
|
|
|
def options(parser):
|
|
parser.add_argument('--model', default='local-model')
|
|
parser.add_argument('--base-url', default='http://localhost:8000/v1')
|
|
parser.add_argument('--api-key-env', default='LLM_API_KEY')
|
|
parser.add_argument('--provider-command', help='JSON argv array; stdin JSON messages, stdout proof')
|
|
parser.add_argument('--lean-command', default='["lean"]', help='JSON argv array; e.g. ["lake","env","lean"]')
|
|
parser.add_argument('--lean-project', help='Lean/Lake project working directory')
|
|
parser.add_argument('--attempts', type=int, default=3)
|
|
parser.add_argument('--lean-timeout', type=float, default=30)
|
|
parser.add_argument('--llm-timeout', type=float, default=120)
|
|
|
|
def components(args):
|
|
provider = (CommandProvider(json.loads(args.provider_command), args.llm_timeout)
|
|
if args.provider_command else HTTPProvider(args.model, args.base_url, args.api_key_env, args.llm_timeout))
|
|
return provider, LeanVerifier(json.loads(args.lean_command), args.lean_project, args.lean_timeout)
|
|
|
|
def main():
|
|
parser = argparse.ArgumentParser(description='Prove one Lean theorem with any LLM')
|
|
parser.add_argument('task', type=Path, help='JSON with id, statement, optional prelude')
|
|
options(parser)
|
|
args = parser.parse_args()
|
|
result = solve(*components(args), json.loads(args.task.read_text()), args.attempts)
|
|
print(json.dumps(result, ensure_ascii=False, indent=2))
|
|
raise SystemExit(0 if result['success'] else 1)
|
|
|
|
if __name__ == '__main__': main()
|