Files
lean-agent/lean_agent/cli.py
T

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()