Create a Meter
Meters define how events are aggregated into metrics.Copy
from limitry import Limitry
client = Limitry()
# Sum of tokens
meter = client.meters.create(
name="Total Tokens",
aggregation="sum",
field="values.total_tokens",
event_filter={
"event_type": "llm.completion"
}
)
print(f"Created meter: {meter.id}")
Aggregation Types
Copy
# Sum - add up all values
meter = client.meters.create(
name="Total Tokens",
aggregation="sum",
field="values.total_tokens",
event_filter={"event_type": "llm.completion"}
)
# Count - count number of events
meter = client.meters.create(
name="Request Count",
aggregation="count",
field="*", # Use "*" for count
event_filter={"event_type": "llm.completion"}
)
# Max - highest value seen
meter = client.meters.create(
name="Peak Concurrent Users",
aggregation="max",
field="values.concurrent",
event_filter={"event_type": "user.active"}
)
# Latest - most recent value (for gauges)
meter = client.meters.create(
name="Active Agents",
aggregation="latest",
field="values.count",
event_filter={"event_type": "agent.count"}
)
Event Filters
Filter which events are included usingevent_filter:
Copy
# Only count GPT-4 tokens
meter = client.meters.create(
name="GPT-4 Tokens",
aggregation="sum",
field="values.total_tokens",
event_filter={
"event_type": "llm.completion",
"dimensions": {"model": "gpt-4"}
}
)
# Count premium feature usage
meter = client.meters.create(
name="Premium Features",
aggregation="count",
field="*",
event_filter={
"event_type": "feature.usage",
"dimensions": {"tier": "premium"}
}
)
# Multiple dimension filters (AND logic)
meter = client.meters.create(
name="GPT-4 Chat Tokens",
aggregation="sum",
field="values.total_tokens",
event_filter={
"event_type": "llm.completion",
"dimensions": {
"model": "gpt-4",
"feature": "chat"
}
}
)
Query Meter Value
Query the current value of a meter:Copy
from datetime import datetime, timedelta
# Query with optional filters
result = client.meters.query(
id="mtr_abc123",
customer_id="cust_123",
start_date=datetime.now() - timedelta(days=7),
end_date=datetime.now()
)
print(f"Meter: {result.meter_name}")
print(f"Value: {result.value}")
print(f"Aggregation: {result.aggregation}")
# Query with dimension filters
result = client.meters.query(
id="mtr_abc123",
customer_id="cust_123",
dimensions={"model": "gpt-4"}
)
List Meters
Copy
# List all meters
meters = client.meters.list()
for meter in meters.data:
print(f"{meter.name} ({meter.id})")
print(f" {meter.aggregation}({meter.field})")
if meter.event_filter:
print(f" Filter: {meter.event_filter}")
# Include global default meters
meters = client.meters.list(include_defaults="true")
# Pagination
meters = client.meters.list(limit=50)
if meters.has_more:
next_page = client.meters.list(cursor=meters.next_cursor)
Get a Meter
Copy
meter = client.meters.retrieve("mtr_abc123")
print(f"Name: {meter.name}")
print(f"Aggregation: {meter.aggregation}")
print(f"Field: {meter.field}")
print(f"Event Filter: {meter.event_filter}")
Update a Meter
Copy
meter = client.meters.update(
"mtr_abc123",
name="Updated meter name"
)
You cannot change the
aggregation, field, or event_filter of an existing meter. Create a new meter instead.Delete a Meter
Copy
result = client.meters.delete("mtr_abc123")
if result.success:
print("Meter deleted")
Deleting a meter will also delete any limits that reference it.