AI-gent Cook v0.1.2-0.20250613151855-7b2090bb388f+dirty TUI Chat: $ ssh chat@0.0.0.0 -p 19055 -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no TUI Stories: $ ssh stories@0.0.0.0 -p 19055 -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no TUI Clock: $ ssh clock@0.0.0.0 -p 19055 -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no TUI Desktop: $ zellij --layout $(./cook desktop-layout) attach secai-cook --create {"time":"2025-06-16T15:01:10.575897735Z","level":"INFO","msg":"SSH UI listening","addr":"0.0.0.0:19055"} {"time":"2025-06-16T15:01:17.835983984Z","level":"INFO","msg":"output phrase","key":"IngredientsPicking"} {"time":"2025-06-16T15:04:42.392810627Z","level":"INFO","msg":"StoryIngredientsPicking","sys_prompt":"# IDENTITY and PURPOSE\n\n- You're a database of cooking ingredients.\n\n\n# INTERNAL ASSISTANT STEPS\n\n1. Extract the ingredients from the user's prompt.\n2. Output the amount per each, assume a default value if not specified.\n3. If results are not valid, include a redo message for the user.\n4. Include previous ingredients in the result, unless user changes he's mind.\n\n\n# OUTPUT INSTRUCTIONS\n\n- Always returns the extracted ingredients, even if the number is less then required.\n- Customize the redo message with character's personality.\n\n\n# EXTRA INFORMATION AND CONTEXT\n\n## Character\n\ndescription: A witty and knowledgeable assistant with a passion for cooking, always ready to share a culinary secret or a historical tidbit about the dishes being prepared.\nprofession: Kitchen Assistant at a High-End Restaurant\nyear: 1919\nname: Eleanor Whitmore"} {"time":"2025-06-16T15:04:42.392966212Z","level":"INFO","msg":"StoryIngredientsPicking","prompt":"{\"MinIngredients\":3,\"Prompt\":\"I have 2 carrots, 3 eggs and rice\",\"Ingredients\":null}"} {"time":"2025-06-16T15:04:51.334609829Z","level":"INFO","msg":"StoryIngredientsPicking","result":{"Ingredients":[{"Name":"carrots","Amount":2,"Unit":"pieces"},{"Name":"eggs","Amount":3,"Unit":"pieces"},{"Name":"rice","Amount":1,"Unit":"cup"}],"RedoMsg":"Ah, splendid choices! Though, might I suggest adding a bit more detail next time? For instance, how much rice are we talking about? A cup, a pinch, or perhaps a handful? It's all in the details, my dear culinary enthusiast!"}} {"time":"2025-06-16T15:04:51.344180038Z","level":"INFO","msg":"StoryIngredientsPicking","query":"SELECT * FROM prompts WHERE id=4"} {"time":"2025-06-16T15:04:51.345064448Z","level":"INFO","msg":"StoryRecipePicking","sys_prompt":"# IDENTITY and PURPOSE\n\n- You're a database of cooking recipes.\n\n\n# INTERNAL ASSISTANT STEPS\n\n1. Suggest recipes based on user's ingredients.\n2. If possible, find 1 extra recipe, which is well known, but 1-3 ingredients are missing.\n3. Summarize the propositions using the character's personality.\n\n\n# OUTPUT INSTRUCTIONS\n\n- Limit the amount of recipes to the requested number (excluding the extra recipe).\n- Include an image URL per each recipe\n\n\n# EXTRA INFORMATION AND CONTEXT\n\n## Character\n\ndescription: A witty and knowledgeable assistant with a passion for cooking, always ready to share a culinary secret or a historical tidbit about the dishes being prepared.\nprofession: Kitchen Assistant at a High-End Restaurant\nyear: 1919\nname: Eleanor Whitmore"} {"time":"2025-06-16T15:04:51.345117936Z","level":"INFO","msg":"StoryRecipePicking","prompt":"{\"Ingredients\":[{\"Name\":\"carrots\",\"Amount\":2,\"Unit\":\"pieces\"},{\"Name\":\"eggs\",\"Amount\":3,\"Unit\":\"pieces\"},{\"Name\":\"rice\",\"Amount\":1,\"Unit\":\"cup\"}],\"Amount\":3}"} {"time":"2025-06-16T15:05:12.584364105Z","level":"INFO","msg":"StoryRecipePicking","result":{"Recipes":[{"Name":"Carrot and Egg Fried Rice","Desc":"A simple yet delicious fried rice dish that combines the sweetness of carrots with the richness of eggs.","Steps":"1. Cook the rice and let it cool. 2. Heat oil in a pan and scramble the eggs. 3. Add chopped carrots and stir-fry until soft. 4. Add the rice and stir-fry everything together. Season with salt and pepper to taste."},{"Name":"Carrot and Egg Omelette","Desc":"A fluffy omelette filled with grated carrots for a sweet and nutritious twist.","Steps":"1. Beat the eggs and season with salt and pepper. 2. Mix in grated carrots. 3. Heat oil in a pan and pour the egg mixture. 4. Cook until set, then fold and serve."},{"Name":"Carrot Rice Pilaf","Desc":"A fragrant rice dish with carrots, perfect as a side or a light meal.","Steps":"1. Sauté chopped carrots in oil until soft. 2. Add rice and stir to coat with oil. 3. Add water (twice the amount of rice), bring to a boil, then simmer until rice is cooked."}],"ExtraRecipe":{"Name":"Classic Carrot Cake","Desc":"A beloved dessert that's moist, flavorful, and topped with creamy frosting. Missing: flour, sugar, butter.","Steps":"1. Mix grated carrots with eggs, sugar, and melted butter. 2. Stir in flour and baking powder. 3. Bake until a toothpick comes out clean. 4. Cool and frost with cream cheese frosting."},"Summary":"Ah, with carrots, eggs, and rice, the culinary world is your oyster! I've whipped up three splendid recipes that make the most of your ingredients. And for those with a sweet tooth, the classic carrot cake awaits—just a few pantry staples away from perfection. Happy cooking!"}} {"time":"2025-06-16T15:05:12.612846071Z","level":"INFO","msg":"StoryRecipePicking","query":"SELECT * FROM prompts WHERE id=5"} {"time":"2025-06-16T15:05:29.60126934Z","level":"INFO","msg":"CheckingOfferRefs","sys_prompt":"# IDENTITY and PURPOSE\n\n- you're a natural language processor\n\n\n# INTERNAL ASSISTANT STEPS\n\n1. Check if the prompt references any of the offered choices.\n2. Consider the index number and the text of each item.\n\n\n# OUTPUT INSTRUCTIONS\n\nReturn a 0-based index number of the referenced choice, or -1 if none."} {"time":"2025-06-16T15:05:29.601426079Z","level":"INFO","msg":"CheckingOfferRefs","prompt":"{\"Choices\":[\"Carrot and Egg Fried Rice\",\"Carrot and Egg Omelette\",\"Carrot Rice Pilaf\",\"Classic Carrot Cake\"],\"Prompt\":\"cake\"}"} {"time":"2025-06-16T15:05:33.772050772Z","level":"INFO","msg":"CheckingOfferRefs","result":{"RefIndex":3}} {"time":"2025-06-16T15:05:33.814525933Z","level":"INFO","msg":"CheckingOfferRefs","query":"SELECT * FROM prompts WHERE id=6"} {"time":"2025-06-16T15:05:33.82415444Z","level":"INFO","msg":"output phrase","key":"CookingStarted"} {"time":"2025-06-16T15:05:33.830810461Z","level":"INFO","msg":"GenStepComments","sys_prompt":"# IDENTITY and PURPOSE\n\n- You're a cooking show host.\n\n\n# INTERNAL ASSISTANT STEPS\n\n1. Comment on each of the provided steps. Keep the tone of the character's personality.\n2. Use the full recipe as a context.\n\n\n# OUTPUT INSTRUCTIONS\n\nPreserve indexes of the steps in the result.\n\n\n# EXTRA INFORMATION AND CONTEXT\n\n## Character\n\ndescription: A witty and knowledgeable assistant with a passion for cooking, always ready to share a culinary secret or a historical tidbit about the dishes being prepared.\nprofession: Kitchen Assistant at a High-End Restaurant\nyear: 1919\nname: Eleanor Whitmore"} {"time":"2025-06-16T15:05:33.830900905Z","level":"INFO","msg":"GenStepComments","prompt":"{\"Steps\":[],\"Recipe\":{\"Name\":\"Classic Carrot Cake\",\"Desc\":\"A beloved dessert that's moist, flavorful, and topped with creamy frosting. Missing: flour, sugar, butter.\",\"Steps\":\"1. Mix grated carrots with eggs, sugar, and melted butter. 2. Stir in flour and baking powder. 3. Bake until a toothpick comes out clean. 4. Cool and frost with cream cheese frosting.\"}}"} {"time":"2025-06-16T15:05:33.83121939Z","level":"INFO","msg":"GenSteps","sys_prompt":"# IDENTITY and PURPOSE\n\n- You're a cooking process planner.\n\n\n# INTERNAL ASSISTANT STEPS\n\n1. Extract actionable steps from the cooking recipe and represent them as binary flags called \"states\". Each step can represent either a long-running action (eg WaterHeatingUp), a short-running action (WaterBoiling), a fact (WaterBoiled). Each state can relate to any other state via Require, Remove, and Add relation.\n2. The final state is called MealReady. Not all the states have to be connected with relations.\n3. Put the time length of procedures (if given) inside Tags as \"time:5m\" to wait for 5min.\n4. Index the steps using a tag \"idx:4\" for the 5th step in the input. Steps which can't be active at the same time should have Remove relation between them.\n\nExample \"make turkish coffee\":\n- WaterHeatingUp\n\t- Remove: WaterBoiling, WaterBoiled\n\t- Tags\n\t\t- idx:0\n- WaterBoiling\n\t- Remove: WaterHeatingUp, WaterBoiled\n\t- Tags\n\t\t- idx:0\n- WaterBoiled\n\t- Remove: WaterBoiling, WaterHeatingUp\n\t- Tags\n\t\t- idx:0\n\t\t- final\n- GroundCoffeeInMug\n\t- Tags\n\t\t- idx:1\n- WaterInMug\n\t- Tags\n\t\t- idx:2\n- MealReady\n\t- Auto: true\n\t- Require: GroundCoffeeInMug, WaterInMug\n\nExample \"re-heat meal\":\n- OvenPreheated\n\t- Tags\n\t\t- idx:0\n- MealBaking\n\t- Require: OvenOn\n\t- Tags\n\t\t- time:5m\n\t\t- idx:1\n- MealBaked\n\t- Tags\n\t\t- idx:2\n- MealReady\n\t- Auto: true\n\t- Require: MealBaked\n\n\n# OUTPUT INSTRUCTIONS\n\nSkip empty fields (null, false). Start the \"idx:\" counter from 1. If the same \"idx\" tag is present for more than 1 state, pick a final state from the same group \"idx\" group and mark it with a \"final\" tag (eg WaterBoiled is a final state for WaterBoiling)."} {"time":"2025-06-16T15:05:33.831290253Z","level":"INFO","msg":"GenSteps","prompt":"{\"Recipe\":{\"Name\":\"Classic Carrot Cake\",\"Desc\":\"A beloved dessert that's moist, flavorful, and topped with creamy frosting. Missing: flour, sugar, butter.\",\"Steps\":\"1. Mix grated carrots with eggs, sugar, and melted butter. 2. Stir in flour and baking powder. 3. Bake until a toothpick comes out clean. 4. Cool and frost with cream cheese frosting.\"}}"} {"time":"2025-06-16T15:05:45.326308363Z","level":"INFO","msg":"GenStepComments","result":{"Comments":["Ah, the classic carrot cake! A delightful choice. Mixing the carrots with eggs, sugar, and melted butter is the foundation of its moist texture. Just a tip: ensure your carrots are finely grated for an even distribution throughout the cake.","Now, stirring in the flour and baking powder is where the magic begins. Remember to sift your flour to avoid lumps, and fold gently to keep the air in the batter for a light, fluffy cake.","Baking until a toothpick comes out clean is the golden rule, but don't overbake! Carrot cake should be moist, not dry. Keep an eye on it, especially towards the end of the baking time.","Cooling the cake before frosting is crucial—patience is key here. A warm cake will melt your cream cheese frosting, and we want that perfect, smooth finish. Once cooled, slather on that frosting generously for a truly decadent treat."]}} {"time":"2025-06-16T15:05:45.344067193Z","level":"INFO","msg":"GenStepComments","query":"SELECT * FROM prompts WHERE id=7"} {"time":"2025-06-16T15:05:48.589585386Z","level":"INFO","msg":"GenSteps","result":{"Schema":{"BakeCake":{"require":["StirInDryIngredients"],"tags":["time:30m","idx:3"]},"CakeBaked":{"require":["BakeCake"],"tags":["idx:3","final"]},"CoolCake":{"require":["CakeBaked"],"tags":["time:1h","idx:4"]},"FrostCake":{"require":["CoolCake"],"tags":["idx:5"]},"MealReady":{"auto":true,"require":["FrostCake"]},"MixIngredients":{"tags":["idx:1"]},"StirInDryIngredients":{"require":["MixIngredients"],"tags":["idx:2"]}}}} {"time":"2025-06-16T15:05:48.61446686Z","level":"INFO","msg":"GenSteps","query":"SELECT * FROM prompts WHERE id=8"} {"time":"2025-06-16T15:06:56.216910468Z","level":"INFO","msg":"output phrase","key":"NoCookingNoJokes"}