refactor logging in brightstaff (#532)

refactor logs, move unnecessary info log statements to debug and start logging latest chat completion message to log
This commit is contained in:
Adil Hafeez 2025-07-17 16:00:04 -07:00 committed by GitHub
parent f819ee3507
commit 83f4d33434
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 49 additions and 24 deletions

View file

@ -27,6 +27,7 @@ pub async fn chat_completions(
router_service: Arc<RouterService>, router_service: Arc<RouterService>,
llm_provider_endpoint: String, llm_provider_endpoint: String,
) -> Result<Response<BoxBody<Bytes, hyper::Error>>, hyper::Error> { ) -> Result<Response<BoxBody<Bytes, hyper::Error>>, hyper::Error> {
let request_path = request.uri().path().to_string();
let mut request_headers = request.headers().clone(); let mut request_headers = request.headers().clone();
let chat_request_bytes = request.collect().await?.to_bytes(); let chat_request_bytes = request.collect().await?.to_bytes();
@ -61,20 +62,15 @@ pub async fn chat_completions(
// remove metadata from the request // remove metadata from the request
let mut chat_request_user_preferences_removed = chat_request_parsed; let mut chat_request_user_preferences_removed = chat_request_parsed;
if let Some(metadata) = chat_request_user_preferences_removed.get_mut("metadata") { if let Some(metadata) = chat_request_user_preferences_removed.get_mut("metadata") {
info!("Removing metadata from request"); debug!("Removing metadata from request");
if let Some(m) = metadata.as_object_mut() { if let Some(m) = metadata.as_object_mut() {
m.remove("archgw_preference_config"); m.remove("archgw_preference_config");
info!("Removed archgw_preference_config from metadata"); debug!("Removed archgw_preference_config from metadata");
} }
// metadata.as_object_mut().map(|m| {
// m.remove("archgw_preference_config");
// info!("Removed archgw_preference_config from metadata");
// });
// if metadata is empty, remove it // if metadata is empty, remove it
if metadata.as_object().map_or(false, |m| m.is_empty()) { if metadata.as_object().map_or(false, |m| m.is_empty()) {
info!("Removing empty metadata from request"); debug!("Removing empty metadata from request");
chat_request_user_preferences_removed chat_request_user_preferences_removed
.as_object_mut() .as_object_mut()
.map(|m| m.remove("metadata")); .map(|m| m.remove("metadata"));
@ -102,9 +98,33 @@ pub async fn chat_completions(
.as_ref() .as_ref()
.and_then(|s| serde_yaml::from_str(s).ok()); .and_then(|s| serde_yaml::from_str(s).ok());
let latest_message_for_log =
chat_completion_request
.messages
.last()
.map_or("None".to_string(), |msg| {
msg.content.as_ref().map_or("None".to_string(), |content| {
content.to_string().replace('\n', "\\n")
})
});
const MAX_MESSAGE_LENGTH: usize = 50;
let latest_message_for_log = if latest_message_for_log.len() > MAX_MESSAGE_LENGTH {
format!("{}...", &latest_message_for_log[..MAX_MESSAGE_LENGTH])
} else {
latest_message_for_log
};
info!(
"request received, request type: chat_completion, usage preferences from request: {}, request path: {}, latest message: {}",
usage_preferences.is_some(),
request_path,
latest_message_for_log
);
debug!("usage preferences from request: {:?}", usage_preferences); debug!("usage preferences from request: {:?}", usage_preferences);
let determined_model = match router_service let model_name = match router_service
.determine_route( .determine_route(
&chat_completion_request.messages, &chat_completion_request.messages,
trace_parent.clone(), trace_parent.clone(),
@ -112,7 +132,16 @@ pub async fn chat_completions(
) )
.await .await
{ {
Ok(route) => route, Ok(route) => match route {
Some((_, model_name)) => model_name,
None => {
debug!(
"No route determined, using default model from request: {}",
chat_completion_request.model
);
chat_completion_request.model.clone()
}
},
Err(err) => { Err(err) => {
let err_msg = format!("Failed to determine route: {}", err); let err_msg = format!("Failed to determine route: {}", err);
let mut internal_error = Response::new(full(err_msg)); let mut internal_error = Response::new(full(err_msg));
@ -121,17 +150,14 @@ pub async fn chat_completions(
} }
}; };
info!( debug!(
"sending request to llm provider: {} determined_model: {:?}, model from request: {}", "sending request to llm provider: {}, with model hint: {}",
llm_provider_endpoint, determined_model, chat_completion_request.model llm_provider_endpoint, model_name
); );
request_headers.insert( request_headers.insert(
ARCH_PROVIDER_HINT_HEADER, ARCH_PROVIDER_HINT_HEADER,
header::HeaderValue::from_str( header::HeaderValue::from_str(&model_name).unwrap(),
&determined_model.unwrap_or(chat_completion_request.model.clone()),
)
.unwrap(),
); );
if let Some(trace_parent) = trace_parent { if let Some(trace_parent) = trace_parent {

View file

@ -156,7 +156,7 @@ async fn main() -> Result<(), Box<dyn std::error::Error + Send + Sync>> {
}); });
tokio::task::spawn(async move { tokio::task::spawn(async move {
info!("Accepted connection from {:?}", peer_addr); debug!("Accepted connection from {:?}", peer_addr);
if let Err(err) = http1::Builder::new() if let Err(err) = http1::Builder::new()
// .serve_connection(io, service_fn(chat_completion)) // .serve_connection(io, service_fn(chat_completion))
.serve_connection(io, service) .serve_connection(io, service)

View file

@ -78,7 +78,7 @@ impl RouterService {
messages: &[Message], messages: &[Message],
trace_parent: Option<String>, trace_parent: Option<String>,
usage_preferences: Option<Vec<ModelUsagePreference>>, usage_preferences: Option<Vec<ModelUsagePreference>>,
) -> Result<Option<String>> { ) -> Result<Option<(String, String)>> {
if !self.llm_usage_defined { if !self.llm_usage_defined {
return Ok(None); return Ok(None);
} }
@ -87,7 +87,7 @@ impl RouterService {
.router_model .router_model
.generate_request(messages, &usage_preferences); .generate_request(messages, &usage_preferences);
info!( debug!(
"sending request to arch-router model: {}, endpoint: {}", "sending request to arch-router model: {}, endpoint: {}",
self.router_model.get_model_name(), self.router_model.get_model_name(),
self.router_url self.router_url
@ -160,15 +160,14 @@ impl RouterService {
.router_model .router_model
.parse_response(content, &usage_preferences)?; .parse_response(content, &usage_preferences)?;
info!( info!(
"router response: {}, selected_model: {:?}, response time: {}ms", "arch-router determined route: {}, selected_model: {:?}, response time: {}ms",
content.replace("\n", "\\n"), content.replace("\n", "\\n"),
parsed_response, parsed_response,
router_response_time.as_millis() router_response_time.as_millis()
); );
if let Some(ref route) = parsed_response { if let Some(ref parsed_response) = parsed_response {
// return model name if route is found return Ok(Some(parsed_response.clone()));
return Ok(Some(route.1.clone()));
} }
Ok(None) Ok(None)