Semantr reads the Bedrock invocation logs you already have, groups the invocations back into conversations, and works out what kinds of work your organisation is actually doing with AI.
curl -LsSf https://semantr.com/install.sh | sh
Then run semantr. It finds your invocation logs on AWS, prices the run, and analyses them.
uvx semantr or pip install semantr.
$ semantr semantr: looking for your invocation logs found invocation logs at s3://acme-bedrock-logs/AWSLogs/ (ap-southeast-2) Semantr will read those logs, rebuild the conversations, and name the kinds of work it finds. Continue? [Y/n] y sessionise 2,761 invocations → 1,007 conversations discover 221 distinct prompts → 21 named use cases aggregate $2,145.30 total spend analysed report semantr-report.html
Free, no account needed. Add an account later for history, trends and shareable links.
Every discovered use case, named from its own contents, with its own spend, conversations and cost improvements attached.
Example report output:
| Use case | Tags | Conv | Spend |
|---|---|---|---|
| Customer Support Responses | non-coding repeatable | 206 | $1,204.60 |
| Invoice Data Extraction | non-coding repeatable | 238 | $58.30 |
| Pull Request Review | coding repeatable | 131 | $14.90 |
| Churn Analysis Queries | coding experimental | 44 | $616.40 |
| Database Script Development | coding experimental | 34 | $18.20 |
Coding vs not, and repeatable vs experimental, so you can see at a glance how much of your spend is automation and how much is people trying things. Cadence is measured from the data, not guessed by a model.
Model right-sizing, prompt caching, retry loops, untagged spend: each with the annual saving worked out, so it is a decision rather than a suggestion.
Cost dashboards report spend by team, key and model. That answers an accounting question. It does not answer the one you are being asked.
"$40k on Bedrock last quarter" is a number, not an answer. Spend by API key does not tell anyone whether the money bought customer support or someone's side project.
Every team knows what they built. No one knows what the other eleven teams built, and the list nobody maintains is always out of date.
Classifying every invocation with an LLM costs tens of thousands of dollars at real volume. Which is why nobody does it, and why nobody knows.
Everything before the naming step is free. The naming step runs about 150 model calls whether your corpus is a million invocations or fifty million. That is what makes this cost cents instead of tens of thousands.
Bedrock logs are stateless. A twenty-turn conversation is twenty unrelated records. But they are self-describing: each invocation contains the one before it. That makes rebuilding conversations an exact join, not a guess.
2,761 invocations → 1,007 conversations
Similar conversations are grouped, and each group is named from its own contents. There is no fixed taxonomy and therefore no other bucket. The categories come from what your organisation is actually doing, including the things nobody thought to ask about.
1,007 conversations → 221 distinct prompts → 21 named use cases
Spend, tokens and time roll up against each discovered use case, with the cost improvements that follow from them. Cost per conversation, not per request: a twenty-turn session is one unit of work.
$2,145.30 across 21 use cases · analysis cost $0.03
Bedrock invocation logs contain full prompts and completions, the most sensitive data class a company produces. Everything below follows from taking that seriously.
Naming is the only step that calls a model, and it only ever sees prompt snippets: system prompt, tool names, first turn, each capped at 600 characters. By default that runs on Semantr's hosted inference, anonymously, no account needed. Point --classifier-model at your own provider, including something fully local, and that path is never touched.
Every run keeps a copy of its aggregates, counts, cost, and the names it discovered, so the report has a home and a working share link, with or without an account. Prompt text is stripped before anything is sent, and the egress schema is published in the README rather than buried in a policy.
The CLI, the pipeline and the report are Apache 2.0. Read the source, run it in your own AWS account, and nothing you analyse has to leave it. The hosted tier is optional, and only adds what a static file can't: history across runs, and trends between them.
Running Semantr costs you a few cents of inference per run, paid to your own provider. We do not mark that up and we never see it.