Research paper · 2026-10-10
My Model, My Data, My Cloud
A measured CPU case study separates local routing performance from illustrative cost assumptions.
Team 23N Labs
Working paper
Team 23N Labs. Full technical report and recorded-result checks are linked below. Price comparison is illustrative; no API was called.
Full technical report · Code · Sources
Run all checks: python3 paper/my-model-my-data-my-cloud/checks.py. Default checks write evidence; --arithmetic-only reads saved outputs and skips dataset verification. Read-only arithmetic: python3 paper/my-model-my-data-my-cloud/checks.py --arithmetic-only
On a seeded 64-query card/transfer sample, the local model routed 36 correctly (56.2%; Wilson 95% 44.1–67.7%).
Measured on public BANKING77 test text; interval includes the 50% balanced baseline.
Recorded consistency check: PASSimport sys
sys.path.insert(0,"paper/my-model-my-data-my-cloud")
from checks import load, quality
r,e,s=load()
ok,out=quality(r,e,s)
print("PASS" if ok else "FAIL",out)The Intel Mac processed 90.1 total input and output tokens per second in sequential local inference.
Measured total tokens divided by sequential model inference time; includes prompt processing.
Recorded consistency check: PASSimport sys
sys.path.insert(0,"paper/my-model-my-data-my-cloud")
from checks import load, speed
r,e,s=load()
ok,out=speed(r,e,s)
print("PASS" if ok else "FAIL",out)Maximum sampled process RSS after model loading was 2.19 GiB across the 64 queries.
Measured process RSS only; whole-machine memory and loaded baseline differ.
Recorded consistency check: PASSimport sys
sys.path.insert(0,"paper/my-model-my-data-my-cloud")
from checks import load, memory
r,e,s=load()
ok,out=memory(r,e,s)
print("PASS" if ok else "FAIL",out)Illustrative local cost is $0.83 per million combined input/output tokens at assumed 25% utilization.
Assumed $1,200 purchase, four-year life, 45 W for all 730 monthly hours, $0.12/kWh and $20/month operations; API billing assumes identical token counts and no quality parity.
Recorded consistency check: PASSimport sys
sys.path.insert(0,"paper/my-model-my-data-my-cloud")
from checks import load, economics
r,e,s=load()
ok,out=economics(r,e,s)
print("PASS" if ok else "FAIL",out)India’s RBI payment-data storage direction applies to payment-system providers; DPDP section 16 permits notified transfer restrictions.
Cited RBI 2018 direction and DPDP Act 2023 §16; legal applicability needs separate assessment.
CITED · saved-excerpt check PASS; applicability uncheckedimport sys
sys.path.insert(0,"paper/my-model-my-data-my-cloud")
from checks import load, citations
r,e,s=load()
ok,out=citations(r,e,s)
print("PASS" if ok else "FAIL",out)Full technical report
My Model, My Data, My Cloud: a measured CPU case from India
Team 23N Labs · Working paper · run 30-mmmdmc-20261010-01 · 10 October 2026
Visual post · Owner SUMMARY · Offline preview · 390 px screenshot · Claim checks
Question and novelty
Can a small openly licensed model route everyday customer support text on a business-owned CPU with useful quality and a defensible cost case? This is a case study, not a new economic method or a replication of a prior experiment: on-premises break-even work already studies the general question. The local contribution is a measured small CPU run with openly licensed public customer-query data, uncertainty, memory and explicit price scenarios. The original BANKING77 work studied 77-way intent detection, a different, harder task.
Model, data and protocol
- Model: Qwen/Qwen2.5-0.5B-Instruct, revision 7ae557604adf67be50417f59c2c2f167def9a775, Apache-2.0. The weights and tokenizer byte hashes are in assets.json.
- Data: PolyAI BANKING77, CC BY 4.0, upstream test CSV pinned to commit 57ec275d8078af65b7731c2a98be812d844a6d6b and SHA-256 d12d6e3bc4c3103966ae786dc435913c0c563dfa328f5a3646d0e62cfeeb474d. Attribution: Casanueva et al. (2020), *Efficient Intent Detection with Dual Sentence Encoders*. Downloaded query text stays outside Git.
- Label construction: restrict test rows to category names containing exactly one of card or transfer; derived pools contain 1080 card and 400 transfer rows. Seed 30030 samples 32 per class, then shuffles. This is a simplified binary routing exercise, not the original 77-way benchmark. No model fitting, examples, API calls or client data.
- Fixed prompt: system says “Route a banking support query. Answer with exactly CARD or TRANSFER.” One query is a user message. Greedy generation, maximum four new tokens; only a complete case-insensitive CARD or TRANSFER output is accepted. Any longer or other answer is scored INVALID. Sequential batch size one, four PyTorch CPU threads, float32 weights. Measurement code records row indices, labels, outputs and per-query timing, without raw query text.
- Hardware: user-specified Intel i7-1068NG7 Mac with 32 GB RAM and no GPU. Recorded platform.machine=x86_64, processor=i386, logical CPUs=8, total RAM=32.00 GiB; model uses CPU only. The exact CPU name is a user-supplied device description, not independently identified by the runtime. The result JSON binds SHA-256 hashes of each locally loaded model file, revision 7ae557604adf67be50417f59c2c2f167def9a775, and actual Python/Torch/Transformers/tokenizers/psutil version strings; environment.txt lists pinned package targets.
Local measurement
Accuracy was 36/64 = 56.2%. A binomial Wilson 95% interval is 44.1–67.7%. The interval includes the 50% balanced majority-class baseline; this run does not establish useful routing quality above that baseline. The interval captures sampling uncertainty under an independent Bernoulli approximation; it does not represent distribution shift or model uncertainty. The balanced label-derived sample is deliberately narrow.
By class, 23/32 CARD and 13/32 TRANSFER queries were routed correctly. 1 output did not satisfy the whole-label rule and was scored invalid. This asymmetry and the low overall score make the current prompt/model unsuitable for an unreviewed production routing decision.
The 64 sequential inferences consumed 2530 input and 131 output Qwen tokens in 29.53 seconds of model generation calls, or 90.13 total tokens/s (output only: 4.44 tokens/s). Median generation-call latency was 0.44 seconds/query. Timing excludes model load, data download and preprocessing outside each generation call. The maximum sampled process RSS after generation calls was 2.19 GiB; RSS after model load was 2.13 GiB. These are process readings, not continuous memory monitoring, whole-machine capacity or causal attribution of every byte to the model.
Setup here required the pinned Python packages, one public 239,961-byte test CSV, and a 988,097,824-byte model weight plus tokenizer/config files; the code fetched and SHA-256-verified them. Model and tokenizer load took 2.52 seconds after files were local. Human operations work, installation time and network download time were not measured as a reproducible setup benchmark.
Owned-hardware cost and API quotes
These are assumptions, not measured prices or power: $1,200 hardware purchase amortized over 48 months ($25/month), average 45 W for 730 hours/month at $0.12/kWh ($3.94/month), plus $20/month operations. Total fixed cost is $48.94/month. Utilization uses the observed sequential total-token throughput as a constant capacity, which is an optimistic extrapolation; the Mac may be used for other work, power may vary and repair, rent, networking, staffing, currency conversion and taxes are omitted.
Projecting this 29.5-second run to continuous operation gives 236.85M combined input/output tokens/month; it is not a measured month-long capacity. At assumed 25% use (59.21M), illustrative owned cost is $0.83 per million combined input/output tokens. Cost falls as usage rises, up to projected continuous throughput. The chart in claim 4 plots fixed owned monthly cost against linear API token cost within that projection.
The OpenAI pricing page is the cited public source for the supplied snapshot assumptions dated 2026-10-10: standard short-context uncached USD prices per million tokens below. The saved rows in sources.json are partial annotations, not authenticated page captures. Applying this run's 95.1% input-token / 4.9% output-token mix yields the blended comparison. No API was called, and no API model was evaluated for quality, latency, tokenizer equivalence, residency or availability. This is price arithmetic only, not a like-for-like product ranking.
| Cited API model | Input /M | Output /M | Task-mix /M | Equal monthly cost at | Within projected local capacity? |
| gpt-6-luna | $0.10 | $0.50 | $0.120 | 408.90M | no |
| gpt-6.1-sol | $2.00 | $10.00 | $2.394 | 20.45M | yes |
Equal-cost volume is fixed_monthly_cost / blended_API_USD_per_token. Below that volume the quoted API token bill is lower under these assumptions; above it, the owned hardware line is lower only if observed throughput is sustainable. The break-even is an illustrative crossover, not evidence that another model has the same quality. API billing assumes identical billable token counts; no API tokenizer or generation was measured. Electricity assumes 45 W for all 730 monthly hours irrespective of utilization. Any customer-specific privacy or compliance work may outweigh token price.
India context and control
Running locally keeps this experiment's public query text and inference on the Mac; a business would still need access controls, retention policy, backups, physical security and incident processes. Owning a model does not itself establish legal sovereignty or regulatory compliance. It gives runtime control over these pinned weights and data flow, but does not establish indigenous model provenance, independent infrastructure or a secure deployment. DPDP Act 2023 §16 permits notified restrictions on transfers to countries or territories; it is not a universal on-shore storage rule. The RBI payment-system data direction of 2018 requires covered payment-system providers to store payment-system data only in India. Applicability and commencement need legal review for a real deployment.
For scale context only, Adani's public data-center page describes AdaniConneX as a 50:50 venture with EdgeConneX and states a 1 GW platform ambition by 2030. MeitY's August 2026 statement describes the IndiaAI Mission's domestic sovereign AI infrastructure and reports 15 empaneled compute providers. These are public ambitions and program statements, not evidence of Adani's internal AI model choices or a relationship with 23N Labs. A small business CPU experiment does not size or validate a sovereign cloud.
Claim checks and limitations
For read-only arithmetic and saved-excerpt checks, run python3 paper/my-model-my-data-my-cloud/checks.py --arithmetic-only in this repository layout; this mode does not verify source dataset bytes or sample selection. For the full recorded-result check, run python3 paper/my-model-my-data-my-cloud/fetch.py then python3 paper/my-model-my-data-my-cloud/checks.py. It validates the dataset hash, seeded sample and exact-label parser, recomputes Wilson bounds and writes checks.json, check-table.md and check-run.json. To repeat inference, install the pinned dependencies in environment.txt, fetch assets and run python3 paper/my-model-my-data-my-cloud/measure.py; run.py additionally runs separate research sessions and requires the existing local Codex subscription login for those sessions. The committed table comes from row-level measurements and dated source annotations; each card shows an actual consistency-check output. A cited-source check tests saved excerpts, not live legal status or source authenticity.
| Card | Mark | Actual output |
| Quality | PASS | 36/64 = 56.2% (Wilson 95% 44.1–67.7%) |
| Throughput | PASS | 2661 tokens / 29.5s = 90.13 total tokens/s |
| Memory | PASS | max sampled process RSS 2.19 GiB; after-load 2.13 GiB |
| Cost | PASS | assumed 25% use: $0.83/M combined tokens; fixed $48.94/month |
| India context | PASS | saved RBI provider-scope and DPDP §16 excerpts present; current applicability unchecked |
The sample is 64 English BANKING77 queries in two derived label families. It cannot estimate 77-way accuracy, Indian-language performance, real business data accuracy, queueing delay, concurrency, full energy use or cloud reliability. The model may have seen similar public material during pretraining; leakage is not audited. One run and one prompt leave prompt sensitivity and load variability unmeasured. The cost model omits model migration, quality parity, security and legal operations. Read all figures as a bounded demonstration.
Sources
Nine linked public sources were opened for this work; two overbroad interpretations were rejected. The saved dated annotations and partial excerpts in sources.json let readers inspect supporting text, but the offline checks do not reauthenticate the public pages. Recheck current prices and legal status before any publication or deployment decision.
- model: Model card lists Apache-2.0; revision pinned in assets.json.
- data: Dataset card lists CC BY 4.0 and 13,083 customer queries in 77 intents.
- prior: Prior on-premise model break-even analysis exists; this study is a separate Mac CPU case study.
- banking77-paper: BANKING77 task and original dual-encoder work.
- pricing: Standard, short-context, uncached input/output USD per million tokens on 2026-10-10; gpt-6-luna 0.10/0.50; gpt-6.1-sol 2.00/10.00.
- dpdp: Section 16 permits notified country or territory transfer restrictions; it does not impose universal localization.
- rbi: 2018 RBI direction says payment-system providers must store payment-system data only in India; scoped to regulated providers.
- adani: Adani says AdaniConneX is a 50:50 venture with EdgeConneX and states a 1GW data-center platform ambition by 2030.
- indiaai: MeitY's August 2026 public statement frames IndiaAI Mission as domestic sovereign AI infrastructure; it reports 15 empaneled compute providers. This is a public program statement, not evidence this Mac uses that cloud.
Evidence and limitations
The recorded arithmetic supports a bounded CPU case study. It does not establish useful production routing, equivalent API service, or a sovereign-cloud result.
I reviewed only the listed local files, inspected phone.png, independently recomputed the row-level aggregates, and ran python3 -B …/checks.py --arithmetic-only. I did not rerun inference, authenticate external sources, or verify downloaded model/data bytes.
Claims and uncertainty
| Claim | Finding |
| Routing quality | Supported: 36/64 correct, 56.25%; Wilson 95% interval 44.09–67.71%. CARD recall is 23/32; TRANSFER recall is 13/32, with one invalid answer. |
| Throughput | Supported within the stated timing boundary: 2,661 combined tokens / 29.525281 seconds = 90.126 tokens/s. Output-only throughput is 4.437 tokens/s. These measure generation calls, excluding preprocessing and loading. |
| Memory | Supported: maximum recorded RSS is 2,349,740,032 bytes, approximately 2.19 GiB; after-load baseline is 2.13 GiB. This is sampled process memory, not a continuously measured peak. |
| Cost | Arithmetically supported under assumptions: $48.942/month and $0.8265/M combined tokens at assumed 25% utilization. |
| India context | Only saved-excerpt consistency is established. The checks cannot authenticate sources, establish current legal applicability, or demonstrate compliance. |
The report appropriately identifies the derived binary task, balanced sampling, English-only scope, weak accuracy, and lack of API quality evaluation. The Wilson interval is an explicitly approximate sampling interval; it does not cover prompt sensitivity, workload shift, or timing variation. Retain those qualifications.
The historical draft and analysis use 87.626 tokens/s and $0.85/M; the final evidence uses 90.126 tokens/s and $0.83/M. Their historical banners make this distinction clear. Do not reuse the older figures in publication.
Cost units and interpretation
The fixed-cost calculation is correct:
1200/48 + 0.045 × 730 × 0.12 + 20 = $48.942/month.
The projection gives 236.851M combined tokens/month, or 59.213M at 25% utilization. At that same volume:
| Scenario | Monthly cost |
| Owned hardware | $48.94 |
| Supplied Luna quote | $7.09 |
| Supplied Sol quote | $141.75 |
Crossovers are 408.900M tokens/month for Luna and 20.445M for Sol. The former exceeds projected continuous throughput. All API calculations assume identical billable token counts and the observed 95.1% input-token mix. Neither token equivalence nor quality parity was measured.
Required changes
1. Strengthen source evidence or narrow the attribution. sources.json contains manually stored excerpts and pricing rows, not independently authenticated page captures. Preserve dated source material with enough surrounding context to support pricing columns, legal scope, and institutional statements. Until then, describe prices as *supplied snapshot assumptions*. The legal card must remain a historical, scoped summary with applicability unchecked. The supplied excerpts do not establish complete legal conditions or exceptions.
2. Fix phone readability and chart annotations. With the current CSS, claim images are 264 px wide at a 320 px viewport and 334 px at 390 px. Their 18 px SVG text consequently displays at approximately 12.2 px and 15.4 px, respectively. Increase essential text and wrap labels. In claim4.svg, the dashed crossover line passes through annotation text, and the “Luna API” label overlaps the local-cost line. Reposition annotations and inspect all three supported widths. Overflow checks do not detect these readability problems.
3. Make standalone visuals carry their assumptions. The infographic omits the $1,200/48-month hardware assumption while presenting a cost result and crossover. Add that assumption and identify capacity as an extrapolation from 29.5 seconds. Replace the generic Markdown infographic alt text with the descriptive alternative already used in HTML. Use the still diagram in Markdown, where the preview’s still/replay controls are unavailable.
4. Close reproducibility gaps. measure.py verifies model hashes before inference but only records the dataset hash afterward; validate the CSV against the manifest before sampling. Replace its hard-coded run ID and overwrite behavior with distinct execution identifiers, preserving historical measurements. Document the working directory needed for the card snippets’ from checks import … imports.
Reproducibility assessment
All 6 check-manifest hashes and 16 render-manifest hashes match the supplied files. The five arithmetic/excerpt checks pass, and the 64 recorded row indices are unique. The saved phone evidence reports six viewport/motion checks and a 390 × 5,592 screenshot; I inspected that screenshot but did not rerun Chrome.
These establish internal consistency, not independent experimental reproduction. The supplied package provides no clean-environment rerun evidence, and screenshot generation depends on an absolute local Chrome path without a recorded browser version.
Sources and data licence
BANKING77: CC BY 4.0; Qwen model: Apache-2.0. No customer-query text exported. Pricing and policy statements remain dated, supplied assumptions.
sources.json
{
"checked_utc": "2026-10-10",
"checked": [
{"id":"model","url":"https://huggingface.co/Qwen/Qwen2.5-0.5B-Instruct/tree/7ae557604adf67be50417f59c2c2f167def9a775","fact":"Model card lists Apache-2.0; revision pinned in assets.json.","snapshot_excerpt":"License: apache-2.0"},
{"id":"data","url":"https://huggingface.co/datasets/PolyAI/banking77/tree/90d4e2ee5521c04fc1488f065b8b083658768c57","fact":"Dataset card lists CC BY 4.0 and 13,083 customer queries in 77 intents.","snapshot_excerpt":"It comprises 13,083 customer service queries labeled with 77 intents.","snapshot_license":"cc-by-4.0"},
{"id":"prior","url":"https://arxiv.org/abs/2509.18101","fact":"Prior on-premise model break-even analysis exists; this study is a separate Mac CPU case study.","snapshot_excerpt":"cost-benefit analysis framework to help organizations determine when on-premise LLM deployment becomes economically viable"},
{"id":"banking77-paper","url":"https://aclanthology.org/2020.nlp4convai-1.5/","fact":"BANKING77 task and original dual-encoder work.","snapshot_excerpt":"13,083 examples over 77 fine-grained intents"},
{"id":"pricing","url":"https://developers.openai.com/api/docs/pricing","fact":"Standard, short-context, uncached input/output USD per million tokens on 2026-10-10; gpt-6-luna 0.10/0.50; gpt-6.1-sol 2.00/10.00.","snapshot_columns":"Model | Input | Cached input | Cache writes | Output; prices USD per 1M tokens, standard short context","snapshot_rows":["gpt-6.1-sol | $2.00 | $0.10 | $2.50 | $10.00","gpt-6-luna | $0.10 | $0.01 | $0.125 | $0.50"],"prices":{"gpt-6-luna":{"input":0.10,"output":0.50},"gpt-6.1-sol":{"input":2.00,"output":10.00}}},
{"id":"dpdp","url":"https://www.meity.gov.in/static/uploads/2024/02/Digital-Personal-Data-Protection-Act-2023-1.pdf","fact":"Section 16 permits notified country or territory transfer restrictions; it does not impose universal localization.","snapshot_excerpt":"The Central Government may, by notification, restrict the transfer of personal data"},
{"id":"rbi","url":"https://rbi.org.in/Scripts/NotificationUser.aspx?Id=11244","fact":"2018 RBI direction says payment-system providers must store payment-system data only in India; scoped to regulated providers.","snapshot_excerpt":"All system providers shall ensure that the entire data relating to payment systems operated by them are stored in a system only in India."},
{"id":"adani","url":"https://www.adani.com/businesses/infrastructure/data-center","fact":"Adani says AdaniConneX is a 50:50 venture with EdgeConneX and states a 1GW data-center platform ambition by 2030.","ownership_excerpt":"AdaniConneX, a 50:50 joint venture between the Adani Group and EdgeConneX","goal_excerpt":"1GW data center infrastructure platform by 2030"},
{"id":"indiaai","url":"https://www.pib.gov.in/PressReleasePage.aspx?PRID=2295477&lang=1®=3","fact":"MeitY's August 2026 public statement frames IndiaAI Mission as domestic sovereign AI infrastructure; it reports 15 empaneled compute providers. This is a public program statement, not evidence this Mac uses that cloud.","sovereignty_excerpt":"build technological sovereignty across the AI value chain","provider_excerpt":"15 Compute Service Providers have been empaneled over four rounds."}
],
"rejected": [
{"id":"generic-localization","reason":"Could imply India requires every business dataset to stay in-country; DPDP section 16 is narrower."},
{"id":"company-internals","reason":"No public evidence of Adani's model-selection or internal data plans; excluded."}
]
}
Code & recorded outputs
Source files and saved checks are provided for inspection. The website does not execute research code. Recorded PASS results do not replace independent review.