fix(auth): show gateway dialog for all authentication errors (#1227)

This commit is contained in:
josh 2025-09-21 12:40:35 +01:00 committed by GitHub
parent 1aff7d9868
commit 5a3f8cac02
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 50 additions and 8 deletions

View file

@ -127,9 +127,23 @@ export async function POST(request: Request) {
const chat = await getChatById({ id });
if (!chat) {
const title = await generateTitleFromUserMessage({
let title = 'New Chat';
try {
const generatedTitle = await generateTitleFromUserMessage({
message,
});
title = generatedTitle;
} catch (titleError) {
if (
titleError instanceof Error &&
(titleError.message?.includes('AI Gateway authentication failed') ||
titleError.message?.includes('No authentication provided') ||
titleError.message?.includes('AI Gateway requires a valid credit card'))
) {
throw titleError;
}
console.warn('Title generation failed, using default:', titleError);
}
await saveChat({
id,
@ -173,6 +187,22 @@ export async function POST(request: Request) {
let finalMergedUsage: AppUsage | undefined;
try {
await myProvider.languageModel(selectedChatModel).doGenerate({
prompt: [{ role: 'user', content: [{ type: 'text', text: 'test' }] }],
maxOutputTokens: 1,
});
} catch (testError) {
if (
testError instanceof Error &&
(testError.message?.includes('AI Gateway authentication failed') ||
testError.message?.includes('No authentication provided') ||
testError.message?.includes('AI Gateway requires a valid credit card'))
) {
throw testError;
}
}
const stream = createUIMessageStream({
execute: ({ writer: dataStream }) => {
const result = streamText({
@ -263,7 +293,16 @@ export async function POST(request: Request) {
}
}
},
onError: () => {
onError: (error) => {
// Check for Vercel AI Gateway authentication errors
if (
error instanceof Error &&
(error.message?.includes('AI Gateway authentication failed') ||
error.message?.includes('No authentication provided') ||
error.message?.includes('AI Gateway requires a valid credit card'))
) {
throw error;
}
return 'Oops, an error occurred!';
},
});
@ -284,12 +323,13 @@ export async function POST(request: Request) {
return error.toResponse();
}
// Check for Vercel AI Gateway credit card error
if (
error instanceof Error &&
error.message?.includes(
(error.message?.includes(
'AI Gateway requires a valid credit card on file to service requests',
)
) ||
error.message?.includes('AI Gateway authentication failed') ||
error.message?.includes('No authentication provided'))
) {
return new ChatSDKError('bad_request:activate_gateway').toResponse();
}

View file

@ -110,7 +110,9 @@ export function Chat({
if (error instanceof ChatSDKError) {
// Check if it's a credit card error
if (
error.message?.includes('AI Gateway requires a valid credit card')
error.message?.includes('AI Gateway requires a valid credit card') ||
error.message?.includes('AI Gateway authentication failed') ||
error.message?.includes('No authentication provided')
) {
setShowCreditCardAlert(true);
} else {