[{"data":1,"prerenderedAt":2495},["ShallowReactive",2],{"/memos_cloud/introduction/mem_schedule":3,"surround-/memos_cloud/introduction/mem_schedule":2479},{"id":4,"title":5,"avatar":6,"banner":6,"body":7,"category":6,"desc":2472,"description":168,"extension":2473,"links":6,"meta":2474,"navigation":6,"path":2475,"seo":2476,"stem":2477,"__hash__":2478},"docs/en/memos_cloud/introduction/mem_schedule.md","Memory Scheduling",null,{"type":8,"value":9,"toc":2458},"minimark",[10,15,22,47,57,107,115,129,142,145,149,156,161,171,173,178,183,194,196,200,207,212,218,251,253,257,260,303,308,314,319,324,329,356,358,362,366,369,607,609,613,802,811,813,817,822,859,864,886,891,896,1028,1033,1099,1104,1361,1365,1633,1635,1639,1642,1677,1680,1682,1686,1693,1771,1773,1777,1786,1792,1794,1798,1804,2092,2094,2098,2103,2235,2237,2241,2247,2439,2442,2444,2448,2454],[11,12,14],"h2",{"id":13},"_0-entry-point-and-initialization-process","0. Entry Point and Initialization Process",[16,17,18],"p",{},[19,20,21],"strong",{},"Entry Files",[23,24,25,33],"ul",{},[26,27,28,32],"li",{},[29,30,31],"code",{},"MemOS/src/memos/api/server_api.py",": FastAPI application entry point, responsible only for mounting routes and exception handling.",[26,34,35,38,39,42,43,46],{},[29,36,37],{},"MemOS/src/memos/api/routers/server_router.py",": API Router, executes ",[29,40,41],{},"handlers.init_server()"," to complete component loading and obtain ",[29,44,45],{},"mem_scheduler",".",[16,48,49,52,53,56],{},[19,50,51],{},"Initialization Logic"," (",[29,54,55],{},"MemOS/src/memos/api/handlers/component_init.py",")",[58,59,60,63,66,85,96],"ol",{},[26,61,62],{},"Initialize Redis client (used for status tracking and queue support).",[26,64,65],{},"Build core components like LLM, Embedder, GraphDB, Reranker, MemReader, etc.",[26,67,68,69,72,73,76,77,80,81,84],{},"Create ",[29,70,71],{},"OptimizedScheduler"," (of ",[29,74,75],{},"BaseScheduler"," type) (via ",[29,78,79],{},"SchedulerFactory"," + ",[29,82,83],{},"SchedulerConfigFactory",").",[26,86,87,88,91,92,95],{},"Call ",[29,89,90],{},"mem_scheduler.initialize_modules(...)"," and ",[29,93,94],{},"mem_scheduler.init_mem_cube(...)"," to bind resources.",[26,97,98,99,102,103,106],{},"If ",[29,100,101],{},"API_SCHEDULER_ON=true"," (default), call ",[29,104,105],{},"mem_scheduler.start()"," to start the scheduler.",[16,108,109,52,112,56],{},[19,110,111],{},"Scheduler Startup",[29,113,114],{},"BaseScheduler.start()",[23,116,117,123],{},[26,118,119,122],{},[29,120,121],{},"start_consumer()",": Start message consumer threads/processes.",[26,124,125,128],{},[29,126,127],{},"start_background_monitor()",": Start queue monitor thread (samples queue length and other metrics).",[130,131,132],"blockquote",{},[16,133,134,135,138,139,46],{},"Thread/Process mode is controlled by ",[29,136,137],{},"scheduler_startup_mode",", defaulting to ",[29,140,141],{},"thread",[143,144],"br",{},[11,146,148],{"id":147},"_1-feature-overview","1. Feature Overview",[16,150,151,152,155],{},"MemScheduler adopts a ",[19,153,154],{},"Producer-Consumer + Thread Pool Parallelism"," model.",[16,157,158],{},[19,159,160],{},"Overall Workflow",[162,163,169],"pre",{"className":164,"code":166,"language":167,"meta":168},[165],"language-text","API Request\n  -> BaseScheduler.submit_messages\n     -> Priority Branching (LEVEL_1 Immediate / Others to Queue)\n        -> Consumer Thread _message_consumer\n           -> Dispatcher.dispatch (Thread Pool Concurrency)\n              -> Handler Executes Business Logic\n              -> Status Tracker Updates Status + Redis ACK\n","text","",[29,170,166],{"__ignoreMap":168},[143,172],{},[174,175,177],"h3",{"id":176},"_11-queue-model","1.1 Queue Model",[179,180,182],"h4",{"id":181},"local-queue-schedulerlocalqueue","Local Queue (SchedulerLocalQueue)",[23,184,185,191],{},[26,186,187,188,46],{},"Enabled when ",[29,189,190],{},"use_redis_queue=False",[26,192,193],{},"Suitable for single-node deployment or development environments.",[143,195],{},[179,197,199],{"id":198},"redis-queue-schedulerredisqueue","Redis Queue (SchedulerRedisQueue)",[16,201,202,203,206],{},"The Redis version is the ",[19,204,205],{},"recommended default path for production environments",", supporting multi-instance deployment and breakpoint recovery.",[16,208,209],{},[19,210,211],{},"Stream Key Format",[162,213,216],{"className":214,"code":215,"language":167},[165],"{prefix}:{user_id}:{mem_cube_id}:{task_label}\n",[29,217,215],{"__ignoreMap":168},[23,219,220,226],{},[26,221,222,223],{},"Default prefix: ",[29,224,225],{},"scheduler:messages:stream:v2.0",[26,227,228,229,232],{},"Consumer Group: ",[29,230,231],{},"scheduler_group",[23,233,234,240],{},[26,235,236,237,46],{},"Redis queue prefix can be overridden by ",[29,238,239],{},"MEMSCHEDULER_REDIS_STREAM_KEY_PREFIX",[26,241,242,243,246,247,250],{},"Default constant ",[29,244,245],{},"DEFAULT_STREAM_KEY_PREFIX"," can be overridden by ",[29,248,249],{},"MEMSCHEDULER_STREAM_KEY_PREFIX"," (if a unified style is needed, configuring the former is recommended).",[143,252],{},[174,254,256],{"id":255},"_12-status-tracking-taskstatustracker","1.2 Status Tracking (TaskStatusTracker)",[16,258,259],{},"The scheduling system tracks task status via Redis Hash:",[23,261,262,285],{},[26,263,264,267,268,271],{},[19,265,266],{},"Task Main Table",": ",[29,269,270],{},"memos:task_meta:{user_id}",[23,272,273,279,282],{},[26,274,275,276],{},"field: ",[29,277,278],{},"item_id",[26,280,281],{},"value: JSON payload (status, task_type, mem_cube_id, timestamps...)",[26,283,284],{},"TTL: 7 days",[26,286,287,267,290,293],{},[19,288,289],{},"Business Task Association Table",[29,291,292],{},"memos:task_items:{user_id}:{task_id}",[23,294,295,301],{},[26,296,297,298],{},"value: set",[299,300,278],"span",{},[26,302,284],{},[16,304,305],{},[19,306,307],{},"Status Transition",[162,309,312],{"className":310,"code":311,"language":167},[165],"waiting -> in_progress -> completed / failed\n",[29,313,311],{"__ignoreMap":168},[16,315,316],{},[19,317,318],{},"TTL",[23,320,321],{},[26,322,323],{},"All tracking keys expire in 7 days by default.",[16,325,326],{},[19,327,328],{},"Aggregate Query",[23,330,331],{},[26,332,333,334,336,337,340,341,344,345],{},"When multiple ",[29,335,278],{},"s share the same ",[29,338,339],{},"task_id",", ",[29,342,343],{},"get_task_status_by_business_id"," aggregates them:\n",[23,346,347,350,353],{},[26,348,349],{},"Any failed -> failed",[26,351,352],{},"Any in_progress/waiting -> in_progress",[26,354,355],{},"All completed -> completed",[143,357],{},[174,359,361],{"id":360},"_13-message-protocol","1.3 Message Protocol",[179,363,365],{"id":364},"schedulemessageitem","ScheduleMessageItem",[16,367,368],{},"The core message structure received by the scheduler:",[370,371,372,392],"table",{},[373,374,375],"thead",{},[376,377,378,383,386,389],"tr",{},[379,380,382],"th",{"align":381},"left","Field",[379,384,385],{"align":381},"Type",[379,387,388],{"align":381},"Required",[379,390,391],{"align":381},"Description",[393,394,395,413,430,446,462,478,494,510,526,542,559,575,592],"tbody",{},[376,396,397,402,407,410],{},[398,399,400],"td",{"align":381},[29,401,278],{},[398,403,404],{"align":381},[29,405,406],{},"str",[398,408,409],{"align":381},"Yes",[398,411,412],{"align":381},"Single message UUID.",[376,414,415,420,424,427],{},[398,416,417],{"align":381},[29,418,419],{},"redis_message_id",[398,421,422],{"align":381},[29,423,406],{},[398,425,426],{"align":381},"No",[398,428,429],{"align":381},"Redis Stream message ID (written after consumption).",[376,431,432,437,441,443],{},[398,433,434],{"align":381},[29,435,436],{},"stream_key",[398,438,439],{"align":381},[29,440,406],{},[398,442,426],{"align":381},[398,444,445],{"align":381},"Redis stream key.",[376,447,448,453,457,459],{},[398,449,450],{"align":381},[29,451,452],{},"user_id",[398,454,455],{"align":381},[29,456,406],{},[398,458,409],{"align":381},[398,460,461],{"align":381},"User ID.",[376,463,464,469,473,475],{},[398,465,466],{"align":381},[29,467,468],{},"trace_id",[398,470,471],{"align":381},[29,472,406],{},[398,474,426],{"align":381},[398,476,477],{"align":381},"Trace ID, for distributed tracing.",[376,479,480,485,489,491],{},[398,481,482],{"align":381},[29,483,484],{},"mem_cube_id",[398,486,487],{"align":381},[29,488,406],{},[398,490,409],{"align":381},[398,492,493],{"align":381},"MemCube ID.",[376,495,496,501,505,507],{},[398,497,498],{"align":381},[29,499,500],{},"session_id",[398,502,503],{"align":381},[29,504,406],{},[398,506,426],{"align":381},[398,508,509],{"align":381},"Session ID (used for soft filtering).",[376,511,512,517,521,523],{},[398,513,514],{"align":381},[29,515,516],{},"label",[398,518,519],{"align":381},[29,520,406],{},[398,522,409],{"align":381},[398,524,525],{"align":381},"Scheduling instruction.",[376,527,528,533,537,539],{},[398,529,530],{"align":381},[29,531,532],{},"content",[398,534,535],{"align":381},[29,536,406],{},[398,538,409],{"align":381},[398,540,541],{"align":381},"JSON string or text payload.",[376,543,544,549,554,556],{},[398,545,546],{"align":381},[29,547,548],{},"timestamp",[398,550,551],{"align":381},[29,552,553],{},"datetime",[398,555,426],{"align":381},[398,557,558],{"align":381},"Submission time (auto-generated).",[376,560,561,566,570,572],{},[398,562,563],{"align":381},[29,564,565],{},"user_name",[398,567,568],{"align":381},[29,569,406],{},[398,571,426],{"align":381},[398,573,574],{"align":381},"User display name.",[376,576,577,582,587,589],{},[398,578,579],{"align":381},[29,580,581],{},"info",[398,583,584],{"align":381},[29,585,586],{},"dict",[398,588,426],{"align":381},[398,590,591],{"align":381},"Extended information (e.g., source_doc_id).",[376,593,594,598,602,604],{},[398,595,596],{"align":381},[29,597,339],{},[398,599,600],{"align":381},[29,601,406],{},[398,603,426],{"align":381},[398,605,606],{"align":381},"Business task ID (used for aggregated status).",[143,608],{},[179,610,612],{"id":611},"instruction-set-task-labels","Instruction Set (Task Labels)",[370,614,615,630],{},[373,616,617],{},[376,618,619,622,625,628],{},[379,620,621],{"align":381},"Label",[379,623,624],{"align":381},"Priority",[379,626,627],{"align":381},"Handler",[379,629,391],{"align":381},[393,631,632,650,667,684,702,719,736,751,768,785],{},[376,633,634,639,642,647],{},[398,635,636],{"align":381},[29,637,638],{},"query",[398,640,641],{"align":381},"Level 1",[398,643,644],{"align":381},[29,645,646],{},"_query_message_consumer",[398,648,649],{"align":381},"Retrieval and memory activation.",[376,651,652,657,659,664],{},[398,653,654],{"align":381},[29,655,656],{},"answer",[398,658,641],{"align":381},[398,660,661],{"align":381},[29,662,663],{},"_answer_message_consumer",[398,665,666],{"align":381},"Record answer.",[376,668,669,674,676,681],{},[398,670,671],{"align":381},[29,672,673],{},"add",[398,675,641],{"align":381},[398,677,678],{"align":381},[29,679,680],{},"_add_message_consumer",[398,682,683],{"align":381},"Write new memory.",[376,685,686,691,694,699],{},[398,687,688],{"align":381},[29,689,690],{},"mem_update",[398,692,693],{"align":381},"Level 3",[398,695,696],{"align":381},[29,697,698],{},"_memory_update_consumer",[398,700,701],{"align":381},"Long-term memory index update.",[376,703,704,709,711,716],{},[398,705,706],{"align":381},[29,707,708],{},"mem_read",[398,710,693],{"align":381},[398,712,713],{"align":381},[29,714,715],{},"_mem_read_message_consumer",[398,717,718],{"align":381},"Memory enhancement after file parsing.",[376,720,721,726,728,733],{},[398,722,723],{"align":381},[29,724,725],{},"mem_organize",[398,727,693],{"align":381},[398,729,730],{"align":381},[29,731,732],{},"_mem_reorganize_message_consumer",[398,734,735],{"align":381},"Memory consolidation and organization.",[376,737,738,743,745,748],{},[398,739,740],{"align":381},[29,741,742],{},"mem_archive",[398,744,693],{"align":381},[398,746,747],{"align":381},"Not Registered",[398,749,750],{"align":381},"Memory archiving reserved Label (handler not registered in current version).",[376,752,753,758,760,765],{},[398,754,755],{"align":381},[29,756,757],{},"pref_add",[398,759,693],{"align":381},[398,761,762],{"align":381},[29,763,764],{},"_pref_add_message_consumer",[398,766,767],{"align":381},"User preference recording.",[376,769,770,775,777,782],{},[398,771,772],{"align":381},[29,773,774],{},"mem_feedback",[398,776,693],{"align":381},[398,778,779],{"align":381},[29,780,781],{},"_mem_feedback_message_consumer",[398,783,784],{"align":381},"Like/Dislike feedback learning.",[376,786,787,792,794,799],{},[398,788,789],{"align":381},[29,790,791],{},"api_mix_search",[398,793,693],{"align":381},[398,795,796],{"align":381},[29,797,798],{},"_api_mix_search_message_consumer",[398,800,801],{"align":381},"API-side hybrid search (asynchronous enhancement).",[130,803,804],{},[16,805,806,807,810],{},"Task priority is determined by ",[29,808,809],{},"SchedulerOrchestrator.tasks_priorities",". Labels not configured default to Level 3.",[143,812],{},[174,814,816],{"id":815},"_14-management-and-monitoring-api","1.4 Management and Monitoring API",[16,818,819],{},[19,820,821],{},"Scheduler Status",[23,823,824,849],{},[26,825,826,829],{},[29,827,828],{},"GET /product/scheduler/status",[23,830,831,839,846],{},[26,832,833,834,340,836,838],{},"Params: ",[29,835,452],{},[29,837,339],{},"(optional)",[26,840,841,843,844,46],{},[29,842,339],{}," can be a business task ID (aggregated status) or a single ",[29,845,278],{},[26,847,848],{},"Returns: Status list for the specified task or all user tasks.",[26,850,851,854],{},[29,852,853],{},"GET /product/scheduler/allstatus",[23,855,856],{},[26,857,858],{},"Returns: Global aggregated statistics (waiting / in_progress / failed / completed...).",[16,860,861],{},[19,862,863],{},"Queue Backlog",[23,865,866],{},[26,867,868,871],{},[29,869,870],{},"GET /product/scheduler/task_queue_status",[23,872,873,877,883],{},[26,874,833,875],{},[29,876,452],{},[26,878,879,880,84],{},"Only available when Redis queue is enabled (",[29,881,882],{},"use_redis_queue=True",[26,884,885],{},"Returns: Pending and remaining statistics at Redis Stream dimension.",[16,887,888],{},[19,889,890],{},"Request / Response Examples",[16,892,893],{},[29,894,895],{},"GET /product/scheduler/status?user_id=u_123",[162,897,901],{"className":898,"code":899,"language":900,"meta":168,"style":168},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  \"data\": [\n    { \"task_id\": \"9b4b8f3b-7c4e-4f9f-9cf0-0a4f5d2e3b10\", \"status\": \"completed\" },\n    { \"task_id\": \"c0d3b7a1-5a9e-4e4a-90e0-6b8a6df6a2aa\", \"status\": \"in_progress\" }\n  ]\n}\n","json",[29,902,903,911,930,976,1016,1022],{"__ignoreMap":168},[299,904,907],{"class":905,"line":906},"line",1,[299,908,910],{"class":909},"sMK4o","{\n",[299,912,914,917,921,924,927],{"class":905,"line":913},2,[299,915,916],{"class":909},"  \"",[299,918,920],{"class":919},"spNyl","data",[299,922,923],{"class":909},"\"",[299,925,926],{"class":909},":",[299,928,929],{"class":909}," [\n",[299,931,933,936,939,942,944,946,948,952,954,957,959,962,964,966,968,971,973],{"class":905,"line":932},3,[299,934,935],{"class":909},"    {",[299,937,938],{"class":909}," \"",[299,940,339],{"class":941},"sBMFI",[299,943,923],{"class":909},[299,945,926],{"class":909},[299,947,938],{"class":909},[299,949,951],{"class":950},"sfazB","9b4b8f3b-7c4e-4f9f-9cf0-0a4f5d2e3b10",[299,953,923],{"class":909},[299,955,956],{"class":909},",",[299,958,938],{"class":909},[299,960,961],{"class":941},"status",[299,963,923],{"class":909},[299,965,926],{"class":909},[299,967,938],{"class":909},[299,969,970],{"class":950},"completed",[299,972,923],{"class":909},[299,974,975],{"class":909}," },\n",[299,977,979,981,983,985,987,989,991,994,996,998,1000,1002,1004,1006,1008,1011,1013],{"class":905,"line":978},4,[299,980,935],{"class":909},[299,982,938],{"class":909},[299,984,339],{"class":941},[299,986,923],{"class":909},[299,988,926],{"class":909},[299,990,938],{"class":909},[299,992,993],{"class":950},"c0d3b7a1-5a9e-4e4a-90e0-6b8a6df6a2aa",[299,995,923],{"class":909},[299,997,956],{"class":909},[299,999,938],{"class":909},[299,1001,961],{"class":941},[299,1003,923],{"class":909},[299,1005,926],{"class":909},[299,1007,938],{"class":909},[299,1009,1010],{"class":950},"in_progress",[299,1012,923],{"class":909},[299,1014,1015],{"class":909}," }\n",[299,1017,1019],{"class":905,"line":1018},5,[299,1020,1021],{"class":909},"  ]\n",[299,1023,1025],{"class":905,"line":1024},6,[299,1026,1027],{"class":909},"}\n",[16,1029,1030],{},[29,1031,1032],{},"GET /product/scheduler/status?user_id=u_123&task_id=task_20240722_001",[162,1034,1036],{"className":898,"code":1035,"language":900,"meta":168,"style":168},"{\n  \"data\": [\n    { \"task_id\": \"task_20240722_001\", \"status\": \"completed\" }\n  ]\n}\n",[29,1037,1038,1042,1054,1091,1095],{"__ignoreMap":168},[299,1039,1040],{"class":905,"line":906},[299,1041,910],{"class":909},[299,1043,1044,1046,1048,1050,1052],{"class":905,"line":913},[299,1045,916],{"class":909},[299,1047,920],{"class":919},[299,1049,923],{"class":909},[299,1051,926],{"class":909},[299,1053,929],{"class":909},[299,1055,1056,1058,1060,1062,1064,1066,1068,1071,1073,1075,1077,1079,1081,1083,1085,1087,1089],{"class":905,"line":932},[299,1057,935],{"class":909},[299,1059,938],{"class":909},[299,1061,339],{"class":941},[299,1063,923],{"class":909},[299,1065,926],{"class":909},[299,1067,938],{"class":909},[299,1069,1070],{"class":950},"task_20240722_001",[299,1072,923],{"class":909},[299,1074,956],{"class":909},[299,1076,938],{"class":909},[299,1078,961],{"class":941},[299,1080,923],{"class":909},[299,1082,926],{"class":909},[299,1084,938],{"class":909},[299,1086,970],{"class":950},[299,1088,923],{"class":909},[299,1090,1015],{"class":909},[299,1092,1093],{"class":905,"line":978},[299,1094,1021],{"class":909},[299,1096,1097],{"class":905,"line":1018},[299,1098,1027],{"class":909},[16,1100,1101],{},[29,1102,1103],{},"GET /product/scheduler/task_queue_status?user_id=u_123",[162,1105,1107],{"className":898,"code":1106,"language":900,"meta":168,"style":168},"{\n  \"data\": {\n    \"user_id\": \"u_123\",\n    \"user_name\": null,\n    \"mem_cube_id\": null,\n    \"stream_keys\": [\n      \"scheduler:messages:stream:v2.0:u_123:mem_001:query\",\n      \"scheduler:messages:stream:v2.0:u_123:mem_001:add\"\n    ],\n    \"users_count\": 1,\n    \"pending_tasks_count\": 2,\n    \"remaining_tasks_count\": 5,\n    \"pending_tasks_detail\": [\n      \"scheduler:messages:stream:v2.0:u_123:mem_001:query:1\",\n      \"scheduler:messages:stream:v2.0:u_123:mem_001:add:1\"\n    ],\n    \"remaining_tasks_detail\": [\n      \"scheduler:messages:stream:v2.0:u_123:mem_001:query:3\",\n      \"scheduler:messages:stream:v2.0:u_123:mem_001:add:2\"\n    ]\n  }\n}\n",[29,1108,1109,1113,1126,1147,1160,1172,1185,1198,1209,1215,1233,1250,1267,1281,1293,1303,1308,1322,1334,1344,1350,1356],{"__ignoreMap":168},[299,1110,1111],{"class":905,"line":906},[299,1112,910],{"class":909},[299,1114,1115,1117,1119,1121,1123],{"class":905,"line":913},[299,1116,916],{"class":909},[299,1118,920],{"class":919},[299,1120,923],{"class":909},[299,1122,926],{"class":909},[299,1124,1125],{"class":909}," {\n",[299,1127,1128,1131,1133,1135,1137,1139,1142,1144],{"class":905,"line":932},[299,1129,1130],{"class":909},"    \"",[299,1132,452],{"class":941},[299,1134,923],{"class":909},[299,1136,926],{"class":909},[299,1138,938],{"class":909},[299,1140,1141],{"class":950},"u_123",[299,1143,923],{"class":909},[299,1145,1146],{"class":909},",\n",[299,1148,1149,1151,1153,1155,1157],{"class":905,"line":978},[299,1150,1130],{"class":909},[299,1152,565],{"class":941},[299,1154,923],{"class":909},[299,1156,926],{"class":909},[299,1158,1159],{"class":909}," null,\n",[299,1161,1162,1164,1166,1168,1170],{"class":905,"line":1018},[299,1163,1130],{"class":909},[299,1165,484],{"class":941},[299,1167,923],{"class":909},[299,1169,926],{"class":909},[299,1171,1159],{"class":909},[299,1173,1174,1176,1179,1181,1183],{"class":905,"line":1024},[299,1175,1130],{"class":909},[299,1177,1178],{"class":941},"stream_keys",[299,1180,923],{"class":909},[299,1182,926],{"class":909},[299,1184,929],{"class":909},[299,1186,1188,1191,1194,1196],{"class":905,"line":1187},7,[299,1189,1190],{"class":909},"      \"",[299,1192,1193],{"class":950},"scheduler:messages:stream:v2.0:u_123:mem_001:query",[299,1195,923],{"class":909},[299,1197,1146],{"class":909},[299,1199,1201,1203,1206],{"class":905,"line":1200},8,[299,1202,1190],{"class":909},[299,1204,1205],{"class":950},"scheduler:messages:stream:v2.0:u_123:mem_001:add",[299,1207,1208],{"class":909},"\"\n",[299,1210,1212],{"class":905,"line":1211},9,[299,1213,1214],{"class":909},"    ],\n",[299,1216,1218,1220,1223,1225,1227,1231],{"class":905,"line":1217},10,[299,1219,1130],{"class":909},[299,1221,1222],{"class":941},"users_count",[299,1224,923],{"class":909},[299,1226,926],{"class":909},[299,1228,1230],{"class":1229},"sbssI"," 1",[299,1232,1146],{"class":909},[299,1234,1236,1238,1241,1243,1245,1248],{"class":905,"line":1235},11,[299,1237,1130],{"class":909},[299,1239,1240],{"class":941},"pending_tasks_count",[299,1242,923],{"class":909},[299,1244,926],{"class":909},[299,1246,1247],{"class":1229}," 2",[299,1249,1146],{"class":909},[299,1251,1253,1255,1258,1260,1262,1265],{"class":905,"line":1252},12,[299,1254,1130],{"class":909},[299,1256,1257],{"class":941},"remaining_tasks_count",[299,1259,923],{"class":909},[299,1261,926],{"class":909},[299,1263,1264],{"class":1229}," 5",[299,1266,1146],{"class":909},[299,1268,1270,1272,1275,1277,1279],{"class":905,"line":1269},13,[299,1271,1130],{"class":909},[299,1273,1274],{"class":941},"pending_tasks_detail",[299,1276,923],{"class":909},[299,1278,926],{"class":909},[299,1280,929],{"class":909},[299,1282,1284,1286,1289,1291],{"class":905,"line":1283},14,[299,1285,1190],{"class":909},[299,1287,1288],{"class":950},"scheduler:messages:stream:v2.0:u_123:mem_001:query:1",[299,1290,923],{"class":909},[299,1292,1146],{"class":909},[299,1294,1296,1298,1301],{"class":905,"line":1295},15,[299,1297,1190],{"class":909},[299,1299,1300],{"class":950},"scheduler:messages:stream:v2.0:u_123:mem_001:add:1",[299,1302,1208],{"class":909},[299,1304,1306],{"class":905,"line":1305},16,[299,1307,1214],{"class":909},[299,1309,1311,1313,1316,1318,1320],{"class":905,"line":1310},17,[299,1312,1130],{"class":909},[299,1314,1315],{"class":941},"remaining_tasks_detail",[299,1317,923],{"class":909},[299,1319,926],{"class":909},[299,1321,929],{"class":909},[299,1323,1325,1327,1330,1332],{"class":905,"line":1324},18,[299,1326,1190],{"class":909},[299,1328,1329],{"class":950},"scheduler:messages:stream:v2.0:u_123:mem_001:query:3",[299,1331,923],{"class":909},[299,1333,1146],{"class":909},[299,1335,1337,1339,1342],{"class":905,"line":1336},19,[299,1338,1190],{"class":909},[299,1340,1341],{"class":950},"scheduler:messages:stream:v2.0:u_123:mem_001:add:2",[299,1343,1208],{"class":909},[299,1345,1347],{"class":905,"line":1346},20,[299,1348,1349],{"class":909},"    ]\n",[299,1351,1353],{"class":905,"line":1352},21,[299,1354,1355],{"class":909},"  }\n",[299,1357,1359],{"class":905,"line":1358},22,[299,1360,1027],{"class":909},[16,1362,1363],{},[29,1364,853],{},[162,1366,1368],{"className":898,"code":1367,"language":900,"meta":168,"style":168},"{\n  \"data\": {\n    \"scheduler_summary\": {\n      \"waiting\": 2,\n      \"in_progress\": 1,\n      \"pending\": 2,\n      \"completed\": 15,\n      \"failed\": 0,\n      \"cancelled\": 0,\n      \"total\": 18\n    },\n    \"all_tasks_summary\": {\n      \"waiting\": 3,\n      \"in_progress\": 1,\n      \"pending\": 3,\n      \"completed\": 24,\n      \"failed\": 1,\n      \"cancelled\": 0,\n      \"total\": 29\n    }\n  }\n}\n",[29,1369,1370,1374,1386,1399,1414,1428,1443,1458,1474,1489,1503,1508,1521,1536,1550,1564,1579,1593,1607,1620,1625,1629],{"__ignoreMap":168},[299,1371,1372],{"class":905,"line":906},[299,1373,910],{"class":909},[299,1375,1376,1378,1380,1382,1384],{"class":905,"line":913},[299,1377,916],{"class":909},[299,1379,920],{"class":919},[299,1381,923],{"class":909},[299,1383,926],{"class":909},[299,1385,1125],{"class":909},[299,1387,1388,1390,1393,1395,1397],{"class":905,"line":932},[299,1389,1130],{"class":909},[299,1391,1392],{"class":941},"scheduler_summary",[299,1394,923],{"class":909},[299,1396,926],{"class":909},[299,1398,1125],{"class":909},[299,1400,1401,1403,1406,1408,1410,1412],{"class":905,"line":978},[299,1402,1190],{"class":909},[299,1404,1405],{"class":1229},"waiting",[299,1407,923],{"class":909},[299,1409,926],{"class":909},[299,1411,1247],{"class":1229},[299,1413,1146],{"class":909},[299,1415,1416,1418,1420,1422,1424,1426],{"class":905,"line":1018},[299,1417,1190],{"class":909},[299,1419,1010],{"class":1229},[299,1421,923],{"class":909},[299,1423,926],{"class":909},[299,1425,1230],{"class":1229},[299,1427,1146],{"class":909},[299,1429,1430,1432,1435,1437,1439,1441],{"class":905,"line":1024},[299,1431,1190],{"class":909},[299,1433,1434],{"class":1229},"pending",[299,1436,923],{"class":909},[299,1438,926],{"class":909},[299,1440,1247],{"class":1229},[299,1442,1146],{"class":909},[299,1444,1445,1447,1449,1451,1453,1456],{"class":905,"line":1187},[299,1446,1190],{"class":909},[299,1448,970],{"class":1229},[299,1450,923],{"class":909},[299,1452,926],{"class":909},[299,1454,1455],{"class":1229}," 15",[299,1457,1146],{"class":909},[299,1459,1460,1462,1465,1467,1469,1472],{"class":905,"line":1200},[299,1461,1190],{"class":909},[299,1463,1464],{"class":1229},"failed",[299,1466,923],{"class":909},[299,1468,926],{"class":909},[299,1470,1471],{"class":1229}," 0",[299,1473,1146],{"class":909},[299,1475,1476,1478,1481,1483,1485,1487],{"class":905,"line":1211},[299,1477,1190],{"class":909},[299,1479,1480],{"class":1229},"cancelled",[299,1482,923],{"class":909},[299,1484,926],{"class":909},[299,1486,1471],{"class":1229},[299,1488,1146],{"class":909},[299,1490,1491,1493,1496,1498,1500],{"class":905,"line":1217},[299,1492,1190],{"class":909},[299,1494,1495],{"class":1229},"total",[299,1497,923],{"class":909},[299,1499,926],{"class":909},[299,1501,1502],{"class":1229}," 18\n",[299,1504,1505],{"class":905,"line":1235},[299,1506,1507],{"class":909},"    },\n",[299,1509,1510,1512,1515,1517,1519],{"class":905,"line":1252},[299,1511,1130],{"class":909},[299,1513,1514],{"class":941},"all_tasks_summary",[299,1516,923],{"class":909},[299,1518,926],{"class":909},[299,1520,1125],{"class":909},[299,1522,1523,1525,1527,1529,1531,1534],{"class":905,"line":1269},[299,1524,1190],{"class":909},[299,1526,1405],{"class":1229},[299,1528,923],{"class":909},[299,1530,926],{"class":909},[299,1532,1533],{"class":1229}," 3",[299,1535,1146],{"class":909},[299,1537,1538,1540,1542,1544,1546,1548],{"class":905,"line":1283},[299,1539,1190],{"class":909},[299,1541,1010],{"class":1229},[299,1543,923],{"class":909},[299,1545,926],{"class":909},[299,1547,1230],{"class":1229},[299,1549,1146],{"class":909},[299,1551,1552,1554,1556,1558,1560,1562],{"class":905,"line":1295},[299,1553,1190],{"class":909},[299,1555,1434],{"class":1229},[299,1557,923],{"class":909},[299,1559,926],{"class":909},[299,1561,1533],{"class":1229},[299,1563,1146],{"class":909},[299,1565,1566,1568,1570,1572,1574,1577],{"class":905,"line":1305},[299,1567,1190],{"class":909},[299,1569,970],{"class":1229},[299,1571,923],{"class":909},[299,1573,926],{"class":909},[299,1575,1576],{"class":1229}," 24",[299,1578,1146],{"class":909},[299,1580,1581,1583,1585,1587,1589,1591],{"class":905,"line":1310},[299,1582,1190],{"class":909},[299,1584,1464],{"class":1229},[299,1586,923],{"class":909},[299,1588,926],{"class":909},[299,1590,1230],{"class":1229},[299,1592,1146],{"class":909},[299,1594,1595,1597,1599,1601,1603,1605],{"class":905,"line":1324},[299,1596,1190],{"class":909},[299,1598,1480],{"class":1229},[299,1600,923],{"class":909},[299,1602,926],{"class":909},[299,1604,1471],{"class":1229},[299,1606,1146],{"class":909},[299,1608,1609,1611,1613,1615,1617],{"class":905,"line":1336},[299,1610,1190],{"class":909},[299,1612,1495],{"class":1229},[299,1614,923],{"class":909},[299,1616,926],{"class":909},[299,1618,1619],{"class":1229}," 29\n",[299,1621,1622],{"class":905,"line":1346},[299,1623,1624],{"class":909},"    }\n",[299,1626,1627],{"class":905,"line":1352},[299,1628,1355],{"class":909},[299,1630,1631],{"class":905,"line":1358},[299,1632,1027],{"class":909},[143,1634],{},[174,1636,1638],{"id":1637},"_15-observability-and-monitoring-events","1.5. Observability and Monitoring Events",[16,1640,1641],{},"The scheduler sends monitoring events at critical stages:",[23,1643,1644,1659,1671],{},[26,1645,1646,1649,1650,1649,1653,1649,1656],{},[29,1647,1648],{},"enqueue"," / ",[29,1651,1652],{},"dequeue",[29,1654,1655],{},"start",[29,1657,1658],{},"finish",[26,1660,1661,1662,340,1665,340,1668],{},"Records ",[29,1663,1664],{},"queue_wait_ms",[29,1666,1667],{},"exec_duration_ms",[29,1669,1670],{},"total_duration_ms",[26,1672,1673,1674,1676],{},"Supports ",[29,1675,468],{}," to trace through API and scheduling links.",[16,1678,1679],{},"These events are the core basis for scheduling performance analysis and troubleshooting.",[143,1681],{},[11,1683,1685],{"id":1684},"_2-advanced-deep-customization","2. Advanced: Deep Customization",[16,1687,1688,1689,1692],{},"Developers can customize system behavior by ",[19,1690,1691],{},"extending scheduling policies",", mainly including:",[370,1694,1695,1714],{},[373,1696,1697],{},[376,1698,1699,1704,1709],{},[379,1700,1701],{},[19,1702,1703],{},"Extension Point",[379,1705,1706],{},[19,1707,1708],{},"Configurable Content",[379,1710,1711],{},[19,1712,1713],{},"Example Scenario",[393,1715,1716,1727,1738,1749,1760],{},[376,1717,1718,1721,1724],{},[398,1719,1720],{},"Scheduling Policy",[398,1722,1723],{},"Define memory selection logic for different tasks",[398,1725,1726],{},"Dialogue systems prioritize active memory; Research systems prioritize retrieving latest plaintext",[376,1728,1729,1732,1735],{},[398,1730,1731],{},"Transition Rules",[398,1733,1734],{},"Set conditions for cross-type migration",[398,1736,1737],{},"High-frequency FAQ → KV cache; Stable paradigm → Parameter module",[376,1739,1740,1743,1746],{},[398,1741,1742],{},"Context Binding",[398,1744,1745],{},"Link memory with roles/users",[398,1747,1748],{},"Student users auto-load learning preferences; Enterprise users load project archives",[376,1750,1751,1754,1757],{},[398,1752,1753],{},"Permissions & Governance",[398,1755,1756],{},"Combine access control and compliance checks during scheduling",[398,1758,1759],{},"Medical records visible only to doctors; Sensitive content not shareable across domains",[376,1761,1762,1765,1768],{},[398,1763,1764],{},"Scheduling Metrics",[398,1766,1767],{},"Optimize scheduling based on access frequency and latency requirements",[398,1769,1770],{},"High-frequency hot memory boosts priority; Low-frequency cold memory downgraded to archive",[143,1772],{},[174,1774,1776],{"id":1775},"deep-customization-guide-registering-and-triggering-custom-memory-management-tasks","Deep Customization Guide: Registering and Triggering Custom Memory Management Tasks",[16,1778,1779,1780,1782,1783,1785],{},"Memos' scheduler supports developers in registering asynchronous background tasks (such as regular memory organization, bulk data export, or time-consuming analysis). You can trigger these tasks by registering a ",[19,1781,627],{}," and submitting messages with a specific ",[19,1784,621],{}," to the scheduler.",[16,1787,1788,1789,926],{},"Here is the complete process for implementing custom asynchronous tasks, which can be referred to in ",[29,1790,1791],{},"examples/mem_scheduler/scheduler_for_async_tasks.py",[143,1793],{},[179,1795,1797],{"id":1796},"_1-define-handler-function","1. Define Handler Function",[16,1799,1800,1801,1803],{},"First, define a handler function that receives a batch of ",[29,1802,365],{}," messages. This is where the business logic is actually executed.",[162,1805,1809],{"className":1806,"code":1807,"language":1808,"meta":168,"style":168},"language-python shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","from memos.mem_scheduler.schemas.message_schemas import ScheduleMessageItem\nimport time\n\ndef my_async_task_handler(messages: list[ScheduleMessageItem]):\n    \"\"\"\n    Process a batch of scheduling messages.\n    \"\"\"\n    print(f\"Received {len(messages)} tasks, starting processing...\")\n    \n    for msg in messages:\n        # Get task details\n        task_id = msg.item_id\n        content = msg.content\n        user_id = msg.user_id\n        \n        # Execute your memory management logic here (e.g., file I/O, API calls, data analysis)\n        print(f\"Processing task {task_id} for user {user_id}: {content}\")\n        time.sleep(1) # Simulate time-consuming operation\n        \n    print(\"All tasks processed.\")\n","python",[29,1810,1811,1841,1848,1854,1883,1888,1894,1898,1932,1937,1954,1959,1976,1990,2004,2009,2014,2053,2073,2077],{"__ignoreMap":168},[299,1812,1813,1817,1821,1823,1825,1827,1830,1832,1835,1838],{"class":905,"line":906},[299,1814,1816],{"class":1815},"s7zQu","from",[299,1818,1820],{"class":1819},"sTEyZ"," memos",[299,1822,46],{"class":909},[299,1824,45],{"class":1819},[299,1826,46],{"class":909},[299,1828,1829],{"class":1819},"schemas",[299,1831,46],{"class":909},[299,1833,1834],{"class":1819},"message_schemas ",[299,1836,1837],{"class":1815},"import",[299,1839,1840],{"class":1819}," ScheduleMessageItem\n",[299,1842,1843,1845],{"class":905,"line":913},[299,1844,1837],{"class":1815},[299,1846,1847],{"class":1819}," time\n",[299,1849,1850],{"class":905,"line":932},[299,1851,1853],{"emptyLinePlaceholder":1852},true,"\n",[299,1855,1856,1859,1863,1866,1870,1872,1875,1878,1880],{"class":905,"line":978},[299,1857,1858],{"class":919},"def",[299,1860,1862],{"class":1861},"s2Zo4"," my_async_task_handler",[299,1864,1865],{"class":909},"(",[299,1867,1869],{"class":1868},"sHdIc","messages",[299,1871,926],{"class":909},[299,1873,1874],{"class":1819}," list",[299,1876,1877],{"class":909},"[",[299,1879,365],{"class":1819},[299,1881,1882],{"class":909},"]):\n",[299,1884,1885],{"class":905,"line":1018},[299,1886,1887],{"class":1815},"    \"\"\"\n",[299,1889,1890],{"class":905,"line":1024},[299,1891,1893],{"class":1892},"sHwdD","    Process a batch of scheduling messages.\n",[299,1895,1896],{"class":905,"line":1187},[299,1897,1887],{"class":1815},[299,1899,1900,1903,1905,1908,1911,1914,1917,1919,1921,1923,1926,1929],{"class":905,"line":1200},[299,1901,1902],{"class":1861},"    print",[299,1904,1865],{"class":909},[299,1906,1907],{"class":919},"f",[299,1909,1910],{"class":950},"\"Received ",[299,1912,1913],{"class":1229},"{",[299,1915,1916],{"class":1861},"len",[299,1918,1865],{"class":909},[299,1920,1869],{"class":1861},[299,1922,56],{"class":909},[299,1924,1925],{"class":1229},"}",[299,1927,1928],{"class":950}," tasks, starting processing...\"",[299,1930,1931],{"class":909},")\n",[299,1933,1934],{"class":905,"line":1211},[299,1935,1936],{"class":1819},"    \n",[299,1938,1939,1942,1945,1948,1951],{"class":905,"line":1217},[299,1940,1941],{"class":1815},"    for",[299,1943,1944],{"class":1819}," msg ",[299,1946,1947],{"class":1815},"in",[299,1949,1950],{"class":1819}," messages",[299,1952,1953],{"class":909},":\n",[299,1955,1956],{"class":905,"line":1235},[299,1957,1958],{"class":1892},"        # Get task details\n",[299,1960,1961,1964,1967,1970,1972],{"class":905,"line":1252},[299,1962,1963],{"class":1819},"        task_id ",[299,1965,1966],{"class":909},"=",[299,1968,1969],{"class":1819}," msg",[299,1971,46],{"class":909},[299,1973,1975],{"class":1974},"swJcz","item_id\n",[299,1977,1978,1981,1983,1985,1987],{"class":905,"line":1269},[299,1979,1980],{"class":1819},"        content ",[299,1982,1966],{"class":909},[299,1984,1969],{"class":1819},[299,1986,46],{"class":909},[299,1988,1989],{"class":1974},"content\n",[299,1991,1992,1995,1997,1999,2001],{"class":905,"line":1283},[299,1993,1994],{"class":1819},"        user_id ",[299,1996,1966],{"class":909},[299,1998,1969],{"class":1819},[299,2000,46],{"class":909},[299,2002,2003],{"class":1974},"user_id\n",[299,2005,2006],{"class":905,"line":1295},[299,2007,2008],{"class":1819},"        \n",[299,2010,2011],{"class":905,"line":1305},[299,2012,2013],{"class":1892},"        # Execute your memory management logic here (e.g., file I/O, API calls, data analysis)\n",[299,2015,2016,2019,2021,2023,2026,2028,2030,2032,2035,2037,2039,2041,2043,2045,2047,2049,2051],{"class":905,"line":1310},[299,2017,2018],{"class":1861},"        print",[299,2020,1865],{"class":909},[299,2022,1907],{"class":919},[299,2024,2025],{"class":950},"\"Processing task ",[299,2027,1913],{"class":1229},[299,2029,339],{"class":1861},[299,2031,1925],{"class":1229},[299,2033,2034],{"class":950}," for user ",[299,2036,1913],{"class":1229},[299,2038,452],{"class":1861},[299,2040,1925],{"class":1229},[299,2042,267],{"class":950},[299,2044,1913],{"class":1229},[299,2046,532],{"class":1861},[299,2048,1925],{"class":1229},[299,2050,923],{"class":950},[299,2052,1931],{"class":909},[299,2054,2055,2058,2060,2063,2065,2068,2070],{"class":905,"line":1324},[299,2056,2057],{"class":1819},"        time",[299,2059,46],{"class":909},[299,2061,2062],{"class":1861},"sleep",[299,2064,1865],{"class":909},[299,2066,2067],{"class":1229},"1",[299,2069,56],{"class":909},[299,2071,2072],{"class":1892}," # Simulate time-consuming operation\n",[299,2074,2075],{"class":905,"line":1336},[299,2076,2008],{"class":1819},[299,2078,2079,2081,2083,2085,2088,2090],{"class":905,"line":1346},[299,2080,1902],{"class":1861},[299,2082,1865],{"class":909},[299,2084,923],{"class":909},[299,2086,2087],{"class":950},"All tasks processed.",[299,2089,923],{"class":909},[299,2091,1931],{"class":909},[143,2093],{},[179,2095,2097],{"id":2096},"_2-register-handler","2. Register Handler",[16,2099,2100,2101,46],{},"Define a unique Label for your task and register the Handler into the global scheduler instance ",[29,2102,45],{},[162,2104,2106],{"className":1806,"code":2105,"language":1808,"meta":168,"style":168},"from memos.api.routers.server_router import mem_scheduler\n\n# Define unique task identifier\nMY_TASK_LABEL = \"my_custom_async_task\"\n\n# Register Handler\nmem_scheduler.register_handlers({\n    MY_TASK_LABEL: my_async_task_handler\n})\n\n# (Optional) Set minimum idle time (ms) for this task type\n# This prevents the task from executing too frequently, suitable for low-priority background tasks\nmem_scheduler.orchestrator.tasks_min_idle_ms[MY_TASK_LABEL] = 5000 \n",[29,2107,2108,2134,2138,2143,2157,2161,2166,2178,2188,2193,2197,2202,2207],{"__ignoreMap":168},[299,2109,2110,2112,2114,2116,2119,2121,2124,2126,2129,2131],{"class":905,"line":906},[299,2111,1816],{"class":1815},[299,2113,1820],{"class":1819},[299,2115,46],{"class":909},[299,2117,2118],{"class":1819},"api",[299,2120,46],{"class":909},[299,2122,2123],{"class":1819},"routers",[299,2125,46],{"class":909},[299,2127,2128],{"class":1819},"server_router ",[299,2130,1837],{"class":1815},[299,2132,2133],{"class":1819}," mem_scheduler\n",[299,2135,2136],{"class":905,"line":913},[299,2137,1853],{"emptyLinePlaceholder":1852},[299,2139,2140],{"class":905,"line":932},[299,2141,2142],{"class":1892},"# Define unique task identifier\n",[299,2144,2145,2148,2150,2152,2155],{"class":905,"line":978},[299,2146,2147],{"class":1819},"MY_TASK_LABEL ",[299,2149,1966],{"class":909},[299,2151,938],{"class":909},[299,2153,2154],{"class":950},"my_custom_async_task",[299,2156,1208],{"class":909},[299,2158,2159],{"class":905,"line":1018},[299,2160,1853],{"emptyLinePlaceholder":1852},[299,2162,2163],{"class":905,"line":1024},[299,2164,2165],{"class":1892},"# Register Handler\n",[299,2167,2168,2170,2172,2175],{"class":905,"line":1187},[299,2169,45],{"class":1819},[299,2171,46],{"class":909},[299,2173,2174],{"class":1861},"register_handlers",[299,2176,2177],{"class":909},"({\n",[299,2179,2180,2183,2185],{"class":905,"line":1200},[299,2181,2182],{"class":1861},"    MY_TASK_LABEL",[299,2184,926],{"class":909},[299,2186,2187],{"class":1861}," my_async_task_handler\n",[299,2189,2190],{"class":905,"line":1211},[299,2191,2192],{"class":909},"})\n",[299,2194,2195],{"class":905,"line":1217},[299,2196,1853],{"emptyLinePlaceholder":1852},[299,2198,2199],{"class":905,"line":1235},[299,2200,2201],{"class":1892},"# (Optional) Set minimum idle time (ms) for this task type\n",[299,2203,2204],{"class":905,"line":1252},[299,2205,2206],{"class":1892},"# This prevents the task from executing too frequently, suitable for low-priority background tasks\n",[299,2208,2209,2211,2213,2216,2218,2221,2223,2226,2229,2232],{"class":905,"line":1269},[299,2210,45],{"class":1819},[299,2212,46],{"class":909},[299,2214,2215],{"class":1974},"orchestrator",[299,2217,46],{"class":909},[299,2219,2220],{"class":1974},"tasks_min_idle_ms",[299,2222,1877],{"class":909},[299,2224,2225],{"class":1974},"MY_TASK_LABEL",[299,2227,2228],{"class":909},"]",[299,2230,2231],{"class":909}," =",[299,2233,2234],{"class":1229}," 5000\n",[143,2236],{},[179,2238,2240],{"id":2239},"_3-submit-task-to-trigger-scheduling","3. Submit Task to Trigger Scheduling",[16,2242,2243,2244,2246],{},"Construct a ",[29,2245,365],{}," and submit it to the scheduling queue. The scheduler will automatically distribute the message to your Handler based on the Label.",[162,2248,2250],{"className":1806,"code":2249,"language":1808,"meta":168,"style":168},"from memos.mem_scheduler.schemas.message_schemas import ScheduleMessageItem\n\n# Create task message\ntask_item = ScheduleMessageItem(\n    user_id=\"user_123\",\n    mem_cube_id=\"default_cube\",\n    label=MY_TASK_LABEL,          # Must match the Label used during registration\n    content=\"Data content to process\",    # Payload passed to the Handler\n    item_id=\"unique_task_id_001\"   # (Optional) Task ID, will auto-generate UUID if left blank\n)\n\n# Submit to scheduling queue\nprint(\"Submitting task...\")\nmem_scheduler.memos_message_queue.submit_messages([task_item])\n\n# At this point, the scheduler will asynchronously call my_async_task_handler in the background\n",[29,2251,2252,2274,2278,2283,2296,2312,2328,2342,2361,2378,2382,2386,2391,2407,2430,2434],{"__ignoreMap":168},[299,2253,2254,2256,2258,2260,2262,2264,2266,2268,2270,2272],{"class":905,"line":906},[299,2255,1816],{"class":1815},[299,2257,1820],{"class":1819},[299,2259,46],{"class":909},[299,2261,45],{"class":1819},[299,2263,46],{"class":909},[299,2265,1829],{"class":1819},[299,2267,46],{"class":909},[299,2269,1834],{"class":1819},[299,2271,1837],{"class":1815},[299,2273,1840],{"class":1819},[299,2275,2276],{"class":905,"line":913},[299,2277,1853],{"emptyLinePlaceholder":1852},[299,2279,2280],{"class":905,"line":932},[299,2281,2282],{"class":1892},"# Create task message\n",[299,2284,2285,2288,2290,2293],{"class":905,"line":978},[299,2286,2287],{"class":1819},"task_item ",[299,2289,1966],{"class":909},[299,2291,2292],{"class":1861}," ScheduleMessageItem",[299,2294,2295],{"class":909},"(\n",[299,2297,2298,2301,2303,2305,2308,2310],{"class":905,"line":1018},[299,2299,2300],{"class":1868},"    user_id",[299,2302,1966],{"class":909},[299,2304,923],{"class":909},[299,2306,2307],{"class":950},"user_123",[299,2309,923],{"class":909},[299,2311,1146],{"class":909},[299,2313,2314,2317,2319,2321,2324,2326],{"class":905,"line":1024},[299,2315,2316],{"class":1868},"    mem_cube_id",[299,2318,1966],{"class":909},[299,2320,923],{"class":909},[299,2322,2323],{"class":950},"default_cube",[299,2325,923],{"class":909},[299,2327,1146],{"class":909},[299,2329,2330,2333,2335,2337,2339],{"class":905,"line":1187},[299,2331,2332],{"class":1868},"    label",[299,2334,1966],{"class":909},[299,2336,2225],{"class":1861},[299,2338,956],{"class":909},[299,2340,2341],{"class":1892},"          # Must match the Label used during registration\n",[299,2343,2344,2347,2349,2351,2354,2356,2358],{"class":905,"line":1200},[299,2345,2346],{"class":1868},"    content",[299,2348,1966],{"class":909},[299,2350,923],{"class":909},[299,2352,2353],{"class":950},"Data content to process",[299,2355,923],{"class":909},[299,2357,956],{"class":909},[299,2359,2360],{"class":1892},"    # Payload passed to the Handler\n",[299,2362,2363,2366,2368,2370,2373,2375],{"class":905,"line":1211},[299,2364,2365],{"class":1868},"    item_id",[299,2367,1966],{"class":909},[299,2369,923],{"class":909},[299,2371,2372],{"class":950},"unique_task_id_001",[299,2374,923],{"class":909},[299,2376,2377],{"class":1892},"   # (Optional) Task ID, will auto-generate UUID if left blank\n",[299,2379,2380],{"class":905,"line":1217},[299,2381,1931],{"class":909},[299,2383,2384],{"class":905,"line":1235},[299,2385,1853],{"emptyLinePlaceholder":1852},[299,2387,2388],{"class":905,"line":1252},[299,2389,2390],{"class":1892},"# Submit to scheduling queue\n",[299,2392,2393,2396,2398,2400,2403,2405],{"class":905,"line":1269},[299,2394,2395],{"class":1861},"print",[299,2397,1865],{"class":909},[299,2399,923],{"class":909},[299,2401,2402],{"class":950},"Submitting task...",[299,2404,923],{"class":909},[299,2406,1931],{"class":909},[299,2408,2409,2411,2413,2416,2418,2421,2424,2427],{"class":905,"line":1283},[299,2410,45],{"class":1819},[299,2412,46],{"class":909},[299,2414,2415],{"class":1974},"memos_message_queue",[299,2417,46],{"class":909},[299,2419,2420],{"class":1861},"submit_messages",[299,2422,2423],{"class":909},"([",[299,2425,2426],{"class":1861},"task_item",[299,2428,2429],{"class":909},"])\n",[299,2431,2432],{"class":905,"line":1295},[299,2433,1853],{"emptyLinePlaceholder":1852},[299,2435,2436],{"class":905,"line":1305},[299,2437,2438],{"class":1892},"# At this point, the scheduler will asynchronously call my_async_task_handler in the background\n",[16,2440,2441],{},"By doing this, you can easily decouple complex memory management logic and hand it over to the Memos scheduling system for reliable background execution.",[143,2443],{},[11,2445,2447],{"id":2446},"_3-contact-us","3. Contact Us",[2449,2450],"img",{"src":2451,"alt":2452,"style":2453},"https://cdn.memt.ai/img/1758685658684_nbhka4_compressed.png","image","width:70%;",[2455,2456,2457],"style",{},"html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}",{"title":168,"searchDepth":913,"depth":913,"links":2459},[2460,2461,2468,2471],{"id":13,"depth":913,"text":14},{"id":147,"depth":913,"text":148,"children":2462},[2463,2464,2465,2466,2467],{"id":176,"depth":932,"text":177},{"id":255,"depth":932,"text":256},{"id":360,"depth":932,"text":361},{"id":815,"depth":932,"text":816},{"id":1637,"depth":932,"text":1638},{"id":1684,"depth":913,"text":1685,"children":2469},[2470],{"id":1775,"depth":932,"text":1776},{"id":2446,"depth":913,"text":2447},"Memory scheduling acts as the neural center of the memory system. It dynamically allocates and reclaims cognitive resources in the background by organizing and coordinating operations such as adding, updating, transforming, and retrieving memories, thereby continuously optimizing the entire memory system.","md",{},"/en/memos_cloud/introduction/mem_schedule",{"title":5,"description":168},"en/memos_cloud/introduction/mem_schedule","vSObH7lZZH8gKLihmeDTmyy-1upZmsOHaFoeKMUDtFM",[2480,2488],{"title":2481,"path":2482,"stem":2483,"icon":2484,"framework":6,"module":6,"class":2485,"target":-1,"active":2486,"defaultOpen":2486,"children":-1,"description":2487},"Memory Production","/memos_cloud/introduction/mem_production","memos_cloud/introduction/mem_production","i-ri-add-line",[],false,"The Memory Production module transforms raw messages or events into storable and retrievable memory units, serving as the starting point of the entire MemOS workflow.",{"title":2489,"path":2490,"stem":2491,"icon":2492,"framework":6,"module":6,"class":2493,"target":-1,"active":2486,"defaultOpen":2486,"children":-1,"description":2494},"Memory Recall","/memos_cloud/introduction/mem_recall","memos_cloud/introduction/mem_recall","i-ri-search-line",[],"In MemOS, memory is not just about archiving information, but also about being dynamically retrieved when needed and transformed into executable input.",1770372081903]