VM3: Tools API (FastAPI)
The Tools API is a lightweight Python service handling mathematical calculations, chemical calculations, conversions, and geo-IP lookup.
Endpoints Specification
1. Arithmetic Calculator
- Route:
POST /api/tools/calculate - Request:
{ "expression": "2+2*5" } - Response:
{ "result": 12.0 }
2. Equation Solver (Photomath with LaTeX)
- Route:
POST /api/tools/formula - Request:
{ "equation": "x^2 + 5 = 20", "solve_for": "x" } - Response: Returns LaTeX inputs, numeric solutions, and chronological solution steps.
3. Graph Coordinate Generator
- Route:
POST /api/tools/graph - Request:
{ "function": "x^2", "range": {"min": -10, "max": 10, "step": 0.5} } - Response: An array of
{x, y}coordinates ready for Recharts.
4. Periodic Table Element Query
- Route:
GET /api/tools/periodic/{symbol} - Response: Detailed element properties (atomic mass, atomic number, chemical category).
5. Molar Mass Calculator
- Route:
POST /api/tools/molar-mass - Request:
{ "formula": "H2SO4" } - Response: Computes molecular weight with element counts and contribution breakdown. Supports parenthesis like
Ca(OH)2.
6. Unit Converter
- Route:
POST /api/tools/unit-convert - Request:
{ "value": 100, "from": "km", "to": "miles" } - Response: Standardized numeric output using the
pintregistry.
7. Weather
- Route:
GET /api/tools/weather?lat=6.9271&lon=79.8612 - Response: Weather conditions using Open-Meteo as primary and OpenWeatherMap as fallback, cached for 10 minutes.
8. Currency Converter
- Route:
GET /api/tools/currency?from=USD&to=LKR&amount=1 - Response: Convert currencies, cached for 1 hour.
9. Dictionary
- Route:
GET /api/tools/dictionary?word=valley - Response: Returns definition lists proxying dictionaryapi.dev.
10. GeoIP Lookup
- Route:
GET /api/tools/ip?ip=8.8.8.8(or client IP) - Response: Returns location, ISP, and coordinates using ipinfo.io or ip-api.com.
11. QR Code Generator
- Route:
POST /api/tools/qr - Request:
{ "text": "url" } - Response: Base64 encoded PNG QR URI.
12. Color Converter
- Route:
POST /api/tools/color - Request:
{ "color": "#ff5733" } - Response: Formatted RGB, HSL, complementary, and analogous palettes.