Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions workspaces/lightspeed/.changeset/shiny-foxes-film.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'@red-hat-developer-hub/backstage-plugin-lightspeed-backend': patch
---

add return statement to /v1/feedback error handler to prevent unhandled error fallthrough
Original file line number Diff line number Diff line change
Expand Up @@ -238,15 +238,15 @@ describe('lightspeed router tests', () => {
expect(response.body.error).toBeDefined();
});

it('should return 500 error when conversation does not exist', async () => {
it('should return upstream status code when conversation does not exist', async () => {
const backendServer = await startBackendServer();
const response = await request(backendServer)
.put(`/api/lightspeed/v2/conversations/${mockAnotherConversationId}`)
.send({
topic_summary: 'new topic',
});

expect(response.statusCode).toEqual(500);
expect(response.statusCode).toEqual(404);
expect(response.body.error).toContain('not found');
});

Expand Down Expand Up @@ -399,6 +399,40 @@ describe('lightspeed router tests', () => {
});
expect(feedbackResponse.statusCode).toEqual(403);
});

it('should handle upstream server errors properly', async () => {
const backendServer = await startBackendServer();
rcs.use(
http.post(`${LOCAL_LCS_ADDR}/v1/feedback`, () => {
return new HttpResponse(
JSON.stringify({
error: {
message: 'Internal server error',
},
}),
{
status: 500,
headers: { 'Content-Type': 'application/json' },
},
);
}),
);

const response = await request(backendServer)
.post('/api/lightspeed/v1/feedback')
.send({
conversation_id: '12345678-abcd-0000-0123-456789abcdef',
llm_response: 'bar',
sentiment: 1,
user_feedback: 'Great service!',
user_question: 'foo',
});

expect(response.statusCode).toEqual(500);
expect(response.body.error).toContain(
'Error from lightspeed-core server',
);
});
});

describe('GET /v1/feedback/status', () => {
Expand Down Expand Up @@ -683,7 +717,7 @@ describe('lightspeed router tests', () => {
);
});

it('returns 500 if unexpected error', async () => {
it('returns upstream status code on error', async () => {
const backendServer = await startBackendServer();
const nonExistentModel = 'nonexistent-model';
rcs.use(
Expand All @@ -707,7 +741,10 @@ describe('lightspeed router tests', () => {
provider: 'test-server',
query: 'Hello',
});
expect(response.statusCode).toEqual(500);
expect(response.statusCode).toEqual(404);
expect(response.body.error).toContain(
'Error from lightspeed-core server',
);
});
});

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -525,10 +525,11 @@ export async function createRouter(
const errormsg = `Error from lightspeed-core server: ${errorBody.error?.message || errorBody?.detail?.cause || 'Unknown error'}`;
logger.error(errormsg);

// Return a 500 status for any upstream error
response.status(500).json({
response.status(fetchResponse.status).json({
error: errormsg,
});

return;
Comment thread
gabemontero marked this conversation as resolved.
}

const data = await fetchResponse.json();
Expand Down Expand Up @@ -570,7 +571,7 @@ export async function createRouter(
const errorBody = await fetchResponse.json();
const errormsg = `Error from lightspeed-core server: ${errorBody.error?.message || errorBody?.detail?.cause || 'Unknown error'}`;
logger.error(errormsg);
response.status(500).json({ error: errormsg });
response.status(fetchResponse.status).json({ error: errormsg });
return;
}
response.status(fetchResponse.status).json(await fetchResponse.json());
Expand Down Expand Up @@ -650,8 +651,7 @@ export async function createRouter(
const errormsg = `Error from lightspeed-core server: ${errorBody.error?.message || errorBody?.detail?.cause || 'Unknown error'}`;
logger.error(errormsg);

// Return a 500 status for any upstream error
response.status(500).json({
response.status(fetchResponse.status).json({
error: errormsg,
});

Expand Down Expand Up @@ -707,8 +707,7 @@ export async function createRouter(
const errormsg = `Error from lightspeed-core server: ${errorBody.error?.message || errorBody?.detail?.cause || 'Unknown error'}`;
logger.error(errormsg);

// Return a 500 status for any upstream error
response.status(500).json({
response.status(fetchResponse.status).json({
error: errormsg,
});
return;
Expand Down
Loading