[{"data":1,"prerenderedAt":810},["ShallowReactive",2],{"\u002Fdocs\u002Fintegrations\u002Fchromadb":3},{"id":4,"title":5,"body":6,"description":803,"extension":804,"meta":805,"navigation":67,"path":806,"seo":807,"stem":808,"__hash__":809},"docs\u002Fdocs\u002F3.integrations\u002F3.chromadb.md","ChromaDB Memory",{"type":7,"value":8,"toc":795},"minimark",[9,13,29,34,182,186,189,232,236,310,314,572,576,704,708,719,791],[10,11,5],"h1",{"id":12},"chromadb-memory",[14,15,16,20,21,24,25,28],"p",{},[17,18,19],"code",{},"ChromaAgentMemory"," is the built-in ",[17,22,23],{},"MemoryService"," implementation. It uses ChromaDB with the ",[17,26,27],{},"all-MiniLM-L6-v2"," embedding model for semantic search.",[30,31,33],"h2",{"id":32},"setup","Setup",[35,36,41],"pre",{"className":37,"code":38,"language":39,"meta":40,"style":40},"language-python shiki shiki-themes github-dark","from mango.integrations.chromadb import ChromaAgentMemory\n\n# Persistent — survives restarts\nmemory = ChromaAgentMemory(persist_dir=\".\u002Fmango_memory\")\n\n# Ephemeral — for testing\nmemory = ChromaAgentMemory(persist_dir=\":memory:\")\n\n# Custom collection name\nmemory = ChromaAgentMemory(\n    persist_dir=\".\u002Fmango_memory\",\n    collection_name=\"my_project_memory\",\n)\n","python","",[17,42,43,62,69,76,101,106,112,130,135,141,151,164,177],{"__ignoreMap":40},[44,45,48,52,56,59],"span",{"class":46,"line":47},"line",1,[44,49,51],{"class":50},"snl16","from",[44,53,55],{"class":54},"s95oV"," mango.integrations.chromadb ",[44,57,58],{"class":50},"import",[44,60,61],{"class":54}," ChromaAgentMemory\n",[44,63,65],{"class":46,"line":64},2,[44,66,68],{"emptyLinePlaceholder":67},true,"\n",[44,70,72],{"class":46,"line":71},3,[44,73,75],{"class":74},"sAwPA","# Persistent — survives restarts\n",[44,77,79,82,85,88,92,94,98],{"class":46,"line":78},4,[44,80,81],{"class":54},"memory ",[44,83,84],{"class":50},"=",[44,86,87],{"class":54}," ChromaAgentMemory(",[44,89,91],{"class":90},"s9osk","persist_dir",[44,93,84],{"class":50},[44,95,97],{"class":96},"sU2Wk","\".\u002Fmango_memory\"",[44,99,100],{"class":54},")\n",[44,102,104],{"class":46,"line":103},5,[44,105,68],{"emptyLinePlaceholder":67},[44,107,109],{"class":46,"line":108},6,[44,110,111],{"class":74},"# Ephemeral — for testing\n",[44,113,115,117,119,121,123,125,128],{"class":46,"line":114},7,[44,116,81],{"class":54},[44,118,84],{"class":50},[44,120,87],{"class":54},[44,122,91],{"class":90},[44,124,84],{"class":50},[44,126,127],{"class":96},"\":memory:\"",[44,129,100],{"class":54},[44,131,133],{"class":46,"line":132},8,[44,134,68],{"emptyLinePlaceholder":67},[44,136,138],{"class":46,"line":137},9,[44,139,140],{"class":74},"# Custom collection name\n",[44,142,144,146,148],{"class":46,"line":143},10,[44,145,81],{"class":54},[44,147,84],{"class":50},[44,149,150],{"class":54}," ChromaAgentMemory(\n",[44,152,154,157,159,161],{"class":46,"line":153},11,[44,155,156],{"class":90},"    persist_dir",[44,158,84],{"class":50},[44,160,97],{"class":96},[44,162,163],{"class":54},",\n",[44,165,167,170,172,175],{"class":46,"line":166},12,[44,168,169],{"class":90},"    collection_name",[44,171,84],{"class":50},[44,173,174],{"class":96},"\"my_project_memory\"",[44,176,163],{"class":54},[44,178,180],{"class":46,"line":179},13,[44,181,100],{"class":54},[30,183,185],{"id":184},"storage-layout","Storage layout",[14,187,188],{},"Two ChromaDB collections are created:",[190,191,192,205],"table",{},[193,194,195],"thead",{},[196,197,198,202],"tr",{},[199,200,201],"th",{},"Collection",[199,203,204],{},"Stores",[206,207,208,222],"tbody",{},[196,209,210,216],{},[211,212,213],"td",{},[17,214,215],{},"\u003Cname>",[211,217,218,219],{},"Tool-usage memories ",[17,220,221],{},"(question → tool_name, tool_args, result_summary)",[196,223,224,229],{},[211,225,226],{},[17,227,228],{},"\u003Cname>_text",[211,230,231],{},"Free-form text memories (glossary, domain notes)",[30,233,235],{"id":234},"pre-load-domain-knowledge","Pre-load domain knowledge",[35,237,239],{"className":37,"code":238,"language":39,"meta":40,"style":40},"# Business terminology\nawait memory.save_text(\"'active user' = user with order in last 90 days\")\nawait memory.save_text(\"'revenue' = total_amount field in orders collection\")\n\n# Field semantics\nawait memory.save_text(\"status field: 1=pending, 2=shipped, 3=delivered, 4=cancelled\")\n\n# Relationships not detected automatically\nawait memory.save_text(\"orders.customer_ref references customers._id\")\n",[17,240,241,246,259,270,274,279,290,294,299],{"__ignoreMap":40},[44,242,243],{"class":46,"line":47},[44,244,245],{"class":74},"# Business terminology\n",[44,247,248,251,254,257],{"class":46,"line":64},[44,249,250],{"class":50},"await",[44,252,253],{"class":54}," memory.save_text(",[44,255,256],{"class":96},"\"'active user' = user with order in last 90 days\"",[44,258,100],{"class":54},[44,260,261,263,265,268],{"class":46,"line":71},[44,262,250],{"class":50},[44,264,253],{"class":54},[44,266,267],{"class":96},"\"'revenue' = total_amount field in orders collection\"",[44,269,100],{"class":54},[44,271,272],{"class":46,"line":78},[44,273,68],{"emptyLinePlaceholder":67},[44,275,276],{"class":46,"line":103},[44,277,278],{"class":74},"# Field semantics\n",[44,280,281,283,285,288],{"class":46,"line":108},[44,282,250],{"class":50},[44,284,253],{"class":54},[44,286,287],{"class":96},"\"status field: 1=pending, 2=shipped, 3=delivered, 4=cancelled\"",[44,289,100],{"class":54},[44,291,292],{"class":46,"line":114},[44,293,68],{"emptyLinePlaceholder":67},[44,295,296],{"class":46,"line":132},[44,297,298],{"class":74},"# Relationships not detected automatically\n",[44,300,301,303,305,308],{"class":46,"line":137},[44,302,250],{"class":50},[44,304,253],{"class":54},[44,306,307],{"class":96},"\"orders.customer_ref references customers._id\"",[44,309,100],{"class":54},[30,311,313],{"id":312},"inspect-stored-data","Inspect stored data",[35,315,317],{"className":37,"code":316,"language":39,"meta":40,"style":40},"# How many entries\nprint(memory.count())\n\n# Search tool-usage memories\nentries = await memory.retrieve(\n    \"how many users signed up?\",\n    top_k=5,\n    similarity_threshold=0.0,   # 0.0 = no filter\n)\nfor e in entries:\n    print(f\"[{e.similarity:.2f}] {e.question} → {e.tool_name}({e.tool_args})\")\n\n# Search text memories\ntexts = await memory.search_text(\"what does active user mean\", top_k=3)\nfor t in texts:\n    print(f\"[{t.similarity:.2f}] {t.text}\")\n\n# Delete an entry\nawait memory.delete(entry_id)\n",[17,318,319,324,333,337,342,355,362,374,390,394,408,468,472,477,506,519,553,558,564],{"__ignoreMap":40},[44,320,321],{"class":46,"line":47},[44,322,323],{"class":74},"# How many entries\n",[44,325,326,330],{"class":46,"line":64},[44,327,329],{"class":328},"sDLfK","print",[44,331,332],{"class":54},"(memory.count())\n",[44,334,335],{"class":46,"line":71},[44,336,68],{"emptyLinePlaceholder":67},[44,338,339],{"class":46,"line":78},[44,340,341],{"class":74},"# Search tool-usage memories\n",[44,343,344,347,349,352],{"class":46,"line":103},[44,345,346],{"class":54},"entries ",[44,348,84],{"class":50},[44,350,351],{"class":50}," await",[44,353,354],{"class":54}," memory.retrieve(\n",[44,356,357,360],{"class":46,"line":108},[44,358,359],{"class":96},"    \"how many users signed up?\"",[44,361,163],{"class":54},[44,363,364,367,369,372],{"class":46,"line":114},[44,365,366],{"class":90},"    top_k",[44,368,84],{"class":50},[44,370,371],{"class":328},"5",[44,373,163],{"class":54},[44,375,376,379,381,384,387],{"class":46,"line":132},[44,377,378],{"class":90},"    similarity_threshold",[44,380,84],{"class":50},[44,382,383],{"class":328},"0.0",[44,385,386],{"class":54},",   ",[44,388,389],{"class":74},"# 0.0 = no filter\n",[44,391,392],{"class":46,"line":137},[44,393,100],{"class":54},[44,395,396,399,402,405],{"class":46,"line":143},[44,397,398],{"class":50},"for",[44,400,401],{"class":54}," e ",[44,403,404],{"class":50},"in",[44,406,407],{"class":54}," entries:\n",[44,409,410,413,416,419,422,425,428,431,434,437,439,442,444,447,449,452,454,456,458,461,463,466],{"class":46,"line":153},[44,411,412],{"class":328},"    print",[44,414,415],{"class":54},"(",[44,417,418],{"class":50},"f",[44,420,421],{"class":96},"\"[",[44,423,424],{"class":328},"{",[44,426,427],{"class":54},"e.similarity",[44,429,430],{"class":50},":.2f",[44,432,433],{"class":328},"}",[44,435,436],{"class":96},"] ",[44,438,424],{"class":328},[44,440,441],{"class":54},"e.question",[44,443,433],{"class":328},[44,445,446],{"class":96}," → ",[44,448,424],{"class":328},[44,450,451],{"class":54},"e.tool_name",[44,453,433],{"class":328},[44,455,415],{"class":96},[44,457,424],{"class":328},[44,459,460],{"class":54},"e.tool_args",[44,462,433],{"class":328},[44,464,465],{"class":96},")\"",[44,467,100],{"class":54},[44,469,470],{"class":46,"line":166},[44,471,68],{"emptyLinePlaceholder":67},[44,473,474],{"class":46,"line":179},[44,475,476],{"class":74},"# Search text memories\n",[44,478,480,483,485,487,490,493,496,499,501,504],{"class":46,"line":479},14,[44,481,482],{"class":54},"texts ",[44,484,84],{"class":50},[44,486,351],{"class":50},[44,488,489],{"class":54}," memory.search_text(",[44,491,492],{"class":96},"\"what does active user mean\"",[44,494,495],{"class":54},", ",[44,497,498],{"class":90},"top_k",[44,500,84],{"class":50},[44,502,503],{"class":328},"3",[44,505,100],{"class":54},[44,507,509,511,514,516],{"class":46,"line":508},15,[44,510,398],{"class":50},[44,512,513],{"class":54}," t ",[44,515,404],{"class":50},[44,517,518],{"class":54}," texts:\n",[44,520,522,524,526,528,530,532,535,537,539,541,543,546,548,551],{"class":46,"line":521},16,[44,523,412],{"class":328},[44,525,415],{"class":54},[44,527,418],{"class":50},[44,529,421],{"class":96},[44,531,424],{"class":328},[44,533,534],{"class":54},"t.similarity",[44,536,430],{"class":50},[44,538,433],{"class":328},[44,540,436],{"class":96},[44,542,424],{"class":328},[44,544,545],{"class":54},"t.text",[44,547,433],{"class":328},[44,549,550],{"class":96},"\"",[44,552,100],{"class":54},[44,554,556],{"class":46,"line":555},17,[44,557,68],{"emptyLinePlaceholder":67},[44,559,561],{"class":46,"line":560},18,[44,562,563],{"class":74},"# Delete an entry\n",[44,565,567,569],{"class":46,"line":566},19,[44,568,250],{"class":50},[44,570,571],{"class":54}," memory.delete(entry_id)\n",[30,573,575],{"id":574},"direct-chromadb-access-debug","Direct ChromaDB access (debug)",[35,577,579],{"className":37,"code":578,"language":39,"meta":40,"style":40},"# Dump all stored tool-usage entries without similarity filter\nresult = memory._collection.get(include=[\"documents\", \"metadatas\"])\nfor doc, meta in zip(result[\"documents\"], result[\"metadatas\"]):\n    print(f\"Q: {doc}\")\n    print(f\"   tool={meta['tool_name']} args={meta['tool_args']}\")\n",[17,580,581,586,615,640,662],{"__ignoreMap":40},[44,582,583],{"class":46,"line":47},[44,584,585],{"class":74},"# Dump all stored tool-usage entries without similarity filter\n",[44,587,588,591,593,596,599,601,604,607,609,612],{"class":46,"line":64},[44,589,590],{"class":54},"result ",[44,592,84],{"class":50},[44,594,595],{"class":54}," memory._collection.get(",[44,597,598],{"class":90},"include",[44,600,84],{"class":50},[44,602,603],{"class":54},"[",[44,605,606],{"class":96},"\"documents\"",[44,608,495],{"class":54},[44,610,611],{"class":96},"\"metadatas\"",[44,613,614],{"class":54},"])\n",[44,616,617,619,622,624,627,630,632,635,637],{"class":46,"line":71},[44,618,398],{"class":50},[44,620,621],{"class":54}," doc, meta ",[44,623,404],{"class":50},[44,625,626],{"class":328}," zip",[44,628,629],{"class":54},"(result[",[44,631,606],{"class":96},[44,633,634],{"class":54},"], result[",[44,636,611],{"class":96},[44,638,639],{"class":54},"]):\n",[44,641,642,644,646,648,651,653,656,658,660],{"class":46,"line":78},[44,643,412],{"class":328},[44,645,415],{"class":54},[44,647,418],{"class":50},[44,649,650],{"class":96},"\"Q: ",[44,652,424],{"class":328},[44,654,655],{"class":54},"doc",[44,657,433],{"class":328},[44,659,550],{"class":96},[44,661,100],{"class":54},[44,663,664,666,668,670,673,675,678,681,684,686,689,691,693,696,698,700,702],{"class":46,"line":103},[44,665,412],{"class":328},[44,667,415],{"class":54},[44,669,418],{"class":50},[44,671,672],{"class":96},"\"   tool=",[44,674,424],{"class":328},[44,676,677],{"class":54},"meta[",[44,679,680],{"class":96},"'tool_name'",[44,682,683],{"class":54},"]",[44,685,433],{"class":328},[44,687,688],{"class":96}," args=",[44,690,424],{"class":328},[44,692,677],{"class":54},[44,694,695],{"class":96},"'tool_args'",[44,697,683],{"class":54},[44,699,433],{"class":328},[44,701,550],{"class":96},[44,703,100],{"class":54},[30,705,707],{"id":706},"similarity-threshold","Similarity threshold",[14,709,710,711,714,715,718],{},"The default threshold is ",[17,712,713],{},"0.6"," (cosine similarity). Entries below this score are not injected as examples. Tune it on ",[17,716,717],{},"MangoAgent",":",[35,720,722],{"className":37,"code":721,"language":39,"meta":40,"style":40},"# More examples, lower quality bar\nagent = MangoAgent(..., memory_top_k=5)\n\n# Control threshold at retrieval time\nentries = await memory.retrieve(question, top_k=3, similarity_threshold=0.75)\n",[17,723,724,729,753,757,762],{"__ignoreMap":40},[44,725,726],{"class":46,"line":47},[44,727,728],{"class":74},"# More examples, lower quality bar\n",[44,730,731,734,736,739,742,744,747,749,751],{"class":46,"line":64},[44,732,733],{"class":54},"agent ",[44,735,84],{"class":50},[44,737,738],{"class":54}," MangoAgent(",[44,740,741],{"class":328},"...",[44,743,495],{"class":54},[44,745,746],{"class":90},"memory_top_k",[44,748,84],{"class":50},[44,750,371],{"class":328},[44,752,100],{"class":54},[44,754,755],{"class":46,"line":71},[44,756,68],{"emptyLinePlaceholder":67},[44,758,759],{"class":46,"line":78},[44,760,761],{"class":74},"# Control threshold at retrieval time\n",[44,763,764,766,768,770,773,775,777,779,781,784,786,789],{"class":46,"line":103},[44,765,346],{"class":54},[44,767,84],{"class":50},[44,769,351],{"class":50},[44,771,772],{"class":54}," memory.retrieve(question, ",[44,774,498],{"class":90},[44,776,84],{"class":50},[44,778,503],{"class":328},[44,780,495],{"class":54},[44,782,783],{"class":90},"similarity_threshold",[44,785,84],{"class":50},[44,787,788],{"class":328},"0.75",[44,790,100],{"class":54},[792,793,794],"style",{},"html pre.shiki code .snl16, html code.shiki .snl16{--shiki-default:#F97583}html pre.shiki code .s95oV, html code.shiki .s95oV{--shiki-default:#E1E4E8}html pre.shiki code .sAwPA, html code.shiki .sAwPA{--shiki-default:#6A737D}html pre.shiki code .s9osk, html code.shiki .s9osk{--shiki-default:#FFAB70}html pre.shiki code .sU2Wk, html code.shiki .sU2Wk{--shiki-default:#9ECBFF}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 pre.shiki code .sDLfK, html code.shiki .sDLfK{--shiki-default:#79B8FF}",{"title":40,"searchDepth":64,"depth":64,"links":796},[797,798,799,800,801,802],{"id":32,"depth":64,"text":33},{"id":184,"depth":64,"text":185},{"id":234,"depth":64,"text":235},{"id":312,"depth":64,"text":313},{"id":574,"depth":64,"text":575},{"id":706,"depth":64,"text":707},"Persistent vector memory with ChromaDB.","md",{},"\u002Fdocs\u002Fintegrations\u002Fchromadb",{"title":5,"description":803},"docs\u002F3.integrations\u002F3.chromadb","G9h8xZGisGMPoywaTw9DwsJTdkrSAhk3P8AAeQ8dnh8",1776189332098]