diff --git a/botender/interaction/drink_recommendation.py b/botender/interaction/drink_recommendation.py new file mode 100644 index 0000000..0d2122e --- /dev/null +++ b/botender/interaction/drink_recommendation.py @@ -0,0 +1,32 @@ +import pandas as pd +import random + +class DrinkRecommender: + def __init__(self, dataset_path): + self.drinks_data = pd.read_csv(dataset_path) + + def recommend_drink(self, emotion, taste_preference): + emotion_categories = { + 'happy': ['Sweet', 'Sour', 'Milk-based'], + 'sad': ['Sweet', 'Milk-based'], + 'angry': ['Sour', 'Strong'], + 'neutral': ['Sweet', 'Sour', 'Milk-based','Strong'] + } + + # Filter for the relevant categories based on emotion + relevant_categories = emotion_categories.get(emotion.lower(), []) + filtered_drinks = self.drinks_data[self.drinks_data['Category_with_Scales'].isin(relevant_categories)] + + # Further filter based on taste preference + taste_filtered_drinks = filtered_drinks[filtered_drinks['Category_with_Scales'].str.contains(taste_preference)] + + # Sort by the score of the taste preference + taste_filtered_drinks['Score'] = taste_filtered_drinks['Category_with_Scales'].apply( + lambda x: int(x.split(f'{taste_preference}(')[-1].split(')')[0]) if f'{taste_preference}(' in x else 0 + ) + top_drinks = taste_filtered_drinks.sort_values(by='Score', ascending=False).head(10) + + # Randomly select one from the top 10 + selected_drink = top_drinks.sample(n=1) + + return selected_drink[['Cocktail', 'Ingredients', 'Category_with_Scales']] diff --git a/botender/interaction/drinks/drinks_with_categories_and_ranks.csv b/botender/interaction/drinks/drinks_with_categories_and_ranks.csv new file mode 100644 index 0000000..f30a8d3 --- /dev/null +++ b/botender/interaction/drinks/drinks_with_categories_and_ranks.csv @@ -0,0 +1,727 @@ +Cocktail,Ingredients,Category_with_Scales +"BOURBLE,""2 ounces bourbon, ½ ounce lemon juice, ½ ounce Cointreau or"",""Sweet(1), Sour(1)""" +"BOURBON AND BRANCH,""2 ounces bourbon4 ounces bottled water, 2 ounces bourbon1 maraschino cherry, 1 ounce sloe gin"",Sweet(1)" +"BOURBON COBBLER I,""1½ teaspoons superfine1 maraschino cherry, 3 ounces club soda, 2½ ounces blended"",Sweet(2)" +"BOURBON COBBLER II,""1 teaspoon superfine2 ounces bourbon, 3 ounces club soda"",Sweet(1)" +"BOURBON COOLER,""2 ounces bourbon, 4 ounces lemon-lime soda"",""Sweet(1), Sour(2)""" +BOURBON COUNTY COWBOY,2 ounces bourbon½ ounce light cream,Milk-based(1) +"BOURBON CRUSTA,""1½ ounces bourbon, ½ ounce Cointreau or, Peel of 1 orange, cut into2 teaspoons maraschino, ½ ounce lemon juice"",""Sweet(1), Sour(1)""" +"BOURBON DAISY,""2 ounces bourbon, 1 ounce lemon juice 1 maraschino cherry, ½ teaspoon grenadine, ½ teaspoon superfine"",""Sweet(2), Sour(1)""" +"BOURBON FIX,""1 teaspoon superfineCrushed ice, 2 ounces bourbon, 1 ounce lemon juice 1 maraschino cherry, 2 teaspoons water"",""Sweet(2), Sour(1)""" +"BOURBON FLIP,""2 ounces bourbon, ½ ounce light cream, 1/8 teaspoon grated, 1 teaspoon superfine"",Milk-based(1)" +"BOURBON MILK PUNCH,""2 ounces bourbon, ¼ teaspoon vanilla, 3 ounces half-and-half, 1 teaspoon superfine, ¼ teaspoon grated"",Milk-based(1)" +"BOURBON SANGAREE,""1 teaspoon superfine ½ ounce tawny port, 2 teaspoons water, 1/8 teaspoon grated, 1½ ounces bourbon, 1/8 teaspoon ground, 2½ ounces club soda"",Sweet(1)" +"BOURBON SLING,""1 teaspoon superfine1 ounce lemon juice, 2 ounces bourbon, 2 teaspoons water"",""Sweet(1), Sour(1)""" +"BOURBON SOUR,""2 ounces bourbon, 1 ounce lemon juice 1 maraschino cherry, ½ teaspoon superfine, 1½ ounces lime juice1 dash bitters, 1 teaspoon superfine Crushed ice, 3 ounces club soda, 2 ounces bourbon"",""Sweet(4), Sour(3)""" +"DIXIE DEW,""1½ ounces bourbon, ½ teaspoon Cointreau or, ½ teaspoon white crème, 3 ounces bourbon, ½ teaspoon Southern, ½ ounce white crème de"",Strong" +"FANCY BOURBON,""2 ounces bourbon, 2 dashes bitters, ½ teaspoon Cointreau or1 lemon twist, ¼ teaspoon superfine, 1½ ounces bourbon ½ teaspoon superfine, ½ ounce Pernod, ½ ounce lemon juice1 egg white"",""Sweet(1), Sour(3)""" +"JILLIONAIRE,""2 ounces bourbon, ½ teaspoon grenadine, ½ ounce Cointreau or1 egg white"",Strong" +"JOHN COLLINS,""2 ounces bourbon, 3 ounces club soda, 1 ounce lemon juice 1 maraschino cherry, 1 teaspoon superfine1 orange slice, 2 ounces bourbon 1 ounce milk, ½ ounce amaretto, 2 ounces bourbon½ ounce amaretto, 3 ounces bourbon 2 dashes bitters, ½ ounce Southern"",""Sweet(3), Sour(2), Milk-based(1)""" +KENTUCKY B AND B,2 ounces bourbon½ ounce Bénédictine,Strong +"KENTUCKY COLONEL,""3 ounces bourbon, ½ ounce Bénédictine, 2 ounces bourbon½ ounce heavy cream, 1 ounce dark rum"",Milk-based(1)" +"MINT JULEP,""1 teaspoon superfine sug-, 3 ounces bourbon"",Strong" +"NARRAGANSETT,""2 ounces bourbon, ½ teaspoon anisette, 1 ounce sweet vermouth1 lemon twist"",Sour(1)" +"NEVINS,""2 ounces bourbon, ½ ounce lemon juice, ½ ounce apricot brandy 1 dash bitters, ½ ounce grapefruit juice, ½ teaspoon superfine2 ounces bourbon"",""Sweet(3), Sour(2)""" +"RAGGED COMPANY,""2 ounces bourbon, 2 dashes bitters, ½ ounce sweet vermouth1 lemon twist, 1 teaspoon Bénédictine"",Sour(2)" +"REBEL YELL,""2 ounces bourbon, 1 ounce lemon juice, ½ ounce Cointreau or1 egg white"",""Sweet(1), Sour(1)""" +"SAZERAC,""1 teaspoon Ricard, 1 teaspoon water, ½ teaspoon superfine, 2 ounces bourbon, 2 dashes Peychaud bitters"",Sour(1)" +"ACAPULCO,""2 ounces light rum, 1 teaspoon superfine, ½ ounce Cointreau or, ½ ounce lime juice"",""Sweet(1), Sour(1)""" +"ADAM,""2 ounces dark rum 1 teaspoon grenadine, 1 ounce lemon juice"",""Sweet(1), Sour(1)""" +"A FURLONG TOO LATE,""2 ounces light rum, 4 ounces ginger beer"",Strong" +"ALMERIA,""2 ounces dark rum1 egg white, 1 ounce Kahlúa"",Strong" +"A NIGHT IN OLD MANDALAY,""1 ounce light rum, ½ ounce lemon juice, 1 ounce añejo rum, 3 ounces ginger ale, 1 ounce orange juice1 lemon twist"",""Sweet(2), Sour(2)""" +"APPLED RUM COOLER,""1½ ounces añejo rum2 teaspoons lime juice, ½ ounce applejack, 2 ounces club soda"",""Sweet(3), Sour(1)""" +"APPLE PIE,""1 ounce light rum, 1 teaspoon lemon juice, ½ ounce sweet vermouth½ teaspoon grenadine, 1 teaspoon applejack"",""Sweet(2), Sour(1)""" +"APRICOT LADY,""1½ ounces light rum, ½ ounce lemon juice, 1 ounce apricot brandy 1 egg white, 1 teaspoon Cointreau or1 orange slice"",""Sweet(1), Sour(1)""" +"BACARDI COCKTAIL,""1½ ounces Bacardi light1 ounce lime juice, 1 teaspoon grenadine"",""Sweet(1), Sour(1)""" +"BANANA RUM CREAM,""1½ ounces dark rum1 ounce light cream, ½ ounce crème de"",Milk-based(1)" +"BARKIS IS WILLING,""1½ ounces light rum 2 ounces club soda, 1 ounce lime juice, 2 ounces ginger ale, 1 teaspoon grenadine 1 orange slice, ½ teaspoon superfine"",""Sweet(2), Sour(1)""" +"BARRIER BREAKER,""1½ ounces dark rum, 4 ounces cold coffee, ½ ounce Galliano, 2 teaspoons dark crème"",Strong" +"BASIC BILL,""1½ ounces añejo rum½ ounce Grand Marnier, ½ ounce Dubonnet, 2 dashes bitters"",Sour(1)" +"BATIDA ABACI,""2 ounces cachaça, ½ teaspoon granulated, 4 ounces fresh pineapple,"",Sweet(2)" +"BATIDA LIMAO,""2 ounces cachaça, 1 ounce lime juice, 2 teaspoons granulated"",""Sweet(1), Sour(1)""" +"BATIDA MANGO,""2 ounces cachaça, 2 teaspoons granulated, 4 ounces chopped fresh"",Strong" +"BATIDA MORANGO,""2 ounces cachaça, ½ teaspoon granulated, 2 teaspoons superfine1 teaspoon maraschino, 1 teaspoon cherry brandy, 2 ounces light rum, ½ ounce lime juice"",""Sweet(2), Sour(1)""" +"BEADLER TO THE FRONT,""1 ounce dark rum 2 dashes bitters, ½ ounce Pernod, ½ ounce crème de"",Sour(1)" +"BIG BAND CHARLIE,""1½ ounces dark rum, ½ ounce lime juice, ½ ounce melon liqueur, ½ ounce Cointreau or"",""Sweet(2), Sour(1)""" +"THE BIGWOOD GIRLS,""¾ ounce light rum, ½ ounce lemon juice, ½ ounce brandy, ½ ounce Cointreau or, 2 ounces light rum, ½ ounce dry vermouth"",""Sweet(1), Sour(1)""" +"BLACK MONDAY,""1 ounce dark rum, 1 teaspoon cherry brandy, ½ ounce black Sambuca½ ounce lemon juice"",""Sweet(2), Sour(1)""" +"BLACK STRIPE COLD,""2 ounces dark rum1 ounce boiling water, ½ ounce molasses Crushed ice, 1 teaspoon honey"",Sweet(1)" +"BLIGHTER BOB,""1 ounce light rum, 2 dashes orange bitters, ½ ounce dark rum, 2 ounces ginger ale, ½ ounce crème de cassis1 lemon twist, 1 ounce orange juice"",""Sweet(1), Sour(2)""" +"BLUE MOUNTAIN,""1½ ounces añejo rum1 ounce orange juice, ½ ounce Tia Maria, 1 teaspoon lemon juice, ½ ounce vodka"",""Sweet(2), Sour(1)""" +"BOLERO,""1½ ounces añejo rum1 dash bitters, ½ ounce Calvados, 2 teaspoons sweet"",Sour(1)" +"BOSTON SIDECAR,""1 ounce light rum, ½ ounce lemon juice, ½ ounce brandy, ½ ounce Cointreau or, 1½ ounces light rum, 1 ounce lemon juice, ½ ounce brandy, 1 teaspoon grenadine, ½ ounce gin, 1 ounce club soda, 1½ ounces orange juice1 maraschino cherry"",""Sweet(5), Sour(2)""" +"BROWN COCKTAIL,""1 ounce dark rum½ ounce dry vermouth, 1 ounce gin"",Strong" +"BURNT EMBERS,""1½ ounces añejo rum, 1 ounce pineapple juice, ½ ounce apricot brandy"",Sweet(3)" +"BUMBO,""2 ounces dark rum, ¼ teaspoon grated, 1 ounce lemon juice, ½ teaspoon grenadine"",""Sweet(1), Sour(1)""" +"BUSHRANGER,""1½ ounces light rum1 dash bitters, ½ ounce Dubonnet 1 lemon twist"",Sour(2)" +"CAIPIRINHA,""2 teaspoons granulated1 lime, cut into 8 wedges, 2½ ounces cachaça, 1½ ounces light rum, 1 ounce orange juice, ½ ounce apricot brandy2 dashes orange bitters, ½ ounce lime juice"",""Sweet(2), Sour(3)""" +"CARDINAL,""1½ ounces añejo rum1 teaspoon Cointreau or, ½ ounce maraschino, 1 teaspoon grenadine"",Strong" +"CASA BLANCA,""1½ ounces light rum, ½ ounce lime juice, ½ ounce Grand Marnier, 1 teaspoon maraschino"",""Sweet(1), Sour(1)""" +"CATHERINE OF SHERIDAN SQUARE,""1½ ounces dark rum4 ounces cold coffee, ½ ounce Tia Maria Crushed ice, 1 ounce light cream"",Milk-based(1)" +"CHARGER,""1½ ounces dark rum, ½ teaspoon superfine, ½ ounce cherry brandy, ½ ounce lemon juice, 1½ ounces light rum, ½ ounce light cream, ½ ounce cherry brandy"",""Sweet(3), Sour(1), Milk-based(1)""" +"CHOCOLATE MINT RUM,""1 ounce dark rum, 2 teaspoons white crème, ½ ounce 151° proof rum, ½ ounce dark crème de ½ ounce light cream"",Milk-based(1)" +"COMMUNICATOR,""1½ ounces dark rum2 teaspoons dark crème, ½ ounce Galliano"",Strong" +"CONTINENTAL,""1½ ounces light rum, 1 teaspoon lemon juice, ½ ounce green crème de½ teaspoon superfine, ½ ounce lime juice"",""Sweet(2), Sour(2)""" +"CORKSCREW,""1½ ounces light rum, ½ ounce dry vermouth, ½ ounce peach schnapps1 lemon twist, 1½ ounces light rum 2 ounces grape fruit juice, ½ ounce gin, 1 teaspoon cherry brandy, ½ ounce Cointreau or1 maraschino cherry"",""Sweet(5), Sour(1)""" +"COSMOS,""1 teaspoon superfine, 2 ounces light rum, 1 ounce lime juice"",""Sweet(1), Sour(1)""" +"CREOLE,""2 ounces light rum, 1 teaspoon lemon juice, 4 ounces beef bouillon1/8 teaspoon salt, 1 dash Tabasco sauce 1/8 teaspoon black pepper, 1 dash Worcestershire 1 lemon wedge"",""Sweet(1), Sour(2)""" +"CUBA LIBRE,""2 ounces light rum1 lime wedge, 5 ounces cola"",""Sweet(1), Sour(1)""" +"CUBAN COCKTAIL,""2 ounces light rum, ½ teaspoon superfine, 2 teaspoons lime juice, 2 teaspoons lemon juice"",""Sweet(2), Sour(2)""" +"DAIQUIRI,"" 1½ ounces light rum1 teaspoon superfine sugar, 1 ounce lime juice"",""Sweet(2), Sour(1)""" +"DAVID BAREFACE,""1½ ounces light rum, 1 ounce heavy cream, ½ ounce white crème de"",Milk-based(1)" +"ELEPHANT LIPS,""1½ ounces dark rum ½ ounce crème de, ½ ounce lemon juice"",""Sweet(1), Sour(1)""" +"EL PRESIDENTE,""2 ounces light rum½ ounce pineapple juice, 1 ounce lime juice 1 teaspoon grenadine"",""Sweet(4), Sour(1)""" +"FELL JUICE,""1 ounce light rum, 1 teaspoon superfine, ½ ounce dark rum, 2 ounces cranberry juice1 egg white, 2 teaspoons lemon juice Crushed ice, 2 teaspoons lime juice"",""Sweet(3), Sour(2)""" +"FLIRTING WITH THE SANDPIPER,""1½ ounces light rum, 3 ounces orange juice, ½ ounce cherry brandy2 dashes orange bitters"",""Sweet(2), Sour(1)""" +"GARETH GLOWWORM,""1½ ounces light rum, 1 ounce heavy cream, ½ ounce white crème de1 teaspoon cherry brandy"",""Sweet(1), Milk-based(1)""" +GROG,2 ounces dark rum3 ounces water,Strong +"HAT TRICK,""½ ounce dark rum ½ ounce sweet vermouth, ½ ounce light rum"",Strong" +"HAVANA COCKTAIL,""1 ounce light rum, 1 teaspoon lemon juice, 1 ounce pineapple juice"",""Sweet(4), Sour(1)""" +"HORSE AND JOCKEY,""1 ounce añejo rum½ ounce sweet vermouth, 1 ounce Southern 2 dashes bitters"",Sour(1)" +"HOWELL SAYS SO,""1½ ounces dark rum ½ ounce amaretto, ½ ounce Cointreau or½ ounce lemon juice, 2 dashes orange bitters"",""Sweet(1), Sour(2)""" +"IMMACULATA,""1½ ounces light rum1 teaspoon lemon juice, ½ ounce amaretto, ½ teaspoon superfine, ½ ounce lime juice"",""Sweet(2), Sour(2)""" +"JONESEY,""2 ounces dark rum, ½ ounce dark crème de"",Strong" +"KRAZEE KEITH,""1½ ounces light rum½ ounce lemon juice, 2 teaspoons anisette 4 ounces cola, 2 teaspoons cherry, 1½ ounces dark rum, 2 ounces pineapple juice, ½ ounce crème de cassis"",""Sweet(6), Sour(1)""" +"LANDED GENTRY,""1½ ounces dark rum1 ounce heavy cream, ½ ounce Tia Maria"",Milk-based(1)" +"LIFETIMER,""1½ ounces light rum, ½ ounce lemon juice, ½ ounce apricot brandy ½ teaspoon superfine, ½ ounce brandy, 1 teaspoon Cointreau or4 ounces club soda"",""Sweet(2), Sour(1)""" +LITTLE PRINCESS COCKTAIL,1½ ounces light rum1 ounce sweet vermouth,Strong +LORD AND LADY,1½ ounces dark rum½ ounce Tia Maria,Strong +"LOVE FOR TOBY,""1½ ounces light rum½ ounce cherry brandy, ½ ounce brandy, 1 teaspoon lime juice"",""Sweet(2), Sour(1)""" +"LUDWIG AND THE GANG,""1 ounce añejo rum1 dash bitters, 1 ounce vodka, ½ ounce amaretto, ½ ounce Southern"",Sour(1)" +"MAESTRO,""1½ ounces añejo rum Crushed ice, ½ ounce cream sherry4 ounces ginger ale, ½ ounce lime juice"",""Sweet(1), Sour(1), Milk-based(1)""" +"MALLELIEU,""1½ ounces light rum, 2 ounces orange juice, ½ ounce Grand Marnier"",Sweet(1)" +"MANDEVILLE,""1 ounce light rum ½ ounce lemon juice, 1 ounce dark rum ½ teaspoon grenadine, 1 teaspoon anisette1 ounce cola"",""Sweet(2), Sour(1)""" +"MARDEE MINE,""1½ ounces dark rum, ½ ounce sweet vermouth"",Strong" +"MARGARET IN THE MARKETPLACE,""2 ounces añejo rum, 1 teaspoon grenadine, 2 teaspoons lime juice, ½ ounce light cream, 2 teaspoons lemon juice"",""Sweet(2), Sour(2), Milk-based(1)""" +"MARY PICKFORD COCKTAIL,""1½ ounces light rum, ½ teaspoon grenadine, 1 ounce pineapple juice1 maraschino cherry, ½ teaspoon maraschino"",Sweet(4)" +"MAX THE SILENT,""1 ounce añejo rum½ ounce applejack, ½ ounce brandy, 1 teaspoon anisette, 1 ounce dark rum, 1 ounce light cream, 1 ounce Cointreau or"",""Sweet(1), Milk-based(1)""" +"MISS BELLE,""1½ ounces dark rum, 2 teaspoons dark crème, ½ ounce Grand Marnier"",Strong" +"MISTER CHRISTIAN,""1½ ounces light rum ½ ounce lemon juice, ½ ounce brandy, ½ ounce lime juice, 1 ounce orange juice1 teaspoon grenadine"",""Sweet(3), Sour(2)""" +"MONKEY WRENCH,""1½ ounces light rum, 1 dash bitters, 3 ounces grapefruit juice"",""Sweet(2), Sour(1)""" +"MOSTLY MAL,""1½ ounces añejo rum ½ teaspoon grenadine, ½ ounce dry vermouth1 maraschino cherry, ½ ounce Cointreau or"",Sweet(1)" +"MOZART,""1½ ounces añejo rum, 2 dashes orange bitters, ½ ounces sweet vermouth1 lemon twist, 1 teaspoon Cointreau or, 1½ ounces dark rum 1/8 teaspoon ground, ½ ounce applejack, ½ ounce lemon juice 1/8 teaspoon grated, ½ teaspoon superfine"",""Sweet(2), Sour(3)""" +"MUMSICLE,""1½ ounces dark rum1 dash bitters, ½ ounce bourbon"",Sour(1)" +"MUTINY,""1½ ounces dark rum2 dashes bitters, ½ ounce Dubonnet 1 maraschino cherry"",""Sweet(1), Sour(1)""" +"NEVADA COCKTAIL,""1½ ounces light rum 1 ounce lime juice, 1½ ounces grapefruit2 teaspoons superfine, 1 dash bitters"",""Sweet(2), Sour(2)""" +"OLYMPIA,""2½ ounces dark rum, ½ ounce lime juice, ½ ounce cherry brandy"",""Sweet(2), Sour(1)""" +"OWEN MOORE,""1½ ounces light rum, 1 ounce heavy cream, ½ ounce white crème de1 teaspoon blue Curaçao"",Milk-based(1)" +"PUFFER,""2 ounces light rum, 2 ounces grapefruit juice, 2 ounces orange juice1 teaspoon grenadine"",Sweet(3)" +"QUARTER DECK,""1 ounce light rum ½ ounce cream sherry, ½ ounce dark rum½ ounce lime juice"",""Sweet(1), Sour(1), Milk-based(1)""" +"QUENTIN,""1½ ounces dark rum1/8 teaspoon grated, ½ ounce Kahlúa, 1 ounce light cream"",Milk-based(1)" +"REDCOAT,""1½ ounces light rum, ½ ounce lime juice, ½ ounce vodka, 1 teaspoon grenadine, ½ ounce apricot brandy"",""Sweet(1), Sour(1)""" +"RUM COBBLER,""1 teaspoon superfine2 ounces dark rum, 3 ounces club soda"",Sweet(1)" +"RUM COLLINS,""2 ounces dark or light3 ounces club soda, 1 ounce lemon juice 1 orange slice, 1 teaspoon superfine"",""Sweet(2), Sour(1)""" +"RUM COOLER,""2 ounces dark or light1 lemon wedge, 4 ounces lemon-lime"",Sour(3)" +"RUM CRUSTA,""1½ ounces dark rum, ½ ounce Cointreau or, Peel of 1 orange, cut into2 teaspoons maraschino, ½ ounce lemon juice"",""Sweet(1), Sour(1)""" +"RUM DAISY,""2 ounces dark rum, ½ teaspoon grenadine, 1 ounce lemon juice 1 maraschino cherry, ½ teaspoon superfine1 orange slice"",""Sweet(2), Sour(1)""" +"RUM FIX,""1 teaspoon superfine2 ounces light or dark, 1 ounce lemon juice 1 maraschino cherry, 2 teaspoons water"",""Sweet(2), Sour(1)""" +"RUM GIMLET,""2 ounces light rum, ½ ounce Rose’s lime juice"",""Sweet(1), Sour(1)""" +"RUM MARTINI,""2½ ounces light rum1 lemon twist or 1, 1½ teaspoons dry"",Sour(1)" +"RUM SOUR,""2 ounces light rum, 1 ounce lemon juice 1 maraschino cherry, ½ teaspoon superfine"",""Sweet(2), Sour(1)""" +"RUM SWIZZLE,""1½ ounces lime juice1 dash bitters, 1 teaspoon superfine Crushed ice, 3 ounces club soda, 2 ounces rum"",""Sweet(2), Sour(2)""" +"SANDRA BUYS A DOG,""1 ounce dark rum, 1 ounce orange juice, 1 ounce añejo rum, 1 dash bitters, 3 ounces cranberry juice, 1½ ounces light rum ½ ounce lime juice, ½ teaspoon grenadine1 orange slice"",""Sweet(3), Sour(2)""" +"SECRET PLACE,""1½ ounces dark rum, 4 ounces cold coffee, ½ ounce cherry brandy Crushed ice, 2 teaspoons dark crème, 1½ ounces light rum, ½ teaspoon grenadine, 1 teaspoon cherry brandy1 egg white, ½ ounce lime juice"",""Sweet(3), Sour(1)""" +"SERPENTINE,""1 ounce light rum, ½ teaspoon superfine, ½ ounce brandy, ½ ounce sweet vermouth1 lemon twist, ½ ounce lemon juice"",""Sweet(1), Sour(2)""" +"SEVILLA COCKTAIL,""1 ounce light rum, ½ teaspoon superfine, ½ ounce tawny port, 2 dashes orange bitters1 egg"",Sour(1)" +"SHANGHAI,""1½ ounces light rum½ ounce lemon juice, ½ ounce anisette, ½ teaspoon grenadine, 1½ ounces light rum, 2 teaspoons sweet, 2 teaspoons brandy, 2 teaspoons Frangelico1 teaspoon grenadine"",""Sweet(1), Sour(1)""" +"SISTER STARSEEKER,""2 ounces light rum, 4 ounces tonic water, 1 ounce lemon juice 1 lemon wedge, 1 teaspoon grenadine"",""Sweet(1), Sour(2)""" +"SITARSKI,""1½ ounces dark rum, 2 ounces grapefruit juice, ½ ounce lime juice, 1 teaspoon superfine, 1 teaspoon lemon juice"",""Sweet(4), Sour(2)""" +"SLEEPY LEMON CLEGG,""1½ ounces dark rum 1 ounce orange juice, ½ ounce crème de, 1 ounce pineapple juice, ½ ounce lemon juice1 lemon wedge"",""Sweet(5), Sour(2)""" +"SLY GOES TO HAVANA,""1½ ounces light rum, 1 ounce pineapple juice, 1 teaspoon white crème½ ounce lime juice, 1 teaspoon green"",""Sweet(4), Sour(1)""" +"SONNY GETS KISSED,""1½ ounces light rum, 2 teaspoons lemon juice, ½ ounce apricot brandy½ teaspoon superfine, 2 teaspoons lime juice"",""Sweet(2), Sour(2)""" +"SON OF ADAM,""1½ ounces light rum, ½ teaspoon superfine, ½ ounce apricot brandy, ½ ounce lemon juice, 1 teaspoon grenadine, 1½ ounces dark rum2 teaspoons lime juice, ½ ounce Kahlúa"",""Sweet(2), Sour(2)""" +"STANLEY SENIOR,""2 ounces light rum, ½ ounce cranberry, 1 ounce grapefruit juice"",Sweet(2)" +"STARSEEKER,""2 ounces light rum, 1 teaspoon grenadine, 1 ounce orange juice4 ounces tonic water, 3 teaspoons superfine1 teaspoon Cointreau or, 1 ounce lemon juice, 1½ ounces light rum, ½ ounce raspberry, Place 2 teaspoons of the sugar in a saucer. Rub the, eau, lemon juice, and remaining 1 teaspoon sugar."",""Sweet(6), Sour(2)""" +"SUE RIDING HIGH,""1½ ounces dark rum, 1 teaspoon heavy cream, ½ ounce dark crème de, 2 ounces hot chocolate,"",""Sweet(1), Milk-based(1)""" +"SUFFRAGETTE CITY,""1½ ounces light rum, ½ ounce lime juice, ½ ounce Grand Marnier½ teaspoon grenadine"",""Sweet(1), Sour(1)""" +"SURREY SLIDER,""1½ ounces añejo rum, 4 ounces orange juice, ½ ounce peach schnapps1 orange slice"",Sweet(2)" +"SUSAN LITTLER,""1 ounce dark rum1 teaspoon Galliano, ½ ounce bourbon 2 ounces orange juice"",Sweet(1)" +"TRIAD,""½ ounce añejo rum, 4 ounces ginger ale, ½ ounce sweet vermouth1 lemon twist, ½ ounce amaretto"",Sour(1)" +"TROUBLE FOR TINA,""1½ ounces añejo rum, 1 ounce heavy cream, ½ ounce dark crème de ¼ teaspoon ground, ½ ounce white crème de, 2 ounces brewed coffee,"",Milk-based(1)" +VETERAN,2 ounces dark rum½ ounce cherry brandy,Sweet(1) +"VICIOUS SID,""1½ ounces light rum 1 ounce lemon juice, ½ ounce Southern, 1 dash bitters, ½ ounce Cointreau or, 1½ ounces light rum, 1 teaspoon superfine, ½ ounce sweet vermouth, ½ ounce tawny port, 1 ounce lemon juice"",""Sweet(2), Sour(3)""" +"AFFINITY,""1½ ounces Scotch, 1 ounce dry vermouth, 1 ounce sweet vermouth2 dashes orange bitters"",Sour(1)" +"BALMORAL,""1½ ounces Scotch, ½ ounce sweet vermouth, ½ ounce dry vermouth, 2 dashes bitters"",Sour(1)" +"BLACK JACK,""1½ ounces Scotch, ½ ounce lemon juice, 1 ounce Kahlúa, ½ ounce Cointreau or"",""Sweet(1), Sour(1)""" +"BLIMEY,""2 ounces Scotch, ½ teaspoon superfine, ½ ounce lime juice"",""Sweet(1), Sour(1)""" +"BLINDER,""2 ounces Scotch, 1 teaspoon grenadine, 5 ounces grapefruit juice, 2 ounces Scotch, 1 teaspoon sweet, ½ ounce Bénédictine"",Sweet(2)" +"CALEIGH,""1½ ounces Scotch, ½ ounce white crème de, ½ ounce blue Curaçao"",Strong" +"CELTIC MIX COCKTAIL,""1½ ounces Scotch, ½ ounce lemon juice, 1 ounce Irish whiskey1 dash bitters, 2 ounces Scotch, 2 dashes bitters, 2 teaspoons Pernod"",""Sweet(1), Sour(3)""" +"DICKIE WARD,""2 ounces Scotch4 ounces ginger ale, 1 dash bitters"",Sour(1)" +"DRY ROB ROY,""2½ ounces Scotch1 lemon twist, 1½ teaspoons dry"",Sour(1)" +"FANCY SCOTCH,""2 ounces Scotch, 2 dashes bitters, ½ teaspoon Cointreau or1 lemon twist, ¼ teaspoon superfine"",Sour(2)" +"GODFATHER,""1½ ounces Scotch½ ounce amaretto, 2 ounces Scotch, 3 ounces club soda, ½ ounce peppermint1 lemon twist"",""Sweet(1), Sour(1)""" +"HIGHLAND FLING,""2 ounces Scotch, 2 dashes orange bitters, ½ ounce sweet vermouth1 maraschino cherry"",""Sweet(1), Sour(1)""" +"HIGHLAND SLING,""1 teaspoon superfine1 ounce lemon juice, 2 ounces Scotch, 2 teaspoons water"",""Sweet(1), Sour(1)""" +"HOOTS MON,""1½ ounces Scotch½ ounce sweet vermouth, ½ ounce Lillet"",Strong" +"ITALIAN HEATHER,""1½ ounces ScotchCrushed ice, 1 ounce Galliano 1 lime wedge"",Sour(1)" +"JAMES THE SECOND COMES FIRST,""2 ounces Scotch, ½ ounce dry vermouth, ½ ounce tawny port1 dash bitters"",Sour(1)" +"JOCK COLLINS,""2 ounces Scotch, 3 ounces club soda, 1 ounce lemon juice 1 maraschino cherry, 1 teaspoon superfine1 orange slice"",""Sweet(3), Sour(1)""" +"LOCH LOMOND,""2 ounces Scotch, ½ ounce dry vermouth, ½ ounce Drambuie1 lemon twist"",Sour(1)" +"MA BONNIE WEE HEN,""1½ ounces Scotch, ½ ounce lemon juice, ½ ounce cream sherry1 teaspoon grenadine, ½ ounce orange juice"",""Sweet(2), Sour(1), Milk-based(1)""" +"MAN OF THE MOMENT,""1½ ounces Scotch, 1 ounce lemon juice, 1 ounce Grand Marnier1 teaspoon grenadine"",""Sweet(1), Sour(1)""" +"MA WEE HEN,""1½ ounces Scotch, ½ ounce lemon juice, ½ ounce dry sherry, 1 teaspoon grenadine, ½ ounce orange juice, 1½ ounces Scotch, 2 dashes bitters, ½ ounce Cointreau or1 orange slice, 1 ounce Scotch, 1 ounce grapefruit juice, 1 ounce dry vermouth"",""Sweet(4), Sour(2)""" +"MITHERING BASTARD,""1½ ounces Scotch, 1 ounce orange juice, ½ ounce Cointreau or"",Sweet(1)" +"MODERN COCKTAIL,""1½ ounces Scotch, ½ teaspoon lemon juice, 1 teaspoon dark rum2 dashes orange bitters, ½ teaspoon Pernod"",""Sweet(1), Sour(2)""" +"PERFECT ROB ROY,""2½ ounces Scotch1 teaspoon dry vermouth, 1 teaspoon sweet 1 maraschino cherry or 1"",Sweet(1)" +"PIPER AT THE GATES OF DAWN,""1½ ounces Scotch, 1 ounce heavy cream, 1 ounce Kahlúa, ½ ounce maraschino, carefully over the back of a teaspoon so that it floats"",Milk-based(1)" +"PIPER AT ARMS,""1½ ounces Scotch, 1 ounce dry vermouth"",Strong" +"ROB ROY,""2½ ounces Scotch, 1½ teaspoons sweet, 1½ ounces Scotch 1 lemon twist, ½ ounce Drambuie"",Sour(1)" +SCOTCH AND WATER,2 ounces Scotch5 ounces water,Strong +"SCOTCH COBBLER,""1 teaspoon superfine2 ounces Scotch, 3 ounces club soda"",Sweet(1)" +"SCOTCH COOLER,""2 ounces blended Scotch1 lemon wedge, 4 ounces lemon-lime"",Sour(3)" +"SCOTCH DAISY,""2 ounces Scotch, ½ teaspoon grenadine, 1 ounce lemon juice 1 maraschino cherry, ½ teaspoon superfine1 orange slice, 1 teaspoon superfineCrushed ice, 2 ounces Scotch, 1 ounce lemon juice 1 maraschino cherry, 2 teaspoons water"",""Sweet(4), Sour(2)""" +"SCOTCH FLIP,""2 ounces Scotch, ½ ounce light cream, 1/8 teaspoon grated, 1 teaspoon superfine, 2½ ounces Scotch1 lemon twist"",""Sour(1), Milk-based(1)""" +"SCOTCH SANGAREE,""1 teaspoon superfine ½ ounce tawny port, 2 teaspoons water, 1/8 teaspoon grated, 1½ ounces Scotch, 1/8 teaspoon ground, 2½ ounces club soda"",Sweet(1)" +"SCOTCH SOUR,""2 ounces Scotch, 1 ounce lemon juice 1 maraschino cherry, ½ teaspoon superfine, 1½ ounces Scotch, 1 ounce lemon juice, ½ ounce Cointreau or1 teaspoon grenadine, 1 teaspoon egg white"",""Sweet(3), Sour(2)""" +"TARTAN SWIZZLE,""1½ ounces lime juice1 dash bitters, 1 teaspoon superfine Crushed ice, 3 ounces club soda, 2 ounces Scotch, 1½ ounces Scotch, ½ ounce Bénédictine, 1 ounce sweet vermouth1 lemon twist"",""Sweet(2), Sour(3)""" +"THRILLER,""1½ ounces Scotch, 1 ounce orange juice, 1 ounce green ginger"",Sweet(1)" +"TO HELL WITH SWORDS AND +GARTERS,""1½ ounces Scotch, 1½ ounces pineapple, 1 ounce dry vermouth"",Sweet(2)" +"WHISKY MAC,""1½ ounces Scotch, 1 ounce green ginger"",Strong" +"ALLELUIA,""1½ ounces tequila, ½ teaspoon superfine, 1 teaspoon blue Curaçao, 1 teaspoon maraschino, 4 ounces tonic water, ½ ounce lemon juice"",""Sweet(1), Sour(1)""" +"BLOODY MARIA,""2½ ounces tequila, 1/8 teaspoon black pepper, 5 ounces tomato juice1/8 teaspoon celery salt, ½ ounce lemon juice 1 dash Tabasco sauce, 2 teaspoons coarse salt1½ teaspoons Cointreau, 1½ ounces tequila, 1½ ounces lime juice, ½ ounce blue Curaçao"",""Sweet(3), Sour(2)""" +"BORDER CROSSING,""1½ ounces tequila, 4 ounces cola, 2 teaspoons lime juice 1 lime wedge, 1 teaspoon lemon juice, 2 ounces tequila1 ounce Kahlúa"",""Sweet(3), Sour(3)""" +"CACTUS BITE,""2 ounces tequila, 2 ounces lemon juice, 2 teaspoons Cointreau or½ teaspoon superfine, 2 teaspoons Drambuie, 1 dash bitters"",""Sweet(1), Sour(2)""" +"CALIFORNIA DREAM,""2 ounces tequila, ½ ounce dry vermouth, 1 ounce sweet vermouth1 maraschino cherry"",Sweet(1)" +"COMPADRE,""1½ ounces tequila, 1 teaspoon grenadine, ½ teaspoon maraschino2 dashes orange bitters"",Sour(1)" +"DARING DYLAN,""2 ounces tequila, 1 ounce Kahlúa, 4 ounces Mexican hot"",Strong" +"DOCTOR DAWSON,""2 ounces tequila, 1 dash bitters, ½ ounce lemon juice1 egg, 1 teaspoon superfine 3 ounces club soda"",""Sweet(2), Sour(2)""" +"DORALTO,""1½ ounces tequila, 1 dash bitters, ½ ounce lemon juice 4 ounces tonic water, ½ teaspoon superfine1 lime wedge"",""Sweet(1), Sour(3)""" +"DOWNSIDER,""1½ ounces tequila ½ ounce light cream, ½ ounce crème de1 teaspoon lemon juice, 1 dash bitters, ½ ounce Galliano 1 teaspoon grenadine"",""Sweet(1), Sour(2), Milk-based(1)""" +"EXECUTIVE SUNRISE,""1½ ounces gold tequila 2 teaspoons crème de, 4 ounces freshly"",Strong" +"FREDDY FUDPUCKER,""2 ounces tequila, ½ ounce Galliano, 4 ounces orange juice, and carefully over the back of a teaspoon, float the"",Sweet(1)" +"FROZEN MARGARITA,""2 teaspoons coarse salt2 ounces lime juice, 3 ounces white tequila, 1 ounce Cointreau or"",""Sweet(1), Sour(1)""" +"GATES OF HELL,""1½ ounces tequila, 2 teaspoons lemon juice1 teaspoon cherry brandy, 2 teaspoons lime juice"",""Sweet(3), Sour(2)""" +"GENTLE BEN,""1½ ounces tequila½ ounce gin, ½ ounce vodka, 4 ounces orange juice"",Sweet(1)" +"GOLD MARGARITA,""2 teaspoons coarse salt½ ounce Cointreau, 1½ ounces lime juice, 2 ounces gold tequila"",""Sweet(1), Sour(1)""" +"HOT PANTS,""2 teaspoons salt, ½ ounce grapefruit juice, ½ teaspoon superfine, 2 ounces tequila, ½ ounce peppermint"",Sweet(2)" +"JOUMBABA,""1½ ounces tequila, 3 ounces tonic water, 2 ounces grapefruit juice"",Sweet(2)" +"JUAN BLUE,""1½ ounces tequila, ½ ounce lemon juice, 2 ounces orange juice, 1 dash bitters, 1 ounce grapefruit juice2 teaspoons blue Curaçao, carefully over the back of a teaspoon, float the Cur-"",""Sweet(4), Sour(2)""" +"JUBILEE,""1 ounce tequila, ½ teaspoon superfine, ½ ounce gin, ½ ounce vodka, 4 ounces club soda, ½ ounce blue Curaçao1 maraschino cherry, ½ ounce lemon juice"",""Sweet(3), Sour(1)""" +"JUMPING BEAN,""1½ ounces tequila 3 coffee beans, ½ ounce Sambuca"",Strong" +"LEAPFROG,""1½ ounces tequila1 teaspoon sweet, ½ ounce sloe gin, 2 teaspoons coarse salt½ ounce Cointreau or, 2 ounces tequila, 1½ ounces lime juice"",""Sweet(1), Sour(1)""" +"MASSACRE,""2 ounces tequila, 4 ounces ginger ale, 1 teaspoon Campari"",Strong" +"MEXICANA,""2 ounces tequila, 1 ounce pineapple juice, ½ ounce lemon juice1 teaspoon grenadine"",""Sweet(4), Sour(1)""" +"MOONRAKER,""1½ ounces tequila, ½ ounce blue Curaçao, 4 ounces pineapple juice"",Sweet(3)" +"PEACH MARGARITA,""2 teaspoons coarse salt1½ teaspoons Contreau, 1½ ounces tequila, 1½ ounces lime juice, ½ ounce peach liqueur"",""Sweet(2), Sour(1)""" +PINK PARADISE,2 ounces tequila3 dashes bitters,Sour(1) +"PIPER,""2 ounces tequila, 4 ounces strong coffee,, ½ ounce lemon juice, ½ ounce dark crème de"",""Sweet(1), Sour(1)""" +"POKER FACE,""1½ ounces tequila, 4 ounces pineapple juice, ½ ounce Cointreau or1 lime wedge"",""Sweet(3), Sour(1)""" +"RED FACE,""1½ ounces tequila, 4 ounces cranberry juice, 1 teaspoon cranberry1 lime wedge"",""Sweet(1), Sour(1)""" +"ROSITA,""1½ ounces tequila, 1 dash bitters, 1 ounce Campari, ½ ounce sweet vermouth1 lemon twist, ½ ounce dry vermouth"",Sour(2)" +SCOTTIE WAS BEAMED UP,2 ounces tequila½ ounce Galliano,Strong +"SHADY LADY,""1½ ounces tequila, 5 ounces grapefruit juice, ½ ounce melon liqueur"",Sweet(3)" +"SHAKER,""1½ ounces tequila, ½ ounce lemon juice, 3 ounces pineapple juice½ teaspoon grenadine, 1½ ounces tequila, 1 ounce heavy cream, ½ ounce dark crème de½ teaspoon Chambord"",""Sweet(4), Sour(1), Milk-based(1)""" +"SMILER,""1½ ounces tequila, 2 teaspoons ruby port, ½ ounce lemon juice 1 maraschino cherry, ½ teaspoon superfine"",""Sweet(2), Sour(1)""" +"STRAWBERRY MARGARITA,""2 teaspoons coarse salt1½ teaspoons Cointreau, 1½ ounces tequila, 1½ ounces lime juice, ½ ounce strawberry, 2 ounces tequila, 3 ounces club soda, 1 ounce lemon juice 1 maraschino cherry, 1 teaspoon superfine1 orange slice"",""Sweet(5), Sour(2)""" +"TEQUILA COOLER,""2 ounces tequila, 4 ounces lemon-lime, 1½ ounces tequila1 pinch salt"",Sour(2)" +"TEQUILA FIZZ,""2½ ounces tequila, 4 ounces club soda, 1 ounce lemon juice, 1 teaspoon superfine"",""Sweet(2), Sour(1)""" +"TEQUILA GIMLET,""2 ounces tequila, ½ ounce Rose’s lime juice"",""Sweet(1), Sour(1)""" +"TEQUILA MARTINI,""2½ ounces tequila1 lemon twist or 1, 1½ teaspoons dry"",Sour(1)" +"TEQUILA MOCKINGBIRD,""2 ounces tequila, ½ ounce lemon juice, 1 teaspoon white crème"",""Sweet(1), Sour(1)""" +"TEQUILA MOONRISE,""3 ounces tequila, ½ ounce lemon juice, 1 ounce light rum, 1 teaspoon sugar, 1 ounce dark rum, 2 ounces ale, ½ ounce Rose’s lime juice"",""Sweet(3), Sour(2)""" +"TEQUILA SOUR,""2 ounces tequila, 1 ounce lemon juice 1 maraschino cherry, ½ teaspoon superfine"",""Sweet(2), Sour(1)""" +"TEQUILA STINGER,""2 ounces tequila, ½ ounce white crème de"",Strong" +"TEQUILA SUAVE,""1½ ounces tequila, 1 teaspoon grenadine, ½ ounce lemon juice, 1 dash bitters, 1 teaspoon white crème1 orange slice"",""Sweet(1), Sour(2)""" +"TEQUILA SUNRISE,""1½ ounces tequila, 2 teaspoons grenadine, 4 ounces orange juice"",Sweet(1)" +"TIME KILLER,""1½ ounces tequila, ½ teaspoon salt, 5 ounces Mexican beer1 lemon wedge"",Sour(1)" +"TOREADOR,""2 ounces tequila, 1 ounce heavy cream, 1 ounce dark crème de¼ teaspoon unsweetened, 2 teaspoons superfine2 ounces tequila, 1 ounce lime juice, 1 teaspoon lemon juice"",""Sweet(2), Sour(2), Milk-based(1)""" +ABERFOYLE,1½ ounces vodka1 ounce Drambuie,Strong +"AQUEDUCT,""1½ ounces vodka 1 teaspoon lime juice, 1 teaspoon white 1 teaspoon lemon juice, 1 teaspoon apricot"",""Sweet(2), Sour(2)""" +BLACK EYE,1½ ounces vodka½ ounce blackberry,Strong +"BLACK RUSSIAN,""1½ ounces vodka½ ounce Kahlúa, 2½ ounces vodka, 1 dash Worcestershire, 3 ounces tomato juice, 2 ounces beef bouillon, 1 dash Tabasco sauce, ½ ounce lemon juice, 1/8 teaspoon black pepper"",""Sweet(2), Sour(1)""" +"BLOODY MARY,""2½ ounces vodka, 3 dashes Worcestershire, 5 ounces tomato juice, ½ ounce lemon juice, 1 dash Tabasco sauce, 1/8 teaspoon black pepper1 celery rib, 1/8 teaspoon salt, 1/8 teaspoon celery seed"",""Sweet(2), Sour(1)""" +BLUEBEARD,1½ ounces vodka½ ounce blueberry,Sweet(1) +"BLUE LAGOON,""1½ ounces vodka, ½ ounce blue Curaçao1 orange slice, 4 ounces lemonade"",Sour(1)" +"BLUE MONDAY,""1 ounce vodka, ½ ounce blue Curaçao, ½ ounce Cointreau or"",Strong" +"BRAZEN HUSSY,""1 ounce vodka, ½ ounce lemon juice, 1 ounce Cointreau or"",""Sweet(1), Sour(1)""" +"BULLFROG,""2 ounces vodka, 4 ounces lemonade, 1 teaspoon Cointreau or1 lemon wedge"",Sour(2)" +"BULLSHOT,""2½ ounces vodka, 1 dash Tabasco sauce, 5 ounces beef bouillon, 1/8 teaspoon black pepper, 1 dash Worcestershire"",Strong" +"CAPE CODDER,""2 ounces vodka, 5 ounces cranberry juice"",Sweet(1)" +"CHERRY RIPE,""1½ ounces vodka, ½ ounce brandy, ½ ounce cherry brandy1 maraschino cherry"",Sweet(2)" +"CLAMATO COCKTAIL,""2½ ounces vodka, 1 dash Worcestershire, 3 ounces tomato juice, 2 ounces clam juice, 1 dash Tabasco sauce, 1/8 teaspoon black pepper1 lemon wedge"",""Sweet(2), Sour(1)""" +"CZARINE,""1 ounce vodka, ½ ounce apricot brandy, ½ ounce dry vermouth1 dash bitters"",Sour(1)" +"DEANNE,""1 ounce vodka, ½ ounce sweet vermouth, ½ ounce Cointreau or"",Strong" +"DESERT SHIELD,""1½ ounces vodka 4 ounces cranberry juice, ½ ounce cranberry"",Sweet(1)" +"DUSTY DOG,""2 ounces vodka, 1 dash bitters, ½ ounce crème de cassis5 ounces ginger ale, 1 teaspoon lemon juice 1 lemon twist"",""Sweet(1), Sour(3)""" +"EXTERMINATOR,""2½ ounces vodka½ ounce fino sherry, 1½ ounces pepper vodka1 teaspoon dry vermouth"",Strong" +"FIREFLY,""2 ounces vodka, 1 teaspoon grenadine, 4 ounces grapefruit juice"",Sweet(2)" +"FOGGY AFTERNOON,""1 ounce vodka, 1 teaspoon crème de, ½ ounce apricot brandy, ½ ounce Cointreau or, 1 teaspoon lemon juice"",""Sweet(1), Sour(1)""" +"FRIGHTLEBERRY MURZENQUEST,""1 ounce vodka, 1 teaspoon maraschino, ½ ounce Galliano, ½ ounce Cointreau or1 dash bitters, ½ ounce lime juice"",""Sweet(1), Sour(2)""" +"FUZZY NAVEL,""1 ounce vodka, 4 ounces orange juice, 1 ounce peach schnapps, 1½ ounces vodka, ½ ounce Galliano, ½ ounce dry vermouth½ ounce blue Curaçao"",Sweet(2)" +"GALWAY GREY,""1 ounce vodka, 1 ounce lime juice, ½ ounce white crème de1 ounce light cream, ½ ounce Cointreau or"",""Sweet(1), Sour(1), Milk-based(1)""" +"GLACIER MINT,""1½ ounces vodka, ½ ounce green crème de, ½ ounce lemon-flavored"",Sour(1)" +"GLASNOST,""2 ounces vodka, ½ ounce peppermint"",Strong" +GODMOTHER,1½ ounces vodka½ ounce amaretto,Strong +"GORKY PARK,""1½ ounces vodka, 1 ounce lemon juice, ½ ounce cherry brandy1 maraschino cherry"",""Sweet(3), Sour(1)""" +"GREEN MIRAGE,""1 ounce vodka, 1 teaspoon blue Curaçao, ½ ounce Galliano, 2 teaspoons dry"",Strong" +"GREYHOUND,""2 ounces vodka5 ounces grapefruit juice, 1½ ounces vodka, ½ ounce Galliano, 4 ounces orange juice"",Sweet(3)" +"HER NAME IN LIGHTS,""1 ounce vodka, 2 teaspoons blue Curaçao, ½ ounce yellow, ½ ounce lemon juice, 2 teaspoons Galliano"",""Sweet(1), Sour(1)""" +"IDONIS,""2 ounces vodka, 1 ounce pineapple juice, ½ ounce apricot brandy"",Sweet(3)" +"JACKATH,""1 ounce vodka, 1 teaspoon Cointreau or, 2 teaspoons brandy, 1 teaspoon crème de cassis2 dashes orange bitters, 1½ ounces vodka, ¼ teaspoon superfine, 2 teaspoons kümmel, 1 teaspoon lime juice, 1 teaspoon lemon juice"",""Sweet(2), Sour(3)""" +KAMIKAZE,2 ounces Stolichnaya1 teaspoon Rose’s lime,Sour(1) +"KANGAROO COCKTAIL,""2 ounces vodka, 1 ounce dry vermouth"",Strong" +"KAROFF,""1½ ounces vodka, 5 ounces club soda, 1 ounce cranberry juice1 lime wedge"",""Sweet(2), Sour(1)""" +"KRETCHMA COCKTAIL,""1 ounce vodka, ½ ounce lemon juice, ½ ounce white crème de1 dash grenadine"",""Sweet(1), Sour(1)""" +"LAUGHING AT THE WAVES,""1½ ounces vodka, ½ ounce Campari, ½ ounce dry vermouth1 lemon twist"",Sour(1)" +"LONG ISLAND ICED TEA,""1 ounce vodka, 1 ounce lemon juice, 1 ounce gin, 1 teaspoon superfine, 1 ounce light rum, 1 ounce tequila, 4 ounces cola"",""Sweet(2), Sour(1)""" +"MADRAS,""1½ ounces vodka, 2 ounces orange juice, 2 ounces cranberry juice"",Sweet(2)" +"MAJOR TOM,""1½ ounces vodka, ½ ounce kirsch, ½ ounce Cointreau or½ ounce grapefruit juice, 2 ounces vodka 1 cucumber rind sliver, ½ teaspoon saké"",Sweet(2)" +"MAZRICK,""1½ ounces vodka, 2 teaspoons Galliano, ½ ounce amaretto, 1 ounce orange juice, ½ ounce Cointreau or1 ounce pineapple juice, 2 dashes bitters"",""Sweet(4), Sour(1)""" +"MORNING GLORY,""1½ ounces vodka, 2 ounces light cream, ½ ounce dark crème de¼ teaspoon grated"",Milk-based(1)" +"MOSCOW MULE,""1½ ounces vodka 4 ounces ginger beer, 1 ounce lime juice1 lime wedge"",""Sweet(1), Sour(2)""" +"NINOTCHKA COCKTAIL,""2 ounces vodka, ½ ounce lemon juice, ½ ounce white crème de, 1 ounce vodka, 2 ounces orange juice, ½ ounce Campari1 egg white"",""Sweet(2), Sour(1)""" +"OUR STANLEY,""1½ ounces vodka½ ounce Cointreau or, ½ ounce gin"",Strong" +"OWDHAM EDGE,""1 ounce vodka, 2 teaspoons Sambuca, ½ ounce white crème de1 ounce light cream"",Milk-based(1)" +"PIECE OF MIND,""1½ ounces vodka1 lemon twist, 1 ounce kümmel"",Sour(1)" +"PRETTY THING,""1½ ounces vodka ½ ounce coconut cream, ½ ounce amaretto½ ounce heavy cream"",Milk-based(2)" +"PURPLE HAZE,""½ ounce Chambord1 ounce lemon-lime soda, 1½ ounces lemon-"",""Sweet(1), Sour(3)""" +"PURPLE PASSION,""2 ounces vodka, 2 teaspoons superfine, 2 ounces grape juice, 2 ounces grapefruit juice"",Sweet(4)" +"QUIET BUT QUICK,""1½ ounces vodka, 1 ounce orange juice, ½ ounce cherry brandy1 dash orange bitters"",""Sweet(2), Sour(1)""" +"RUSSIAN COCKTAIL,""1 ounce vodka, ½ ounce gin, ½ ounce white crème de"",Strong" +RUSSIAN KAMIKAZE,2 ounces vodka1 teaspoon Chambord,Strong +"SALTY DOG,""2 teaspoons salt2 ounces vodka, 5 ounces grapefruit juice"",Sweet(2)" +"SARAH,""1 ounce vodka, 1 teaspoon Campari, ½ ounce cherry brandy1 teaspoon crème de, ½ ounce dry vermouth, 2 ounces vodka5 ounces orange juice"",Sweet(2)" +"SEA BREEZE,""1½ ounces vodka, 3 ounces cranberry juice, 2 ounce grapefruit juice1 lime wedge"",""Sweet(3), Sour(1)""" +"SEX ON THE BEACH,""1 ounce vodka, 2 ounces orange juice, 1 ounce peach schnapps2 ounces cranberry juice"",Sweet(3)" +"SILVER SUNSET,""1½ ounces vodka, 2 ounces orange juice, ½ ounce apricot brandy1 egg white, ½ ounce Campari, ½ ounce lemon juice"",""Sweet(2), Sour(1)""" +"SLOW COMFORTABLE SCREW,""1½ ounces vodka 4 ounces orange juice, ½ ounce sloe gin, ½ ounce Southern"",Sweet(1)" +"SPYMASTER,""1½ ounces vodka ½ ounce lemon juice, ½ ounce crème de1 egg white"",""Sweet(1), Sour(1)""" +"VODKA AND BITTER LEMON,""1½ ounces vodka, 4 ounces tonic water, ½ ounce lemon juice, ½ teaspoon superfine"",""Sweet(1), Sour(1)""" +"VODKA COLLINS,""2 ounces vodka, 3 ounces club soda, 1 ounce lemon juice 1 maraschino cherry, 1 teaspoons superfine1 orange slice"",""Sweet(3), Sour(1)""" +"VODKA COOLER,""2 ounces vodka, 4 ounces lemon-lime soda"",""Sweet(1), Sour(2)""" +"VODKA DAISY,""2 ounces vodka, ½ teaspoon grenadine, 1 ounce lemon juice 1 maraschino cherry, ½ teaspoon superfine1 orange slice, 1 teaspoon dry sherry1 lemon twist, 1½ ounces vodka"",""Sweet(2), Sour(2)""" +"VODKA GIMLET,""2 ounces vodka, ½ ounce Rose’s lime juice"",""Sweet(1), Sour(1)""" +"VODKA MARTINI,""2½ ounces vodka 1 lemon twist or 1, 1½ teaspoons dry"",Sour(1)" +"VODKA SLING,""1 teaspoon superfine1 ounce lemon juice, 2 ounces vodka, 2 teaspoons water"",""Sweet(1), Sour(1)""" +"VODKA SOUR,""2 ounces vodka, 1 ounce lemon juice 1 maraschino cherry, ½ teaspoon superfine"",""Sweet(2), Sour(1)""" +"VODKA SWIZZLE,""1½ ounces lime juice1 dash bitters, 1 teaspoon superfine Crushed ice, 3 ounces club soda, 2 ounces vodka"",""Sweet(2), Sour(2)""" +"WHITE RUSSIAN,""1½ ounces vodka1 ounce light cream, 1 ounce Kahlúa, 1½ ounces vodka, ½ ounce white crème de"",Milk-based(1)" +"WINDEX,""2½ ounces vodka, ½ ounce blue Curaçao, ½ ounce Cointreau or"",Strong" +"WITCH OF VENICE,""1½ ounces vodka, 1 ounce orange juice, ½ ounce Strega, 2 teaspoons crème de"",Sweet(1)" +"WOO WOO,""1½ ounces vodka, 4 ounces cranberry juice, ½ ounce peach schnapps"",Sweet(2)" +"AMERICAN BEAUTY,""1 ounce brandy, 1 ounce orange juice, ½ ounce dry vermouth 1 teaspoon grenadine, ¼ teaspoon white crème½ ounce tawny port, 1½ ounces brandy1 egg white, 1 ounce anisette"",Sweet(1)" +"BENGAL,""1½ ounces brandy, 1 ounce pineapple juice, ½ ounce maraschino 2 dashes bitters, ½ ounce Cointreau or"",""Sweet(3), Sour(1)""" +"BETWEEN THE SHEETS,""1 ounce brandy, 1 ounce lemon juice, 1 ounce light rum, 1 ounce Cointreau or"",""Sweet(1), Sour(1)""" +"BLACK BALTIMORE,""2 ounces brandy, 1 ounce black Sambuca"",Strong" +"BLACK PAGODA,""1½ ounces brandy, 2 teaspoons Cointreau or, ½ ounce sweet vermouth, ½ ounce dry vermouth"",Strong" +"BOSOM CARESSER,""½ ounce Cointreau or, 1½ ounces brandy, 1 ounce Madeira, 1 ounce lemon juice, 2 ounces brandy, 1 teaspoon superfine, ½ ounce Cointreau or"",""Sweet(1), Sour(1)""" +BRANDY AND SODA,2 ounces brandy5 ounces club soda,Sweet(1) +"BRANDY ALEXANDER,""1½ ounces brandy, 1 ounce half-and-half, 1 ounce dark crème de¼ teaspoon grated"",Milk-based(1)" +"BRANDY BLAZER,""1 teaspoon granulated1 slice orange, 2 ounces brandy, ½ ounce Cointreau or, 2 teaspoons maraschino, 1½ ounces brandy, ½ ounce lemon juice"",""Sweet(1), Sour(1)""" +"BRANDY COBBLER,""1 teaspoon superfine2 ounces brandy, 3 ounces club soda"",Sweet(1)" +"BRANDY COLLINS,""2 ounces brandy, 3 ounces club soda, 1 ounce lemon juice 1 maraschino cherry, 1 teaspoon superfine1 orange slice"",""Sweet(3), Sour(1)""" +"BRANDY COOLER,""2 ounces brandy, 4 ounces lemon-lime, 1½ ounces brandy, ½ ounce Cointreau or, Peel of 1 orange, cut into2 teaspoons maraschino, ½ ounce lemon juice"",""Sweet(1), Sour(3)""" +"BRANDY DAISY,""2 ounces brandy, ½ teaspoon grenadine, 1 ounce lemon juice 1 maraschino cherry, ½ teaspoon superfine1 orange slice"",""Sweet(2), Sour(1)""" +"BRANDY FIX,""1 teaspoon superfineCrushed ice, 2 ounces brandy, 1 ounce lemon juice 1 maraschino cherry, 2 teaspoons water"",""Sweet(2), Sour(1)""" +"BRANDY FIZZ,""2½ ounces brandy, 4 ounces club soda, 1 ounce lemon juice, 1 teaspoon superfine"",""Sweet(2), Sour(1)""" +"BRANDY FLIP,""2 ounces brandy, ½ ounce light cream, 1/8 teaspoon grated, 1 teaspoon superfine"",Milk-based(1)" +"BRANDY SANGAREE,""1 teaspoon superfine ½ ounce tawny port, 2 teaspoons water, 1/8 teaspoon grated, 1½ ounces brandy, 1/8 teaspoon ground, 2½ ounces club soda"",Sweet(1)" +"BRANDY SLING,""1 teaspoon superfine1 ounce lemon juice, 2 ounces brandy, 2 teaspoons water"",""Sweet(1), Sour(1)""" +"BRANDY SMASH,""2½ ounces brandy, 1 teaspoon superfine1 orange slice, 1 ounce club soda"",Sweet(1)" +"BRANDY SOUR,""2 ounces brandy, 1 ounce lemon juice 1 maraschino cherry, ½ teaspoon superfine"",""Sweet(2), Sour(1)""" +"BRANDY SWIZZLE,""1½ ounces lime juice1 dash bitters, 1 teaspoon superfine Crushed ice, 3 ounces club soda, 2 ounces brandy"",""Sweet(2), Sour(2)""" +"CHAMPS ELYSEES,""2 ounces brandy, ½ teaspoon superfine, ½ ounce yellow, 2 dashes bitters, ½ ounce lemon juice"",""Sweet(1), Sour(2)""" +"CHARLES COCKTAIL,""2 ounces brandy, 2 dashes bitters, ½ ounce sweet vermouth"",Sour(1)" +"CITY SLICKER,""2 ounces brandy, ½ ounce Cointreau or"",Strong" +"COMFORTING TIGER,""1 teaspoon sweet, 2 ounces brandy, ½ ounce Southern1 lemon twist, 1½ ounces brandy, 1 ounce white crème de, ½ ounce Fernet Branca"",Sour(1)" +"DANCE WITH A DREAM COCKTAIL,""2 ounces brandy, 1 teaspoon anisette, ½ ounce Cointreau or"",Strong" +"FANCY BRANDY,""2 ounces brandy, 2 dashes bitters, ½ teaspoon Cointreau or1 lemon twist, ¼ teaspoon superfine"",Sour(2)" +"JAPANESE,""2 ounces brandy, 1 dash bitters, 1 teaspoon orgeat syrup1 lime twist, ½ ounce lime juice, brandy, orgeat syrup, lime juice, and bitters. Shake"",""Sweet(4), Sour(5)""" +"LA JOLLA,""2 ounces brandy, 1 teaspoon orange juice, ½ ounce crème de½ ounce lemon juice"",""Sweet(2), Sour(1)""" +"METROPOLITAN,""½ ounce sweet vermouth, 1 teaspon superfine sugar1 dash bitters, 2 ounces brandy"",""Sweet(1), Sour(1)""" +"MIKADO,""1½ ounces brandy, 1 teaspoon grenadine, ½ ounce Cointreau or1 dash bitters, 1 teaspoon crème de"",Sour(1)" +"SIDECAR,""2 ounces brandy, 1 ounce lemon juice, ½ ounce Cointreau or"",""Sweet(1), Sour(1)""" +"SOUTHERN BELLE,""½ ounce brandy, ½ ounce Bènèdictine, ½ ounce white crème de"",Strong" +"STINGER,""2 ounces brandy, ½ ounce white crème de"",Strong" +"ALGONQUIN,""1½ ounces blended½ ounce dry vermouth, 1 ounce pineapple juice"",Sweet(3)" +AVRIL,2 ounces Canadian½ ounce cranberry,Strong +"BANFF COCKTAIL,""1½ ounces Canadian, ½ ounce kirsch, 1 dash bitters, ½ ounce Grand Marnier1 lemon twist"",Sour(2)" +"BARNSTQRMER,""1½ ounces Canadian, 1 teaspoon white crème, ½ ounce peppermint, ½ ounce lemon juice, 1 teaspoon dark crème de"",""Sweet(1), Sour(1)""" +"BAY HORSE,""1½ ounces blended, 1 ounce heavy cream, ¼ teaspoon grated, ½ ounce Pernod, ½ ounce dark crème de"",Milk-based(1)" +"BILL LEAVES TOWN,""2 ounces blended, 1 teaspoon grenadine, ½ ounce sweet vermouth"",Strong" +"BLACK HAWK,""2 ounces blended1 ounce sloe gin, 1½ ounces Canadian1 teaspoon brandy, ½ ounce blueberry"",Sweet(1)" +BOILERMAKER,1 ounce blended whiskey12 ounces beer,Strong +"BOOT HILL,""2 ounces blended ½ ounce lemon juice, ½ teaspoon superfine, ½ ounce applejack"",""Sweet(2), Sour(1)""" +"BORROWED TIME,""1½ ounces Canadian1 egg yolk, 1 teaspoon grenadine, ½ ounce ruby port"",Strong" +"CABLEGRAM,""1½ ounces blended, 4 ounces ginger ale, ½ ounce lemon juice, ½ teaspoon superfine"",""Sweet(1), Sour(1)""" +"CALIFORNIA LEMONDADE,""1½ ounces blended 4 ounces club soda, 1 ounce lemon juice 1 orange slice, 1 teaspoon superfine"",""Sweet(2), Sour(1)""" +"CANADIAN COCKTAIL,""2 ounces blended, ½ teaspoon superfine, ½ ounce Cointreau or1 dash bitters"",Sour(1)" +"CANADIAN SALAD,""1 ounce Canadian whisky½ ounce lemon juice, ½ ounce brandy, ½ teaspoon superfine, ½ ounce Irish Mist, ½ ounce Scotch, 1 ounce orange juice"",""Sweet(2), Sour(1)""" +"CAT AND FIDDLE,""1½ ounces Canadian 1 teaspoon Pernod, 1 teaspoon Dubonnet, ½ ounce Cointreau or"",Strong" +"COMMODORE,""2 ounces Canadian1 dash bitters, ½ teaspoon superfine, 1 ounce lime juice"",""Sweet(1), Sour(2)""" +"DINAH COCKTAIL,""2 ounces blended, ½ teaspoon superfine, ½ ounce lemon juice"",""Sweet(1), Sour(1)""" +"DOUBLE STANDARD SOUR,""1 ounce blended whiskey½ teaspoon grenadine, 1 ounce gin, 1 ounce lemon juice, ½ teaspoon superfine"",""Sweet(1), Sour(1)""" +"DRY MANHATTAN,""2 ounces blended¾ ounce dry vermouth, 2 ounces blended 1 dash bitters, ½ ounce Dubonnet"",Sour(1)" +"DUSTY BILL,""1½ ounces Canadian2 teaspoons lemon juice, ½ teaspoon superfine, ½ ounce applejack, 1 teaspoon brandy, 2 ounces Canadian½ ounce crème de cassis"",""Sweet(2), Sour(1)""" +"FANCY WHISKEY,""2 ounces blended, ¼ teaspoon superfine, ½ teaspoon Cointreau or2 dashes bitters"",Sour(1)" +FAUX SCRUMPY,1½ ounces blended6 ounces apple juice,Sweet(2) +"FINE AND DANDY,""1½ ounces Canadian½ ounce Cointreau or, ½ ounce Dubonnet, 1 dash bitters, 1½ ounces Canadian, 1 teaspoon sweet, ½ ounce peach schnapps"",""Sweet(1), Sour(1)""" +"GERALDINE,""1½ ounces Canadian1 teaspoon dry vermouth, 1 dash bitters, ½ ounce yellow, ½ ounce Dubonnet, 1½ ounces Canadian½ ounce applejack"",""Sweet(1), Sour(1)""" +HEARTY SUSAN,1½ ounces blended½ ounce cherry brandy,Sweet(1) +"HORSE FEATHERS,""2 ounces blended2 dashes bitters, 4 ounces ginger ale, 2 ounces blended, ½ ounce sweet vermouth, 1 ounce green ginger"",Sour(1)" +IRISH CANADIAN,1½ ounces Canadian½ ounce Irish Mist,Strong +"JERSEY GENTLEMAN,""1½ ounces blended½ ounce Pernod, 1 ounce pineapple juice, 2 ounces blended, ½ teaspoon superfine, 1 teaspoon sweet, ½ ounce lemon juice"",""Sweet(4), Sour(1)""" +"LADYLUV,""1½ ounces blended½ ounce añejo rum, 1 teaspoon white crème, ½ ounce dark rum"",Strong" +"MAJOR BRADBURY,""1½ ounces Canadian, 1 teaspoon dry vermouth, 1 teaspoon sweet, ½ ounce Grand Marnier"",Strong" +"MANHASSET,""1½ ounces blended1 teaspoon dry vermouth, ½ ounce lemon juice, 1 teaspoon sweet, ½ teaspoon superfine"",""Sweet(1), Sour(1)""" +"MANHATTAN,""2 ounces blended, 3 dashes bitters, ¾ ounce sweet vermouth"",Sour(1)" +"MAPLE LEAF,""2 ounces Canadian1 teaspoon dark crème de, ½ ounce Irish Mist1 ounce heavy cream"",Milk-based(1)" +"MILLIONAIRE,""2 ounces blended, ½ teaspoon grenadine, ½ ounce Cointreau or"",Strong" +"MOLEHILL LOUNGER,""1½ ounces blended, 1 teaspoon white crème, ½ ounce dark crème de"",Strong" +MOUNTIE,1½ ounces Canadian½ ounce Campari,Strong +"NEW YORK COCKTAIL,""2 ounces blended, ½ teaspoon grenadine, 1 ounce lemon juice, ½ teaspoon superfine, 3 dashes bitters, 1 teaspoon water 1 maraschino cherry, 3 ounces blended"",""Sweet(2), Sour(2)""" +"OLD GROANER,""2 ounces Canadian½ ounce amaretto, 2 ounces Canadian½ ounce amaretto, 1 ounce heavy cream"",Milk-based(1)" +"OLD NICK,""2 ounces Canadian, ½ ounce lemon juice, 3 dashes orange bitters, ½ ounce Drambuie, ½ ounce orange juice1 maraschino cherry"",""Sweet(3), Sour(2)""" +"OPENING COCKTAIL,""2 ounces blended½ ounce sweet vermouth, 2 teaspoons grenadine"",Strong" +"PARK PARADISE,""1½ ounces Canadian, 1 teaspoon maraschino, ½ ounce sweet vermouth1 dash bitters"",Sour(1)" +"PERFECT MANHATTAN,""2½ ounces blended, 1 dash bitters, ½ ounce dry vermouth, ½ ounce sweet vermouth"",Sour(1)" +"POOR TIM,""1½ ounces blended½ ounce dry vermouth, 2 teaspoons Chambord"",Strong" +"PREAKNESS,""1½ ounces blended, ½ ounce sweet vermouth, 2 dashes bitters, ½ ounce Bénédictine1 lemon twist, 1 teaspoon brandy, 2 ounces blended, 3 ounces club soda, 2 ounces ginger ale"",""Sweet(1), Sour(2)""" +PRINCE RUPERT,1½ ounces blended½ ounce anisette,Strong +"PURGAVIE,""1½ ounces Canadian 2 ounces orange juice, 2 dashes orange bitters, ½ ounce Amer Picon3 ounces club soda"",""Sweet(2), Sour(1)""" +"QUEBEC,""2 ounces Canadian, 1 teaspoon Amer Picon, 1 teaspoon maraschino, ½ ounce dry vermouth"",Strong" +"RATTLESNAKE,""2 ounces blended, ½ teaspoon superfine, 1 teaspoon Pernod, ½ ounce lemon juice, 1½ ounces blended, 1 teaspoon lemon juice, ½ teaspoon superfine, ½ ounce Southern, 1 dash bitters, ½ ounce orange juice"",""Sweet(3), Sour(3)""" +"SAND DANCE,""1½ ounces blended½ ounce cherry brandy, 2 ounces cranberry juice"",Sweet(2)" +"SAN FRANCISCO,""1½ ounces blended½ ounce Bénédictine, 1 ounce lemon juice"",""Sweet(1), Sour(1)""" +SCRUMPY STRONG,1 ounce blended whiskey6 ounces hard cider,Strong +"SEVEN AND SEVEN,""2 ounces Seagram’s 71 lemon twist, 5 ounces 7-Up"",Sour(1)" +"SHERMAN TANK,""2 ounces blended, 1 teaspoon lime juice, ½ teaspoon superfine, ½ ounce B & B, 1 teaspoon lemon juice2 dashes bitters"",""Sweet(2), Sour(3)""" +"SOCRATES,""1½ ounces Canadian, 1 teaspoon Cointreau or, ½ ounce apricot brandy1 dash bitters"",Sour(1)" +"SPEAKER OF THE HOUSE,""1½ ounces Canadian 1 teaspoon cherry brandy, ½ ounce lemon juice, ½ ounce ginger wine1 maraschino cherry, 1 ounce Canadian whisky½ ounce Sambuca"",""Sweet(3), Sour(1)""" +"STILETTO,""2 ounces blended ½ ounce lemon juice, 1 teaspoon lime juice, ½ ounce amaretto"",""Sweet(2), Sour(2)""" +"STRONGARM,""2 ounces blended, ½ ounce lemon juice, ½ ounce Cointreau or"",""Sweet(1), Sour(1)""" +"THUNDERCLAP,""1½ ounces blended1 ounce gin, 1 ounce brandy, 1½ ounces Canadian½ ounce lemon juice, 1 ounce orange juice, 1½ ounces blended, 1 teaspoon Dubonnet, ½ ounce Cointreau or1 dash bitters, 1 teaspoon Ricard, 1½ ounces blended1 ounce anisette"",""Sweet(2), Sour(2)""" +"TOWER TOPPER,""1½ ounces Canadian½ ounce Grand Marnier, ½ ounce light cream"",Milk-based(1)" +"TURTLE,""2 ounces Canadian½ ounce Bénédictine, 1½ ounces blended1 teaspoon Cointreau or, ½ ounce Dubonnet 1 lemon twist"",Sour(1)" +"TWO TURTLES,""2 ounces Canadian½ ounce Cointreau or, ½ ounce B & B"",Strong" +"WHISKEY COLLINS,""2 ounces blended, 3 ounces club soda, 1 ounce lemon juice 1 orange slice, 1 teaspoon superfine"",""Sweet(2), Sour(1)""" +"WHISKEY COBBLER,""1 teaspoon superfine1 maraschino cherry, 3 ounces club soda, 2 ounces blended"",Sweet(2)" +"WHISKEY COOLER,""2 ounces blended, 4 ounces lemon-lime"",Sour(2)" +"WHISKEY CRUSTA,""½ ounce Cointreau or, 2 teaspoons maraschino, ½ ounce lemon juice, 1½ ounces blended"",""Sweet(1), Sour(1)""" +"WHISKEY DAISY,""2 ounces blended, ½ teaspoon grenadine, 1 ounce lemon juice 1 orange slice, ½ teaspoon superfine, 1 teaspoon superfine2 ounces blended, 1 ounce lemon juice 1 maraschino cherry, 2 teaspoons water"",""Sweet(3), Sour(2)""" +"WHISKEY FLIP,""2 ounces blended, 1 teaspoon light cream, 1/8 teaspoon grated, 1 teaspoon superfine"",Milk-based(1)" +"WHISKEY MILK PUNCH,""2 ounces blended, 2 ounces milk, ¼ teaspoon grated, 1 ounce dark crème de"",Milk-based(1)" +"WHISKEY SANGAREE,""1 teaspoon superfine ½ ounce tawny port, 2 teaspoons water, 1/8 teaspoon grated, 1½ ounces blended, 1/8 teaspoon ground, 2½ ounces club soda"",Sweet(1)" +"WHISKEY SLING,""1 teaspoon superfine2 ounces blended, 2 teaspoons water, 1 ounce lemon juice"",""Sweet(1), Sour(1)""" +"WHISKEY SMASH,""2½ ounces blended, 1 teaspoon superfine, 1 ounce club soda"",Sweet(1)" +"WHISKEY SOUR,""2 ounces blended, 1 ounce lemon juice, ½ teaspoon superfine"",""Sweet(1), Sour(1)""" +"WHISKEY SWIZZLE,""1½ ounces lime juice1 dash bitters, 1 teaspoon superfine Crushed ice, 3 ounces club soda, 2 ounces blended"",""Sweet(2), Sour(2)""" +"WHISKEY TO GO,""1½ ounces blended½ ounce lemon juice, ½ teaspoon superfine, ½ ounce gin"",""Sweet(1), Sour(1)""" +"WILD JACKALOPE,""1½ ounces Canadian1 teaspoon Pernod, ½ ounce peppermint"",Strong" +"AZULUNA,""2 ounces light rum, 1½ ounces coconut cream, 1 ounce blue Curaçao, 4 ounces pineapple juice1 plastic monkey, 1 ounce dark rum, 1 ounce coconut cream, 1 ounce light rum, 4 ounces pineapple juice 1 pineapple slice"",""Sweet(8), Milk-based(2)""" +"BANANA DAIQUIRI,""2 ounces light rum, 1 ounce lime juice, ½ ounce Cointreau or, ½ teaspoon superfine, 2 ounces dark rum, 2 dashes orange bitters, ½ ounce crème de, ½ teaspoon grenadine, 1 teaspoon Rose’s lime 1 maraschino cherry, 6 ounces pineapple juice"",""Sweet(5), Sour(3)""" +"CHI CHI,""2 ounces vodka, 5 ounces pineapple juice1 maraschino cherry, 1½ ounces coconut"",Sweet(4)" +"DISCOVERY BAY,""1½ ounces brandy, 2 ounces lemon sherbet, ½ ounce Cointreau or2 ounces ginger ale"",Sour(1)" +"FRUIT RUM FRAPPE,""1 ounce light rum, ½ ounce orange juice, ½ ounce crème de, ½ teaspoon crème de"",Sweet(1)" +"GAUGUIN,""2 ounces light rum, 1 teaspoon lime juice, 1 ounce passion fruit½ teaspoon superfine, syrup, 1 ounce lemon juice"",""Sweet(3), Sour(2)""" +"HAWAIIAN COCKTAIL,""2 ounces gin, 1 ounce pineapple juice, ½ ounce Cointreau or"",Sweet(3)" +"HONOLULU COCKTAIL,""1½ ounces gin, 1 teaspoon lemon juice, 1 teaspoon orange juice½ teaspoon superfine, 1 ounce pineapple juice, 1 teaspoon lime juice"",""Sweet(6), Sour(2)""" +"HULA HOOP,""1½ ounces gin, ½ ounce pineapple juice, 1 ounce orange juice"",Sweet(4)" +"JAMAICA HOP,""1½ ounces Kahlúa, 1½ ounces heavy cream, ½ ounce white crème de"",Milk-based(1)" +"JAMAICAN FIZZ,""2½ ounces dark rum 1 teaspoon superfine, 1½ ounces pineapple, 4 ounces club soda"",Sweet(3)" +"KING OF KINGSTON,""1 ounce gin, 1 teaspoon grapefruit, ½ ounce crème de, 1 teaspoon grenadine, 1 ounce pineapple juice1 ounce heavy cream, 1 ounce dark rum, 1 ounce light rum, ½ ounce cherry brandy 1 pineapple slice, 4 ounces pineapple juice"",""Sweet(10), Milk-based(1)""" +"LISTENING TO THE DRUMS OF +FEYNMAN,""1 ounce dark rum 2 ounces light cream, ½ ounce light rumCrushed ice, 1 ounce Tia Maria1/8 teaspoon nutmeg, 1½ ounces light rum, 1 ounce pineapple juice, ½ ounce amaretto, 2 ounces half-and-half, ½ ounce coconut cream1 maraschino cherry"",""Sweet(4), Milk-based(3)""" +"MAI TAI,""1 ounce light rum, 2 teaspoons orgeat syrup, 1 ounce añejo rum, 2 teaspoons grenadine, 1 ounce Cointreau orCrushed ice, ½ ounce lime juice, syrup, and grenadine. Shake well. Strain into an"",""Sweet(3), Sour(1)""" +"POLYNESIAN COCKTAIL,""1 teaspoon powdered½ ounce cherry brandy, ½ ounce lime juice, ½ ounce lemon juice, 1½ ounces vodka"",""Sweet(3), Sour(2)""" +"REGGAE,""2 ounces vodka, 1 dash orange bitters, ½ ounce crème de, ½ teaspoon grenadine, 1 ounce orange juice, ½ ounce grapefruit juice1 maraschino cherry, ½ ounce pineapple juice"",""Sweet(7), Sour(1)""" +"SACRIFICE,""1 ounce dark rum, 1 ounce cranberry juice, 1 ounce light rum, 1 ounce orange juice, ½ ounce white crème de 2 dashes orange bitters, 1 teaspoon coconut cream1 orange slice, 2 ounces pineapple juice 1 maraschino cherry"",""Sweet(6), Sour(1), Milk-based(1)""" +"SCORPION,""1½ ounces añejo rum, ½ ounce orgeat syrup, ½ ounce brandy, 1½ ounces orange juice1 orange slice, 1 ounce lemon juice, juice, lemon juice, and orgeat syrup with the, 1½ ounces dark rum Crushed ice, ½ ounce peppermint"",""Sweet(6), Sour(2)""" +"STRAWBERRY COLADA,""1 ounce dark rum, 1 ounce coconut cream, 1 ounce light rum, 4 ounces pineapple juice1 pineapple wedge"",""Sweet(5), Milk-based(1)""" +"STRAWBERRY DAIQUIRI,""2 ounces light rum, 1 ounce lime juice, ½ ounce Cointreau or ½ teaspoon superfine"",""Sweet(1), Sour(1)""" +"SWIMMING ASHORE FOR THE SONGS +OF SUNRISE,""1½ ounces light rum, ½ ounce orange juice, ½ ounce Cointreau or, 2 teaspoons grenadine, 3 ounces grapefruit juice"",Sweet(3)" +"TAHITI CLUB,""1 ounce light rum, ½ ounce lemon juice, 1 ounce dark rum, 1 teaspoon maraschino, 1 ounce pineapple juice, ½ ounce lime juice"",""Sweet(5), Sour(2)""" +"TIDAL WAVE,""1 ounce light rum 2 ounces pineapple juice, ½ ounce dark rum1 ounce orange juice, ½ ounce gin, 1 teaspoon grenadine, ½ ounce vodka, ½ ounce tequila"",Sweet(4)" +"TROPICAL RAINSTORM,""1½ ounces dark rum, 1 teaspoon Cointreau or, ½ ounce cherry brandy, ½ ounce lemon juice"",""Sweet(2), Sour(1)""" +"YELLOW BIRD,""1½ ounces light rum ½ ounce lime juice, ½ ounce Galliano, ½ ounce Cointreau or"",""Sweet(1), Sour(1)""" +"ZOCOLO,""1 ounce dark rum, 2 ounces club soda, ½ ounce tequila, 2 ounces pineapple juice 1 pineapple wedge, 2 ounces grapefruit juice1 maraschino cherry"",Sweet(9)" +"ZOMBIE,""1 ounce light rum, 1 ounce añejo rum, 2 teaspoons 151° proof, 1 ounce dark rum, ½ ounce apricot brandy 1 orange slice, 2 ounces orange juice, 1 ounce pineapple juice1 mint spring, 1 ounce lime juice, 1 teaspoon superfine"",""Sweet(5), Sour(1)""" +"AGINCOURT,""1 ounce sweet vermouth½ ounce amaretto, 1 ounce dry vermouth, 1 teaspoon lemon juice, 1½ ounces dry vermouth½ teaspoon Pernod, 1 ounce gin, 1 dash bitters"",""Sweet(1), Sour(2)""" +"ALLIES COCKTAIL,""1 ounce dry vermouth1 teaspoon kümmel, ¾ ounce gin"",Strong" +"AMER PICON COCKTAIL,""2 ounces Amer Picon1 teaspoon grenadine, 1½ ounces lime juice, 1½ ounces Campari4 ounces club soda, 1½ ounces sweet"",""Sweet(2), Sour(1)""" +"ANTE,""1 ounce Dubonnet Rouge½ ounce Cointreau or, ¾ ounce applejack"",Sweet(1)" +APPLE ROUGE,1½ ounces Dubonnet1 ounce applejack,Sweet(1) +"BELLE OF ELLIS ISLAND,""2 ounces dry vermouth ½ teaspoon superfine, ½ ounce brandy, 1 teaspoon Cointreau or2 dashes orange bitters"",Sour(1)" +"BIG RED,""1 ounce sweet vermouth2 dashes orange bitters, ¾ ounce dry vermouth, ½ ounce sloe gin, 1 ounce sweet vermouth2 dashes orange bitters, 1 ounce dry vermouth"",Sour(2)" +"BLONDE JENNY,""1½ ounces dry vermouth1 dash orange bitters, ½ ounce gin, ½ ounce orange juice"",""Sweet(1), Sour(1)""" +"BOSWELLIAN BOOSTER,""2 ounces dry vermouth½ teaspoon superfine, 1 ounce brandy, 2 dashes orange bitters 1 maraschino cherry, ½ ounce lemon juice"",""Sweet(2), Sour(2)""" +"BOYD OF THE LOCH,""1½ ounces dry vermouth1 lemon twist, 1 ounce Scotch"",Sour(1)" +"BRESNAN,""1½ ounces sweet, 1 teaspoon crème de, 1 ounce dry vermouth½ ounce lemon juice"",""Sweet(1), Sour(1)""" +"BURFENTAILOR,""1 ounce sweet vermouth2 teaspoons lemon juice, ½ ounce gin, 1 teaspoon grenadine, ½ ounce brandy, 2 teaspoons Pernod"",""Sweet(1), Sour(1)""" +"CHELSEA,""1 ounce dry vermouth ½ teaspoon Cointreau or, ¾ ounce bourbon, 1 teaspoon blackberry2 teaspoons lemon juice"",""Sweet(1), Sour(1)""" +"CUYAHOGA COCKTAIL,""½ ounce sweet vermouth¾ ounce gin, ½ ounce dry vermouth"",Strong" +"DIPLOMAT,""2 ounces dry vermouth, 1 dash orange bitters, ½ ounce sweet vermouth1 maraschino cherry, ½ teaspoon maraschino"",""Sweet(1), Sour(1)""" +"DRY NEGRONI,""1 ounce Campari1 ounce dry vermouth, 1 ounce gin"",Strong" +"DUBONNET FIZZ,""2 ounces Dubonnet 2 teaspoons cherry, 1 ounce orange juice 3 ounces club soda, ½ ounce lemon juice, 1½ ounces Dubonnet1 dash bitters, ½ ounce gin"",""Sweet(4), Sour(2)""" +"EARL OF SARDINIA,""1½ ounces Campari, 1 ounce pineapple juice, ½ ounce crème de cassis 1 teaspoon grenadine, 3 ounces grapefruit juiceCrushed ice"",Sweet(5)" +"EVANS RESCUES THE DAMSEL OF +GARSTANG TOWER,""1 ounce sweet vermouth½ ounce strawberry, 1 ounce dry vermouth, 1 ounce gin, 2 dashes orange bitters"",""Sweet(1), Sour(1)""" +"FARTHINGALE,""1 ounce sweet vermouth1 dash bitters, 1 ounce dry vermouth, ¾ ounce gin"",Sour(1)" +"FERRARI,""2 ounces dry vermouth1 dash bitters, ¾ ounce amaretto"",Sour(1)" +FRENCH KISS,1½ ounces sweet1½ ounces dry vermouth,Strong +"GADZOOKS,""1 ounce dry vermouth 2 teaspoons cherry, 1 ounce apricot brandy, 1 ounce gin, 1 teaspoon lemon juice"",""Sweet(2), Sour(1)""" +"GLADYS DELIGHT,""2 ounces dry vermouth1 teaspoon grenadine, 1 teaspoon sweet, 4 ounces ginger ale"",Strong" +"GRACELAND,""1 ounce dry vermouth, 1 dash bitters, 1 ounce sweet vermouth1 lemon twist, ½ ounce Scotch"",Sour(2)" +"GREEN GABLES COCKTAIL,""1 ounce gin, 1½ ounces sweet2 teaspoons green"",Strong" +"HILGERT COCKTAIL,""1 ounce dry vermouth 1 teaspoon grapefruit, ¾ ounce gin, ½ teaspoon maraschino1 dash bitters"",""Sweet(1), Sour(1)""" +"JEFF TRACY,""1 ounce dry vermouth1 ounce gin, 1 teaspoon sweet, 1 ounce cherry brandy"",Sweet(1)" +"JOYCE OF HILLHOUSE,""1½ ounces sweet1 dash bitters, 1 ounce Scotch"",Sour(1)" +"KAYTEE,""1½ ounces dry vermouth½ teaspoon Pernod, 1 ounce dry sherry"",Strong" +"KING KENNETH,""1½ ounces Campari, 2 teaspoons lemon juice, ½ ounce peach schnapps4 ounces tonic water, 1 ounce orange juice"",""Sweet(3), Sour(1)""" +"KNOCKOUT COCKTAIL,""1 ounce dry vermouth1 teaspoon white crème, 1 ounce gin, ½ ounce anisette"",Strong" +"LADY EVELYN,""1½ ounces dry vermouth2 teaspoons Cointreau or, 1 ounce gin, 1½ ounces Dubonnet1 ounce dry vermouth"",Strong" +"LEO THE LION,""2 ounces dry vermouth1 teaspoon white crème, ½ ounce brandy"",Strong" +"LILLET COCKTAIL,""2 ounces Lillet1 lemon twist, ½ ounce gin"",Sour(1)" +"LYING WITH THE TIGRESS,""1½ ounces dry vermouth1 dash orange bitters, 1 ounce light rum, ¼ teaspoon Rose’s lime"",Sour(2)" +"MAGIQUE,""1½ ounces dry vermouth2 teaspoons crème de, 1 ounce gin, 1½ ounces sweet1 ounce brandy, 1 dash orange bitters"",Sour(1)" +"MAYFLOWER COCKTAIL,""1½ ounces sweet, 1 teaspoon Pernod, 1 teaspoon Cointreau or, ½ ounce dry vermouth, ½ ounce brandy, 2 dashes orange bitters"",Sour(1)" +"MAYOR BILLY,""¾ ounce sweet vermouth2 teaspoons orange juice, ¾ ounce dry vermouth, 2 dashes orange bitters, ½ ounce gin, 2 ounces dry vermouth1 teaspoon green crème, ½ ounce Armagnac"",""Sweet(1), Sour(1)""" +"MUCH FUSS FOR THE CONQUERING +HERO,""1 ounce sweet vermouth1 teaspoon pineapple, ¾ ounce applejack, 2 teaspoons apricot, 1 teaspoon lemon juice, 2 dashes orange bitters"",""Sweet(4), Sour(2)""" +"NEGRONI,""1 ounce Campari1 ounce sweet vermouth, 1 ounce gin"",Strong" +"PAMMY KAY,""1 ounce dry vermouth ½ teaspoon lemon juice, ½ ounce gin, ½ teaspoon lime juice, ½ ounce apricot brandy"",""Sweet(2), Sour(2)""" +"PHOEBE SNOW,""2 ounces Dubonnet1½ ounces brandy, 1 teaspoon Pernod"",Strong" +"SACRED MOUNTAIN OF THE +PEKINGESE CLOUD GODS,""1 ounce dry vermouth2 ounces orange juice, ½ ounce Southern, 2 teaspoons blue Curaçao"",Sweet(1)" +"SAME OLD SONG,""1 ounce sweet vermouth1 teaspoon lemon juice, ½ ounce dry vermouth, 1 dash orange bitters, 1 ounce gin, 1 ounce orange juice"",""Sweet(2), Sour(2)""" +"SEETHING JEALOUSY,""1 ounce sweet vermouth½ ounce cherry brandy, ½ ounce Scotch, ½ ounce orange juice"",Sweet(2)" +"SHOOING AWAY THE TRIBES OF THE +NIGHT,""1 ounce dry vermouth, ¼ teaspoon cherry, ¾ ounce brandy, ½ teaspoon Cointreau or1 dash bitters, ¼ teaspoon Ricard"",""Sweet(1), Sour(1)""" +"SWEET NAN,""1 ounce sweet vermouth2 teaspoons Bénédictine, 1 ounce brandy, 1 ounce Dubonnet Rouge½ ounce dry vermouth, ½ ounce gin"",Strong" +"THANKSGIVING COCKTAIL,""1 ounce dry vermouth ½ teaspoon crème de, ¾ ounce gin, ¾ ounce apricot brandy½ teaspoon lemon juice"",""Sweet(1), Sour(1)""" +"TRINITY COCKTAIL,""1 ounce sweet vermouth1 ounce gin, 1 ounce dry vermouth"",Strong" +"TRIPLET COCKTAIL,""1 ounce dry vermouth2 teaspoons lemon juice, 1 ounce gin, 1 ounce peach brandy"",""Sweet(2), Sour(1)""" +"TRUE TRIXIE,""2 ounces Campari, ¾ ounce Cointreau or, ¾ ounce dry vermouth, 2 ounces dry vermouth1 lemon twist, 2 teaspoons crème de"",Sour(1)" +"VERMOUTH CASSIS TALL,""2 ounces dry vermouth 1 lemon twist, ½ ounce crème de cassis4 ounces club soda"",""Sweet(1), Sour(1)""" +"VERMOUTH COCKTAIL,""1½ ounces sweet, 2 dashes orange bitters, 1½ ounces dry vermouth"",Sour(1)" +"WARRIOR,""1 ounce sweet vermouth½ teaspoon Pernod, 1 ounce dry vermouth, ½ teaspoon Cointreau or, ½ ounce brandy"",Strong" +"WEDDING BELL COCKTAIL,""ounce, ¾ ounce gin, 1 dash orange bitters, 2 teaspoons cherry"",""Sweet(1), Sour(1)""" +"WESTERMAN SINGS THE BLUES,""1 ounce dry vermouth1 teaspoon Pernod, ½ ounce gin"",Strong" +"WYSOOSLER,""1 ounce sweet vermouth2 dashes orange bitters, ¾ ounce gin, ¾ ounce green"",Sour(1)" +"ALABAMA SLAMMER,""1½ ounces amaretto½ ounce sloe gin, 1 ounce Southern, ½ ounce lemon juice"",""Sweet(1), Sour(1)""" +"AMARETTO SOUR,""2 ounces amaretto, 1 ounce lemon juice 1 maraschino cherry, ½ teaspoon superfine"",""Sweet(2), Sour(1)""" +BOCCIE BALL,2 ounces amaretto5 ounces orange juice,Sweet(1) +"PINK PANTHER,""1 ounce amaretto1 teaspoon grenadine, ½ ounce vodka, 2 ounces light cream"",Milk-based(1)" +"TOASTED ALMOND,""1½ ounces amaretto2 ounces light cream, 1 ounce Kahlúa"",Milk-based(1)" +"JACK ROSE,""2 ounces applejack 1 teaspoon grenadine, 1 ounce lemon juice, 1½ ounces apricot1 ounce Scotch, ½ ounce sweet vermouth"",""Sweet(2), Sour(1)""" +"APRICOT FIZZ,""2½ ounces apricot, ½ teaspoon superfine, 1 ounce lemon juice4 ounces club soda"",""Sweet(2), Sour(1)""" +"APRICOT SOUR,""2 ounces apricot brandy1 orange slice, 1 ounce lemon juice, ½ teaspoon superfine"",""Sweet(1), Sour(1)""" +"ON THE SQUARE,""1 ounce apricot brandy½ ounce Calvados, ½ ounce gin"",Strong" +"PARADISE,""1½ ounces apricot1 ounce orange juice, ½ teaspoon sweet, ½ ounce gin"",Sweet(1)" +"BLACKPOOL TOWER,""2 ounces Bailey’s Irish¾ ounce apricot brandy, 1 teaspoon gin, 1 ounce Bailey’s Irish1 ounce Chambord, slowly and carefully over the back of a teaspoon,"",Strong" +"DIRTY GIRL SCOUT,""1 ounce Bailey’s Irish1 ounce vodka, 1 teaspoon green crème, 1 ounce Kahlúa"",Strong" +"IRISH FLAG,""1 ounce green crème de1 ounce brandy, 1 ounce Bailey’s Irish"",Strong" +"MORNING WITH THE LEPRECHAUNS,""1½ ounces Bailey’s Irish3 ounces cold strong, 1 ounce Irish whiskey, 2 teaspoons cherry"",Sweet(1)" +"SILENT MONK,""1 ounce Bénédictine 1 ounce light cream, ½ ounce Cointreau or"",Milk-based(1)" +"BARROW BLUES,""1 ounce blue Curaçao1½ ounces pineapple, ½ ounce light rum, ½ ounce añejo rum, 1 teaspoon coconut cream"",""Sweet(2), Milk-based(1)""" +GOLDEN FLEECE,1½ ounces yellow1 ounce Danzig,Strong +"CHERRIES FROM HEAVEN,""1½ ounces cherry brandy4 ounces tonic water, 1 ounce lemon juice, 1 dash bitters"",""Sweet(2), Sour(2)""" +"CHERRY FLASH COLA,""1 ounce cherry brandy4 ounces cola, ½ ounce maraschino"",Sweet(2)" +DUVAL,2 ounces Cointreau1 ounce Sambuca,Strong +"BANANARAMA,""1 ounce crème de, 1 dash bitters, 1 ounce light cream, ½ ounce Cointreau or"",""Sour(1), Milk-based(1)""" +"BANSHEE,""1½ ounces crème de, 1 ounce light cream, 1 ounce white crème de"",Milk-based(1)" +"GOLDEN CADILLAC,""1½ ounces white crème¾ ounce Galliano, 1 ounce light cream"",Milk-based(1)" +"SLAMDANCER,""1 ounce white crème de½ ounce Kahlúa, 2 teaspoons peppermint, ½ ounce dark crème de, 1 ounce light cream"",Milk-based(1)" +"DIANA,""½ ounce brandy, 2 ounces white crème de, over the back of a teaspoon, float the brandy on the"",Strong" +"GRASSHOPPER,""1 ounce green crème de1 ounce light cream, 1 ounce white crème de"",Milk-based(1)" +"PINK SQUIRREL,""1½ ounces crème de, 1 ounce light cream, ½ ounce white crème de"",Milk-based(1)" +"ROGER SWIMS A MILE,""1½ ounces Drambuie½ ounce dry vermouth, ½ ounce blended, 1½ ounces Frangelico1 ounce pineapple juice, 2 teaspoons crème de 1 dash bitters"",""Sweet(3), Sour(1)""" +"FRIAR TUCK,""1½ ounces Frangelico1 teaspoon grenadine, 2 teaspoons brandy, 1 ounce lemon juice, 1½ ounces Galliano, ½ ounce orange juice, ½ ounce Cointreau or½ ounce light cream, 1 ounce Grand Marnier½ ounce Bailey’s Irish, ¾ ounce Kahlúa, 1½ ounces Grand Marni-, ounce, 1 ounce gin, 1 dash bitters"",""Sweet(2), Sour(2), Milk-based(1)""" +"COFFEE STICK,""1½ ounces Kahlúa1 ounce heavy cream, ½ ounce Sambuca"",Milk-based(1)" +"DOUGLAS TOWN,""2 ounces Kahlúa½ ounce lime juice, 1 ounce tequila"",""Sweet(1), Sour(1)""" +KING ALPHONSE,2½ ounces Kahlúa½ ounce heavy cream,Milk-based(1) +MUDDY RIVER,2½ ounces Kahlúa1½ ounces light cream,Milk-based(1) +"ROOT BEER,""1 ounce Kahlúa, ½ teaspoon superfine, 1 ounce Galliano, 1 ounce lemon juice3 ounces cola"",""Sweet(2), Sour(1)""" +SOMBRERO,2 ounces Kahlúa2 ounces light cream,Milk-based(1) +"BELLE MELON,""1½ ounces melon liqueur1 ounce light cream, ½ ounce vodka"",""Sweet(1), Milk-based(1)""" +"FOCAL POINT,""1½ ounces melon liqueur½ ounce lemon juice, 1 ounce light rum, 1 teaspoon grenadine"",""Sweet(2), Sour(1)""" +"GREEN GODDESS,""1½ ounces melon liqueur4 ounces lemon-lime, 1 ounce Scotch, 1 teaspoon dry vermouth"",""Sweet(1), Sour(2)""" +"MAN IN THE MELON,""1½ ounces melon liqueur2 ounces lemon-lime, ½ ounce vodka, ½ ounce Cointreau or, 2 ounces club soda"",""Sweet(2), Sour(2)""" +"MELON BALL,""1 ounce melon liqueur3 ounces pineapple juice, 1 ounce vodka, 1 ounce peppermint½ ounce bourbon, ½ ounce vodka, ¾ ounce Kahlúa"",Sweet(4)" +"BLUE GLORY,""2 ounces peppermint 5 ounces lemon-lime, ½ ounce blue Curaçao"",Sour(2)" +"PEPPERMINT TWIST,""1 ounce peppermint½ ounce dark crème de, 1 ounce Kahlúa"",Strong" +"FERRIS WHEEL,""1½ ounces Sambuca1 lemon twist, 1 ounce brandy"",Sour(1)" +SAMBUCA STRAIGHT,2 ounces Sambuca3 coffee beans,Strong +"SAMSON,""½ ounce black Sambuca½ ounce amaretto, 1½ ounces light cream, ½ ounce blackberry"",Milk-based(1)" +"SLOE GIN FIZZ,""2½ ounces sloe gin, 4 ounces club soda, 1 ounce lemon juice, ½ teaspoon superfine"",""Sweet(2), Sour(1)""" +"SLOE GIN FLIP,""2 ounces sloe gin, ½ ounce light cream, 1/8 teaspoon grated, ½ teaspoon superfinenutmeg"",Milk-based(1)" +"SLOEHAND JACKSON,""1½ ounces sloe gin1 ounce orange juice, ½ ounce gin, ½ ounce lemon juice, ½ ounce vodka, 1 teaspoon grenadine"",""Sweet(2), Sour(1)""" +"BRITISH COMFORT,""1½ ounces Southern½ ounce lemon juice, 1 ounce orange juice, ½ ounce gin"",""Sweet(2), Sour(1)""" +"SOUTHERN COMFORT MANHATTAN,""2 ounces Southern, 3 dashes bitters, ½ ounce sweet vermouth"",Sour(1)" +"ADONIS COCKTAIL,""2 ounces dry sherry, 1 dash orange bitters, ½ ounce sweet vermouth"",Sour(1)" +"ANDALUSIA,""2 ounces dry sherry½ ounce brandy, ½ ounce light rum, 2 ounces cream sherry, 1 ounce lemon juice, ½ ounce sweet vermouth"",""Sweet(1), Sour(1), Milk-based(1)""" +"BELLINI,""2 ounces peach nectar4 ounces chilled, ½ ounce lemon juice, 1 teaspoon grenadine"",""Sweet(3), Sour(1)""" +"BISHOP,""3 ounces red wine, 1 teaspoon superfine, 1 ounce lemon juice, 1½ ounces orange juice1 orange slice"",""Sweet(2), Sour(1)""" +"CHAMPAGNE COCKTAIL,""1 teaspoon granulated3 dashes bitters, 6 ounces Champagne"",Sour(1)" +"CHAMPAGNE FIZZ,""1½ ounces gin, 3 ounces chilled, 1 ounce lemon juice, 1 teaspoon superfine, 2 ounces bourbon, 1 teaspoon superfine4 ounces Champagne"",""Sweet(1), Sour(1)""" +"CLARET COBBLER,""1 teaspoon superfine, 3 ounces club soda, 2½ ounces claret (dry red"",Sweet(1)" +"CREAM SHERRY COBBLER,""1 teaspoon superfine2½ ounces cream sherry, 3 ounces club soda"",""Sweet(1), Milk-based(1)""" +"CREAM SHERRY FLIP,""2½ ounces cream sherry1 teaspoon light cream, 1/8 teaspoon grated, 1 teaspoon superfine, 1 teaspoon superfine, ½ ounce Bénédictine, 2 teaspoons water, 1/8 teaspoon grated, 2 ounces cream sherry, 1/8 teaspoon ground, 2½ ounces club soda"",""Sweet(1), Milk-based(3)""" +"FEROCIOUS FLIP,""1½ ounces brandy, ½ ounce light cream, 1 ounce ruby port, 1/8 teaspoon grated, 1 teaspoon superfine"",Milk-based(1)" +"FRENCH REVOLUTION,""2 ounces brandy, 3 ounces chilled, ½ ounce framboise"",Strong" +"HILLARY WALLBANGER,""4 ounces dry white wine, 2 ounces orange juice, ½ ounce Galliano, 1 ounce brandy5 ounces Champagne"",Sweet(1)" +"KIR,""6 ounces dry white wine 1 lemon twist, ½ ounce crème de cassis"",Sour(1)" +KIR ROYALE,6 ounces Champagne or½ ounce crème de cassis,Strong +"MIMOSA,""5 ounces Champagne or1 ounce orange juice, ½ ounce Cointreau or"",Sweet(1)" +PORT AND BRANDY,1½ ounces port1 ounce brandy,Strong +"PORTUGUESE DAISY,""2 ounces ruby port, ½ teaspoon grenadine, 1 ounce brandy, 1 ounce lemon juice, ½ teaspoon superfine"",""Sweet(1), Sour(1)""" +"PORT WINE FLIP,""2½ ounces ruby port ½ ounce light cream, 1/8 teaspoon grated, 1 teaspoon superfine"",Milk-based(1)" +"PORT WINE SANGAREE,""1 teaspoon superfine ½ ounce brandy, 2 teaspoons water, 1/8 teaspoon grated, 2 ounces tawny port, 1/8 teaspoon ground, 2½ ounces club soda"",Sweet(1)" +"RED WINE COOLER,""4 ounces red wine, 2 ounces ginger ale, 2 ounces lemon-lime1 lemon twist"",Sour(3)" +"RUBY PORT COBBLER,""1 teaspoon superfine2½ ounces ruby port, 3 ounces club soda"",Sweet(1)" +"SPRITZER,""5 ounces white wine1 lemon twist, 2 ounces club soda, 4 ounces dry white wine, 2 ounces lemon-lime soda1 orange slice"",""Sweet(2), Sour(3)""" +"ALE FLIP,""1 ounce lemon juice1 tablespoon granulated, 12 ounces ale, ¼ teaspoon ground 1 egg yolk, 1 ounce brandy, juice with 2 ounces of the ale, the ginger, and the"",""Sweet(2), Sour(1)""" +BLACK AND TAN,6 ounces ale6 ounces stout,Strong +"BLACK VELVET,""12 ounces stout, 4 ounces chilled"",Strong" +BLACK VELVETEEN,12 ounces stout4 ounces hard cider,Strong +DEPTH CHARGE,1½ ounces peppermint12 ounces ale or lager,Strong +GINGER BEER SHANDY,4 ounces ginger beer12 ounces chilled ale or,Strong +"LAGER AND BLACK,""1½ ounces Ribena, 12 ounces chilled lager, blackcurrant syrup"",Sweet(1)" +LAGER AND LIME,1½ ounces Rose’s lime12 ounces chilled lager,Sour(1) +LEMON TOP,12 ounces chilled ale or2 ounces lemon-lime,Sour(2) +RED EYE,3 ounces tomato juice12 ounces ale or lager,Sweet(1) +"SHANDY,""4 ounces lemon-lime12 ounces chilled ale or, 6 ounces ale or lager6 ounces hard cider"",Sour(2)" +"STOUT AND BLACK,""1½ ounces Ribena, 12 ounces stout, blackcurrant syrup"",Sweet(1)" +"STOUT SANGAREE,""2 teaspoons superfine1/8 teaspoon grated, 2 teaspoons water, 1/8 teaspoon ground, 12 ounces stout, 1 ounce ruby port"",Strong" +"BEDROOM FARCE,""1 ounce dark rum, 2 ounces heavy cream,, ½ ounce bourbon, 2 teaspoons Galliano, ¼ teaspoon grated, 4 ounces hot chocolate"",""Sweet(1), Milk-based(1)""" +"BLACK STRIPE,""2 ounces dark rum, 2 ounces boiling water, 1 teaspoon honey"",Sweet(1)" +"BLUE BLAZER,""2½ ounces Scotch, 2 ounces boiling water, 1 teaspoon granulated"",Strong" +"CALYPSO COFFEE,""4 ounces hot coffee, ½ ounce dark rum, 1½ ounces Tia Maria2 ounces heavy cream, fully over the back of a teaspoon so that it floats on"",Milk-based(1)" +"CANDLE IN THE WINDOW,""2 ounces light rum, 1 teaspoon cherry brandy, 2 teaspoons bourbon, 4 ounces hot coffee, 1 teaspoon dark crème de2 ounces heavy cream, the cream carefully over the back of a teaspoon so"",""Sweet(1), Milk-based(2)""" +"CARIBBEAN COFFEE,""4 ounces hot coffee, 2 ounces dark rum, 1 teaspoon granulated2 ounces heavy cream"",Milk-based(1)" +"CHOCOLATE CORVETTE,""1½ ounces dark rum, 4 ounces hot chocolate, ½ ounce dark crème de2 ounces heavy cream, over the back of a teaspoon so that it floats on top"",""Sweet(1), Milk-based(1)""" +"CHOCOLATE VICE,""1½ ounces dark rum, 4 ounces hot chocolate, ½ ounce bourbon, 2 ounces heavy cream,, ½ ounce dark crème de"",""Sweet(1), Milk-based(1)""" +"COFFEE ROYALE,""4 ounces hot coffee, 2 ounces brandy, 1 teaspoon granulated2 ounces heavy cream"",Milk-based(1)" +"COMFORTING COFFEE,""4 ounces hot coffee1 teaspoon dark crème de, 1 ounce Southern, 2 ounces heavy cream, 1 ounce bourbon, teaspoon so that it floats on top of the drink., 1 ounce añejo rum, 2 teaspoons Drambuié, ½ ounce bourbon, 4 ounces hot coffee, 2 teaspoons dark crème2 ounces heavy cream, carefully over the back of a teaspoon so that it floats"",Milk-based(2)" +"FIVE BEFORE FLYING,""½ ounce bourbon 2 teaspoons brandy, ½ ounce Southern 2 teaspoons white crème, ½ ounce crème de4 ounces coffee, 2 ounces heavy cream, black of a teaspoon, so that it floats on top of the"",Milk-based(1)" +"GOOD GOLLY,""1½ ounces dark rum, 4 ounces hot coffee, ½ ounce Galliano, 2 ounces heavy cream, 2 teaspoons dark crème, carefully over the back of a teaspoon so that it floats"",Milk-based(1)" +"GRACIOUS ENJEE,""1½ ounces bourbon2 teaspoons dark crème, ½ ounce Southern, 4 ounces hot malted milk"",Milk-based(1)" +"HOT BUTTERED RUM,""1 teaspoon brown sugar1 teaspoon unsalted, 4 ounces boiling water, 1/8 teaspoon grated, 2 ounces dark rum"",Sweet(1)" +"HOT DARING DYLAN,""1½ ounces tequila, 2 ounces heavy cream, 1 ounce Kahlúa, 4 ounces Mexican hot, fully over the back of a teaspoon so that it floats on"",Milk-based(1)" +"HOT MOLLIFIER,""1½ ounces dark rum4 ounces hot coffee, ½ ounce Tia Maria 2 ounces heavy cream, the back of a teaspoon so that it floats on top of the"",Milk-based(1)" +"HOT PENNY RUM,""1½ ounces añejo rum, 4 ounces hot coffee, ½ ounce bourbon, 2 ounces heavy cream, 2 teaspoons dark crème, over the back of a teaspoon so that it floats on top"",Milk-based(1)" +"HOT PIPER,""2 ounces tequila, ½ ounce dark crème de, 2 teaspoons lemon juice, 4 ounces hot coffee"",""Sweet(1), Sour(1)""" +"IRISH COFFEE,""4 ounces hot coffee, 2 ounces Irish whiskey, 1 teaspoon granulated2 ounces heavy cream, 4 ounces hot coffee ½ ounce brandy, 1½ ounces amaretto2 ounces heavy cream, fully over the back of a teaspoon so that it floats on"",Milk-based(2)" +"MEXICAN COFFEE,""4 ounces hot coffee2 ounces heavy cream, 2 ounces Kahlúa, back of a teaspoon so that it floats on top of the"",Milk-based(1)" +"MONASTERY COFFEE,""4 ounces hot coffee, 2 ounces Bénédictine, ½ teaspoon granulated2 ounces heavy cream"",Milk-based(1)" +"PRINCE CHARLES COFFEE,""4 ounces hot coffee2 ounces heavy cream, 2 ounces Drambuie, the back of a teaspoon so that it floats on top of the"",Milk-based(1)" +"SQUIRE RACINE,""1½ ounces dark rum4 ounces hot malted milk, ½ ounce Southern"",Milk-based(1)" +"RITCHIE RITCHIE,""1½ ounces añejo rum, 4 ounces hot coffee, 2 teaspoons dark crème 2 ounces heavy cream, ¼ teaspoons ground, 2 teaspoons white crème, cream carefully over the back of a teaspoon so that"",Milk-based(2)" +"SOUTHFORK COFFEE,""4 ounces hot coffee, 2 ounces heavy cream, 1½ ounces bourbon, ½ ounce dark crème de, cream carefully over the back of a teaspoon so that"",Milk-based(2)" +"TOM AND JERRY,""6 ounces hot milk, 1/8 teaspoon baking soda½ ounce brandy, 1/8 teaspoon grated, 2 ounces plus 1 teaspoon, the baking soda, sugar, and 1 teaspoon of the rum."",""Sweet(3), Milk-based(1)""" +BOMBAY PUNCH,,Missing Data +"BROWN BETTY,""12 ounces (1½ cups), 4 (12-ounce) bottles, ½ teaspoon grated, ¼ teaspoon ground"",Strong" +"CHAMPAGNE RUM PUNCH,""4 ounces Drambuie, 4 ounces dry sherry, 1 teaspoon grated nutmeg, 2 ounces lemon juice, 8 ounces (1 cup) club"",""Sweet(1), Sour(1)""" +"CLARET PUNCH,""4 ounces bourbon, 8 ounces (1 cup), 12 ounces (1½ cups), 4 ounces apricot brandy"",Strong" +"CREOLE CHAMPAGNE PUNCH,""1 pineapple, peeled and4 ounces Cointreau or, 2 ounces brandy"",Sweet(2)" +EGGNOG,2 teaspoons vanilla1 quart milk,Milk-based(1) +FISH HOUSE PUNCH,12 ounces (1½ cups),Strong +FRANK DAVIS PUNCH,,Missing Data +"HOT WHISKEY PUNCH +MAKES,""2 oranges, peeled and cut½ teaspoon ground, ½ teaspoon ground mace 1 (750-ml) bottle ruby or, ½ teaspoon grated, 5 ounces grapefruit juice1 orange, cut into slices, 2 ounces grenadine, ½ ounce orange bitters"",""Sweet(2), Sour(1)""" +"SUNSET PUNCH,""8 ounces Cointreau or, 2 (750-ml) bottles chilled3 ounces cherry brandy, 3 ounces brandy, 6 ounces maraschino"",Sweet(1)" +"TARTAN CHAMPAGNE PUNCH,""4 ounces Drambuie, 16 ounces (2 cups) club, 4 ounces brandy, 4 ounces maraschino"",Strong" +TEXAS BAR PUNCH,,Missing Data +"WEDDING BELL PUNCH,""8 ounces sweet vermouth, 16 ounces (2 cups), 16 ounces (2 cups) club, 12 ounces (1½ cups), 16 ounces (2 cups), 4 ounces crème de cacao2 oranges, cut into slices"",Strong" +"ABBEY COCKTAIL,""2 ounces gin, 2 dashes orange bitters, 1½ ounces orange juice1 maraschino cherry"",""Sweet(2), Sour(1)""" +"ALASKA,""2 ounces gin, 1 dash orange bitters, ½ ounce yellow"",Sour(1)" +"ALEXANDER,""1½ ounces gin, 1 ounce light cream, 1 ounce white crème de1/8 teaspoon grated"",Milk-based(1)" +"ARCADIA,""1½ ounces gin, ½ ounce grapefruit juice, ½ ounce Galliano, ½ ounce crème de"",Sweet(2)" +"ARCHBISHOP,""2 ounces gin, 1 teaspoon Bènèdictine, 1 ounce green ginger1 lime wedge"",Sour(1)" +"ARTHUR TOMPKINS,""2 ounces gin, 2 teaspoons lemon juice, ½ ounce Grand Marnier1 lemon twist"",""Sweet(1), Sour(2)""" +"ARTILLERY,""2 ounces gin, 2 dashes bitters, ½ ounce sweet vermouth"",Sour(1)" +"BANNISTER,""1 teaspoon Pernod, 1½ ounces gin, ½ teaspoon grenadine, 1 ounce applejack, 1 ounce gin, ½ ounce dark crème de, ½ ounce Scotch, ½ ounce light rum1 ounce light cream"",""Sweet(1), Milk-based(1)""" +"BEAUTY SPOT,""1½ ounces gin, 2 teaspoons white crème½ teaspoon grenadine"",Strong" +"BENNET COCKTAIL,""1½ ounces gin, 1 dash orange bitters, ½ ounce lime juice, ½ teaspoon superfine"",""Sweet(1), Sour(2)""" +"BERMUDA ROSE,""Crushed ice ½ ounce apricot brandy, 2 ounces gin1 teaspoon grenadine, 1½ ounces gin, ½ ounce dry vermouth, ½ ounce sweet vermouth1 teaspoon B & B"",Strong" +"BERNARDO,""2 ounces gin, 2 teaspoons lemon juice, ½ ounce Cointreau or2 dashes bitters"",""Sweet(1), Sour(2)""" +"BLUEBIRD,""½ ounce blue Curaçao, 1½ ounces gin, 2 dashes bitters, ½ ounce Cointreau or1 lemon twist"",Sour(2)" +"BLUE COWBOY,""½ ounce blue Curaçao, 1½ ounces gin"",Strong" +"BOOMERANG,""2 ounces gin, ½ teaspoon maraschino, ½ ounce dry vermouth, 2 dashes bitters"",Sour(1)" +"BOXCAR,""1½ ounces gin, 1 teaspoon lemon juice, 1 ounce Cointreau or½ teaspoon grenadine, 1½ ounces gin, ½ ounce orange juice, 1 teaspoon dry vermouth"",""Sweet(2), Sour(1)""" +"BRONX COCKTAIL,""2 ounces gin, ½ ounce orange juice, 1 teaspoon dry vermouth, 1 teaspoon sweet"",Sweet(1)" +"CABARET,""1 ounce gin, 2 dashes bitters, ½ ounce dry vermouth1 maraschino cherry, ½ ounce Bènèdictine"",""Sweet(1), Sour(1)""" +"CAPTAIN COOK,""1½ ounces gin, 1 ounce orange juice, ½ ounce maraschino"",Sweet(1)" +"CAROLI,""Crushed ice ½ ounce apricot brandy, 2 ounces gin1 dash orange bitters"",Sour(1)" +"CARUSO,""1½ ounces gin, 1 ounce green crème de, 1 ounce dry vermouth"",Strong" +"CARUSO BLANCO,""1½ ounces gin, 1 ounce white crème de, 1 ounce dry vermouth"",Strong" +"CASINO,""2 ounces gin, 2 dashes orange bitters, ½ ounce lemon juice, 1 teaspoon maraschino, 2 ounces gin, 1 dash orange bitters, ½ ounce lemon juice, 1 teaspoon maraschino"",""Sweet(2), Sour(4)""" +"CHELSEA HOTEL,""1½ ounces gin, 2 teaspoons lemon juice, ½ ounce Cointreau or"",""Sweet(1), Sour(1)""" +"CONFIRMED BACHELOR,""½ teaspoon Rose’s lime, 1½ ounces gin, 1 teaspoon grenadine1 egg white"",Sour(1)" +"CRIMSON SUNSET,""2 ounces gin, ½ teaspoon grenadine, 2 teaspoons lemon juice½ ounce tawny port"",""Sweet(1), Sour(1)""" +"DELMONICO COCKTAIL,""1 ounce gin, ½ ounce dry vermouth, ½ ounce brandy, 1 dash bitters, ½ ounce sweet vermouth1 lemon twist, 2 ounces gin, ½ ounce Campari, ½ ounce dry vermouth1 lemon twist"",Sour(3)" +"DRAGONFLY,""1½ ounces gin, 4 ounces ginger ale"",Strong" +"EMERALD FOREST,""1 teaspoon white crème, 1½ ounces gin, 1 teaspoon green crème"",Strong" +"EMERALD ISLE,""1 dash bitters, 2 ounces gin, 2 teaspoons green crème"",Sour(1)" +"EMERSON,""2 ounces gin, 2 teaspoons lemon juice, 1 ounce sweet vermouth, 1 teaspoon maraschino, 1 ounce gin, ½ ounce dry vermouth, ½ ounce cream sherry½ teaspoon Grand, ½ ounce Dubonnet"",""Sweet(1), Sour(1), Milk-based(1)""" +"FARMER GILES,""2 ounces gin, 2 dashes bitters, ½ ounce dry vermouth, ½ ounce sweet vermouth, 2 ounces gin, 1 ounce orange juice, ½ ounce Pernod½ teaspoon grenadine"",""Sweet(1), Sour(1)""" +"FAT FACE,""1½ ounces gin, 1 teaspoon grenadine, ½ ounce apricot brandy1 egg white"",Strong" +"FINO MARTINI,""2½ ounces gin or vodka 1 lemon twist, 1½ teaspoons fino sherry"",Sour(1)" +"FLEET STREET,""1½ ounces gin, 1 teaspoon Cointreau or, ½ ounce sweet vermouth, 1 teaspoon dry vermouth 1 teaspoon lemon juice"",""Sweet(1), Sour(1)""" +"FLYING DUTCHMAN,""2 ounces gin, ½ ounce Cointreau or"",Strong" +"GENT OF THE JURY,""2 ounces gin, ½ ounce lemon juice, ½ ounce cherry brandy 1 dash bitters, 3 ounces pineapple juice"",""Sweet(5), Sour(2)""" +"GIBSON,""2½ ounces gin, 1½ teaspoons dry"",Strong" +"GIMLET,""2 ounces gin, ½ ounce Rose’s lime juice"",""Sweet(1), Sour(1)""" +"GIN AND BITTER LEMON,""1½ ounces gin, 4 ounces tonic water, ½ ounce lemon juice, ½ teaspoon superfine"",""Sweet(1), Sour(1)""" +"GIN AND PINK,""2 ounces gin, 2 dashes bitters, 5 ounces tonic water1 lemon twist, 1½ ounces gin, 1 ounce lemon juice, 1 ounce orange juice½ teaspoon grenadine"",""Sweet(2), Sour(3)""" +"GIN AND TONIC,""2 ounces gin, 5 ounces tonic water"",Strong" +"GIN BLOODY MARY,""2½ ounces gin, 3 dashes Worcestershire, 5 ounces tomato juice, ½ ounce lemon juice, 1 dash Tabasco sauce, 1/8 teaspoon salt, 1/8 teaspoon black pepper"",""Sweet(2), Sour(1)""" +"GIN COBBLER,""1 teaspoon superfine2 ounces gin, 3 ounces club soda"",Sweet(1)" +"GIN COOLER,""2 ounces gin, 4 ounces lemon-lime"",Sour(2)" +"GIN DAISY,""2 ounces gin, ½ teaspoon grenadine, 1 ounce lemon juice 1 maraschino cherry, ½ teaspoon superfine1 orange slice"",""Sweet(2), Sour(1)""" +"GIN FIX,""1 teaspoon superfineCrushed ice, 2 ounces gin, 1 ounce lemon juice 1 maraschino cherry, 2 teaspoons water"",""Sweet(2), Sour(1)""" +"GIN FIZZ,""2½ ounces gin, 4 ounces club soda, 1 ounce lemon juice, 1 teaspoon superfine"",""Sweet(2), Sour(1)""" +"GIN SANGAREE,""1 teaspoon superfine ½ ounce tawny port, 2 teaspoons water, 1/8 teaspoon grated, 1½ ounces gin, 1/8 teaspoon ground, 2½ ounces club soda"",Sweet(1)" +"GIN SLING,""1 teaspoon superfine1 ounce lemon juice, 2 ounces gin, 2 teaspoons water"",""Sweet(1), Sour(1)""" +"GIN SMASH,""1 ounce club soda, 1 teaspoon superfine2½ ounces gin"",Sweet(1)" +"GIN SOUR,""2 ounces gin, 1 ounce lemon juice 1 maraschino cherry, ½ teaspoon superfine"",""Sweet(2), Sour(1)""" +"GIN SWIZZLE,""1½ ounces lime juice2 ounces gin, 1 teaspoon superfine 1 dash bitters, 3 ounces club soda"",""Sweet(2), Sour(2)""" +"GOLDEN BRONX,""2 ounces gin, ½ ounce orange juice, 1 teaspoon dry vermouth1 egg yolk, 1 teaspoon sweet"",Sweet(1)" +"GRASS SKIRT,""1½ ounces gin, 1 ounce pineapple juice, 1 ounce Cointreau or½ teaspoon grenadine"",Sweet(3)" +"GUMBO FIZZ,""2 ounces gin, 1 teaspoon Cointreau or, 1 ounce lemon juice, 1 teaspoon superfine1 ounce heavy cream, 3 ounces club soda"",""Sweet(2), Sour(1), Milk-based(1)""" +"GYPSY,""1½ ounces gin, 1 ounce sweet vermouth"",Strong" +"HORNPIPE,""1½ ounces gin, 2 teaspoons cherry"",Sweet(1)" +"JET BLACK,""1½ ounces gin, 1 teaspoon black, 2 teaspoons sweet, 1½ ounces gin ½ ounce yellow, ½ ounce green"",Strong" +"JOCKEY CLUB,""2 ounces gin, teaspoons, 2 teaspoons crème de, 1 dash orange bitters, 2 teaspoons white crème, 1½ ounces gin, ½ ounce lemon juice, ½ ounce kirsch, ½ teaspoon superfine, 2 teaspoons apricot"",""Sweet(1), Sour(2)""" +"LADYFINGER,""1½ ounces gin, 1 ounce lemon juice, ½ teaspoon superfine, ½ ounce cherry brandy"",""Sweet(2), Sour(1)""" +"LA STEPHANIQUE,""1½ ounces gin, ½ ounce sweet vermouth, ½ ounce Cointreau or1 dash bitters"",Sour(1)" +"LEANING TOWER,""Crushed ice 1 teaspoon dry vermouth, 2 ounces gin2 dashes orange bitters"",Sour(1)" +"LONDON TOWN,""1½ ounces gin, 2 dashes orange bitters, ½ ounce maraschino, 1½ ounces gin, 1 teaspoon brandy, ½ ounce Cointreau or1 ounce lemon juice"",""Sweet(1), Sour(2)""" +MARTINI,,Missing Data +"MARTINI COOLER,""1½ ounces gin, 1 teaspoon dry vermouth, 4 ounces lemon-lime"",Sour(2)" +"MERRY WIDOW,""1½ ounces gin, 1 teaspoon Pernod, 1 ounce dry vermouth 2 dashes orange bitters, 1 teaspoon Bénédictine1 lemon wedge"",Sour(2)" +"MONKEY GLAND COCKTAIL,""2 ounces gin, ½ ounce orange juice, 1 teaspoon Bénédictine1 teaspoon grenadine, 2 ounces gin, ½ ounce Grand Marnier, ½ ounce Dubonnet"",Sweet(1)" +"OAXACA JIM,""2 ounces gin, 2 dashes bitters, 1 ounce orange juice, 1 ounce grapefruit juice1 maraschino cherry, ½ ounce apricot brandy, 1½ ounces gin½ ounce Lillet"",""Sweet(4), Sour(1)""" +"OPAL COCKTAIL,""1½ ounces gin, 1 ounce orange juice, ½ ounce Cointreau or2 dashes orange bitters"",""Sweet(1), Sour(1)""" +"OPERA COCKTAIL,""1½ ounces gin, 1 dash bitters, ½ ounce Dubonnet 1 maraschino cherry, ½ ounce maraschino"",""Sweet(1), Sour(1)""" +"ORANGE BLOSSOM,""2 ounces gin, 1 ounce orange juice, 1 teaspoon superfine"",Sweet(1)" +"THE ORIGINAL SINGAPORE SLING,""1 ounce gin, 1 ounce cherry brandy, 1 ounce Bénédictine4 ounces club soda"",Sweet(2)" +"THE OTHER ORIGINAL SINGAPORE +SLING,""2 ounces gin, ¼ teaspoon Bénédictine, 1 ounce cherry brandy¼ teaspoon brandy, 1 ounce lime juice"",""Sweet(2), Sour(1)""" +"PETTICOAT LANE,""2 ounces gin, ½ ounce Campari, ½ ounce sweet vermouth1 lemon twist, 2 ounces gin, 1 ounce light cream, 1 ounce lemon juice 1 teaspoon grenadine, 1 teaspoon superfine4 ounces club soda"",""Sweet(2), Sour(2), Milk-based(1)""" +"PINK GIN,""3 dashes bitters, 2 ounces gin, preferably"",Sour(1)" +"PINK LADY,""2 ounces gin, ½ ounce heavy cream, 1 teaspoon grenadine1 egg white, ½ teaspoon cherry"",""Sweet(1), Milk-based(1)""" +"PINK PUSSYCAT,""2 ounces gin, 1 teaspoon cherry brandy, 4 ounces pineapple juice"",Sweet(4)" +"PRINCETON COCKTAIL,""1½ ounces gin, 1 ounce lime juice, 1 ounce dry vermouth"",""Sweet(1), Sour(1)""" +"RAMOS FIZZ,""2 ounces gin, 1 teaspoon Cointreau or, 1 ounce lemon juice, 1 teaspoon superfine½ ounce light cream, 3 ounces club soda"",""Sweet(2), Sour(1), Milk-based(1)""" +"RED GIN,""2 ounces gin, 1 teaspoon Cherry"",Sweet(1)" +"RED RUBY,""1½ ounces gin, ½ ounce dry vermouth, ½ ounce cherry brandy"",Sweet(1)" +"ROOT BEER FIZZ,""2 ounces gin, 4 ounces root beer, 1 ounce lemon juice 1 maraschino cherry, 1 teaspoon superfine"",""Sweet(2), Sour(1)""" +"ROSE COCKTAIL,""2 teaspoons powdered ½ ounce dry vermouth, ½ ounce lemon juice, ½ ounce lime juice, 1½ ounces gin, 1 teaspoon grenadine, ½ ounce apricot brandy, 2 ounces gin1 teaspoon Chambord"",""Sweet(2), Sour(2)""" +"ROYALTY FIZZ,""2 ounces gin, 1 ounce lemon juice, 3 ounces club soda, ½ teaspoon blue Curaçao, 1 teaspoon superfine"",""Sweet(2), Sour(1)""" +"RUBY IN THE ROUGH,""1½ ounces gin, 1 teaspoon sweet, ½ ounce cherry brandy"",Sweet(1)" +"SHADY LADY,""2 ounces gin, 2 dashes bitters, ½ ounce dry vermouth1 lemon twist"",Sour(2)" +"SILVER BRONX,""2 ounces gin, 1 teaspoon orange juice, ½ ounce dry vermouth, ½ ounce sweet vermouth"",Sweet(1)" +"SILVER BULLET,""2½ ounces gin, 1½ teaspoons Scotch"",Strong" +"SINGAPORE SLING,""1 teaspoon superfine½ ounce cherry brandy, 1 ounce lemon juice 1 orange slice, 2½ ounces gin, 4 ounces club soda"",""Sweet(3), Sour(1)""" +"SMART CHRISTINE,""2 ounces gin, 2 ounces orange juice, ½ ounce Bénédictine1 maraschino cherry"",Sweet(2)" +"SUGAR DADDY,""2 ounces gin, 1 ounce pineapple juice, 2 teaspoons maraschino1 dash bitters"",""Sweet(3), Sour(1)""" +"TEN QUIDDER,""1½ ounces gin, 1 dash bitters, 1 ounce Cointreau or1 teaspoon blue Curaçao, 2 ounces gin, 3 ounces club soda, 1 ounce lemon juice 1 maraschino cherry, 1 teaspoon superfine1 orange slice"",""Sweet(3), Sour(2)""" +"TWENTY THOUSAND LEAGUES,""1 teaspoon Pernod, 1½ ounces gin, 2 dashes orange bitters, 1 ounce dry vermouth"",Sour(1)" +"UNION JACK,""1½ ounces gin, 1 teaspoon grenadine, ½ ounce sloe gin"",Strong" +"WHITE LADY,""2 ounces gin, 1 teaspoon superfine, 1 ounce light cream"",Milk-based(1)" +"WIDOW WITH A SECRET,""1½ ounces gin, 1 teaspoon Campari, 1 ounce sweet vermouth2 dashes orange bitters, 1 teaspoon Bénédictine 1 maraschino cherry, 1 teaspoon Pernod, 2 ounces gin, 1 teaspoon blue Curaçao, ½ ounce dry vermouth1 dash bitters"",""Sweet(1), Sour(2)""" diff --git a/botender/interaction/interaction_coordinator.py b/botender/interaction/interaction_coordinator.py index a83a120..601fa20 100644 --- a/botender/interaction/interaction_coordinator.py +++ b/botender/interaction/interaction_coordinator.py @@ -4,12 +4,16 @@ import os import time from abc import ABC, abstractmethod +from typing import Literal import numpy as np from furhat_remote_api import FurhatRemoteAPI # type: ignore from openai import OpenAI +from openai.types.chat import ChatCompletionMessageParam +from pkg_resources import resource_filename from botender.interaction import gestures +from botender.interaction.drink_recommendation import DrinkRecommender from botender.interaction.gaze_coordinator import GazeClasses, GazeCoordinatorThread from botender.perception.detectors.speech_detector import SpeechDetector from botender.perception.perception_manager import PerceptionManager @@ -17,6 +21,74 @@ logger = logging.getLogger(__name__) +DRINKS_DATA_PATH = resource_filename( + __name__, "drinks/drinks_with_categories_and_ranks.csv" +) + + +def get_openai_response(messages: list[ChatCompletionMessageParam]) -> str: + """Returns the response from OpenAI API""" + client = OpenAI() + response = client.chat.completions.create( + model="gpt-3.5-turbo", + messages=messages, + temperature=1, + max_tokens=256, + top_p=1, + frequency_penalty=0, + presence_penalty=0, + ) + if (answer := response.choices[0].message.content) is None: + raise ValueError("OpenAI API returned None") + logger.debug(f"OpenAI API response: {answer}") + return answer + + +def get_valence_from_message(message: str) -> Literal["Positive"] | Literal["Negative"]: + """Returns the valence from the message""" + + if os.getenv("ENABLE_OPENAI_API") != "True": + return "Positive" + + chat_messages = [ + { + "role": "system", + "content": """You are an endpoint. + You will receive a text that a user said upon asking a question. + The question is some kind of yes or no question. The user's response can therefore be either positive or negative. + + From the user input you will extract whether the user answered the question in a positive or negative manner. + + If the user sounds uncertain or asks a counterquestion, it usually means that the response is negative. + + If the user doesn't say anything that can be interpreted as a response, return Error. + + The response should have the following structure: + [Positive | Negative | Error] + + Examples: + Input: "Ah yeah this drink sounds tasty!" + Your response: Positive + + Input: "Maybe another time." + Your response: Negative""", + }, + { + "role": "user", + "content": message, + }, + ] + try: + valence = get_openai_response(chat_messages) # type: ignore[arg-type] + if valence == "Error": + raise ValueError("OpenAI API returned Error") + if valence not in ["Positive", "Negative"]: + raise ValueError("OpenAI API returned invalid valence") + except ValueError as e: + raise ValueError from e + + return valence # type: ignore[return-value] + class InteractionCoordinator: """The InteractionCoordinator is responsible for coordinating the interaction and starting @@ -30,8 +102,10 @@ class InteractionCoordinator: _speech_detector: SpeechDetector _gaze_coordinator: GazeCoordinatorThread _furhat: FurhatRemoteAPI + _recommender: DrinkRecommender _state: InteractionState _previous_state: InteractionState | None + _last_emotion_detection: float = 0 user_info: dict[str, str] def __init__( @@ -47,6 +121,7 @@ def __init__( self._webcam_processor = webcam_processor # Used to interact with GUI self._furhat = furhat # Used to interact with Furhat self._gaze_coordinator = gaze_coordinator + self._recommender = DrinkRecommender(DRINKS_DATA_PATH) self._speech_detector = SpeechDetector(self._furhat) self._state = None # type: ignore[assignment] self.transition_to(GreetingState()) # Initial state @@ -65,12 +140,15 @@ def handle(self): def listen(self) -> str: """Listens to the user and returns the text.""" + self._furhat.gesture( + body=gestures.get_random_gesture("listening"), blocking=False + ) return self._speech_detector.capture_speech() def get_emotion(self) -> str: """Returns the emotion of the user.""" - while self._perception_manager.detects_emotion(): - time.sleep(1) + # while self._perception_manager.detects_emotion(): + # time.sleep(1) if self._perception_manager.current_result is None: return "neutral" return self._perception_manager.current_result.emotion @@ -104,6 +182,10 @@ def interact(self) -> InteractionCoordinator | None: self.transition_to(SearchState()) break + if time.time() - self._last_emotion_detection > 5: + self._perception_manager.detect_emotion() + self._last_emotion_detection = time.time() + return self @@ -161,49 +243,54 @@ class IntroductionState(InteractionState): "It's a pleasure to meet you! What is your name?", ] + @staticmethod + def get_name_from_message(message: str) -> str: + """Returns the name from the message""" + + if os.getenv("ENABLE_OPENAI_API") != "True": + return "Paul" + + chat_messages = [ + { + "role": "system", + "content": 'You are an endpoint.\nYou will receive a text that a user said upon asking for his/her name.\n\nLook for the name of the user in the text.\nIf you are certain about the name return it.\nIf you are uncertain, only return "Error".\n\nThe response should have the following structure:\n\n[NAME OR ERROR]\n\nExamples:\nInput: "Ah yeah so good to meet you how exciting I\'m John by the way"\n\nYour response:\nJohn\n\nInput: "I have never seen anything like you Botender."\n\nYour response:\nError', + }, + { + "role": "user", + "content": message, + }, + ] + try: + name = get_openai_response(chat_messages) # type: ignore[arg-type] + if name == "Error": + raise ValueError("OpenAI API returned Error") + except ValueError as e: + raise ValueError from e + + return name + def handle(self): furhat = self.context._furhat introduction_question = self.INTRODUCTION_QUESTIONS[ np.random.randint(0, len(self.INTRODUCTION_QUESTIONS)) ] - # TODO Add gestures + furhat.gesture(name="Smile", blocking=False) furhat.say(text=introduction_question, blocking=True) + # self._context._perception_manager.detect_emotion() user_response = self.context.listen() - self._context._perception_manager.detect_emotion() - if os.getenv("ENABLE_OPENAI_API") != "True": - self.context.user_info["name"] = "Paul" - else: - client = OpenAI() - response = client.chat.completions.create( - model="gpt-3.5-turbo", - messages=[ - { - "role": "system", - "content": 'You are an endpoint.\nYou will receive a text that a user said upon asking for his/her name.\n\nLook for the name of the user in the text.\nIf you are certain about the name return it.\nIf you are uncertain, only return "Error".\n\nThe response should have the following structure:\n\n[NAME OR ERROR]\n\nExamples:\nInput: "Ah yeah so good to meet you how exciting I\'m John by the way"\n\nYour response:\nJohn\n\nInput: "I have never seen anything like you Botender."\n\nYour response:\nError', - }, - { - "role": "user", - "content": user_response, - }, - ], - temperature=1, - max_tokens=256, - top_p=1, - frequency_penalty=0, - presence_penalty=0, + try: + name = self.get_name_from_message(user_response) + except ValueError: + furhat.gesture( + body=gestures.get_random_gesture("understand_issue"), + blocking=False, ) + furhat.say(text="I'm sorry, I didn't quite get that.", blocking=True) + return - name = response.choices[0].message.content - if name == "Error" or name is None: - furhat.gesture( - body=gestures.get_random_gesture("understand_issue"), - blocking=False, - ) - furhat.say(text="I'm sorry, I didn't quite get that.", blocking=True) - return - self.context.user_info["name"] = name + self.context.user_info["name"] = name furhat.gesture(name="Smile", blocking=False) furhat.say( @@ -215,27 +302,315 @@ def handle(self): class AcknowledgeEmotionState(InteractionState): """State to handle aknowledging the user's emotion""" + ACKNOWLEDGE_EMOTION_TEXTS: list[str] = [ + "You seem {emotion}.", + "You look {emotion}.", + "You seem {emotion} today.", + "You look {emotion} today.", + ] + + def handle(self): + furhat = self.context._furhat + + emotion = self.context.get_emotion() + if emotion == "happy" or emotion == "neutral": + furhat.gesture(body=gestures.get_random_gesture("happy"), blocking=False) + elif emotion == "sad" or emotion == "angry": + furhat.gesture(body=gestures.get_random_gesture("concern"), blocking=False) + + acknowledge_emotion_text = self.ACKNOWLEDGE_EMOTION_TEXTS[ + np.random.randint(0, len(self.ACKNOWLEDGE_EMOTION_TEXTS)) + ] + + # Evaluation of f-string was postponed to runtime + acknowledge_emotion_text = eval(f"f'{acknowledge_emotion_text}'") + + furhat.say(text=acknowledge_emotion_text, blocking=True) + self.context.transition_to(AskDrinkState()) + + +class AskDrinkState(InteractionState): + """State to start the drink recommendation flow""" + + DRINK_QUESTIONS = [ + "Can I interest you in a drink?", + "Would you like a drink?", + "How about a drink?", + "Are you in the mood for a drink?", + ] + + POSITIVE_VALENCE_RESPONSES = [ + "That's great!", + "That's awesome!", + "That's great to hear!", + "That's great to know!", + ] + + NEGATIVE_VALENCE_RESPONSES = [ + "I'm sorry to hear that.", + "I'm sorry to hear that, maybe next time.", + "I'm sorry to hear that, maybe next time you will be in the mood for a drink.", + "Alright, just let me know if you change your mind.", + ] + + def handle(self): + furhat = self.context._furhat + drink_question = self.DRINK_QUESTIONS[ + np.random.randint(0, len(self.DRINK_QUESTIONS)) + ] + furhat.say(text=drink_question, blocking=True) + + user_response = self.context.listen() + + try: + valence = get_valence_from_message(user_response) + except ValueError: + furhat.gesture( + body=gestures.get_random_gesture("understand_issue"), + blocking=False, + ) + furhat.say(text="I'm sorry, I didn't quite get that.", blocking=True) + return + + if valence == "Positive": + furhat.gesture(body=gestures.get_random_gesture("happy"), blocking=False) + positive_valence_response = self.POSITIVE_VALENCE_RESPONSES[ + np.random.randint(0, len(self.POSITIVE_VALENCE_RESPONSES)) + ] + furhat.say(text=positive_valence_response, blocking=True) + self.context.transition_to(AskTastePreference()) + elif valence == "Negative": + furhat.gesture(body=gestures.get_random_gesture("concern"), blocking=False) + negative_valence_response = self.NEGATIVE_VALENCE_RESPONSES[ + np.random.randint(0, len(self.NEGATIVE_VALENCE_RESPONSES)) + ] + furhat.say(text=negative_valence_response, blocking=True) + self.context.transition_to(FarewellState()) + + +class AskTastePreference(InteractionState): + TASTE_PREFERENCE_QUESTIONS = [ + "What kind of cocktail do you like? I have sweet, milk-based, sour, and strong cocktails.", + "My cocktails are sour, sweet, milk-based, or strong. What do you prefer?", + ] + + TASTE = Literal["Sour", "Sweet", "Milk-based", "Strong"] + + def get_taste_preference_from_message(self, message: str) -> TASTE: + """Returns the taste preference from the message""" + + if os.getenv("ENABLE_OPENAI_API") != "True": + return "Sour" + + chat_messages = [ + { + "role": "system", + "content": """You are an endpoint. + You will receive a text that a user said upon asking for his/her taste preference. + Available tastes are + Sweet, Sour, Milk-based, and Strong. + + Look for the taste preference of the user in the text. + + If you are certain about the taste preference return it. + You can also infer a taste from the message, if it fits. For example, "I have had a rough day" requires something strong and "I'm a real sweet-tooth" probably means the user wants something sweet. + + If it is completely uncertain, return Error. + + The response should have the following structure: + [Sweet | Sour | Milk-based | Strong | Error] + + Examples: + + Input: "I like sweet cocktails." + Your response: Sweet + + Input: "I want something heavy with a lot of alcohol." + Your response: Strong""", + }, + { + "role": "user", + "content": message, + }, + ] + try: + taste_preference = get_openai_response(chat_messages) # type: ignore[arg-type] + if taste_preference == "Error": + raise ValueError("OpenAI API returned Error") + if taste_preference not in ["Sour", "Sweet", "Milk-based", "Strong"]: + raise ValueError("OpenAI API returned invalid taste preference") + except ValueError as e: + raise ValueError from e + + return taste_preference # type: ignore[return-value] + def handle(self): furhat = self.context._furhat + taste_preference_question = self.TASTE_PREFERENCE_QUESTIONS[ + np.random.randint(0, len(self.TASTE_PREFERENCE_QUESTIONS)) + ] + furhat.say(text=taste_preference_question, blocking=True) + + user_response = self.context.listen() + + try: + taste_preference = self.get_taste_preference_from_message(user_response) + except ValueError: + furhat.gesture( + body=gestures.get_random_gesture("understand_issue"), + blocking=False, + ) + furhat.say(text="I'm sorry, I didn't quite get that.", blocking=True) + return + + self.context.user_info["taste_preference"] = taste_preference + + self.context.transition_to(RecommendDrinksState()) + + +class RecommendDrinksState(InteractionState): + """State to start the drink recommendation flow""" + + def generate_cocktail_description(self, cocktail_name: str, ingredients: str): + """Returns a cocktail description based on the ingredients""" + + default_description = f"I can recommend you a {cocktail_name}." + + if os.getenv("ENABLE_OPENAI_API") != "True": + return default_description + + chat_messages = [ + { + "role": "system", + "content": """You are an endpoint. + You will receive a cocktail name along with its ingredients. + Your task is to generate an enticing but short description of the + cocktail in the following format: I can recommend you a "cocktailname". + It is _ Examples: Input: KING OF KINGSTON,"1 ounce gin, 1 teaspoon grapefruit, 0.5 ounce creme de, + 1 teaspoon grenadine, 1 ounce pineapple juice1 ounce heavy cream, 1 ounce dark rum, + 1 ounce light rum, ½ ounce cherry brandy 1 pineapple slice, 4 ounces pineapple juiceYour response: + I can recommend you a King of Kingston. It is a delightful mix with a high sweetness score, + combining the unique flavors of grapefruit and pineapple with a touch of creamy crème de cacao.""", + }, + { + "role": "user", + "content": f'name: "{cocktail_name}" , ingredients: {ingredients}', + }, + ] + try: + cocktail_description = get_openai_response(chat_messages) # type: ignore[arg-type] + if cocktail_description == "Error": + raise ValueError("OpenAI API returned Error") + except ValueError: + return default_description + + return cocktail_description # type: ignore[return-value] + + def handle(self): + recommender = self.context._recommender + furhat = self.context._furhat emotion = self.context.get_emotion() - if emotion == "happy": - furhat.gesture(name="Smile", blocking=False) - elif emotion == "sad": - furhat.gesture(name="ExpressSad", blocking=False) - elif emotion == "angry": - furhat.gesture(name="ExpressFear", blocking=False) - furhat.say(text=f"You seem {emotion}.", blocking=True) - self.context.transition_to(FarewellState()) + + taste_preference = self.context.user_info["taste_preference"] + + if taste_preference not in ["Sour", "Sweet", "Milk-based", "Strong"]: + self.context.transition_to(AskTastePreference()) + return + + # Call the recommend_drink method to get a recommendation + random_recommendation = recommender.recommend_drink(emotion, taste_preference) + + # Since the recommendation is a DataFrame, extract the first row + # and access the 'Cocktail' and 'Ingredients' columns + if not random_recommendation.empty: + cocktail_name = random_recommendation["Cocktail"].iloc[0] + self.context.user_info["cocktail_name"] = cocktail_name + ingredients = random_recommendation["Ingredients"].iloc[0] + + furhat.gesture(body=gestures.get_random_gesture("thinking"), blocking=False) + cocktail_description = self.generate_cocktail_description( + cocktail_name, ingredients + ) + furhat.say(text=cocktail_description, blocking=True) + + self.context.transition_to(FeedbackForDrinkRecommendationState()) + else: + furhat.gesture( + body=gestures.get_random_gesture("concern"), + blocking=False, + ) + furhat.say( + text="I'm sorry, but no recommendation is available for the given criteria.", + blocking=True, + ) + self.context.transition_to(AskTastePreference()) + return + + +class FeedbackForDrinkRecommendationState(InteractionState): + """State to handle feedback for drink recommendation""" + + FEEDBACK_QUESTIONS = [ + "Does that sound good to you?", + "Would you like to try that?", + "Does that sound like something you would enjoy?", + "Would you like to try that cocktail?", + ] + + def handle(self): + furhat = self.context._furhat + + feedback_question = self.FEEDBACK_QUESTIONS[ + np.random.randint(0, len(self.FEEDBACK_QUESTIONS)) + ] + + furhat.say( + text=feedback_question, + blocking=True, + ) + + user_response = self.context.listen() + + try: + valence = get_valence_from_message(user_response) + except ValueError: + furhat.gesture( + body=gestures.get_random_gesture("understand_issue"), + blocking=False, + ) + furhat.say(text="I'm sorry, I didn't quite get that.", blocking=True) + return + + if valence == "Positive": + cocktail_name = self.context.user_info["cocktail_name"] + furhat.gesture(body=gestures.get_random_gesture("happy"), blocking=False) + furhat.say( + text=f"That's great! Here is your {cocktail_name}.", blocking=True + ) + self.context.transition_to(FarewellState()) + elif valence == "Negative": + furhat.gesture(body=gestures.get_random_gesture("concern"), blocking=False) + furhat.say(text="Alright, I will look up another cocktail.", blocking=True) + self.context.transition_to(RecommendDrinksState()) class FarewellState(InteractionState): """State to handle saying goodbye to the user""" + FAREWELL_TEXTS = [ + "It was a pleasure serving you! Goodbye!", + "I hope to see you again soon! Bye!", + "I hope you have a good day! Bye!", + ] + def handle(self): furhat = self.context._furhat - furhat.gesture(name="BigSmile", blocking=False) - furhat.say(text="Goodbye!", blocking=True) + furhat.gesture(body=gestures.get_random_gesture("happy"), blocking=False) + farewell_text = self.FAREWELL_TEXTS[ + np.random.randint(0, len(self.FAREWELL_TEXTS)) + ] + furhat.say(text=farewell_text, blocking=True) time.sleep(10) @@ -243,12 +618,39 @@ def handle(self): class SearchState(InteractionState): """State to handle looking for the user""" + SEARCH_QUESTIONS = [ + "Where did you go?", + "Where did you go? I can't see you.", + "Are you still there?", + "Are you still there? I can't see you anymore.", + "Where are you?", + ] + def handle(self): furhat = self.context._furhat + question_count = 0 + while not self.context._perception_manager.face_present: + furhat.gesture( + body=gestures.get_random_gesture("understand_issue"), blocking=False + ) + search_question = self.SEARCH_QUESTIONS[ + np.random.randint(0, len(self.SEARCH_QUESTIONS)) + ] + furhat.say(text=search_question, blocking=True) + question_count += 1 + time.sleep(2) + if question_count >= 2: + furhat.gesture( + body=gestures.get_random_gesture("concern"), + blocking=False, + ) + furhat.say( + text="I'm sorry, I can't find you. I will look for you later.", + blocking=True, + ) + self.context.transition_to(FarewellState()) + return - furhat.gesture( - body=gestures.get_random_gesture("understand_issue"), blocking=False - ) - furhat.say(text="Where did you go?", blocking=True) - - self.context.transition_to(FarewellState()) + furhat.gesture(body=gestures.get_random_gesture("happy"), blocking=False) + furhat.say(text="Oh, there you are!", blocking=True) + self.context.transition_to(self.context._previous_state) diff --git a/botender/logging_utils.py b/botender/logging_utils.py index cd753ac..810167a 100644 --- a/botender/logging_utils.py +++ b/botender/logging_utils.py @@ -12,11 +12,13 @@ class LogFilter(Filter): def filter(self, record): - """Filter out useless pyfeat logs.""" + """Filter out useless pyfeat and openai logs.""" results = True if record.module == "detector": if record.funcName == "detect_faces" and record.levelno <= logging.WARNING: results = False + if record.module in ["_trace", "_base_client", "_client", "_config"]: + results = False return results @@ -67,7 +69,8 @@ def _configure_listener(debug: bool): root_logger = logging.getLogger() root_logger.addHandler(console_handler) root_logger.addHandler(file_handler) - root_logger.addFilter(LogFilter()) + for handler in root_logger.handlers: + handler.addFilter(LogFilter()) if debug: root_logger.setLevel(logging.DEBUG) diff --git a/botender/perception/detection_worker.py b/botender/perception/detection_worker.py index b4155c7..cad6311 100644 --- a/botender/perception/detection_worker.py +++ b/botender/perception/detection_worker.py @@ -6,13 +6,12 @@ import numpy as np import torch +from feat import Detector # type: ignore import botender.logging_utils as logging_utils from botender.perception.detectors import EmotionDetector, FacialExpressionDetector from botender.webcam_processor import Rectangle -from feat import Detector # type: ignore - warnings.filterwarnings("ignore") logger = logging.getLogger(__name__) diff --git a/botender/perception/detectors/emotion_detector.py b/botender/perception/detectors/emotion_detector.py index ee03d29..1edb647 100644 --- a/botender/perception/detectors/emotion_detector.py +++ b/botender/perception/detectors/emotion_detector.py @@ -1,15 +1,15 @@ import logging +import numpy as np from feat import Detector # type: ignore from feat.utils import FEAT_EMOTION_COLUMNS # type: ignore -import numpy as np logger = logging.getLogger(__name__) PYFEAT_EMOTIONS_TO_EMOTIONS = { "neutral": "neutral", "anger": "angry", - "happy": "happy", + "happiness": "happy", "sadness": "sad", } diff --git a/botender/webcam_processor.py b/botender/webcam_processor.py index f3cda0f..e6f9f8a 100644 --- a/botender/webcam_processor.py +++ b/botender/webcam_processor.py @@ -212,22 +212,19 @@ def _add_debug_info_to_current_frame( ): """Add debug info to the current frame.""" - text = "\n".join( - [ - f"{key}: {value}" - for key, value in self._debug_info.items() - if value is not None - ] - ) - modifier_func = partial( - cv2.putText, - text=text, - org=(0, self._FRAME_HEIGHT - 10), - fontFace=cv2.FONT_HERSHEY_SIMPLEX, - fontScale=0.5, - color=(255, 0, 0), - thickness=1, - ) + def modifier_func(frame: np.ndarray) -> np.ndarray: + for i, (key, value) in enumerate(self._debug_info.items()): + if value is not None: + frame = cv2.putText( + frame, + text=f"{key}: {value}", + org=(0, self._FRAME_HEIGHT - 10 * (i + 1)), + fontFace=cv2.FONT_HERSHEY_SIMPLEX, + fontScale=0.5, + color=(255, 0, 0), + thickness=1, + ) + return frame self.add_frame_modifier(modifier_func, "debug_info")