Description
A common need when querying traces is to filter by a time range. While WeaveClient.get_calls supports greater than ($gt) and greater than or equal to ($gte) operators in Query expressions, it does not support any of the less than operators making it impossible to query by a time range.
To illustrate this, the following code sample yields the subsequent error:
query = {
"$expr": {
"$and": [
{ "$gte": [{ "$getField": "started_at" }, { "$literal": start_time }] },
{ "$lt": [{ "$getField": "ended_at" }, { "$literal": end_time }] }
]
}
}
weave_client = weave.init(f"{entity}/{project}")
traces = weave_client.get_calls(
query=query
)
pydantic_core._pydantic_core.ValidationError: 18 validation errors for WeaveClient.get_calls
query.$expr.AndOperation.$and.1.LiteralOperation.$literal
Field required [type=missing, input_value={'$lt': [{'$getField': 'e...iteral': 1761919200.0}]}, input_type=dict]
For further information visit https://errors.pydantic.dev/2.11/v/missing
query.$expr.AndOperation.$and.1.GetFieldOperator.$getField
Field required [type=missing, input_value={'$lt': [{'$getField': 'e...iteral': 1761919200.0}]}, input_type=dict]
For further information visit https://errors.pydantic.dev/2.11/v/missing
query.$expr.AndOperation.$and.1.ConvertOperation.$convert
Field required [type=missing, input_value={'$lt': [{'$getField': 'e...iteral': 1761919200.0}]}, input_type=dict]
For further information visit https://errors.pydantic.dev/2.11/v/missing
query.$expr.AndOperation.$and.1.AndOperation.$and
Field required [type=missing, input_value={'$lt': [{'$getField': 'e...iteral': 1761919200.0}]}, input_type=dict]
For further information visit https://errors.pydantic.dev/2.11/v/missing
query.$expr.AndOperation.$and.1.OrOperation.$or
Field required [type=missing, input_value={'$lt': [{'$getField': 'e...iteral': 1761919200.0}]}, input_type=dict]
For further information visit https://errors.pydantic.dev/2.11/v/missing
query.$expr.AndOperation.$and.1.NotOperation.$not
Field required [type=missing, input_value={'$lt': [{'$getField': 'e...iteral': 1761919200.0}]}, input_type=dict]
For further information visit https://errors.pydantic.dev/2.11/v/missing
query.$expr.AndOperation.$and.1.EqOperation.$eq
Field required [type=missing, input_value={'$lt': [{'$getField': 'e...iteral': 1761919200.0}]}, input_type=dict]
For further information visit https://errors.pydantic.dev/2.11/v/missing
query.$expr.AndOperation.$and.1.GtOperation.$gt
Field required [type=missing, input_value={'$lt': [{'$getField': 'e...iteral': 1761919200.0}]}, input_type=dict]
For further information visit https://errors.pydantic.dev/2.11/v/missing
query.$expr.AndOperation.$and.1.GteOperation.$gte
Field required [type=missing, input_value={'$lt': [{'$getField': 'e...iteral': 1761919200.0}]}, input_type=dict]
For further information visit https://errors.pydantic.dev/2.11/v/missing
query.$expr.AndOperation.$and.1.InOperation.$in
Field required [type=missing, input_value={'$lt': [{'$getField': 'e...iteral': 1761919200.0}]}, input_type=dict]
For further information visit https://errors.pydantic.dev/2.11/v/missing
query.$expr.AndOperation.$and.1.ContainsOperation.$contains
Field required [type=missing, input_value={'$lt': [{'$getField': 'e...iteral': 1761919200.0}]}, input_type=dict]
For further information visit https://errors.pydantic.dev/2.11/v/missing
query.$expr.OrOperation.$or
Field required [type=missing, input_value={'$and': [{'$gte': [{'$ge...eral': 1761919200.0}]}]}, input_type=dict]
For further information visit https://errors.pydantic.dev/2.11/v/missing
query.$expr.NotOperation.$not
Field required [type=missing, input_value={'$and': [{'$gte': [{'$ge...eral': 1761919200.0}]}]}, input_type=dict]
For further information visit https://errors.pydantic.dev/2.11/v/missing
query.$expr.EqOperation.$eq
Field required [type=missing, input_value={'$and': [{'$gte': [{'$ge...eral': 1761919200.0}]}]}, input_type=dict]
For further information visit https://errors.pydantic.dev/2.11/v/missing
query.$expr.GtOperation.$gt
Field required [type=missing, input_value={'$and': [{'$gte': [{'$ge...eral': 1761919200.0}]}]}, input_type=dict]
For further information visit https://errors.pydantic.dev/2.11/v/missing
query.$expr.GteOperation.$gte
Field required [type=missing, input_value={'$and': [{'$gte': [{'$ge...eral': 1761919200.0}]}]}, input_type=dict]
For further information visit https://errors.pydantic.dev/2.11/v/missing
query.$expr.InOperation.$in
Field required [type=missing, input_value={'$and': [{'$gte': [{'$ge...eral': 1761919200.0}]}]}, input_type=dict]
For further information visit https://errors.pydantic.dev/2.11/v/missing
query.$expr.ContainsOperation.$contains
Field required [type=missing, input_value={'$and': [{'$gte': [{'$ge...eral': 1761919200.0}]}]}, input_type=dict]
For further information visit https://errors.pydantic.dev/2.11/v/missing
Suggested Solution
The Query pydantic model, and any downstream services, should support $lt and $lte operators.
Weave Project Link
https://wandb.ai/ml-guardrails/gen-traces-without-run/weave
Screenshots or Mockups
No response
Description
A common need when querying traces is to filter by a time range. While
WeaveClient.get_callssupports greater than ($gt) and greater than or equal to ($gte) operators in Query expressions, it does not support any of the less than operators making it impossible to query by a time range.To illustrate this, the following code sample yields the subsequent error:
Suggested Solution
The Query pydantic model, and any downstream services, should support
$ltand$lteoperators.Weave Project Link
https://wandb.ai/ml-guardrails/gen-traces-without-run/weave
Screenshots or Mockups
No response