[{"data":1,"prerenderedAt":2209},["ShallowReactive",2],{"navigation":3,"\u002Fdocs\u002Fsdk\u002Fpython":54,"\u002Fdocs\u002Fsdk\u002Fpython-surround":2204},[4,16,32,47],{"title":5,"path":6,"stem":7,"children":8,"icon":10},"Introduction","\u002Fdocs\u002Fgetting-started","1.docs\u002F1.getting-started\u002F1.index",[9,11],{"title":5,"path":6,"stem":7,"icon":10},"i-lucide-house",{"title":12,"path":13,"stem":14,"icon":15},"Quickstart","\u002Fdocs\u002Fgetting-started\u002Fquickstart","1.docs\u002F1.getting-started\u002F2.quickstart","i-lucide-rocket",{"title":17,"path":18,"stem":19,"children":20,"page":31},"Sdk","\u002Fdocs\u002Fsdk","1.docs\u002F2.sdk",[21,26],{"title":22,"path":23,"stem":24,"icon":25},"TypeScript SDK","\u002Fdocs\u002Fsdk\u002Ftypescript","1.docs\u002F2.sdk\u002F1.typescript","i-simple-icons-typescript",{"title":27,"path":28,"stem":29,"icon":30},"Python SDK","\u002Fdocs\u002Fsdk\u002Fpython","1.docs\u002F2.sdk\u002F2.python","i-simple-icons-python",false,{"title":33,"path":34,"stem":35,"children":36,"page":31},"Concepts","\u002Fdocs\u002Fconcepts","1.docs\u002F3.concepts",[37,42],{"title":38,"path":39,"stem":40,"icon":41},"Pricing database","\u002Fdocs\u002Fconcepts\u002Fpricing-database","1.docs\u002F3.concepts\u002F1.pricing-database","i-lucide-database",{"title":43,"path":44,"stem":45,"icon":46},"Budget guard","\u002Fdocs\u002Fconcepts\u002Fbudgets","1.docs\u002F3.concepts\u002F2.budgets","i-lucide-shield",{"title":48,"path":49,"stem":50,"children":51,"icon":53},"API & MCP","\u002Fdocs\u002Fapi-and-mcp","1.docs\u002F4.api-and-mcp\u002F1.index",[52],{"title":48,"path":49,"stem":50,"icon":53},"i-lucide-plug-zap",{"id":55,"title":27,"body":56,"description":2198,"extension":2199,"meta":2200,"navigation":2201,"path":28,"seo":2202,"stem":29,"__hash__":2203},"docs\u002F1.docs\u002F2.sdk\u002F2.python.md",{"type":57,"value":58,"toc":2179},"minimark",[59,68,93,98,328,335,339,348,555,568,575,744,752,969,984,988,992,1049,1326,1330,1489,1670,1676,1680,1937,1941,2069,2072,2078,2089,2093,2098,2124,2129,2146,2153,2175],[60,61,62,63,67],"p",{},"The ",[64,65,66],"code",{},"margint"," package runs on Python 3.10+ and works with any LLM provider.",[69,70,75],"pre",{"className":71,"code":72,"language":73,"meta":74,"style":74},"language-bash shiki shiki-themes material-theme-lighter vitesse-light github-dark","pip install margint\n","bash","",[64,76,77],{"__ignoreMap":74},[78,79,82,86,90],"span",{"class":80,"line":81},"line",1,[78,83,85],{"class":84},"s8WwD","pip",[78,87,89],{"class":88},"sgGcy"," install",[78,91,92],{"class":88}," margint\n",[94,95,97],"h2",{"id":96},"_60-second-start","60-second start",[69,99,103],{"className":100,"code":101,"language":102,"meta":74,"style":74},"language-python shiki shiki-themes material-theme-lighter vitesse-light github-dark","import os\nfrom margint import Margint\n\nm = Margint(api_key=os.environ[\"MARGINT_API_KEY\"])\n\nm.track(\n    customer_id=\"cust_abc\",\n    feature=\"chat\",\n    provider=\"openai\",\n    model=\"gpt-4o\",\n    input_tokens=820,\n    output_tokens=310,\n)\n\nm.shutdown()  # flushes before exit\n","python",[64,104,105,115,129,136,185,190,204,222,239,256,273,287,300,306,311],{"__ignoreMap":74},[78,106,107,111],{"class":80,"line":81},[78,108,110],{"class":109},"sBwTr","import",[78,112,114],{"class":113},"sQMu7"," os\n",[78,116,118,121,124,126],{"class":80,"line":117},2,[78,119,120],{"class":109},"from",[78,122,123],{"class":113}," margint ",[78,125,110],{"class":109},[78,127,128],{"class":113}," Margint\n",[78,130,132],{"class":80,"line":131},3,[78,133,135],{"emptyLinePlaceholder":134},true,"\n",[78,137,139,142,146,150,154,158,160,163,166,170,173,177,180,182],{"class":80,"line":138},4,[78,140,141],{"class":113},"m ",[78,143,145],{"class":144},"sX7bk","=",[78,147,149],{"class":148},"swwt3"," Margint",[78,151,153],{"class":152},"sCPop","(",[78,155,157],{"class":156},"smADk","api_key",[78,159,145],{"class":144},[78,161,162],{"class":148},"os",[78,164,165],{"class":152},".",[78,167,169],{"class":168},"sSROA","environ",[78,171,172],{"class":152},"[",[78,174,176],{"class":175},"sFbhr","\"",[78,178,179],{"class":88},"MARGINT_API_KEY",[78,181,176],{"class":175},[78,183,184],{"class":152},"])\n",[78,186,188],{"class":80,"line":187},5,[78,189,135],{"emptyLinePlaceholder":134},[78,191,193,196,198,201],{"class":80,"line":192},6,[78,194,195],{"class":113},"m",[78,197,165],{"class":152},[78,199,200],{"class":148},"track",[78,202,203],{"class":152},"(\n",[78,205,207,210,212,214,217,219],{"class":80,"line":206},7,[78,208,209],{"class":156},"    customer_id",[78,211,145],{"class":144},[78,213,176],{"class":175},[78,215,216],{"class":88},"cust_abc",[78,218,176],{"class":175},[78,220,221],{"class":152},",\n",[78,223,225,228,230,232,235,237],{"class":80,"line":224},8,[78,226,227],{"class":156},"    feature",[78,229,145],{"class":144},[78,231,176],{"class":175},[78,233,234],{"class":88},"chat",[78,236,176],{"class":175},[78,238,221],{"class":152},[78,240,242,245,247,249,252,254],{"class":80,"line":241},9,[78,243,244],{"class":156},"    provider",[78,246,145],{"class":144},[78,248,176],{"class":175},[78,250,251],{"class":88},"openai",[78,253,176],{"class":175},[78,255,221],{"class":152},[78,257,259,262,264,266,269,271],{"class":80,"line":258},10,[78,260,261],{"class":156},"    model",[78,263,145],{"class":144},[78,265,176],{"class":175},[78,267,268],{"class":88},"gpt-4o",[78,270,176],{"class":175},[78,272,221],{"class":152},[78,274,276,279,281,285],{"class":80,"line":275},11,[78,277,278],{"class":156},"    input_tokens",[78,280,145],{"class":144},[78,282,284],{"class":283},"s4fFo","820",[78,286,221],{"class":152},[78,288,290,293,295,298],{"class":80,"line":289},12,[78,291,292],{"class":156},"    output_tokens",[78,294,145],{"class":144},[78,296,297],{"class":283},"310",[78,299,221],{"class":152},[78,301,303],{"class":80,"line":302},13,[78,304,305],{"class":152},")\n",[78,307,309],{"class":80,"line":308},14,[78,310,135],{"emptyLinePlaceholder":134},[78,312,314,316,318,321,324],{"class":80,"line":313},15,[78,315,195],{"class":113},[78,317,165],{"class":152},[78,319,320],{"class":148},"shutdown",[78,322,323],{"class":152},"()",[78,325,327],{"class":326},"skvGe","  # flushes before exit\n",[60,329,330,331,334],{},"The flush worker runs on a background thread. ",[64,332,333],{},"track()"," returns immediately.",[94,336,338],{"id":337},"three-integration-patterns","Three integration patterns",[340,341,343,344,347],"h3",{"id":342},"_1-wrap-zero-touch","1. ",[64,345,346],{},"wrap()"," — zero-touch",[69,349,351],{"className":100,"code":350,"language":102,"meta":74,"style":74},"import openai\nfrom margint import Margint\n\nm = Margint(api_key=os.environ[\"MARGINT_API_KEY\"])\nclient = m.wrap(openai.OpenAI(), customer_id=\"cust_abc\", feature=\"chat\")\n\nresponse = client.chat.completions.create(\n    model=\"gpt-4o\",\n    messages=[{\"role\": \"user\", \"content\": \"hi\"}],\n)\n",[64,352,353,360,370,374,404,458,462,488,502,551],{"__ignoreMap":74},[78,354,355,357],{"class":80,"line":81},[78,356,110],{"class":109},[78,358,359],{"class":113}," openai\n",[78,361,362,364,366,368],{"class":80,"line":117},[78,363,120],{"class":109},[78,365,123],{"class":113},[78,367,110],{"class":109},[78,369,128],{"class":113},[78,371,372],{"class":80,"line":131},[78,373,135],{"emptyLinePlaceholder":134},[78,375,376,378,380,382,384,386,388,390,392,394,396,398,400,402],{"class":80,"line":138},[78,377,141],{"class":113},[78,379,145],{"class":144},[78,381,149],{"class":148},[78,383,153],{"class":152},[78,385,157],{"class":156},[78,387,145],{"class":144},[78,389,162],{"class":148},[78,391,165],{"class":152},[78,393,169],{"class":168},[78,395,172],{"class":152},[78,397,176],{"class":175},[78,399,179],{"class":88},[78,401,176],{"class":175},[78,403,184],{"class":152},[78,405,406,409,411,414,416,419,421,423,425,428,431,434,436,438,440,442,445,448,450,452,454,456],{"class":80,"line":187},[78,407,408],{"class":113},"client ",[78,410,145],{"class":144},[78,412,413],{"class":113}," m",[78,415,165],{"class":152},[78,417,418],{"class":148},"wrap",[78,420,153],{"class":152},[78,422,251],{"class":148},[78,424,165],{"class":152},[78,426,427],{"class":148},"OpenAI",[78,429,430],{"class":152},"(),",[78,432,433],{"class":156}," customer_id",[78,435,145],{"class":144},[78,437,176],{"class":175},[78,439,216],{"class":88},[78,441,176],{"class":175},[78,443,444],{"class":152},",",[78,446,447],{"class":156}," feature",[78,449,145],{"class":144},[78,451,176],{"class":175},[78,453,234],{"class":88},[78,455,176],{"class":175},[78,457,305],{"class":152},[78,459,460],{"class":80,"line":192},[78,461,135],{"emptyLinePlaceholder":134},[78,463,464,467,469,472,474,476,478,481,483,486],{"class":80,"line":206},[78,465,466],{"class":113},"response ",[78,468,145],{"class":144},[78,470,471],{"class":113}," client",[78,473,165],{"class":152},[78,475,234],{"class":168},[78,477,165],{"class":152},[78,479,480],{"class":168},"completions",[78,482,165],{"class":152},[78,484,485],{"class":148},"create",[78,487,203],{"class":152},[78,489,490,492,494,496,498,500],{"class":80,"line":224},[78,491,261],{"class":156},[78,493,145],{"class":144},[78,495,176],{"class":175},[78,497,268],{"class":88},[78,499,176],{"class":175},[78,501,221],{"class":152},[78,503,504,507,509,512,514,517,519,522,525,528,530,532,534,537,539,541,543,546,548],{"class":80,"line":241},[78,505,506],{"class":156},"    messages",[78,508,145],{"class":144},[78,510,511],{"class":152},"[{",[78,513,176],{"class":175},[78,515,516],{"class":88},"role",[78,518,176],{"class":175},[78,520,521],{"class":152},":",[78,523,524],{"class":175}," \"",[78,526,527],{"class":88},"user",[78,529,176],{"class":175},[78,531,444],{"class":152},[78,533,524],{"class":175},[78,535,536],{"class":88},"content",[78,538,176],{"class":175},[78,540,521],{"class":152},[78,542,524],{"class":175},[78,544,545],{"class":88},"hi",[78,547,176],{"class":175},[78,549,550],{"class":152},"}],\n",[78,552,553],{"class":80,"line":258},[78,554,305],{"class":152},[60,556,557,558,561,562,565,566,165],{},"Works with OpenAI and Anthropic SDK response shapes (",[64,559,560],{},"response.usage",", ",[64,563,564],{},"response.model","). For other providers, use ",[64,567,333],{},[340,569,571,572,574],{"id":570},"_2-track-manual","2. ",[64,573,333],{}," — manual",[69,576,578],{"className":100,"code":577,"language":102,"meta":74,"style":74},"response = my_llm_call()\n\nm.track(\n    customer_id=request.user.id,\n    feature=\"summarize\",\n    provider=\"anthropic\",\n    model=\"claude-sonnet-4-20250514\",\n    input_tokens=response.usage.input_tokens,\n    output_tokens=response.usage.output_tokens,\n    metadata={\"request_id\": request.id},\n)\n",[64,579,580,592,596,606,626,641,656,671,692,711,740],{"__ignoreMap":74},[78,581,582,584,586,589],{"class":80,"line":81},[78,583,466],{"class":113},[78,585,145],{"class":144},[78,587,588],{"class":148}," my_llm_call",[78,590,591],{"class":152},"()\n",[78,593,594],{"class":80,"line":117},[78,595,135],{"emptyLinePlaceholder":134},[78,597,598,600,602,604],{"class":80,"line":131},[78,599,195],{"class":113},[78,601,165],{"class":152},[78,603,200],{"class":148},[78,605,203],{"class":152},[78,607,608,610,612,615,617,619,621,624],{"class":80,"line":138},[78,609,209],{"class":156},[78,611,145],{"class":144},[78,613,614],{"class":148},"request",[78,616,165],{"class":152},[78,618,527],{"class":168},[78,620,165],{"class":152},[78,622,623],{"class":168},"id",[78,625,221],{"class":152},[78,627,628,630,632,634,637,639],{"class":80,"line":187},[78,629,227],{"class":156},[78,631,145],{"class":144},[78,633,176],{"class":175},[78,635,636],{"class":88},"summarize",[78,638,176],{"class":175},[78,640,221],{"class":152},[78,642,643,645,647,649,652,654],{"class":80,"line":192},[78,644,244],{"class":156},[78,646,145],{"class":144},[78,648,176],{"class":175},[78,650,651],{"class":88},"anthropic",[78,653,176],{"class":175},[78,655,221],{"class":152},[78,657,658,660,662,664,667,669],{"class":80,"line":206},[78,659,261],{"class":156},[78,661,145],{"class":144},[78,663,176],{"class":175},[78,665,666],{"class":88},"claude-sonnet-4-20250514",[78,668,176],{"class":175},[78,670,221],{"class":152},[78,672,673,675,677,680,682,685,687,690],{"class":80,"line":224},[78,674,278],{"class":156},[78,676,145],{"class":144},[78,678,679],{"class":148},"response",[78,681,165],{"class":152},[78,683,684],{"class":168},"usage",[78,686,165],{"class":152},[78,688,689],{"class":168},"input_tokens",[78,691,221],{"class":152},[78,693,694,696,698,700,702,704,706,709],{"class":80,"line":241},[78,695,292],{"class":156},[78,697,145],{"class":144},[78,699,679],{"class":148},[78,701,165],{"class":152},[78,703,684],{"class":168},[78,705,165],{"class":152},[78,707,708],{"class":168},"output_tokens",[78,710,221],{"class":152},[78,712,713,716,718,721,723,726,728,730,733,735,737],{"class":80,"line":258},[78,714,715],{"class":156},"    metadata",[78,717,145],{"class":144},[78,719,720],{"class":152},"{",[78,722,176],{"class":175},[78,724,725],{"class":88},"request_id",[78,727,176],{"class":175},[78,729,521],{"class":152},[78,731,732],{"class":148}," request",[78,734,165],{"class":152},[78,736,623],{"class":168},[78,738,739],{"class":152},"},\n",[78,741,742],{"class":80,"line":275},[78,743,305],{"class":152},[340,745,747,748,751],{"id":746},"_3-guarded_call-budget-enforcement","3. ",[64,749,750],{},"guarded_call()"," — budget enforcement",[69,753,755],{"className":100,"code":754,"language":102,"meta":74,"style":74},"from margint import BudgetExceededError\n\ntry:\n    response = m.guarded_call(\n        customer_id=\"cust_abc\",\n        feature=\"agent\",\n        fn=lambda: client.chat.completions.create(model=\"gpt-4o\", messages=msgs),\n    )\nexcept BudgetExceededError as e:\n    return {\"error\": \"Budget exceeded\", \"breaches\": [b.__dict__ for b in e.breaches]}, 402\n",[64,756,757,768,772,780,796,811,827,880,885,901],{"__ignoreMap":74},[78,758,759,761,763,765],{"class":80,"line":81},[78,760,120],{"class":109},[78,762,123],{"class":113},[78,764,110],{"class":109},[78,766,767],{"class":113}," BudgetExceededError\n",[78,769,770],{"class":80,"line":117},[78,771,135],{"emptyLinePlaceholder":134},[78,773,774,777],{"class":80,"line":131},[78,775,776],{"class":109},"try",[78,778,779],{"class":152},":\n",[78,781,782,785,787,789,791,794],{"class":80,"line":138},[78,783,784],{"class":113},"    response ",[78,786,145],{"class":144},[78,788,413],{"class":113},[78,790,165],{"class":152},[78,792,793],{"class":148},"guarded_call",[78,795,203],{"class":152},[78,797,798,801,803,805,807,809],{"class":80,"line":187},[78,799,800],{"class":156},"        customer_id",[78,802,145],{"class":144},[78,804,176],{"class":175},[78,806,216],{"class":88},[78,808,176],{"class":175},[78,810,221],{"class":152},[78,812,813,816,818,820,823,825],{"class":80,"line":192},[78,814,815],{"class":156},"        feature",[78,817,145],{"class":144},[78,819,176],{"class":175},[78,821,822],{"class":88},"agent",[78,824,176],{"class":175},[78,826,221],{"class":152},[78,828,829,832,834,838,840,842,844,846,848,850,852,854,856,859,861,863,865,867,869,872,874,877],{"class":80,"line":206},[78,830,831],{"class":156},"        fn",[78,833,145],{"class":144},[78,835,837],{"class":836},"sVLbc","lambda",[78,839,521],{"class":152},[78,841,471],{"class":148},[78,843,165],{"class":152},[78,845,234],{"class":168},[78,847,165],{"class":152},[78,849,480],{"class":168},[78,851,165],{"class":152},[78,853,485],{"class":148},[78,855,153],{"class":152},[78,857,858],{"class":156},"model",[78,860,145],{"class":144},[78,862,176],{"class":175},[78,864,268],{"class":88},[78,866,176],{"class":175},[78,868,444],{"class":152},[78,870,871],{"class":156}," messages",[78,873,145],{"class":144},[78,875,876],{"class":148},"msgs",[78,878,879],{"class":152},"),\n",[78,881,882],{"class":80,"line":224},[78,883,884],{"class":152},"    )\n",[78,886,887,890,893,896,899],{"class":80,"line":241},[78,888,889],{"class":109},"except",[78,891,892],{"class":113}," BudgetExceededError ",[78,894,895],{"class":109},"as",[78,897,898],{"class":113}," e",[78,900,779],{"class":152},[78,902,903,906,909,911,914,916,918,920,923,925,927,929,932,934,936,939,942,944,948,951,954,957,959,961,963,966],{"class":80,"line":258},[78,904,905],{"class":109},"    return",[78,907,908],{"class":152}," {",[78,910,176],{"class":175},[78,912,913],{"class":88},"error",[78,915,176],{"class":175},[78,917,521],{"class":152},[78,919,524],{"class":175},[78,921,922],{"class":88},"Budget exceeded",[78,924,176],{"class":175},[78,926,444],{"class":152},[78,928,524],{"class":175},[78,930,931],{"class":88},"breaches",[78,933,176],{"class":175},[78,935,521],{"class":152},[78,937,938],{"class":152}," [",[78,940,941],{"class":113},"b",[78,943,165],{"class":152},[78,945,947],{"class":946},"sCZzA","__dict__",[78,949,950],{"class":109}," for",[78,952,953],{"class":113}," b ",[78,955,956],{"class":109},"in",[78,958,898],{"class":113},[78,960,165],{"class":152},[78,962,931],{"class":168},[78,964,965],{"class":152},"]},",[78,967,968],{"class":283}," 402\n",[60,970,971,973,974,978,979,981,982,165],{},[64,972,793],{}," checks the budget but does ",[975,976,977],"strong",{},"not"," auto-track. Pair with ",[64,980,346],{}," or ",[64,983,333],{},[94,985,987],{"id":986},"framework-quickstarts","Framework quickstarts",[340,989,991],{"id":990},"fastapi","FastAPI",[69,993,996],{"className":100,"code":994,"filename":995,"language":102,"meta":74,"style":74},"import os\nfrom margint import Margint\n\nmargint = Margint(api_key=os.environ[\"MARGINT_API_KEY\"])\n","app\u002Fmargint_client.py",[64,997,998,1004,1014,1018],{"__ignoreMap":74},[78,999,1000,1002],{"class":80,"line":81},[78,1001,110],{"class":109},[78,1003,114],{"class":113},[78,1005,1006,1008,1010,1012],{"class":80,"line":117},[78,1007,120],{"class":109},[78,1009,123],{"class":113},[78,1011,110],{"class":109},[78,1013,128],{"class":113},[78,1015,1016],{"class":80,"line":131},[78,1017,135],{"emptyLinePlaceholder":134},[78,1019,1020,1023,1025,1027,1029,1031,1033,1035,1037,1039,1041,1043,1045,1047],{"class":80,"line":138},[78,1021,1022],{"class":113},"margint ",[78,1024,145],{"class":144},[78,1026,149],{"class":148},[78,1028,153],{"class":152},[78,1030,157],{"class":156},[78,1032,145],{"class":144},[78,1034,162],{"class":148},[78,1036,165],{"class":152},[78,1038,169],{"class":168},[78,1040,172],{"class":152},[78,1042,176],{"class":175},[78,1044,179],{"class":88},[78,1046,176],{"class":175},[78,1048,184],{"class":152},[69,1050,1053],{"className":100,"code":1051,"filename":1052,"language":102,"meta":74,"style":74},"import openai\nfrom fastapi import FastAPI\nfrom contextlib import asynccontextmanager\nfrom .margint_client import margint\n\n@asynccontextmanager\nasync def lifespan(app: FastAPI):\n    yield\n    margint.shutdown()\n\napp = FastAPI(lifespan=lifespan)\n\n@app.post(\"\u002Fchat\")\ndef chat(user_id: str, messages: list[dict]):\n    client = margint.wrap(openai.OpenAI(), customer_id=user_id, feature=\"chat\")\n    return client.chat.completions.create(model=\"gpt-4o\", messages=messages)\n","app\u002Fmain.py",[64,1054,1055,1061,1073,1085,1099,1103,1113,1138,1143,1154,1158,1178,1182,1204,1240,1284],{"__ignoreMap":74},[78,1056,1057,1059],{"class":80,"line":81},[78,1058,110],{"class":109},[78,1060,359],{"class":113},[78,1062,1063,1065,1068,1070],{"class":80,"line":117},[78,1064,120],{"class":109},[78,1066,1067],{"class":113}," fastapi ",[78,1069,110],{"class":109},[78,1071,1072],{"class":113}," FastAPI\n",[78,1074,1075,1077,1080,1082],{"class":80,"line":131},[78,1076,120],{"class":109},[78,1078,1079],{"class":113}," contextlib ",[78,1081,110],{"class":109},[78,1083,1084],{"class":113}," asynccontextmanager\n",[78,1086,1087,1089,1092,1095,1097],{"class":80,"line":138},[78,1088,120],{"class":109},[78,1090,1091],{"class":152}," .",[78,1093,1094],{"class":113},"margint_client ",[78,1096,110],{"class":109},[78,1098,92],{"class":113},[78,1100,1101],{"class":80,"line":187},[78,1102,135],{"emptyLinePlaceholder":134},[78,1104,1105,1109],{"class":80,"line":192},[78,1106,1108],{"class":1107},"sJMGW","@",[78,1110,1112],{"class":1111},"sThQN","asynccontextmanager\n",[78,1114,1115,1118,1121,1124,1126,1130,1132,1135],{"class":80,"line":206},[78,1116,1117],{"class":836},"async",[78,1119,1120],{"class":836}," def",[78,1122,1123],{"class":1111}," lifespan",[78,1125,153],{"class":152},[78,1127,1129],{"class":1128},"sQONO","app",[78,1131,521],{"class":152},[78,1133,1134],{"class":113}," FastAPI",[78,1136,1137],{"class":152},"):\n",[78,1139,1140],{"class":80,"line":224},[78,1141,1142],{"class":109},"    yield\n",[78,1144,1145,1148,1150,1152],{"class":80,"line":241},[78,1146,1147],{"class":113},"    margint",[78,1149,165],{"class":152},[78,1151,320],{"class":148},[78,1153,591],{"class":152},[78,1155,1156],{"class":80,"line":258},[78,1157,135],{"emptyLinePlaceholder":134},[78,1159,1160,1163,1165,1167,1169,1172,1174,1176],{"class":80,"line":275},[78,1161,1162],{"class":113},"app ",[78,1164,145],{"class":144},[78,1166,1134],{"class":148},[78,1168,153],{"class":152},[78,1170,1171],{"class":156},"lifespan",[78,1173,145],{"class":144},[78,1175,1171],{"class":148},[78,1177,305],{"class":152},[78,1179,1180],{"class":80,"line":289},[78,1181,135],{"emptyLinePlaceholder":134},[78,1183,1184,1186,1188,1190,1193,1195,1197,1200,1202],{"class":80,"line":302},[78,1185,1108],{"class":1107},[78,1187,1129],{"class":1111},[78,1189,165],{"class":1107},[78,1191,1192],{"class":1111},"post",[78,1194,153],{"class":152},[78,1196,176],{"class":175},[78,1198,1199],{"class":88},"\u002Fchat",[78,1201,176],{"class":175},[78,1203,305],{"class":152},[78,1205,1206,1209,1212,1214,1217,1219,1223,1225,1227,1229,1232,1234,1237],{"class":80,"line":308},[78,1207,1208],{"class":836},"def",[78,1210,1211],{"class":1111}," chat",[78,1213,153],{"class":152},[78,1215,1216],{"class":1128},"user_id",[78,1218,521],{"class":152},[78,1220,1222],{"class":1221},"sWDkf"," str",[78,1224,444],{"class":152},[78,1226,871],{"class":1128},[78,1228,521],{"class":152},[78,1230,1231],{"class":113}," list",[78,1233,172],{"class":152},[78,1235,1236],{"class":1221},"dict",[78,1238,1239],{"class":152},"]):\n",[78,1241,1242,1245,1247,1250,1252,1254,1256,1258,1260,1262,1264,1266,1268,1270,1272,1274,1276,1278,1280,1282],{"class":80,"line":313},[78,1243,1244],{"class":113},"    client ",[78,1246,145],{"class":144},[78,1248,1249],{"class":113}," margint",[78,1251,165],{"class":152},[78,1253,418],{"class":148},[78,1255,153],{"class":152},[78,1257,251],{"class":148},[78,1259,165],{"class":152},[78,1261,427],{"class":148},[78,1263,430],{"class":152},[78,1265,433],{"class":156},[78,1267,145],{"class":144},[78,1269,1216],{"class":148},[78,1271,444],{"class":152},[78,1273,447],{"class":156},[78,1275,145],{"class":144},[78,1277,176],{"class":175},[78,1279,234],{"class":88},[78,1281,176],{"class":175},[78,1283,305],{"class":152},[78,1285,1287,1289,1291,1293,1295,1297,1299,1301,1303,1305,1307,1309,1311,1313,1315,1317,1319,1321,1324],{"class":80,"line":1286},16,[78,1288,905],{"class":109},[78,1290,471],{"class":113},[78,1292,165],{"class":152},[78,1294,234],{"class":168},[78,1296,165],{"class":152},[78,1298,480],{"class":168},[78,1300,165],{"class":152},[78,1302,485],{"class":148},[78,1304,153],{"class":152},[78,1306,858],{"class":156},[78,1308,145],{"class":144},[78,1310,176],{"class":175},[78,1312,268],{"class":88},[78,1314,176],{"class":175},[78,1316,444],{"class":152},[78,1318,871],{"class":156},[78,1320,145],{"class":144},[78,1322,1323],{"class":148},"messages",[78,1325,305],{"class":152},[340,1327,1329],{"id":1328},"django","Django",[69,1331,1334],{"className":100,"code":1332,"filename":1333,"language":102,"meta":74,"style":74},"import os\nfrom django.apps import AppConfig\nfrom margint import Margint\n\nmargint: Margint | None = None\n\nclass CoreConfig(AppConfig):\n    name = \"core\"\n\n    def ready(self):\n        global margint\n        margint = Margint(api_key=os.environ[\"MARGINT_API_KEY\"])\n","myproject\u002Fapps.py",[64,1335,1336,1342,1359,1369,1373,1396,1400,1416,1431,1435,1451,1458],{"__ignoreMap":74},[78,1337,1338,1340],{"class":80,"line":81},[78,1339,110],{"class":109},[78,1341,114],{"class":113},[78,1343,1344,1346,1349,1351,1354,1356],{"class":80,"line":117},[78,1345,120],{"class":109},[78,1347,1348],{"class":113}," django",[78,1350,165],{"class":152},[78,1352,1353],{"class":113},"apps ",[78,1355,110],{"class":109},[78,1357,1358],{"class":113}," AppConfig\n",[78,1360,1361,1363,1365,1367],{"class":80,"line":131},[78,1362,120],{"class":109},[78,1364,123],{"class":113},[78,1366,110],{"class":109},[78,1368,128],{"class":113},[78,1370,1371],{"class":80,"line":138},[78,1372,135],{"emptyLinePlaceholder":134},[78,1374,1375,1377,1379,1382,1386,1390,1393],{"class":80,"line":187},[78,1376,66],{"class":113},[78,1378,521],{"class":152},[78,1380,1381],{"class":113}," Margint ",[78,1383,1385],{"class":1384},"szqSR","|",[78,1387,1389],{"class":1388},"sNz2S"," None",[78,1391,1392],{"class":144}," =",[78,1394,1395],{"class":1388}," None\n",[78,1397,1398],{"class":80,"line":192},[78,1399,135],{"emptyLinePlaceholder":134},[78,1401,1402,1405,1409,1411,1414],{"class":80,"line":206},[78,1403,1404],{"class":836},"class",[78,1406,1408],{"class":1407},"stoRT"," CoreConfig",[78,1410,153],{"class":152},[78,1412,1413],{"class":84},"AppConfig",[78,1415,1137],{"class":152},[78,1417,1418,1421,1423,1425,1428],{"class":80,"line":224},[78,1419,1420],{"class":113},"    name ",[78,1422,145],{"class":144},[78,1424,524],{"class":175},[78,1426,1427],{"class":88},"core",[78,1429,1430],{"class":175},"\"\n",[78,1432,1433],{"class":80,"line":241},[78,1434,135],{"emptyLinePlaceholder":134},[78,1436,1437,1440,1443,1445,1449],{"class":80,"line":258},[78,1438,1439],{"class":836},"    def",[78,1441,1442],{"class":1111}," ready",[78,1444,153],{"class":152},[78,1446,1448],{"class":1447},"srok8","self",[78,1450,1137],{"class":152},[78,1452,1453,1456],{"class":80,"line":275},[78,1454,1455],{"class":836},"        global",[78,1457,92],{"class":113},[78,1459,1460,1463,1465,1467,1469,1471,1473,1475,1477,1479,1481,1483,1485,1487],{"class":80,"line":289},[78,1461,1462],{"class":113},"        margint ",[78,1464,145],{"class":144},[78,1466,149],{"class":148},[78,1468,153],{"class":152},[78,1470,157],{"class":156},[78,1472,145],{"class":144},[78,1474,162],{"class":148},[78,1476,165],{"class":152},[78,1478,169],{"class":168},[78,1480,172],{"class":152},[78,1482,176],{"class":175},[78,1484,179],{"class":88},[78,1486,176],{"class":175},[78,1488,184],{"class":152},[69,1490,1493],{"className":100,"code":1491,"filename":1492,"language":102,"meta":74,"style":74},"import openai\nfrom django.http import JsonResponse\nfrom .apps import margint\n\ndef chat(request):\n    client = margint.wrap(openai.OpenAI(), customer_id=request.user.id, feature=\"chat\")\n    response = client.chat.completions.create(model=\"gpt-4o\", messages=request.POST[\"messages\"])\n    return JsonResponse(response.model_dump())\n","core\u002Fviews.py",[64,1494,1495,1501,1517,1529,1533,1545,1595,1651],{"__ignoreMap":74},[78,1496,1497,1499],{"class":80,"line":81},[78,1498,110],{"class":109},[78,1500,359],{"class":113},[78,1502,1503,1505,1507,1509,1512,1514],{"class":80,"line":117},[78,1504,120],{"class":109},[78,1506,1348],{"class":113},[78,1508,165],{"class":152},[78,1510,1511],{"class":113},"http ",[78,1513,110],{"class":109},[78,1515,1516],{"class":113}," JsonResponse\n",[78,1518,1519,1521,1523,1525,1527],{"class":80,"line":131},[78,1520,120],{"class":109},[78,1522,1091],{"class":152},[78,1524,1353],{"class":113},[78,1526,110],{"class":109},[78,1528,92],{"class":113},[78,1530,1531],{"class":80,"line":138},[78,1532,135],{"emptyLinePlaceholder":134},[78,1534,1535,1537,1539,1541,1543],{"class":80,"line":187},[78,1536,1208],{"class":836},[78,1538,1211],{"class":1111},[78,1540,153],{"class":152},[78,1542,614],{"class":1128},[78,1544,1137],{"class":152},[78,1546,1547,1549,1551,1553,1555,1557,1559,1561,1563,1565,1567,1569,1571,1573,1575,1577,1579,1581,1583,1585,1587,1589,1591,1593],{"class":80,"line":192},[78,1548,1244],{"class":113},[78,1550,145],{"class":144},[78,1552,1249],{"class":113},[78,1554,165],{"class":152},[78,1556,418],{"class":148},[78,1558,153],{"class":152},[78,1560,251],{"class":148},[78,1562,165],{"class":152},[78,1564,427],{"class":148},[78,1566,430],{"class":152},[78,1568,433],{"class":156},[78,1570,145],{"class":144},[78,1572,614],{"class":148},[78,1574,165],{"class":152},[78,1576,527],{"class":168},[78,1578,165],{"class":152},[78,1580,623],{"class":168},[78,1582,444],{"class":152},[78,1584,447],{"class":156},[78,1586,145],{"class":144},[78,1588,176],{"class":175},[78,1590,234],{"class":88},[78,1592,176],{"class":175},[78,1594,305],{"class":152},[78,1596,1597,1599,1601,1603,1605,1607,1609,1611,1613,1615,1617,1619,1621,1623,1625,1627,1629,1631,1633,1635,1637,1641,1643,1645,1647,1649],{"class":80,"line":206},[78,1598,784],{"class":113},[78,1600,145],{"class":144},[78,1602,471],{"class":113},[78,1604,165],{"class":152},[78,1606,234],{"class":168},[78,1608,165],{"class":152},[78,1610,480],{"class":168},[78,1612,165],{"class":152},[78,1614,485],{"class":148},[78,1616,153],{"class":152},[78,1618,858],{"class":156},[78,1620,145],{"class":144},[78,1622,176],{"class":175},[78,1624,268],{"class":88},[78,1626,176],{"class":175},[78,1628,444],{"class":152},[78,1630,871],{"class":156},[78,1632,145],{"class":144},[78,1634,614],{"class":148},[78,1636,165],{"class":152},[78,1638,1640],{"class":1639},"sYPoJ","POST",[78,1642,172],{"class":152},[78,1644,176],{"class":175},[78,1646,1323],{"class":88},[78,1648,176],{"class":175},[78,1650,184],{"class":152},[78,1652,1653,1655,1658,1660,1662,1664,1667],{"class":80,"line":224},[78,1654,905],{"class":109},[78,1656,1657],{"class":148}," JsonResponse",[78,1659,153],{"class":152},[78,1661,679],{"class":148},[78,1663,165],{"class":152},[78,1665,1666],{"class":148},"model_dump",[78,1668,1669],{"class":152},"())\n",[60,1671,1672,1675],{},[64,1673,1674],{},"atexit"," handles flushing on process exit automatically.",[340,1677,1679],{"id":1678},"flask","Flask",[69,1681,1683],{"className":100,"code":1682,"language":102,"meta":74,"style":74},"import os\nimport openai\nfrom flask import Flask, request, jsonify\nfrom margint import Margint\n\napp = Flask(__name__)\nmargint = Margint(api_key=os.environ[\"MARGINT_API_KEY\"])\n\n@app.post(\"\u002Fchat\")\ndef chat():\n    client = margint.wrap(openai.OpenAI(), customer_id=request.json[\"user_id\"], feature=\"chat\")\n    response = client.chat.completions.create(model=\"gpt-4o\", messages=request.json[\"messages\"])\n    return jsonify(response.model_dump())\n",[64,1684,1685,1691,1697,1718,1728,1732,1747,1777,1781,1801,1810,1866,1920],{"__ignoreMap":74},[78,1686,1687,1689],{"class":80,"line":81},[78,1688,110],{"class":109},[78,1690,114],{"class":113},[78,1692,1693,1695],{"class":80,"line":117},[78,1694,110],{"class":109},[78,1696,359],{"class":113},[78,1698,1699,1701,1704,1706,1709,1711,1713,1715],{"class":80,"line":131},[78,1700,120],{"class":109},[78,1702,1703],{"class":113}," flask ",[78,1705,110],{"class":109},[78,1707,1708],{"class":113}," Flask",[78,1710,444],{"class":152},[78,1712,732],{"class":113},[78,1714,444],{"class":152},[78,1716,1717],{"class":113}," jsonify\n",[78,1719,1720,1722,1724,1726],{"class":80,"line":138},[78,1721,120],{"class":109},[78,1723,123],{"class":113},[78,1725,110],{"class":109},[78,1727,128],{"class":113},[78,1729,1730],{"class":80,"line":187},[78,1731,135],{"emptyLinePlaceholder":134},[78,1733,1734,1736,1738,1740,1742,1745],{"class":80,"line":192},[78,1735,1162],{"class":113},[78,1737,145],{"class":144},[78,1739,1708],{"class":148},[78,1741,153],{"class":152},[78,1743,1744],{"class":946},"__name__",[78,1746,305],{"class":152},[78,1748,1749,1751,1753,1755,1757,1759,1761,1763,1765,1767,1769,1771,1773,1775],{"class":80,"line":206},[78,1750,1022],{"class":113},[78,1752,145],{"class":144},[78,1754,149],{"class":148},[78,1756,153],{"class":152},[78,1758,157],{"class":156},[78,1760,145],{"class":144},[78,1762,162],{"class":148},[78,1764,165],{"class":152},[78,1766,169],{"class":168},[78,1768,172],{"class":152},[78,1770,176],{"class":175},[78,1772,179],{"class":88},[78,1774,176],{"class":175},[78,1776,184],{"class":152},[78,1778,1779],{"class":80,"line":224},[78,1780,135],{"emptyLinePlaceholder":134},[78,1782,1783,1785,1787,1789,1791,1793,1795,1797,1799],{"class":80,"line":241},[78,1784,1108],{"class":1107},[78,1786,1129],{"class":1111},[78,1788,165],{"class":1107},[78,1790,1192],{"class":1111},[78,1792,153],{"class":152},[78,1794,176],{"class":175},[78,1796,1199],{"class":88},[78,1798,176],{"class":175},[78,1800,305],{"class":152},[78,1802,1803,1805,1807],{"class":80,"line":258},[78,1804,1208],{"class":836},[78,1806,1211],{"class":1111},[78,1808,1809],{"class":152},"():\n",[78,1811,1812,1814,1816,1818,1820,1822,1824,1826,1828,1830,1832,1834,1836,1838,1840,1843,1845,1847,1849,1851,1854,1856,1858,1860,1862,1864],{"class":80,"line":275},[78,1813,1244],{"class":113},[78,1815,145],{"class":144},[78,1817,1249],{"class":113},[78,1819,165],{"class":152},[78,1821,418],{"class":148},[78,1823,153],{"class":152},[78,1825,251],{"class":148},[78,1827,165],{"class":152},[78,1829,427],{"class":148},[78,1831,430],{"class":152},[78,1833,433],{"class":156},[78,1835,145],{"class":144},[78,1837,614],{"class":148},[78,1839,165],{"class":152},[78,1841,1842],{"class":168},"json",[78,1844,172],{"class":152},[78,1846,176],{"class":175},[78,1848,1216],{"class":88},[78,1850,176],{"class":175},[78,1852,1853],{"class":152},"],",[78,1855,447],{"class":156},[78,1857,145],{"class":144},[78,1859,176],{"class":175},[78,1861,234],{"class":88},[78,1863,176],{"class":175},[78,1865,305],{"class":152},[78,1867,1868,1870,1872,1874,1876,1878,1880,1882,1884,1886,1888,1890,1892,1894,1896,1898,1900,1902,1904,1906,1908,1910,1912,1914,1916,1918],{"class":80,"line":289},[78,1869,784],{"class":113},[78,1871,145],{"class":144},[78,1873,471],{"class":113},[78,1875,165],{"class":152},[78,1877,234],{"class":168},[78,1879,165],{"class":152},[78,1881,480],{"class":168},[78,1883,165],{"class":152},[78,1885,485],{"class":148},[78,1887,153],{"class":152},[78,1889,858],{"class":156},[78,1891,145],{"class":144},[78,1893,176],{"class":175},[78,1895,268],{"class":88},[78,1897,176],{"class":175},[78,1899,444],{"class":152},[78,1901,871],{"class":156},[78,1903,145],{"class":144},[78,1905,614],{"class":148},[78,1907,165],{"class":152},[78,1909,1842],{"class":168},[78,1911,172],{"class":152},[78,1913,176],{"class":175},[78,1915,1323],{"class":88},[78,1917,176],{"class":175},[78,1919,184],{"class":152},[78,1921,1922,1924,1927,1929,1931,1933,1935],{"class":80,"line":302},[78,1923,905],{"class":109},[78,1925,1926],{"class":148}," jsonify",[78,1928,153],{"class":152},[78,1930,679],{"class":148},[78,1932,165],{"class":152},[78,1934,1666],{"class":148},[78,1936,1669],{"class":152},[94,1938,1940],{"id":1939},"configuration","Configuration",[69,1942,1944],{"className":100,"code":1943,"language":102,"meta":74,"style":74},"Margint(\n    api_key: str,\n    endpoint: Optional[str] = None,          # default: https:\u002F\u002Fapp.margint.dev\u002Fapi\u002Fingest\u002Fevents\n    budget_endpoint: Optional[str] = None,   # default: https:\u002F\u002Fapp.margint.dev\u002Fapi\u002Fbudgets\u002Fcheck\n    flush_interval_seconds: float = 5.0,\n    max_batch_size: int = 50,\n    budget_cache_ttl_seconds: float = 60.0,\n)\n",[64,1945,1946,1953,1964,1991,2015,2032,2049,2065],{"__ignoreMap":74},[78,1947,1948,1951],{"class":80,"line":81},[78,1949,1950],{"class":148},"Margint",[78,1952,203],{"class":152},[78,1954,1955,1958,1960,1962],{"class":80,"line":117},[78,1956,1957],{"class":148},"    api_key",[78,1959,521],{"class":152},[78,1961,1222],{"class":1221},[78,1963,221],{"class":152},[78,1965,1966,1969,1971,1974,1976,1979,1982,1984,1986,1988],{"class":80,"line":131},[78,1967,1968],{"class":148},"    endpoint",[78,1970,521],{"class":152},[78,1972,1973],{"class":148}," Optional",[78,1975,172],{"class":152},[78,1977,1978],{"class":1221},"str",[78,1980,1981],{"class":152},"]",[78,1983,1392],{"class":144},[78,1985,1389],{"class":1388},[78,1987,444],{"class":152},[78,1989,1990],{"class":326},"          # default: https:\u002F\u002Fapp.margint.dev\u002Fapi\u002Fingest\u002Fevents\n",[78,1992,1993,1996,1998,2000,2002,2004,2006,2008,2010,2012],{"class":80,"line":138},[78,1994,1995],{"class":148},"    budget_endpoint",[78,1997,521],{"class":152},[78,1999,1973],{"class":148},[78,2001,172],{"class":152},[78,2003,1978],{"class":1221},[78,2005,1981],{"class":152},[78,2007,1392],{"class":144},[78,2009,1389],{"class":1388},[78,2011,444],{"class":152},[78,2013,2014],{"class":326},"   # default: https:\u002F\u002Fapp.margint.dev\u002Fapi\u002Fbudgets\u002Fcheck\n",[78,2016,2017,2020,2022,2025,2027,2030],{"class":80,"line":187},[78,2018,2019],{"class":148},"    flush_interval_seconds",[78,2021,521],{"class":152},[78,2023,2024],{"class":156}," float",[78,2026,1392],{"class":144},[78,2028,2029],{"class":283}," 5.0",[78,2031,221],{"class":152},[78,2033,2034,2037,2039,2042,2044,2047],{"class":80,"line":192},[78,2035,2036],{"class":148},"    max_batch_size",[78,2038,521],{"class":152},[78,2040,2041],{"class":156}," int",[78,2043,1392],{"class":144},[78,2045,2046],{"class":283}," 50",[78,2048,221],{"class":152},[78,2050,2051,2054,2056,2058,2060,2063],{"class":80,"line":206},[78,2052,2053],{"class":148},"    budget_cache_ttl_seconds",[78,2055,521],{"class":152},[78,2057,2024],{"class":156},[78,2059,1392],{"class":144},[78,2061,2062],{"class":283}," 60.0",[78,2064,221],{"class":152},[78,2066,2067],{"class":80,"line":224},[78,2068,305],{"class":152},[94,2070,2071],{"id":1117},"Async",[60,2073,2074,2075,2077],{},"v0.1 is synchronous only. ",[64,2076,333],{}," is non-blocking — the flush worker runs on a background thread, so async frameworks aren't stalled.",[60,2079,2080,2081,2084,2085,2088],{},"A native ",[64,2082,2083],{},"AsyncMargint"," is on the roadmap. Email ",[64,2086,2087],{},"hi@margint.dev"," if it matters for your stack.",[94,2090,2092],{"id":2091},"troubleshooting","Troubleshooting",[60,2094,2095],{},[975,2096,2097],{},"Events not appearing?",[2099,2100,2101,2111,2118],"ul",{},[2102,2103,2104,2105,2107,2108,165],"li",{},"Verify ",[64,2106,157],{}," matches a key in ",[975,2109,2110],{},"Settings → API Keys",[2102,2112,2113,2114,2117],{},"Call ",[64,2115,2116],{},"m.flush()"," — the 5 s timer may not fire in short scripts.",[2102,2119,2120,2121,165],{},"Check egress for ",[64,2122,2123],{},"app.margint.dev",[60,2125,2126],{},[975,2127,2128],{},"Cost shows as $0?",[2099,2130,2131],{},[2102,2132,2133,2134,2138,2139,2142,2143,2145],{},"Model isn't in the bundled ",[2135,2136,2137],"a",{"href":39},"pricing database",". Pass ",[64,2140,2141],{},"cost_microdollars=..."," manually on ",[64,2144,333],{},", or email us to add it.",[60,2147,2148],{},[975,2149,2150,2152],{},[64,2151,346],{}," doesn't track my calls?",[2099,2154,2155],{},[2102,2156,2157,2158,2161,2162,2165,2166,2168,2169,2172,2173,165],{},"The response must expose ",[64,2159,2160],{},".usage"," (with ",[64,2163,2164],{},"prompt_tokens","\u002F",[64,2167,689],{},") and ",[64,2170,2171],{},".model",". If not, use ",[64,2174,333],{},[2176,2177,2178],"style",{},"html pre.shiki code .s8WwD, html code.shiki .s8WwD{--shiki-light:#E2931D;--shiki-default:#59873A;--shiki-dark:#B392F0}html pre.shiki code .sgGcy, html code.shiki .sgGcy{--shiki-light:#91B859;--shiki-default:#B56959;--shiki-dark:#9ECBFF}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 .sBwTr, html code.shiki .sBwTr{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#1E754F;--shiki-default-font-style:inherit;--shiki-dark:#F97583;--shiki-dark-font-style:inherit}html pre.shiki code .sQMu7, html code.shiki .sQMu7{--shiki-light:#90A4AE;--shiki-default:#393A34;--shiki-dark:#E1E4E8}html pre.shiki code .sX7bk, html code.shiki .sX7bk{--shiki-light:#39ADB5;--shiki-default:#999999;--shiki-dark:#F97583}html pre.shiki code .swwt3, html code.shiki .swwt3{--shiki-light:#6182B8;--shiki-default:#393A34;--shiki-dark:#E1E4E8}html pre.shiki code .sCPop, html code.shiki .sCPop{--shiki-light:#39ADB5;--shiki-default:#999999;--shiki-dark:#E1E4E8}html pre.shiki code .smADk, html code.shiki .smADk{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#B07D48;--shiki-default-font-style:inherit;--shiki-dark:#FFAB70;--shiki-dark-font-style:inherit}html pre.shiki code .sSROA, html code.shiki .sSROA{--shiki-light:#E53935;--shiki-default:#393A34;--shiki-dark:#E1E4E8}html pre.shiki code .sFbhr, html code.shiki .sFbhr{--shiki-light:#39ADB5;--shiki-default:#B5695977;--shiki-dark:#9ECBFF}html pre.shiki code .s4fFo, html code.shiki .s4fFo{--shiki-light:#F76D47;--shiki-default:#2F798A;--shiki-dark:#79B8FF}html pre.shiki code .skvGe, html code.shiki .skvGe{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#A0ADA0;--shiki-default-font-style:inherit;--shiki-dark:#6A737D;--shiki-dark-font-style:inherit}html pre.shiki code .sVLbc, html code.shiki .sVLbc{--shiki-light:#9C3EDA;--shiki-default:#AB5959;--shiki-dark:#F97583}html pre.shiki code .sCZzA, html code.shiki .sCZzA{--shiki-light:#90A4AE;--shiki-default:#998418;--shiki-dark:#79B8FF}html pre.shiki code .sJMGW, html code.shiki .sJMGW{--shiki-light:#39ADB5;--shiki-default:#999999;--shiki-dark:#B392F0}html pre.shiki code .sThQN, html code.shiki .sThQN{--shiki-light:#6182B8;--shiki-default:#59873A;--shiki-dark:#B392F0}html pre.shiki code .sQONO, html code.shiki .sQONO{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#393A34;--shiki-default-font-style:inherit;--shiki-dark:#E1E4E8;--shiki-dark-font-style:inherit}html pre.shiki code .sWDkf, html code.shiki .sWDkf{--shiki-light:#E2931D;--shiki-default:#998418;--shiki-dark:#79B8FF}html pre.shiki code .szqSR, html code.shiki .szqSR{--shiki-light:#39ADB5;--shiki-default:#AB5959;--shiki-dark:#F97583}html pre.shiki code .sNz2S, html code.shiki .sNz2S{--shiki-light:#39ADB5;--shiki-default:#1E754F;--shiki-dark:#79B8FF}html pre.shiki code .stoRT, html code.shiki .stoRT{--shiki-light:#E2931D;--shiki-default:#2E8F82;--shiki-dark:#B392F0}html pre.shiki code .srok8, html code.shiki .srok8{--shiki-light:#E53935;--shiki-light-font-style:italic;--shiki-default:#393A34;--shiki-default-font-style:inherit;--shiki-dark:#E1E4E8;--shiki-dark-font-style:inherit}html pre.shiki code .sYPoJ, html code.shiki .sYPoJ{--shiki-light:#E53935;--shiki-default:#A65E2B;--shiki-dark:#79B8FF}",{"title":74,"searchDepth":117,"depth":117,"links":2180},[2181,2182,2190,2195,2196,2197],{"id":96,"depth":117,"text":97},{"id":337,"depth":117,"text":338,"children":2183},[2184,2186,2188],{"id":342,"depth":131,"text":2185},"1. wrap() — zero-touch",{"id":570,"depth":131,"text":2187},"2. track() — manual",{"id":746,"depth":131,"text":2189},"3. guarded_call() — budget enforcement",{"id":986,"depth":117,"text":987,"children":2191},[2192,2193,2194],{"id":990,"depth":131,"text":991},{"id":1328,"depth":131,"text":1329},{"id":1678,"depth":131,"text":1679},{"id":1939,"depth":117,"text":1940},{"id":1117,"depth":117,"text":2071},{"id":2091,"depth":117,"text":2092},"margint — per-customer AI cost tracking for Python 3.10+.","md",{},{"icon":30},{"title":27,"description":2198},"kOzFTYvJmCSkzCuvVLnT1erq1FXvaN-lW-_zXBH5_70",[2205,2207],{"title":22,"path":23,"stem":24,"description":2206,"icon":25,"children":-1},"@margint-ai\u002Fsdk — per-customer AI cost tracking for Node.js and edge runtimes.",{"title":38,"path":39,"stem":40,"description":2208,"icon":41,"children":-1},"How Margint computes cost from tokens, and how we stay in sync with provider price changes.",1777838730393]