Custom LLM Enrichment
Deliver your own per-request telemetry in the common schema to an S3 bucket Vantage reads.
Cloudflare AI Gateway
Vantage reads your encrypted Cloudflare AI Gateway Logpush logs from S3.
AWS Bedrock
Vantage reads the Bedrock Model Invocation Logs AWS already writes for you.
Enrichment is metadata-only. Vantage reads the provider, model, token counts, and the tags you attach to each request. It does not collect or store your prompt or completion content or credentials, and no such content is written to a Vantage-owned artifact. This data is not used to train any models.
How It Works
However usage reaches Vantage, every source runs through the same pipeline and joins to your provider costs during that provider’s cost ingestion.How Cost Rows Are Split
For each matched cost row, the cost is allocated proportionally across the tag slices present in your usage, weighted by token usage: Splits are additive: the sum of the enriched rows always equals the original cost row to the cent. Existing provider-level reports continue to show the same totals; enrichment only makes new dimensions available on the underlying rows.Consider the below example: one cost row for
gpt-5.2-2025-12-11 is $100 for the day, covering 100M input tokens. Your usage for that day groups into these tag slices:After enrichment, the single
$100 row becomes three rows:The total is unchanged at
$100. The leftover row carries the portion of the cost row’s tokens that your usage does not cover; it keeps the provider’s existing tags and the vntg:ai:model tag but none of the slice tags, so totals always reconcile and no dollars are lost. Cost rows with no matching usage pass through without allocation splits.The split reconciles in both directions. When your usage covers fewer tokens than the cost row, the uncovered remainder stays on the leftover row (as shown above). When your usage reports more tokens than the bill, Vantage scales the logged groups down proportionally to the billed amount. Either way, the enriched rows sum to the original cost row and the provider bill remains the source of truth. See the Import History disposition reference for how each case surfaces per run.
Enrichment Tags
Once enrichment runs, a single provider cost line is split into multiple rows, each carrying enrichment tags. You can filter and group by these tags anywhere tags are supported: Cost Reports, Virtual Tags, Budgets, and Cost Alerts. Because enrichment splits (allocates) your provider costs, enrichment tags behave like Vantage’s cost allocation tags: you can build a Virtual Tag on them, but a cost can be allocated only once, so an enrichment tag can belong to only one allocation chain. Enriched rows carry two kinds of tags: the tags you attach to your requests, and the Vantage-managedvntg:ai:* tags that Vantage derives.
Your own tag keys appear exactly as you send them, with no provider prefix, so a key like
team lines up across every provider and you can group your entire AI stack by one tag. The dimensions Vantage derives carry a vntg:ai: prefix to keep them distinct and consistent across providers. Each source also promotes provider-specific vntg:ai:* tags where the data supports them (for example, vntg:ai:service_tier, vntg:ai:provider_region, vntg:ai:operation, or vntg:ai:principal_id); see each source’s page for its exact set and Managed AI Tags for the full cross-provider schema.
Enrichment tags behave like any other provider tag in the console:
- To group: open the Group By menu, select Tag, and choose the tag key, for example
vntg:ai:modelor a tag key such asteam. - To filter: open the Filters menu, click New Rule, select Tag, choose the Tag Key, then pick an operator and one or more values.