@@ -31,6 +31,7 @@ const { fetchAWFReflect, AWF_API_PROXY_REFLECT_URL, AWF_REFLECT_OUTPUT_PATH, AWF
3131const { emitInfrastructureIncomplete } = require ( "./safeoutputs_cli.cjs" ) ;
3232const fs = require ( "fs" ) ;
3333const { getErrorMessage } = require ( "./error_helpers.cjs" ) ;
34+ const { getProviderErrorDetails } = require ( "./pi_provider_error.cjs" ) ;
3435
3536// Default logger: prefixed with "[gh-aw/pi-provider]" for easy grepping.
3637// prettier-ignore
@@ -309,6 +310,8 @@ function piProviderExtension(pi) {
309310 let lastProviderRequest = null ;
310311 /** @type {{ status: number, responseHeaders: string, succeeded: boolean }|null } */
311312 let lastProviderResponse = null ;
313+ /** @type {{ status?: number, message: string }|null } */
314+ let lastProviderFailure = null ;
312315 let providerRequestCount = 0 ;
313316 let successfulProviderResponseCount = 0 ;
314317 registerConfiguredProviders ( pi , log ) ;
@@ -333,6 +336,10 @@ function piProviderExtension(pi) {
333336 responseHeaders : formatResponseHeaderNames ( event . headers ) ,
334337 succeeded,
335338 } ;
339+ if ( ! succeeded ) {
340+ const responseBody = event . body ?? event . responseBody ;
341+ lastProviderFailure = getProviderErrorDetails ( responseBody , event . status ) ;
342+ }
336343 const provider = ctx ?. model ?. provider || "(unknown provider)" ;
337344 const model = ctx ?. model ?. id || getConfiguredModel ( ) || "(unknown model)" ;
338345 log ( `provider_response provider=${ provider } model=${ model } status=${ event . status } method=${ request . method } url=${ request . url } response_headers=${ lastProviderResponse . responseHeaders } ` ) ;
@@ -344,10 +351,11 @@ function piProviderExtension(pi) {
344351 return ;
345352 }
346353 const request = lastProviderRequest || { api : message . api || "(unknown api)" , method : "POST" , url : "(request unavailable)" } ;
347- const status = lastProviderResponse ? String ( lastProviderResponse . status ) : "no-response" ;
354+ lastProviderFailure = getProviderErrorDetails ( message . errorMessage , lastProviderResponse ?. status ) ;
355+ const status = typeof lastProviderFailure . status === "number" ? String ( lastProviderFailure . status ) : "no-response" ;
348356 const responseHeaders = lastProviderResponse ? lastProviderResponse . responseHeaders : "none" ;
349357 log (
350- `provider_error provider=${ message . provider || "(unknown provider)" } model=${ message . model || "(unknown model)" } api=${ request . api } status=${ status } method=${ request . method } url=${ request . url } response_headers=${ responseHeaders } error=${ JSON . stringify ( message . errorMessage ) } `
358+ `provider_error provider=${ message . provider || "(unknown provider)" } model=${ message . model || "(unknown model)" } api=${ request . api } status=${ status } method=${ request . method } url=${ request . url } response_headers=${ responseHeaders } error=${ JSON . stringify ( lastProviderFailure . message ) } `
351359 ) ;
352360 if ( lastProviderResponse ?. succeeded ) {
353361 successfulProviderResponseCount -= 1 ;
@@ -403,7 +411,10 @@ function piProviderExtension(pi) {
403411 }
404412
405413 if ( providerRequestCount > 0 && successfulProviderResponseCount === 0 ) {
406- emitInfrastructureIncompleteIfNoSafeOutputs ( `All ${ providerRequestCount } Pi provider requests failed before safe outputs were emitted.` , log ) ;
414+ const providerFailureDetails = lastProviderFailure
415+ ? ` Last provider failure: ${ typeof lastProviderFailure . status === "number" ? `HTTP ${ lastProviderFailure . status } ; ` : "" } message=${ JSON . stringify ( lastProviderFailure . message ) } .`
416+ : "" ;
417+ emitInfrastructureIncompleteIfNoSafeOutputs ( `All ${ providerRequestCount } Pi provider requests failed before safe outputs were emitted.${ providerFailureDetails } ` , log ) ;
407418 process . exitCode = 1 ;
408419 }
409420 } ) ;
0 commit comments