API Client¶
The Python API client provides programmatic access to Lean Explore search functionality.
Basic Usage¶
Initialization¶
from lean_explore.api.client import Client
# With API key
client = Client(api_key="your-api-key")
# With custom base URL (for local servers)
client = Client(base_url="http://localhost:8001")
# Both API key and custom URL
client = Client(
api_key="your-api-key",
base_url="https://custom-api.example.com/api/v1"
)
Single Search¶
import asyncio
async def main():
client = Client(api_key="your-api-key")
results = await client.search("natural numbers")
print(f"Found {len(results.results)} results")
for item in results.results:
print(f"- {item.primary_declaration.lean_name}")
asyncio.run(main())
Multiple Searches¶
async def main():
client = Client(api_key="your-api-key")
queries = ["natural numbers", "group theory", "topology"]
results = await client.search(queries)
for result in results:
print(f"Query: {result.query}")
print(f"Results: {len(result.results)}\n")
asyncio.run(main())
Advanced Usage¶
Package Filtering¶
async def main():
client = Client(api_key="your-api-key")
# Filter by package
results = await client.search(
"monoid",
package_filters=["Mathlib", "Batteries"]
)
for item in results.results:
print(f"{item.primary_declaration.lean_name}")
asyncio.run(main())
Getting Citations¶
async def main():
client = Client(api_key="your-api-key")
# Search first
search_results = await client.search("natural numbers")
if search_results.results:
first_result = search_results.results[0]
# Get dependencies (citations) for a result
dependencies = await client.get_dependencies(first_result.id)
if dependencies:
print(f"Dependencies for {first_result.primary_declaration.lean_name}:")
for citation in dependencies.citations:
print(f"- {citation.primary_declaration.lean_name}")
asyncio.run(main())
Error Handling¶
import httpx
async def main():
client = Client(api_key="your-api-key")
try:
results = await client.search("natural numbers")
except httpx.HTTPStatusError as e:
print(f"HTTP error: {e.response.status_code}")
except httpx.RequestError as e:
print(f"Request error: {e}")
asyncio.run(main())
Response Models¶
APISearchResponse¶
from lean_explore.shared.models.api import APISearchResponse
results: APISearchResponse = await client.search("query")
# Access properties
results.query # The search query
results.results # List of APISearchResultItem
APISearchResultItem¶
item = results.results[0]
# Primary declaration
item.primary_declaration.lean_name
# Informal description
item.informal_description
# Statement group ID
item.id
APICitationsResponse¶
dependencies = await client.get_dependencies(item_id)
# List of dependencies (citations)
if dependencies:
for citation in dependencies.citations:
print(citation.primary_declaration.lean_name)
Configuration¶
Timeout¶
Environment Variables¶
import os
from lean_explore.api.client import Client
api_key = os.getenv("LEAN_EXPLORE_API_KEY")
base_url = os.getenv("LEAN_EXPLORE_BASE_URL")
client = Client(api_key=api_key, base_url=base_url)
Next Steps¶
- API Reference - Complete API documentation
- HTTP Server - Run a local HTTP server
- Local Search - Use local backend