@@ -66,11 +66,25 @@ impl OpenAICompatibleProvider {
6666 registry : & CircuitBreakerRegistry ,
6767 ) -> Self {
6868 let circuit_breaker = registry. get_or_create ( provider_name, & config. circuit_breaker ) ;
69+ let base_url = config. base_url . trim_end_matches ( '/' ) . to_string ( ) ;
70+
71+ let mut headers = config. headers . clone ( ) ;
72+
73+ // OpenRouter app attribution: send Hadrian metadata by default unless
74+ // the user has explicitly set these headers (opt-out by overriding).
75+ if base_url. contains ( "openrouter.ai" ) {
76+ headers
77+ . entry ( "HTTP-Referer" . to_string ( ) )
78+ . or_insert_with ( || "https://hadriangateway.com" . to_string ( ) ) ;
79+ headers
80+ . entry ( "X-OpenRouter-Title" . to_string ( ) )
81+ . or_insert_with ( || "Hadrian Gateway" . to_string ( ) ) ;
82+ }
6983
7084 Self {
7185 api_key : config. api_key . clone ( ) ,
72- base_url : config . base_url . trim_end_matches ( '/' ) . to_string ( ) ,
73- headers : config . headers . clone ( ) ,
86+ base_url,
87+ headers,
7488 timeout : Duration :: from_secs ( config. timeout_secs ) ,
7589 retry : config. retry . clone ( ) ,
7690 circuit_breaker_config : config. circuit_breaker . clone ( ) ,
@@ -86,9 +100,13 @@ impl OpenAICompatibleProvider {
86100 request
87101 } ;
88102
89- let request = self . headers . iter ( ) . fold ( request, |req, ( key, value) | {
90- req. header ( key. as_str ( ) , value. as_str ( ) )
91- } ) ;
103+ let request = self
104+ . headers
105+ . iter ( )
106+ . filter ( |( _, value) | !value. is_empty ( ) )
107+ . fold ( request, |req, ( key, value) | {
108+ req. header ( key. as_str ( ) , value. as_str ( ) )
109+ } ) ;
92110
93111 request. timeout ( self . timeout )
94112 }
@@ -108,9 +126,13 @@ impl OpenAICompatibleProvider {
108126 request
109127 } ;
110128
111- let request = self . headers . iter ( ) . fold ( request, |req, ( key, value) | {
112- req. header ( key. as_str ( ) , value. as_str ( ) )
113- } ) ;
129+ let request = self
130+ . headers
131+ . iter ( )
132+ . filter ( |( _, value) | !value. is_empty ( ) )
133+ . fold ( request, |req, ( key, value) | {
134+ req. header ( key. as_str ( ) , value. as_str ( ) )
135+ } ) ;
114136
115137 request. timeout ( self . timeout )
116138 }
0 commit comments