While experimenting with evaluator testing in LangSmith, I ran into a subtle but impactful issue that highlights how small implementation details can break otherwise standard behavior.
I created a “Correctness” evaluator for my model. The model requires a specific configuration, including an Authorization header passed through the Extra Headers field.
Pretty standard so far.
When I added the header manually as:
Authorization: Bearer <token>
everything worked perfectly during testing.
However, after saving the evaluator, LangSmith automatically converted the header to lowercase:
authorization: Bearer <token>
At first glance, this shouldn’t matter. According to the HTTP specification, header names are case-insensitive. So Authorization and authorization should be treated exactly the same.
But in practice, something unexpected happened.
Authorization → worksauthorization → failsThis inconsistency suggests that somewhere in the request chain header case is being handled incorrectly.
This kind of issue is tricky because:
For developers, this can lead to wasted time chasing what looks like a configuration or authentication issue, when the root cause is much more subtle.
While I haven’t pinpointed the exact source, a few possibilities include:
If you’re working with evaluators, APIs, or authentication headers, it’s worth double-checking how your tools handle request formatting, especially when something “should just work,” but doesn’t.