[{"data":1,"prerenderedAt":3047},["ShallowReactive",2],{"/open_source/modules/mem_cube":3,"surround-/open_source/modules/mem_cube":3031},{"id":4,"title":5,"avatar":6,"banner":6,"body":7,"category":6,"desc":3024,"description":83,"extension":3025,"links":6,"meta":3026,"navigation":6,"path":3027,"seo":3028,"stem":3029,"__hash__":3030},"docs/en/open_source/modules/mem_cube.md","MemCube",null,{"type":8,"value":9,"toc":3002},"minimark",[10,15,23,60,63,67,74,84,87,104,108,115,120,123,352,356,359,532,536,593,601,605,648,652,705,709,712,738,742,746,1865,1869,1890,2944,2948,2951,2965,2969,2979,2983,2998],[11,12,14],"h2",{"id":13},"what-is-a-memcube","What is a MemCube?",[16,17,18,19,22],"p",{},"A ",[20,21,5],"strong",{}," is a container that bundles three major types of memory:",[24,25,26,42,51],"ul",{},[27,28,29,32,33,37,38,41],"li",{},[20,30,31],{},"Textual Memory"," (e.g., ",[34,35,36],"code",{},"GeneralTextMemory",", ",[34,39,40],{},"TreeTextMemory","): For storing and retrieving unstructured or structured text knowledge.",[27,43,44,32,47,50],{},[20,45,46],{},"Activation Memory",[34,48,49],{},"KVCacheMemory","): For storing key-value caches to accelerate LLM inference and context reuse.",[27,52,53,32,56,59],{},[20,54,55],{},"Parametric Memory",[34,57,58],{},"LoRAMemory","): For storing model adaptation parameters (like LoRA weights).",[16,61,62],{},"Each memory type is independently configurable and can be swapped or extended as needed.",[11,64,66],{"id":65},"structure","Structure",[16,68,69,70,73],{},"A MemCube is defined by a configuration (see ",[34,71,72],{},"GeneralMemCubeConfig","), which specifies the backend and settings for each memory type. The typical structure is:",[75,76,81],"pre",{"className":77,"code":79,"language":80},[78],"language-text","MemCube\n ├── text_mem: TextualMemory\n ├── act_mem: ActivationMemory\n └── para_mem: ParametricMemory\n","text",[34,82,79],{"__ignoreMap":83},"",[16,85,86],{},"All memory modules are accessible via the MemCube interface:",[24,88,89,94,99],{},[27,90,91],{},[34,92,93],{},"mem_cube.text_mem",[27,95,96],{},[34,97,98],{},"mem_cube.act_mem",[27,100,101],{},[34,102,103],{},"mem_cube.para_mem",[11,105,107],{"id":106},"view-architecture","View Architecture",[16,109,110,111,114],{},"Starting from MemOS 2.0, runtime operations (add/search) should go through the ",[20,112,113],{},"View architecture",":",[116,117,119],"h3",{"id":118},"singlecubeview","SingleCubeView",[16,121,122],{},"Operates on a single MemCube. Use when you have one logical memory space.",[75,124,128],{"className":125,"code":126,"language":127,"meta":83,"style":83},"language-python shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","from memos.multi_mem_cube.single_cube import SingleCubeView\n\nview = SingleCubeView(\n    cube_id=\"my_cube\",\n    naive_mem_cube=naive_mem_cube,\n    mem_reader=mem_reader,\n    mem_scheduler=mem_scheduler,\n    logger=logger,\n    searcher=searcher,\n    feedback_server=feedback_server,  # Optional\n)\n\n# Add memories\nview.add_memories(add_request)\n\n# Search memories\nview.search_memories(search_request)\n","python",[34,129,130,161,168,184,205,218,231,244,257,270,288,294,299,305,324,329,335],{"__ignoreMap":83},[131,132,135,139,143,147,150,152,155,158],"span",{"class":133,"line":134},"line",1,[131,136,138],{"class":137},"s7zQu","from",[131,140,142],{"class":141},"sTEyZ"," memos",[131,144,146],{"class":145},"sMK4o",".",[131,148,149],{"class":141},"multi_mem_cube",[131,151,146],{"class":145},[131,153,154],{"class":141},"single_cube ",[131,156,157],{"class":137},"import",[131,159,160],{"class":141}," SingleCubeView\n",[131,162,164],{"class":133,"line":163},2,[131,165,167],{"emptyLinePlaceholder":166},true,"\n",[131,169,171,174,177,181],{"class":133,"line":170},3,[131,172,173],{"class":141},"view ",[131,175,176],{"class":145},"=",[131,178,180],{"class":179},"s2Zo4"," SingleCubeView",[131,182,183],{"class":145},"(\n",[131,185,187,191,193,196,200,202],{"class":133,"line":186},4,[131,188,190],{"class":189},"sHdIc","    cube_id",[131,192,176],{"class":145},[131,194,195],{"class":145},"\"",[131,197,199],{"class":198},"sfazB","my_cube",[131,201,195],{"class":145},[131,203,204],{"class":145},",\n",[131,206,208,211,213,216],{"class":133,"line":207},5,[131,209,210],{"class":189},"    naive_mem_cube",[131,212,176],{"class":145},[131,214,215],{"class":179},"naive_mem_cube",[131,217,204],{"class":145},[131,219,221,224,226,229],{"class":133,"line":220},6,[131,222,223],{"class":189},"    mem_reader",[131,225,176],{"class":145},[131,227,228],{"class":179},"mem_reader",[131,230,204],{"class":145},[131,232,234,237,239,242],{"class":133,"line":233},7,[131,235,236],{"class":189},"    mem_scheduler",[131,238,176],{"class":145},[131,240,241],{"class":179},"mem_scheduler",[131,243,204],{"class":145},[131,245,247,250,252,255],{"class":133,"line":246},8,[131,248,249],{"class":189},"    logger",[131,251,176],{"class":145},[131,253,254],{"class":179},"logger",[131,256,204],{"class":145},[131,258,260,263,265,268],{"class":133,"line":259},9,[131,261,262],{"class":189},"    searcher",[131,264,176],{"class":145},[131,266,267],{"class":179},"searcher",[131,269,204],{"class":145},[131,271,273,276,278,281,284],{"class":133,"line":272},10,[131,274,275],{"class":189},"    feedback_server",[131,277,176],{"class":145},[131,279,280],{"class":179},"feedback_server",[131,282,283],{"class":145},",",[131,285,287],{"class":286},"sHwdD","  # Optional\n",[131,289,291],{"class":133,"line":290},11,[131,292,293],{"class":145},")\n",[131,295,297],{"class":133,"line":296},12,[131,298,167],{"emptyLinePlaceholder":166},[131,300,302],{"class":133,"line":301},13,[131,303,304],{"class":286},"# Add memories\n",[131,306,308,311,313,316,319,322],{"class":133,"line":307},14,[131,309,310],{"class":141},"view",[131,312,146],{"class":145},[131,314,315],{"class":179},"add_memories",[131,317,318],{"class":145},"(",[131,320,321],{"class":179},"add_request",[131,323,293],{"class":145},[131,325,327],{"class":133,"line":326},15,[131,328,167],{"emptyLinePlaceholder":166},[131,330,332],{"class":133,"line":331},16,[131,333,334],{"class":286},"# Search memories\n",[131,336,338,340,342,345,347,350],{"class":133,"line":337},17,[131,339,310],{"class":141},[131,341,146],{"class":145},[131,343,344],{"class":179},"search_memories",[131,346,318],{"class":145},[131,348,349],{"class":179},"search_request",[131,351,293],{"class":145},[116,353,355],{"id":354},"compositecubeview","CompositeCubeView",[16,357,358],{},"Operates on multiple MemCubes. Fan-out operations to multiple SingleCubeViews and aggregate results.",[75,360,362],{"className":125,"code":361,"language":127,"meta":83,"style":83},"from memos.multi_mem_cube.composite_cube import CompositeCubeView\n\n# Create multiple SingleCubeViews\nview1 = SingleCubeView(cube_id=\"cube_1\", ...)\nview2 = SingleCubeView(cube_id=\"cube_2\", ...)\n\n# Composite view for multi-cube operations\ncomposite = CompositeCubeView(cube_views=[view1, view2], logger=logger)\n\n# Search across all cubes\nresults = composite.search_memories(search_request)\n# Results contain cube_id field to identify source\n",[34,363,364,384,388,393,423,451,455,460,498,502,507,527],{"__ignoreMap":83},[131,365,366,368,370,372,374,376,379,381],{"class":133,"line":134},[131,367,138],{"class":137},[131,369,142],{"class":141},[131,371,146],{"class":145},[131,373,149],{"class":141},[131,375,146],{"class":145},[131,377,378],{"class":141},"composite_cube ",[131,380,157],{"class":137},[131,382,383],{"class":141}," CompositeCubeView\n",[131,385,386],{"class":133,"line":163},[131,387,167],{"emptyLinePlaceholder":166},[131,389,390],{"class":133,"line":170},[131,391,392],{"class":286},"# Create multiple SingleCubeViews\n",[131,394,395,398,400,402,404,407,409,411,414,416,418,421],{"class":133,"line":186},[131,396,397],{"class":141},"view1 ",[131,399,176],{"class":145},[131,401,180],{"class":179},[131,403,318],{"class":145},[131,405,406],{"class":189},"cube_id",[131,408,176],{"class":145},[131,410,195],{"class":145},[131,412,413],{"class":198},"cube_1",[131,415,195],{"class":145},[131,417,283],{"class":145},[131,419,420],{"class":179}," ...",[131,422,293],{"class":145},[131,424,425,428,430,432,434,436,438,440,443,445,447,449],{"class":133,"line":207},[131,426,427],{"class":141},"view2 ",[131,429,176],{"class":145},[131,431,180],{"class":179},[131,433,318],{"class":145},[131,435,406],{"class":189},[131,437,176],{"class":145},[131,439,195],{"class":145},[131,441,442],{"class":198},"cube_2",[131,444,195],{"class":145},[131,446,283],{"class":145},[131,448,420],{"class":179},[131,450,293],{"class":145},[131,452,453],{"class":133,"line":220},[131,454,167],{"emptyLinePlaceholder":166},[131,456,457],{"class":133,"line":233},[131,458,459],{"class":286},"# Composite view for multi-cube operations\n",[131,461,462,465,467,470,472,475,478,481,483,486,489,492,494,496],{"class":133,"line":246},[131,463,464],{"class":141},"composite ",[131,466,176],{"class":145},[131,468,469],{"class":179}," CompositeCubeView",[131,471,318],{"class":145},[131,473,474],{"class":189},"cube_views",[131,476,477],{"class":145},"=[",[131,479,480],{"class":179},"view1",[131,482,283],{"class":145},[131,484,485],{"class":179}," view2",[131,487,488],{"class":145},"],",[131,490,491],{"class":189}," logger",[131,493,176],{"class":145},[131,495,254],{"class":179},[131,497,293],{"class":145},[131,499,500],{"class":133,"line":259},[131,501,167],{"emptyLinePlaceholder":166},[131,503,504],{"class":133,"line":272},[131,505,506],{"class":286},"# Search across all cubes\n",[131,508,509,512,514,517,519,521,523,525],{"class":133,"line":290},[131,510,511],{"class":141},"results ",[131,513,176],{"class":145},[131,515,516],{"class":141}," composite",[131,518,146],{"class":145},[131,520,344],{"class":179},[131,522,318],{"class":145},[131,524,349],{"class":179},[131,526,293],{"class":145},[131,528,529],{"class":133,"line":296},[131,530,531],{"class":286},"# Results contain cube_id field to identify source\n",[116,533,535],{"id":534},"api-request-fields","API Request Fields",[537,538,539,552],"table",{},[540,541,542],"thead",{},[543,544,545,549],"tr",{},[546,547,548],"th",{},"Field",[546,550,551],{},"Description",[553,554,555,566,576],"tbody",{},[543,556,557,563],{},[558,559,560],"td",{},[34,561,562],{},"writable_cube_ids",[558,564,565],{},"Target cubes for add operations",[543,567,568,573],{},[558,569,570],{},[34,571,572],{},"readable_cube_ids",[558,574,575],{},"Target cubes for search operations",[543,577,578,583],{},[558,579,580],{},[34,581,582],{},"async_mode",[558,584,585,588,589,592],{},[34,586,587],{},"\"async\""," (scheduler enabled) or ",[34,590,591],{},"\"sync\""," (scheduler disabled)",[11,594,596,597,600],{"id":595},"api-summary-generalmemcube","API Summary (",[34,598,599],{},"GeneralMemCube",")",[116,602,604],{"id":603},"initialization","Initialization",[75,606,608],{"className":125,"code":607,"language":127,"meta":83,"style":83},"from memos.mem_cube.general import GeneralMemCube\nmem_cube = GeneralMemCube(config)\n",[34,609,610,631],{"__ignoreMap":83},[131,611,612,614,616,618,621,623,626,628],{"class":133,"line":134},[131,613,138],{"class":137},[131,615,142],{"class":141},[131,617,146],{"class":145},[131,619,620],{"class":141},"mem_cube",[131,622,146],{"class":145},[131,624,625],{"class":141},"general ",[131,627,157],{"class":137},[131,629,630],{"class":141}," GeneralMemCube\n",[131,632,633,636,638,641,643,646],{"class":133,"line":163},[131,634,635],{"class":141},"mem_cube ",[131,637,176],{"class":145},[131,639,640],{"class":179}," GeneralMemCube",[131,642,318],{"class":145},[131,644,645],{"class":179},"config",[131,647,293],{"class":145},[116,649,651],{"id":650},"static-data-operations","Static Data Operations",[537,653,654,663],{},[540,655,656],{},[543,657,658,661],{},[546,659,660],{},"Method",[546,662,551],{},[553,664,665,675,685,695],{},[543,666,667,672],{},[558,668,669],{},[34,670,671],{},"init_from_dir(dir)",[558,673,674],{},"Load a MemCube from a local directory",[543,676,677,682],{},[558,678,679],{},[34,680,681],{},"init_from_remote_repo(repo, base_url)",[558,683,684],{},"Load a MemCube from remote repo (e.g., Hugging Face)",[543,686,687,692],{},[558,688,689],{},[34,690,691],{},"load(dir)",[558,693,694],{},"Load all memories from a directory into existing instance",[543,696,697,702],{},[558,698,699],{},[34,700,701],{},"dump(dir)",[558,703,704],{},"Save all memories to a directory for persistence",[11,706,708],{"id":707},"file-storage","File Storage",[16,710,711],{},"A MemCube directory contains:",[24,713,714,720,726,732],{},[27,715,716,719],{},[34,717,718],{},"config.json"," (MemCube configuration)",[27,721,722,725],{},[34,723,724],{},"textual_memory.json"," (textual memory)",[27,727,728,731],{},[34,729,730],{},"activation_memory.pickle"," (activation memory)",[27,733,734,737],{},[34,735,736],{},"parametric_memory.adapter"," (parametric memory)",[11,739,741],{"id":740},"example-usage","Example Usage",[116,743,745],{"id":744},"export-example-dump_cubepy","Export Example (dump_cube.py)",[75,747,749],{"className":125,"code":748,"language":127,"meta":83,"style":83},"import json\nimport os\nimport shutil\n\nfrom memos.api.handlers import init_server\nfrom memos.api.product_models import APIADDRequest\nfrom memos.log import get_logger\nfrom memos.multi_mem_cube.single_cube import SingleCubeView\n\nlogger = get_logger(__name__)\nEXAMPLE_CUBE_ID = \"example_dump_cube\"\nEXAMPLE_USER_ID = \"example_user\"\n\n# 1. Initialize server\ncomponents = init_server()\nnaive = components[\"naive_mem_cube\"]\n\n# 2. Create SingleCubeView\nview = SingleCubeView(\n    cube_id=EXAMPLE_CUBE_ID,\n    naive_mem_cube=naive,\n    mem_reader=components[\"mem_reader\"],\n    mem_scheduler=components[\"mem_scheduler\"],\n    logger=logger,\n    searcher=components[\"searcher\"],\n    feedback_server=components[\"feedback_server\"],\n)\n\n# 3. Add memories via View\nresult = view.add_memories(APIADDRequest(\n    user_id=EXAMPLE_USER_ID,\n    writable_cube_ids=[EXAMPLE_CUBE_ID],\n    messages=[\n        {\"role\": \"user\", \"content\": \"This is a test memory\"},\n        {\"role\": \"user\", \"content\": \"Another memory to persist\"},\n    ],\n    async_mode=\"sync\",  # Use sync mode to ensure immediate completion\n))\nprint(f\"✓ Added {len(result)} memories\")\n\n# 4. Export specific cube_id data\noutput_dir = \"tmp/mem_cube_dump\"\nif os.path.exists(output_dir):\n    shutil.rmtree(output_dir)\nos.makedirs(output_dir, exist_ok=True)\n\n# Export graph data (only data for current cube_id)\njson_data = naive.text_mem.graph_store.export_graph(\n    include_embedding=True,  # Include embeddings for semantic search\n    user_name=EXAMPLE_CUBE_ID,  # Filter by cube_id\n)\n\n# Fix embedding format: parse string to list for import compatibility\nimport contextlib\nfor node in json_data.get(\"nodes\", []):\n    metadata = node.get(\"metadata\", {})\n    if \"embedding\" in metadata and isinstance(metadata[\"embedding\"], str):\n        with contextlib.suppress(json.JSONDecodeError):\n            metadata[\"embedding\"] = json.loads(metadata[\"embedding\"])\n\nprint(f\"✓ Exported {len(json_data.get('nodes', []))} nodes\")\n\n# Save to file\nmemory_file = os.path.join(output_dir, \"textual_memory.json\")\nwith open(memory_file, \"w\", encoding=\"utf-8\") as f:\n    json.dump(json_data, f, indent=2, ensure_ascii=False)\nprint(f\"✓ Saved to: {memory_file}\")\n",[34,750,751,758,765,772,776,797,817,833,851,855,872,888,902,906,911,924,946,950,956,967,979,991,1012,1031,1042,1061,1080,1085,1090,1096,1118,1131,1143,1152,1195,1233,1239,1259,1265,1302,1307,1313,1328,1356,1373,1396,1401,1407,1435,1447,1462,1467,1472,1478,1486,1520,1549,1594,1620,1663,1668,1714,1719,1725,1758,1806,1843],{"__ignoreMap":83},[131,752,753,755],{"class":133,"line":134},[131,754,157],{"class":137},[131,756,757],{"class":141}," json\n",[131,759,760,762],{"class":133,"line":163},[131,761,157],{"class":137},[131,763,764],{"class":141}," os\n",[131,766,767,769],{"class":133,"line":170},[131,768,157],{"class":137},[131,770,771],{"class":141}," shutil\n",[131,773,774],{"class":133,"line":186},[131,775,167],{"emptyLinePlaceholder":166},[131,777,778,780,782,784,787,789,792,794],{"class":133,"line":207},[131,779,138],{"class":137},[131,781,142],{"class":141},[131,783,146],{"class":145},[131,785,786],{"class":141},"api",[131,788,146],{"class":145},[131,790,791],{"class":141},"handlers ",[131,793,157],{"class":137},[131,795,796],{"class":141}," init_server\n",[131,798,799,801,803,805,807,809,812,814],{"class":133,"line":220},[131,800,138],{"class":137},[131,802,142],{"class":141},[131,804,146],{"class":145},[131,806,786],{"class":141},[131,808,146],{"class":145},[131,810,811],{"class":141},"product_models ",[131,813,157],{"class":137},[131,815,816],{"class":141}," APIADDRequest\n",[131,818,819,821,823,825,828,830],{"class":133,"line":233},[131,820,138],{"class":137},[131,822,142],{"class":141},[131,824,146],{"class":145},[131,826,827],{"class":141},"log ",[131,829,157],{"class":137},[131,831,832],{"class":141}," get_logger\n",[131,834,835,837,839,841,843,845,847,849],{"class":133,"line":246},[131,836,138],{"class":137},[131,838,142],{"class":141},[131,840,146],{"class":145},[131,842,149],{"class":141},[131,844,146],{"class":145},[131,846,154],{"class":141},[131,848,157],{"class":137},[131,850,160],{"class":141},[131,852,853],{"class":133,"line":259},[131,854,167],{"emptyLinePlaceholder":166},[131,856,857,860,862,865,867,870],{"class":133,"line":272},[131,858,859],{"class":141},"logger ",[131,861,176],{"class":145},[131,863,864],{"class":179}," get_logger",[131,866,318],{"class":145},[131,868,869],{"class":141},"__name__",[131,871,293],{"class":145},[131,873,874,877,879,882,885],{"class":133,"line":290},[131,875,876],{"class":141},"EXAMPLE_CUBE_ID ",[131,878,176],{"class":145},[131,880,881],{"class":145}," \"",[131,883,884],{"class":198},"example_dump_cube",[131,886,887],{"class":145},"\"\n",[131,889,890,893,895,897,900],{"class":133,"line":296},[131,891,892],{"class":141},"EXAMPLE_USER_ID ",[131,894,176],{"class":145},[131,896,881],{"class":145},[131,898,899],{"class":198},"example_user",[131,901,887],{"class":145},[131,903,904],{"class":133,"line":301},[131,905,167],{"emptyLinePlaceholder":166},[131,907,908],{"class":133,"line":307},[131,909,910],{"class":286},"# 1. Initialize server\n",[131,912,913,916,918,921],{"class":133,"line":326},[131,914,915],{"class":141},"components ",[131,917,176],{"class":145},[131,919,920],{"class":179}," init_server",[131,922,923],{"class":145},"()\n",[131,925,926,929,931,934,937,939,941,943],{"class":133,"line":331},[131,927,928],{"class":141},"naive ",[131,930,176],{"class":145},[131,932,933],{"class":141}," components",[131,935,936],{"class":145},"[",[131,938,195],{"class":145},[131,940,215],{"class":198},[131,942,195],{"class":145},[131,944,945],{"class":145},"]\n",[131,947,948],{"class":133,"line":337},[131,949,167],{"emptyLinePlaceholder":166},[131,951,953],{"class":133,"line":952},18,[131,954,955],{"class":286},"# 2. Create SingleCubeView\n",[131,957,959,961,963,965],{"class":133,"line":958},19,[131,960,173],{"class":141},[131,962,176],{"class":145},[131,964,180],{"class":179},[131,966,183],{"class":145},[131,968,970,972,974,977],{"class":133,"line":969},20,[131,971,190],{"class":189},[131,973,176],{"class":145},[131,975,976],{"class":179},"EXAMPLE_CUBE_ID",[131,978,204],{"class":145},[131,980,982,984,986,989],{"class":133,"line":981},21,[131,983,210],{"class":189},[131,985,176],{"class":145},[131,987,988],{"class":179},"naive",[131,990,204],{"class":145},[131,992,994,996,998,1001,1003,1005,1007,1009],{"class":133,"line":993},22,[131,995,223],{"class":189},[131,997,176],{"class":145},[131,999,1000],{"class":179},"components",[131,1002,936],{"class":145},[131,1004,195],{"class":145},[131,1006,228],{"class":198},[131,1008,195],{"class":145},[131,1010,1011],{"class":145},"],\n",[131,1013,1015,1017,1019,1021,1023,1025,1027,1029],{"class":133,"line":1014},23,[131,1016,236],{"class":189},[131,1018,176],{"class":145},[131,1020,1000],{"class":179},[131,1022,936],{"class":145},[131,1024,195],{"class":145},[131,1026,241],{"class":198},[131,1028,195],{"class":145},[131,1030,1011],{"class":145},[131,1032,1034,1036,1038,1040],{"class":133,"line":1033},24,[131,1035,249],{"class":189},[131,1037,176],{"class":145},[131,1039,254],{"class":179},[131,1041,204],{"class":145},[131,1043,1045,1047,1049,1051,1053,1055,1057,1059],{"class":133,"line":1044},25,[131,1046,262],{"class":189},[131,1048,176],{"class":145},[131,1050,1000],{"class":179},[131,1052,936],{"class":145},[131,1054,195],{"class":145},[131,1056,267],{"class":198},[131,1058,195],{"class":145},[131,1060,1011],{"class":145},[131,1062,1064,1066,1068,1070,1072,1074,1076,1078],{"class":133,"line":1063},26,[131,1065,275],{"class":189},[131,1067,176],{"class":145},[131,1069,1000],{"class":179},[131,1071,936],{"class":145},[131,1073,195],{"class":145},[131,1075,280],{"class":198},[131,1077,195],{"class":145},[131,1079,1011],{"class":145},[131,1081,1083],{"class":133,"line":1082},27,[131,1084,293],{"class":145},[131,1086,1088],{"class":133,"line":1087},28,[131,1089,167],{"emptyLinePlaceholder":166},[131,1091,1093],{"class":133,"line":1092},29,[131,1094,1095],{"class":286},"# 3. Add memories via View\n",[131,1097,1099,1102,1104,1107,1109,1111,1113,1116],{"class":133,"line":1098},30,[131,1100,1101],{"class":141},"result ",[131,1103,176],{"class":145},[131,1105,1106],{"class":141}," view",[131,1108,146],{"class":145},[131,1110,315],{"class":179},[131,1112,318],{"class":145},[131,1114,1115],{"class":179},"APIADDRequest",[131,1117,183],{"class":145},[131,1119,1121,1124,1126,1129],{"class":133,"line":1120},31,[131,1122,1123],{"class":189},"    user_id",[131,1125,176],{"class":145},[131,1127,1128],{"class":179},"EXAMPLE_USER_ID",[131,1130,204],{"class":145},[131,1132,1134,1137,1139,1141],{"class":133,"line":1133},32,[131,1135,1136],{"class":189},"    writable_cube_ids",[131,1138,477],{"class":145},[131,1140,976],{"class":179},[131,1142,1011],{"class":145},[131,1144,1146,1149],{"class":133,"line":1145},33,[131,1147,1148],{"class":189},"    messages",[131,1150,1151],{"class":145},"=[\n",[131,1153,1155,1158,1160,1163,1165,1167,1169,1172,1174,1176,1178,1181,1183,1185,1187,1190,1192],{"class":133,"line":1154},34,[131,1156,1157],{"class":145},"        {",[131,1159,195],{"class":145},[131,1161,1162],{"class":198},"role",[131,1164,195],{"class":145},[131,1166,114],{"class":145},[131,1168,881],{"class":145},[131,1170,1171],{"class":198},"user",[131,1173,195],{"class":145},[131,1175,283],{"class":145},[131,1177,881],{"class":145},[131,1179,1180],{"class":198},"content",[131,1182,195],{"class":145},[131,1184,114],{"class":145},[131,1186,881],{"class":145},[131,1188,1189],{"class":198},"This is a test memory",[131,1191,195],{"class":145},[131,1193,1194],{"class":145},"},\n",[131,1196,1198,1200,1202,1204,1206,1208,1210,1212,1214,1216,1218,1220,1222,1224,1226,1229,1231],{"class":133,"line":1197},35,[131,1199,1157],{"class":145},[131,1201,195],{"class":145},[131,1203,1162],{"class":198},[131,1205,195],{"class":145},[131,1207,114],{"class":145},[131,1209,881],{"class":145},[131,1211,1171],{"class":198},[131,1213,195],{"class":145},[131,1215,283],{"class":145},[131,1217,881],{"class":145},[131,1219,1180],{"class":198},[131,1221,195],{"class":145},[131,1223,114],{"class":145},[131,1225,881],{"class":145},[131,1227,1228],{"class":198},"Another memory to persist",[131,1230,195],{"class":145},[131,1232,1194],{"class":145},[131,1234,1236],{"class":133,"line":1235},36,[131,1237,1238],{"class":145},"    ],\n",[131,1240,1242,1245,1247,1249,1252,1254,1256],{"class":133,"line":1241},37,[131,1243,1244],{"class":189},"    async_mode",[131,1246,176],{"class":145},[131,1248,195],{"class":145},[131,1250,1251],{"class":198},"sync",[131,1253,195],{"class":145},[131,1255,283],{"class":145},[131,1257,1258],{"class":286},"  # Use sync mode to ensure immediate completion\n",[131,1260,1262],{"class":133,"line":1261},38,[131,1263,1264],{"class":145},"))\n",[131,1266,1268,1271,1273,1277,1280,1284,1287,1289,1292,1294,1297,1300],{"class":133,"line":1267},39,[131,1269,1270],{"class":179},"print",[131,1272,318],{"class":145},[131,1274,1276],{"class":1275},"spNyl","f",[131,1278,1279],{"class":198},"\"✓ Added ",[131,1281,1283],{"class":1282},"sbssI","{",[131,1285,1286],{"class":179},"len",[131,1288,318],{"class":145},[131,1290,1291],{"class":179},"result",[131,1293,600],{"class":145},[131,1295,1296],{"class":1282},"}",[131,1298,1299],{"class":198}," memories\"",[131,1301,293],{"class":145},[131,1303,1305],{"class":133,"line":1304},40,[131,1306,167],{"emptyLinePlaceholder":166},[131,1308,1310],{"class":133,"line":1309},41,[131,1311,1312],{"class":286},"# 4. Export specific cube_id data\n",[131,1314,1316,1319,1321,1323,1326],{"class":133,"line":1315},42,[131,1317,1318],{"class":141},"output_dir ",[131,1320,176],{"class":145},[131,1322,881],{"class":145},[131,1324,1325],{"class":198},"tmp/mem_cube_dump",[131,1327,887],{"class":145},[131,1329,1331,1334,1337,1339,1343,1345,1348,1350,1353],{"class":133,"line":1330},43,[131,1332,1333],{"class":137},"if",[131,1335,1336],{"class":141}," os",[131,1338,146],{"class":145},[131,1340,1342],{"class":1341},"swJcz","path",[131,1344,146],{"class":145},[131,1346,1347],{"class":179},"exists",[131,1349,318],{"class":145},[131,1351,1352],{"class":179},"output_dir",[131,1354,1355],{"class":145},"):\n",[131,1357,1359,1362,1364,1367,1369,1371],{"class":133,"line":1358},44,[131,1360,1361],{"class":141},"    shutil",[131,1363,146],{"class":145},[131,1365,1366],{"class":179},"rmtree",[131,1368,318],{"class":145},[131,1370,1352],{"class":179},[131,1372,293],{"class":145},[131,1374,1376,1379,1381,1384,1386,1388,1390,1393],{"class":133,"line":1375},45,[131,1377,1378],{"class":141},"os",[131,1380,146],{"class":145},[131,1382,1383],{"class":179},"makedirs",[131,1385,318],{"class":145},[131,1387,1352],{"class":179},[131,1389,283],{"class":145},[131,1391,1392],{"class":189}," exist_ok",[131,1394,1395],{"class":145},"=True)\n",[131,1397,1399],{"class":133,"line":1398},46,[131,1400,167],{"emptyLinePlaceholder":166},[131,1402,1404],{"class":133,"line":1403},47,[131,1405,1406],{"class":286},"# Export graph data (only data for current cube_id)\n",[131,1408,1410,1413,1415,1418,1420,1423,1425,1428,1430,1433],{"class":133,"line":1409},48,[131,1411,1412],{"class":141},"json_data ",[131,1414,176],{"class":145},[131,1416,1417],{"class":141}," naive",[131,1419,146],{"class":145},[131,1421,1422],{"class":1341},"text_mem",[131,1424,146],{"class":145},[131,1426,1427],{"class":1341},"graph_store",[131,1429,146],{"class":145},[131,1431,1432],{"class":179},"export_graph",[131,1434,183],{"class":145},[131,1436,1438,1441,1444],{"class":133,"line":1437},49,[131,1439,1440],{"class":189},"    include_embedding",[131,1442,1443],{"class":145},"=True,",[131,1445,1446],{"class":286},"  # Include embeddings for semantic search\n",[131,1448,1450,1453,1455,1457,1459],{"class":133,"line":1449},50,[131,1451,1452],{"class":189},"    user_name",[131,1454,176],{"class":145},[131,1456,976],{"class":179},[131,1458,283],{"class":145},[131,1460,1461],{"class":286},"  # Filter by cube_id\n",[131,1463,1465],{"class":133,"line":1464},51,[131,1466,293],{"class":145},[131,1468,1470],{"class":133,"line":1469},52,[131,1471,167],{"emptyLinePlaceholder":166},[131,1473,1475],{"class":133,"line":1474},53,[131,1476,1477],{"class":286},"# Fix embedding format: parse string to list for import compatibility\n",[131,1479,1481,1483],{"class":133,"line":1480},54,[131,1482,157],{"class":137},[131,1484,1485],{"class":141}," contextlib\n",[131,1487,1489,1492,1495,1498,1501,1503,1506,1508,1510,1513,1515,1517],{"class":133,"line":1488},55,[131,1490,1491],{"class":137},"for",[131,1493,1494],{"class":141}," node ",[131,1496,1497],{"class":137},"in",[131,1499,1500],{"class":141}," json_data",[131,1502,146],{"class":145},[131,1504,1505],{"class":179},"get",[131,1507,318],{"class":145},[131,1509,195],{"class":145},[131,1511,1512],{"class":198},"nodes",[131,1514,195],{"class":145},[131,1516,283],{"class":145},[131,1518,1519],{"class":145}," []):\n",[131,1521,1523,1526,1528,1531,1533,1535,1537,1539,1542,1544,1546],{"class":133,"line":1522},56,[131,1524,1525],{"class":141},"    metadata ",[131,1527,176],{"class":145},[131,1529,1530],{"class":141}," node",[131,1532,146],{"class":145},[131,1534,1505],{"class":179},[131,1536,318],{"class":145},[131,1538,195],{"class":145},[131,1540,1541],{"class":198},"metadata",[131,1543,195],{"class":145},[131,1545,283],{"class":145},[131,1547,1548],{"class":145}," {})\n",[131,1550,1552,1555,1557,1560,1562,1565,1568,1571,1574,1576,1578,1580,1582,1584,1586,1588,1592],{"class":133,"line":1551},57,[131,1553,1554],{"class":137},"    if",[131,1556,881],{"class":145},[131,1558,1559],{"class":198},"embedding",[131,1561,195],{"class":145},[131,1563,1564],{"class":145}," in",[131,1566,1567],{"class":141}," metadata ",[131,1569,1570],{"class":145},"and",[131,1572,1573],{"class":179}," isinstance",[131,1575,318],{"class":145},[131,1577,1541],{"class":179},[131,1579,936],{"class":145},[131,1581,195],{"class":145},[131,1583,1559],{"class":198},[131,1585,195],{"class":145},[131,1587,488],{"class":145},[131,1589,1591],{"class":1590},"sBMFI"," str",[131,1593,1355],{"class":145},[131,1595,1597,1600,1603,1605,1608,1610,1613,1615,1618],{"class":133,"line":1596},58,[131,1598,1599],{"class":137},"        with",[131,1601,1602],{"class":141}," contextlib",[131,1604,146],{"class":145},[131,1606,1607],{"class":179},"suppress",[131,1609,318],{"class":145},[131,1611,1612],{"class":179},"json",[131,1614,146],{"class":145},[131,1616,1617],{"class":1341},"JSONDecodeError",[131,1619,1355],{"class":145},[131,1621,1623,1626,1628,1630,1632,1634,1637,1640,1643,1645,1648,1650,1652,1654,1656,1658,1660],{"class":133,"line":1622},59,[131,1624,1625],{"class":141},"            metadata",[131,1627,936],{"class":145},[131,1629,195],{"class":145},[131,1631,1559],{"class":198},[131,1633,195],{"class":145},[131,1635,1636],{"class":145},"]",[131,1638,1639],{"class":145}," =",[131,1641,1642],{"class":141}," json",[131,1644,146],{"class":145},[131,1646,1647],{"class":179},"loads",[131,1649,318],{"class":145},[131,1651,1541],{"class":179},[131,1653,936],{"class":145},[131,1655,195],{"class":145},[131,1657,1559],{"class":198},[131,1659,195],{"class":145},[131,1661,1662],{"class":145},"])\n",[131,1664,1666],{"class":133,"line":1665},60,[131,1667,167],{"emptyLinePlaceholder":166},[131,1669,1671,1673,1675,1677,1680,1682,1684,1686,1689,1691,1693,1695,1698,1700,1702,1704,1707,1709,1712],{"class":133,"line":1670},61,[131,1672,1270],{"class":179},[131,1674,318],{"class":145},[131,1676,1276],{"class":1275},[131,1678,1679],{"class":198},"\"✓ Exported ",[131,1681,1283],{"class":1282},[131,1683,1286],{"class":179},[131,1685,318],{"class":145},[131,1687,1688],{"class":179},"json_data",[131,1690,146],{"class":145},[131,1692,1505],{"class":179},[131,1694,318],{"class":145},[131,1696,1697],{"class":145},"'",[131,1699,1512],{"class":198},[131,1701,1697],{"class":145},[131,1703,283],{"class":145},[131,1705,1706],{"class":145}," []))",[131,1708,1296],{"class":1282},[131,1710,1711],{"class":198}," nodes\"",[131,1713,293],{"class":145},[131,1715,1717],{"class":133,"line":1716},62,[131,1718,167],{"emptyLinePlaceholder":166},[131,1720,1722],{"class":133,"line":1721},63,[131,1723,1724],{"class":286},"# Save to file\n",[131,1726,1728,1731,1733,1735,1737,1739,1741,1744,1746,1748,1750,1752,1754,1756],{"class":133,"line":1727},64,[131,1729,1730],{"class":141},"memory_file ",[131,1732,176],{"class":145},[131,1734,1336],{"class":141},[131,1736,146],{"class":145},[131,1738,1342],{"class":1341},[131,1740,146],{"class":145},[131,1742,1743],{"class":179},"join",[131,1745,318],{"class":145},[131,1747,1352],{"class":179},[131,1749,283],{"class":145},[131,1751,881],{"class":145},[131,1753,724],{"class":198},[131,1755,195],{"class":145},[131,1757,293],{"class":145},[131,1759,1761,1764,1767,1769,1772,1774,1776,1779,1781,1783,1786,1788,1790,1793,1795,1797,1800,1803],{"class":133,"line":1760},65,[131,1762,1763],{"class":137},"with",[131,1765,1766],{"class":179}," open",[131,1768,318],{"class":145},[131,1770,1771],{"class":179},"memory_file",[131,1773,283],{"class":145},[131,1775,881],{"class":145},[131,1777,1778],{"class":198},"w",[131,1780,195],{"class":145},[131,1782,283],{"class":145},[131,1784,1785],{"class":189}," encoding",[131,1787,176],{"class":145},[131,1789,195],{"class":145},[131,1791,1792],{"class":198},"utf-8",[131,1794,195],{"class":145},[131,1796,600],{"class":145},[131,1798,1799],{"class":137}," as",[131,1801,1802],{"class":141}," f",[131,1804,1805],{"class":145},":\n",[131,1807,1809,1812,1814,1817,1819,1821,1823,1825,1827,1830,1832,1835,1837,1840],{"class":133,"line":1808},66,[131,1810,1811],{"class":141},"    json",[131,1813,146],{"class":145},[131,1815,1816],{"class":179},"dump",[131,1818,318],{"class":145},[131,1820,1688],{"class":179},[131,1822,283],{"class":145},[131,1824,1802],{"class":179},[131,1826,283],{"class":145},[131,1828,1829],{"class":189}," indent",[131,1831,176],{"class":145},[131,1833,1834],{"class":1282},"2",[131,1836,283],{"class":145},[131,1838,1839],{"class":189}," ensure_ascii",[131,1841,1842],{"class":145},"=False)\n",[131,1844,1846,1848,1850,1852,1855,1857,1859,1861,1863],{"class":133,"line":1845},67,[131,1847,1270],{"class":179},[131,1849,318],{"class":145},[131,1851,1276],{"class":1275},[131,1853,1854],{"class":198},"\"✓ Saved to: ",[131,1856,1283],{"class":1282},[131,1858,1771],{"class":179},[131,1860,1296],{"class":1282},[131,1862,195],{"class":198},[131,1864,293],{"class":145},[116,1866,1868],{"id":1867},"import-and-search-example-load_cubepy","Import and Search Example (load_cube.py)",[1870,1871,1872],"blockquote",{},[16,1873,1874,1877,1878,1881,1882,1885,1886,1889],{},[20,1875,1876],{},"Note on Embeddings",": The sample data uses ",[20,1879,1880],{},"bge-m3"," model with ",[20,1883,1884],{},"1024 dimensions",". If your environment uses a different embedding model or dimension, semantic search after import may be inaccurate or fail. Ensure your ",[34,1887,1888],{},".env"," configuration matches the embedding settings used during export.",[75,1891,1893],{"className":125,"code":1892,"language":127,"meta":83,"style":83},"import json\nimport os\n\nfrom memos.api.handlers import init_server\nfrom memos.api.product_models import APISearchRequest\nfrom memos.log import get_logger\nfrom memos.multi_mem_cube.single_cube import SingleCubeView\n\nlogger = get_logger(__name__)\nEXAMPLE_CUBE_ID = \"example_dump_cube\"\nEXAMPLE_USER_ID = \"example_user\"\n\n# 1. Initialize server\ncomponents = init_server()\nnaive = components[\"naive_mem_cube\"]\n\n# 2. Create SingleCubeView\nview = SingleCubeView(\n    cube_id=EXAMPLE_CUBE_ID,\n    naive_mem_cube=naive,\n    mem_reader=components[\"mem_reader\"],\n    mem_scheduler=components[\"mem_scheduler\"],\n    logger=logger,\n    searcher=components[\"searcher\"],\n    feedback_server=components[\"feedback_server\"],\n)\n\n# 3. Load data from file into graph_store\nload_dir = \"examples/data/mem_cube_tree\"\nmemory_file = os.path.join(load_dir, \"textual_memory.json\")\n\nwith open(memory_file, encoding=\"utf-8\") as f:\n    json_data = json.load(f)\n\nnaive.text_mem.graph_store.import_graph(json_data, user_name=EXAMPLE_CUBE_ID)\n\nnodes = json_data.get(\"nodes\", [])\nprint(f\"✓ Imported {len(nodes)} nodes\")\n\n# 4. Display loaded data\nprint(f\"\\nLoaded {len(nodes)} memories:\")\nfor i, node in enumerate(nodes[:3], 1):  # Show first 3\n    metadata = node.get(\"metadata\", {})\n    memory_text = node.get(\"memory\", \"N/A\")\n    mem_type = metadata.get(\"memory_type\", \"unknown\")\n    print(f\"  [{i}] Type: {mem_type}\")\n    print(f\"      Content: {memory_text[:60]}...\")\n\n# 5. Semantic search verification\nquery = \"test memory dump persistence demonstration\"\nprint(f'\\nSearching: \"{query}\"')\n\nsearch_result = view.search_memories(\n    APISearchRequest(\n        user_id=EXAMPLE_USER_ID,\n        readable_cube_ids=[EXAMPLE_CUBE_ID],\n        query=query,\n    )\n)\n\ntext_mem_results = search_result.get(\"text_mem\", [])\nmemories = []\nfor group in text_mem_results:\n    memories.extend(group.get(\"memories\", []))\n\nprint(f\"✓ Found {len(memories)} relevant memories\")\nfor i, mem in enumerate(memories[:2], 1):  # Show first 2\n    print(f\"  [{i}] {mem.get('memory', 'N/A')[:60]}...\")\n",[34,1894,1895,1901,1907,1911,1929,1948,1962,1980,1984,1998,2010,2022,2026,2030,2040,2058,2062,2066,2076,2086,2096,2114,2132,2142,2160,2178,2182,2186,2191,2205,2236,2240,2270,2290,2294,2326,2330,2356,2383,2387,2392,2425,2462,2486,2519,2553,2586,2616,2620,2625,2639,2666,2670,2685,2692,2703,2714,2725,2730,2734,2738,2764,2774,2788,2821,2825,2853,2885],{"__ignoreMap":83},[131,1896,1897,1899],{"class":133,"line":134},[131,1898,157],{"class":137},[131,1900,757],{"class":141},[131,1902,1903,1905],{"class":133,"line":163},[131,1904,157],{"class":137},[131,1906,764],{"class":141},[131,1908,1909],{"class":133,"line":170},[131,1910,167],{"emptyLinePlaceholder":166},[131,1912,1913,1915,1917,1919,1921,1923,1925,1927],{"class":133,"line":186},[131,1914,138],{"class":137},[131,1916,142],{"class":141},[131,1918,146],{"class":145},[131,1920,786],{"class":141},[131,1922,146],{"class":145},[131,1924,791],{"class":141},[131,1926,157],{"class":137},[131,1928,796],{"class":141},[131,1930,1931,1933,1935,1937,1939,1941,1943,1945],{"class":133,"line":207},[131,1932,138],{"class":137},[131,1934,142],{"class":141},[131,1936,146],{"class":145},[131,1938,786],{"class":141},[131,1940,146],{"class":145},[131,1942,811],{"class":141},[131,1944,157],{"class":137},[131,1946,1947],{"class":141}," APISearchRequest\n",[131,1949,1950,1952,1954,1956,1958,1960],{"class":133,"line":220},[131,1951,138],{"class":137},[131,1953,142],{"class":141},[131,1955,146],{"class":145},[131,1957,827],{"class":141},[131,1959,157],{"class":137},[131,1961,832],{"class":141},[131,1963,1964,1966,1968,1970,1972,1974,1976,1978],{"class":133,"line":233},[131,1965,138],{"class":137},[131,1967,142],{"class":141},[131,1969,146],{"class":145},[131,1971,149],{"class":141},[131,1973,146],{"class":145},[131,1975,154],{"class":141},[131,1977,157],{"class":137},[131,1979,160],{"class":141},[131,1981,1982],{"class":133,"line":246},[131,1983,167],{"emptyLinePlaceholder":166},[131,1985,1986,1988,1990,1992,1994,1996],{"class":133,"line":259},[131,1987,859],{"class":141},[131,1989,176],{"class":145},[131,1991,864],{"class":179},[131,1993,318],{"class":145},[131,1995,869],{"class":141},[131,1997,293],{"class":145},[131,1999,2000,2002,2004,2006,2008],{"class":133,"line":272},[131,2001,876],{"class":141},[131,2003,176],{"class":145},[131,2005,881],{"class":145},[131,2007,884],{"class":198},[131,2009,887],{"class":145},[131,2011,2012,2014,2016,2018,2020],{"class":133,"line":290},[131,2013,892],{"class":141},[131,2015,176],{"class":145},[131,2017,881],{"class":145},[131,2019,899],{"class":198},[131,2021,887],{"class":145},[131,2023,2024],{"class":133,"line":296},[131,2025,167],{"emptyLinePlaceholder":166},[131,2027,2028],{"class":133,"line":301},[131,2029,910],{"class":286},[131,2031,2032,2034,2036,2038],{"class":133,"line":307},[131,2033,915],{"class":141},[131,2035,176],{"class":145},[131,2037,920],{"class":179},[131,2039,923],{"class":145},[131,2041,2042,2044,2046,2048,2050,2052,2054,2056],{"class":133,"line":326},[131,2043,928],{"class":141},[131,2045,176],{"class":145},[131,2047,933],{"class":141},[131,2049,936],{"class":145},[131,2051,195],{"class":145},[131,2053,215],{"class":198},[131,2055,195],{"class":145},[131,2057,945],{"class":145},[131,2059,2060],{"class":133,"line":331},[131,2061,167],{"emptyLinePlaceholder":166},[131,2063,2064],{"class":133,"line":337},[131,2065,955],{"class":286},[131,2067,2068,2070,2072,2074],{"class":133,"line":952},[131,2069,173],{"class":141},[131,2071,176],{"class":145},[131,2073,180],{"class":179},[131,2075,183],{"class":145},[131,2077,2078,2080,2082,2084],{"class":133,"line":958},[131,2079,190],{"class":189},[131,2081,176],{"class":145},[131,2083,976],{"class":179},[131,2085,204],{"class":145},[131,2087,2088,2090,2092,2094],{"class":133,"line":969},[131,2089,210],{"class":189},[131,2091,176],{"class":145},[131,2093,988],{"class":179},[131,2095,204],{"class":145},[131,2097,2098,2100,2102,2104,2106,2108,2110,2112],{"class":133,"line":981},[131,2099,223],{"class":189},[131,2101,176],{"class":145},[131,2103,1000],{"class":179},[131,2105,936],{"class":145},[131,2107,195],{"class":145},[131,2109,228],{"class":198},[131,2111,195],{"class":145},[131,2113,1011],{"class":145},[131,2115,2116,2118,2120,2122,2124,2126,2128,2130],{"class":133,"line":993},[131,2117,236],{"class":189},[131,2119,176],{"class":145},[131,2121,1000],{"class":179},[131,2123,936],{"class":145},[131,2125,195],{"class":145},[131,2127,241],{"class":198},[131,2129,195],{"class":145},[131,2131,1011],{"class":145},[131,2133,2134,2136,2138,2140],{"class":133,"line":1014},[131,2135,249],{"class":189},[131,2137,176],{"class":145},[131,2139,254],{"class":179},[131,2141,204],{"class":145},[131,2143,2144,2146,2148,2150,2152,2154,2156,2158],{"class":133,"line":1033},[131,2145,262],{"class":189},[131,2147,176],{"class":145},[131,2149,1000],{"class":179},[131,2151,936],{"class":145},[131,2153,195],{"class":145},[131,2155,267],{"class":198},[131,2157,195],{"class":145},[131,2159,1011],{"class":145},[131,2161,2162,2164,2166,2168,2170,2172,2174,2176],{"class":133,"line":1044},[131,2163,275],{"class":189},[131,2165,176],{"class":145},[131,2167,1000],{"class":179},[131,2169,936],{"class":145},[131,2171,195],{"class":145},[131,2173,280],{"class":198},[131,2175,195],{"class":145},[131,2177,1011],{"class":145},[131,2179,2180],{"class":133,"line":1063},[131,2181,293],{"class":145},[131,2183,2184],{"class":133,"line":1082},[131,2185,167],{"emptyLinePlaceholder":166},[131,2187,2188],{"class":133,"line":1087},[131,2189,2190],{"class":286},"# 3. Load data from file into graph_store\n",[131,2192,2193,2196,2198,2200,2203],{"class":133,"line":1092},[131,2194,2195],{"class":141},"load_dir ",[131,2197,176],{"class":145},[131,2199,881],{"class":145},[131,2201,2202],{"class":198},"examples/data/mem_cube_tree",[131,2204,887],{"class":145},[131,2206,2207,2209,2211,2213,2215,2217,2219,2221,2223,2226,2228,2230,2232,2234],{"class":133,"line":1098},[131,2208,1730],{"class":141},[131,2210,176],{"class":145},[131,2212,1336],{"class":141},[131,2214,146],{"class":145},[131,2216,1342],{"class":1341},[131,2218,146],{"class":145},[131,2220,1743],{"class":179},[131,2222,318],{"class":145},[131,2224,2225],{"class":179},"load_dir",[131,2227,283],{"class":145},[131,2229,881],{"class":145},[131,2231,724],{"class":198},[131,2233,195],{"class":145},[131,2235,293],{"class":145},[131,2237,2238],{"class":133,"line":1120},[131,2239,167],{"emptyLinePlaceholder":166},[131,2241,2242,2244,2246,2248,2250,2252,2254,2256,2258,2260,2262,2264,2266,2268],{"class":133,"line":1133},[131,2243,1763],{"class":137},[131,2245,1766],{"class":179},[131,2247,318],{"class":145},[131,2249,1771],{"class":179},[131,2251,283],{"class":145},[131,2253,1785],{"class":189},[131,2255,176],{"class":145},[131,2257,195],{"class":145},[131,2259,1792],{"class":198},[131,2261,195],{"class":145},[131,2263,600],{"class":145},[131,2265,1799],{"class":137},[131,2267,1802],{"class":141},[131,2269,1805],{"class":145},[131,2271,2272,2275,2277,2279,2281,2284,2286,2288],{"class":133,"line":1145},[131,2273,2274],{"class":141},"    json_data ",[131,2276,176],{"class":145},[131,2278,1642],{"class":141},[131,2280,146],{"class":145},[131,2282,2283],{"class":179},"load",[131,2285,318],{"class":145},[131,2287,1276],{"class":179},[131,2289,293],{"class":145},[131,2291,2292],{"class":133,"line":1154},[131,2293,167],{"emptyLinePlaceholder":166},[131,2295,2296,2298,2300,2302,2304,2306,2308,2311,2313,2315,2317,2320,2322,2324],{"class":133,"line":1197},[131,2297,988],{"class":141},[131,2299,146],{"class":145},[131,2301,1422],{"class":1341},[131,2303,146],{"class":145},[131,2305,1427],{"class":1341},[131,2307,146],{"class":145},[131,2309,2310],{"class":179},"import_graph",[131,2312,318],{"class":145},[131,2314,1688],{"class":179},[131,2316,283],{"class":145},[131,2318,2319],{"class":189}," user_name",[131,2321,176],{"class":145},[131,2323,976],{"class":179},[131,2325,293],{"class":145},[131,2327,2328],{"class":133,"line":1235},[131,2329,167],{"emptyLinePlaceholder":166},[131,2331,2332,2335,2337,2339,2341,2343,2345,2347,2349,2351,2353],{"class":133,"line":1241},[131,2333,2334],{"class":141},"nodes ",[131,2336,176],{"class":145},[131,2338,1500],{"class":141},[131,2340,146],{"class":145},[131,2342,1505],{"class":179},[131,2344,318],{"class":145},[131,2346,195],{"class":145},[131,2348,1512],{"class":198},[131,2350,195],{"class":145},[131,2352,283],{"class":145},[131,2354,2355],{"class":145}," [])\n",[131,2357,2358,2360,2362,2364,2367,2369,2371,2373,2375,2377,2379,2381],{"class":133,"line":1261},[131,2359,1270],{"class":179},[131,2361,318],{"class":145},[131,2363,1276],{"class":1275},[131,2365,2366],{"class":198},"\"✓ Imported ",[131,2368,1283],{"class":1282},[131,2370,1286],{"class":179},[131,2372,318],{"class":145},[131,2374,1512],{"class":179},[131,2376,600],{"class":145},[131,2378,1296],{"class":1282},[131,2380,1711],{"class":198},[131,2382,293],{"class":145},[131,2384,2385],{"class":133,"line":1267},[131,2386,167],{"emptyLinePlaceholder":166},[131,2388,2389],{"class":133,"line":1304},[131,2390,2391],{"class":286},"# 4. Display loaded data\n",[131,2393,2394,2396,2398,2400,2402,2405,2408,2410,2412,2414,2416,2418,2420,2423],{"class":133,"line":1309},[131,2395,1270],{"class":179},[131,2397,318],{"class":145},[131,2399,1276],{"class":1275},[131,2401,195],{"class":198},[131,2403,2404],{"class":141},"\\n",[131,2406,2407],{"class":198},"Loaded ",[131,2409,1283],{"class":1282},[131,2411,1286],{"class":179},[131,2413,318],{"class":145},[131,2415,1512],{"class":179},[131,2417,600],{"class":145},[131,2419,1296],{"class":1282},[131,2421,2422],{"class":198}," memories:\"",[131,2424,293],{"class":145},[131,2426,2427,2429,2432,2434,2436,2438,2441,2443,2445,2448,2451,2453,2456,2459],{"class":133,"line":1315},[131,2428,1491],{"class":137},[131,2430,2431],{"class":141}," i",[131,2433,283],{"class":145},[131,2435,1494],{"class":141},[131,2437,1497],{"class":137},[131,2439,2440],{"class":179}," enumerate",[131,2442,318],{"class":145},[131,2444,1512],{"class":179},[131,2446,2447],{"class":145},"[:",[131,2449,2450],{"class":1282},"3",[131,2452,488],{"class":145},[131,2454,2455],{"class":1282}," 1",[131,2457,2458],{"class":145},"):",[131,2460,2461],{"class":286},"  # Show first 3\n",[131,2463,2464,2466,2468,2470,2472,2474,2476,2478,2480,2482,2484],{"class":133,"line":1330},[131,2465,1525],{"class":141},[131,2467,176],{"class":145},[131,2469,1530],{"class":141},[131,2471,146],{"class":145},[131,2473,1505],{"class":179},[131,2475,318],{"class":145},[131,2477,195],{"class":145},[131,2479,1541],{"class":198},[131,2481,195],{"class":145},[131,2483,283],{"class":145},[131,2485,1548],{"class":145},[131,2487,2488,2491,2493,2495,2497,2499,2501,2503,2506,2508,2510,2512,2515,2517],{"class":133,"line":1358},[131,2489,2490],{"class":141},"    memory_text ",[131,2492,176],{"class":145},[131,2494,1530],{"class":141},[131,2496,146],{"class":145},[131,2498,1505],{"class":179},[131,2500,318],{"class":145},[131,2502,195],{"class":145},[131,2504,2505],{"class":198},"memory",[131,2507,195],{"class":145},[131,2509,283],{"class":145},[131,2511,881],{"class":145},[131,2513,2514],{"class":198},"N/A",[131,2516,195],{"class":145},[131,2518,293],{"class":145},[131,2520,2521,2524,2526,2529,2531,2533,2535,2537,2540,2542,2544,2546,2549,2551],{"class":133,"line":1375},[131,2522,2523],{"class":141},"    mem_type ",[131,2525,176],{"class":145},[131,2527,2528],{"class":141}," metadata",[131,2530,146],{"class":145},[131,2532,1505],{"class":179},[131,2534,318],{"class":145},[131,2536,195],{"class":145},[131,2538,2539],{"class":198},"memory_type",[131,2541,195],{"class":145},[131,2543,283],{"class":145},[131,2545,881],{"class":145},[131,2547,2548],{"class":198},"unknown",[131,2550,195],{"class":145},[131,2552,293],{"class":145},[131,2554,2555,2558,2560,2562,2565,2567,2570,2572,2575,2577,2580,2582,2584],{"class":133,"line":1398},[131,2556,2557],{"class":179},"    print",[131,2559,318],{"class":145},[131,2561,1276],{"class":1275},[131,2563,2564],{"class":198},"\"  [",[131,2566,1283],{"class":1282},[131,2568,2569],{"class":179},"i",[131,2571,1296],{"class":1282},[131,2573,2574],{"class":198},"] Type: ",[131,2576,1283],{"class":1282},[131,2578,2579],{"class":179},"mem_type",[131,2581,1296],{"class":1282},[131,2583,195],{"class":198},[131,2585,293],{"class":145},[131,2587,2588,2590,2592,2594,2597,2599,2602,2604,2607,2609,2611,2614],{"class":133,"line":1403},[131,2589,2557],{"class":179},[131,2591,318],{"class":145},[131,2593,1276],{"class":1275},[131,2595,2596],{"class":198},"\"      Content: ",[131,2598,1283],{"class":1282},[131,2600,2601],{"class":179},"memory_text",[131,2603,2447],{"class":145},[131,2605,2606],{"class":1282},"60",[131,2608,1636],{"class":145},[131,2610,1296],{"class":1282},[131,2612,2613],{"class":198},"...\"",[131,2615,293],{"class":145},[131,2617,2618],{"class":133,"line":1409},[131,2619,167],{"emptyLinePlaceholder":166},[131,2621,2622],{"class":133,"line":1437},[131,2623,2624],{"class":286},"# 5. Semantic search verification\n",[131,2626,2627,2630,2632,2634,2637],{"class":133,"line":1449},[131,2628,2629],{"class":141},"query ",[131,2631,176],{"class":145},[131,2633,881],{"class":145},[131,2635,2636],{"class":198},"test memory dump persistence demonstration",[131,2638,887],{"class":145},[131,2640,2641,2643,2645,2647,2649,2651,2654,2656,2659,2661,2664],{"class":133,"line":1464},[131,2642,1270],{"class":179},[131,2644,318],{"class":145},[131,2646,1276],{"class":1275},[131,2648,1697],{"class":198},[131,2650,2404],{"class":141},[131,2652,2653],{"class":198},"Searching: \"",[131,2655,1283],{"class":1282},[131,2657,2658],{"class":179},"query",[131,2660,1296],{"class":1282},[131,2662,2663],{"class":198},"\"'",[131,2665,293],{"class":145},[131,2667,2668],{"class":133,"line":1469},[131,2669,167],{"emptyLinePlaceholder":166},[131,2671,2672,2675,2677,2679,2681,2683],{"class":133,"line":1474},[131,2673,2674],{"class":141},"search_result ",[131,2676,176],{"class":145},[131,2678,1106],{"class":141},[131,2680,146],{"class":145},[131,2682,344],{"class":179},[131,2684,183],{"class":145},[131,2686,2687,2690],{"class":133,"line":1480},[131,2688,2689],{"class":179},"    APISearchRequest",[131,2691,183],{"class":145},[131,2693,2694,2697,2699,2701],{"class":133,"line":1488},[131,2695,2696],{"class":189},"        user_id",[131,2698,176],{"class":145},[131,2700,1128],{"class":179},[131,2702,204],{"class":145},[131,2704,2705,2708,2710,2712],{"class":133,"line":1522},[131,2706,2707],{"class":189},"        readable_cube_ids",[131,2709,477],{"class":145},[131,2711,976],{"class":179},[131,2713,1011],{"class":145},[131,2715,2716,2719,2721,2723],{"class":133,"line":1551},[131,2717,2718],{"class":189},"        query",[131,2720,176],{"class":145},[131,2722,2658],{"class":179},[131,2724,204],{"class":145},[131,2726,2727],{"class":133,"line":1596},[131,2728,2729],{"class":145},"    )\n",[131,2731,2732],{"class":133,"line":1622},[131,2733,293],{"class":145},[131,2735,2736],{"class":133,"line":1665},[131,2737,167],{"emptyLinePlaceholder":166},[131,2739,2740,2743,2745,2748,2750,2752,2754,2756,2758,2760,2762],{"class":133,"line":1670},[131,2741,2742],{"class":141},"text_mem_results ",[131,2744,176],{"class":145},[131,2746,2747],{"class":141}," search_result",[131,2749,146],{"class":145},[131,2751,1505],{"class":179},[131,2753,318],{"class":145},[131,2755,195],{"class":145},[131,2757,1422],{"class":198},[131,2759,195],{"class":145},[131,2761,283],{"class":145},[131,2763,2355],{"class":145},[131,2765,2766,2769,2771],{"class":133,"line":1716},[131,2767,2768],{"class":141},"memories ",[131,2770,176],{"class":145},[131,2772,2773],{"class":145}," []\n",[131,2775,2776,2778,2781,2783,2786],{"class":133,"line":1721},[131,2777,1491],{"class":137},[131,2779,2780],{"class":141}," group ",[131,2782,1497],{"class":137},[131,2784,2785],{"class":141}," text_mem_results",[131,2787,1805],{"class":145},[131,2789,2790,2793,2795,2798,2800,2803,2805,2807,2809,2811,2814,2816,2818],{"class":133,"line":1727},[131,2791,2792],{"class":141},"    memories",[131,2794,146],{"class":145},[131,2796,2797],{"class":179},"extend",[131,2799,318],{"class":145},[131,2801,2802],{"class":179},"group",[131,2804,146],{"class":145},[131,2806,1505],{"class":179},[131,2808,318],{"class":145},[131,2810,195],{"class":145},[131,2812,2813],{"class":198},"memories",[131,2815,195],{"class":145},[131,2817,283],{"class":145},[131,2819,2820],{"class":145}," []))\n",[131,2822,2823],{"class":133,"line":1760},[131,2824,167],{"emptyLinePlaceholder":166},[131,2826,2827,2829,2831,2833,2836,2838,2840,2842,2844,2846,2848,2851],{"class":133,"line":1808},[131,2828,1270],{"class":179},[131,2830,318],{"class":145},[131,2832,1276],{"class":1275},[131,2834,2835],{"class":198},"\"✓ Found ",[131,2837,1283],{"class":1282},[131,2839,1286],{"class":179},[131,2841,318],{"class":145},[131,2843,2813],{"class":179},[131,2845,600],{"class":145},[131,2847,1296],{"class":1282},[131,2849,2850],{"class":198}," relevant memories\"",[131,2852,293],{"class":145},[131,2854,2855,2857,2859,2861,2864,2866,2868,2870,2872,2874,2876,2878,2880,2882],{"class":133,"line":1845},[131,2856,1491],{"class":137},[131,2858,2431],{"class":141},[131,2860,283],{"class":145},[131,2862,2863],{"class":141}," mem ",[131,2865,1497],{"class":137},[131,2867,2440],{"class":179},[131,2869,318],{"class":145},[131,2871,2813],{"class":179},[131,2873,2447],{"class":145},[131,2875,1834],{"class":1282},[131,2877,488],{"class":145},[131,2879,2455],{"class":1282},[131,2881,2458],{"class":145},[131,2883,2884],{"class":286},"  # Show first 2\n",[131,2886,2888,2890,2892,2894,2896,2898,2900,2902,2905,2907,2910,2912,2914,2916,2918,2920,2922,2924,2927,2929,2931,2934,2936,2938,2940,2942],{"class":133,"line":2887},68,[131,2889,2557],{"class":179},[131,2891,318],{"class":145},[131,2893,1276],{"class":1275},[131,2895,2564],{"class":198},[131,2897,1283],{"class":1282},[131,2899,2569],{"class":179},[131,2901,1296],{"class":1282},[131,2903,2904],{"class":198},"] ",[131,2906,1283],{"class":1282},[131,2908,2909],{"class":179},"mem",[131,2911,146],{"class":145},[131,2913,1505],{"class":179},[131,2915,318],{"class":145},[131,2917,1697],{"class":145},[131,2919,2505],{"class":198},[131,2921,1697],{"class":145},[131,2923,283],{"class":145},[131,2925,2926],{"class":145}," '",[131,2928,2514],{"class":198},[131,2930,1697],{"class":145},[131,2932,2933],{"class":145},")[:",[131,2935,2606],{"class":1282},[131,2937,1636],{"class":145},[131,2939,1296],{"class":1282},[131,2941,2613],{"class":198},[131,2943,293],{"class":145},[116,2945,2947],{"id":2946},"complete-examples","Complete Examples",[16,2949,2950],{},"See examples in the code repository:",[24,2952,2953,2959],{},[27,2954,2955,2958],{},[34,2956,2957],{},"MemOS/examples/mem_cube/dump_cube.py"," - Export MemCube data (add + export)",[27,2960,2961,2964],{},[34,2962,2963],{},"MemOS/examples/mem_cube/load_cube.py"," - Import MemCube data and perform semantic search (import + search)",[116,2966,2968],{"id":2967},"legacy-api-notes","Legacy API Notes",[16,2970,2971,2972,2975,2976,146],{},"The old approach of directly calling ",[34,2973,2974],{},"mem_cube.text_mem.get_all()"," is deprecated. Please use the View architecture. Legacy examples have been moved to ",[34,2977,2978],{},"MemOS/examples/mem_cube/_deprecated/",[11,2980,2982],{"id":2981},"developer-notes","Developer Notes",[24,2984,2985,2988,2991],{},[27,2986,2987],{},"MemCube enforces schema consistency for safe loading/dumping",[27,2989,2990],{},"Each memory type is pluggable and independently tested",[27,2992,2993,2994,2997],{},"See ",[34,2995,2996],{},"/tests/mem_cube/"," for integration tests and usage patterns",[2999,3000,3001],"style",{},"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 .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}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 .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}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 .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 .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}",{"title":83,"searchDepth":163,"depth":163,"links":3003},[3004,3005,3006,3011,3016,3017,3023],{"id":13,"depth":163,"text":14},{"id":65,"depth":163,"text":66},{"id":106,"depth":163,"text":107,"children":3007},[3008,3009,3010],{"id":118,"depth":170,"text":119},{"id":354,"depth":170,"text":355},{"id":534,"depth":170,"text":535},{"id":595,"depth":163,"text":3012,"children":3013},"API Summary (GeneralMemCube)",[3014,3015],{"id":603,"depth":170,"text":604},{"id":650,"depth":170,"text":651},{"id":707,"depth":163,"text":708},{"id":740,"depth":163,"text":741,"children":3018},[3019,3020,3021,3022],{"id":744,"depth":170,"text":745},{"id":1867,"depth":170,"text":1868},{"id":2946,"depth":170,"text":2947},{"id":2967,"depth":170,"text":2968},{"id":2981,"depth":163,"text":2982},"`MemCube` is the core organizational unit in MemOS, designed to encapsulate and manage all types of memory for a user or agent. It provides a unified interface for loading, saving, and operating on multiple memory modules, making it easy to build, share, and deploy memory-augmented applications.","md",{},"/en/open_source/modules/mem_cube",{"title":5,"description":83},"en/open_source/modules/mem_cube","_6Ekr4nVVpHvhAw9fqRgLM5zhHiAB7MK2Xf1_zOgPms",[3032,3040],{"title":3033,"path":3034,"stem":3035,"icon":3036,"framework":6,"module":6,"class":3037,"target":-1,"active":3038,"defaultOpen":3038,"children":-1,"description":3039},"API Development Guide","/open_source/modules/mos/overview","open_source/modules/mos/overview","i-ri-eye-line",[],false,"MemOS v2.0 adopts a more modular and decoupled architecture. The legacy MOS class is deprecated; Components + Handlers is now recommended for development.",{"title":3041,"path":3042,"stem":3043,"icon":3044,"framework":6,"module":6,"class":3045,"target":-1,"active":3038,"defaultOpen":3038,"children":-1,"description":3046},"MemReader","/open_source/modules/mem_reader","open_source/modules/mem_reader","i-ri-book-open-line",[],"MemReader is MemOS's “memory translator”. It translates messy user inputs (chat, documents, images) into structured memory fragments the system can understand.",1770372084635]