Cocktail computation engine — measure parsing, ABV estimation, calorie calculation, flavor profiling, and difficulty scoring. Zero dependencies.
Project description
cocktailfyi
Cocktail computation engine for developers — measure parsing, ABV estimation, calorie calculation, flavor profiling, and difficulty scoring. Zero dependencies. <1ms per computation.
Extracted from the CocktailFYI Django app as a standalone pure-Python library.
Install
pip install cocktailfyi # Core engine (zero deps)
pip install cocktailfyi[cli] # + CLI (typer, rich)
pip install cocktailfyi[mcp] # + MCP server
pip install cocktailfyi[api] # + API client (httpx)
pip install cocktailfyi[all] # Everything
Quick Start
from cocktailfyi import parse_measure_ml, estimate_abv, estimate_calories
# Parse bartending measures
ml = parse_measure_ml("1 1/2 oz") # 45.0
ml = parse_measure_ml("2 cl") # 20.0
ml = parse_measure_ml("splash") # 5.0
# Estimate ABV (with 22% dilution from ice)
abv = estimate_abv([
{"measure": "2 oz", "abv": 40.0}, # Tequila
{"measure": "1 oz", "abv": 40.0}, # Triple Sec
{"measure": "1 oz", "abv": 0}, # Lime juice
])
print(abv) # Decimal('20.80')
# Estimate calories
kcal = estimate_calories([
{"measure": "2 oz", "abv": 40.0, "calories_per_100ml": None},
{"measure": "1 oz", "abv": 0, "calories_per_100ml": 40},
])
print(kcal) # 145
Features
Measure Parser
Handles 20 bartending units including fractions:
from cocktailfyi import parse_measure_ml
parse_measure_ml("1 1/2 oz") # 45.0
parse_measure_ml("3/4 cl") # 7.5
parse_measure_ml("2 tbsp") # 30.0
parse_measure_ml("1 jigger") # 45.0
parse_measure_ml("garnish") # 5.0 (descriptive measure)
Supported units: oz, cl, ml, tsp, tbsp, shot, cup, part/parts, dash/dashes, drop/drops, splash, jigger, pint, glass, can, bottle, fifth.
ABV Estimation
from cocktailfyi import estimate_abv
abv = estimate_abv([
{"measure": "2 oz", "abv": 40.0}, # Spirit
{"measure": "4 oz", "abv": 0}, # Mixer
])
# Applies 22% dilution factor → Decimal('10.40')
Calorie Estimation
from cocktailfyi import estimate_calories
kcal = estimate_calories([
{"measure": "2 oz", "abv": 40.0, "calories_per_100ml": None},
])
# Uses alcohol formula: vol × abv × 0.789 g/ml × 7 kcal/g → 133
Flavor Profiling
from cocktailfyi import compute_flavor_profile
profile = compute_flavor_profile([
{"measure": "2 oz", "flavor_sweet": 0, "flavor_sour": 0,
"flavor_bitter": 0, "flavor_strong": 10},
{"measure": "1 oz", "flavor_sweet": 10, "flavor_sour": 8,
"flavor_bitter": 0, "flavor_strong": 0},
])
# {'sweet': 3, 'sour': 3, 'bitter': 0, 'strong': 7}
Difficulty Scoring
from cocktailfyi import compute_difficulty
compute_difficulty(3) # 'easy'
compute_difficulty(5, ["muddling"]) # 'hard'
compute_difficulty(4, ["shaking", "stirring"]) # 'medium'
CLI
cocktailfyi parse-measure "1 1/2 oz"
cocktailfyi abv '[{"measure":"2 oz","abv":40}]'
cocktailfyi calories '[{"measure":"2 oz","abv":40}]'
cocktailfyi difficulty 5 --techniques muddling shaking
MCP Server
# Add to Claude Desktop config
python -m cocktailfyi.mcp_server
Tools: parse_measure, cocktail_abv, cocktail_calories, flavor_profile, cocktail_difficulty
API Client
from cocktailfyi.api import CocktailFYI
with CocktailFYI() as api:
results = api.search("margarita")
Links
- CocktailFYI — 426 cocktail recipes with ABV, calories, and flavor data
- PyPI
- GitHub
- FYIPedia — Open-source developer tools ecosystem
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file cocktailfyi-0.1.0.tar.gz.
File metadata
- Download URL: cocktailfyi-0.1.0.tar.gz
- Upload date:
- Size: 75.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.10.8 {"installer":{"name":"uv","version":"0.10.8","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a4e6e4a6d262ab5f4d7f506096d8b73f217cf9b3ca29b99913a3189b446e76ee
|
|
| MD5 |
fa1fec5a9c2cda8f1d725861399024f1
|
|
| BLAKE2b-256 |
7bca241836e5fb646dc81e74dbcb594d8fe7db4995fe1c70ac5f0278e1bf8139
|
File details
Details for the file cocktailfyi-0.1.0-py3-none-any.whl.
File metadata
- Download URL: cocktailfyi-0.1.0-py3-none-any.whl
- Upload date:
- Size: 11.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.10.8 {"installer":{"name":"uv","version":"0.10.8","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2103d11031bd32b970a962063476816f896cd7ba64aaa1a547e40ce996887d39
|
|
| MD5 |
579d9f8d980a40f824143194be1a71a8
|
|
| BLAKE2b-256 |
945d534d54b6670f12b2ff646a33017b82989cdf9544dd443c4124e1170a6a00
|