Skip to content

Commit de39739

Browse files
committed
feat(ui): add user feedback api
Signed-off-by: Petr Bulánek <bulanek.petr@gmail.com>
1 parent 0aa2585 commit de39739

9 files changed

Lines changed: 66 additions & 16 deletions

File tree

apps/agentstack-sdk-ts/src/client/api/schemas.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,4 +11,5 @@ export * from './files/schemas';
1111
export * from './model-providers/schemas';
1212
export * from './provider-builds/schemas';
1313
export * from './providers/schemas';
14+
export * from './user-feedback/schemas';
1415
export * from './users/schemas';

apps/agentstack-sdk-ts/src/client/api/types.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,4 +11,5 @@ export * from './files/types';
1111
export * from './model-providers/types';
1212
export * from './provider-builds/types';
1313
export * from './providers/types';
14+
export * from './user-feedback/types';
1415
export * from './users/types';
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
/**
2+
* Copyright 2025 © BeeAI a Series of LF Projects, LLC
3+
* SPDX-License-Identifier: Apache-2.0
4+
*/
5+
6+
import type { CallApi } from '../../client/types';
7+
import { ApiMethod } from '../../client/types';
8+
import { createUserFeedbackResponseSchema } from './schemas';
9+
import type { CreateUserFeedbackRequest } from './types';
10+
11+
export function createUserFeedbackApi(callApi: CallApi) {
12+
const createUserFeedback = ({ ...body }: CreateUserFeedbackRequest) =>
13+
callApi({
14+
method: ApiMethod.Post,
15+
path: '/api/v1/user_feedback',
16+
schema: createUserFeedbackResponseSchema,
17+
body,
18+
});
19+
20+
return {
21+
createUserFeedback,
22+
};
23+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
/**
2+
* Copyright 2025 © BeeAI a Series of LF Projects, LLC
3+
* SPDX-License-Identifier: Apache-2.0
4+
*/
5+
6+
import z from 'zod';
7+
8+
export const createUserFeedbackRequestSchema = z.object({
9+
provider_id: z.string(),
10+
context_id: z.string(),
11+
task_id: z.string(),
12+
message: z.string(),
13+
rating: z.union([z.literal(1), z.literal(-1)]),
14+
comment: z.string().nullish(),
15+
comment_tags: z.array(z.string()).nullish(),
16+
});
17+
18+
export const createUserFeedbackResponseSchema = z.null();
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
/**
2+
* Copyright 2025 © BeeAI a Series of LF Projects, LLC
3+
* SPDX-License-Identifier: Apache-2.0
4+
*/
5+
6+
import type z from 'zod';
7+
8+
import type { createUserFeedbackRequestSchema, createUserFeedbackResponseSchema } from './schemas';
9+
10+
export type CreateUserFeedbackRequest = z.infer<typeof createUserFeedbackRequestSchema>;
11+
export type CreateUserFeedbackResponse = z.infer<typeof createUserFeedbackResponseSchema>;

apps/agentstack-sdk-ts/src/client/client/index.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import { createFilesApi } from '../api/files/api';
1212
import { createModelProvidersApi } from '../api/model-providers/api';
1313
import { createProviderBuildsApi } from '../api/provider-builds/api';
1414
import { createProvidersApi } from '../api/providers/api';
15+
import { createUserFeedbackApi } from '../api/user-feedback/api';
1516
import { createUsersApi } from '../api/users/api';
1617
import { ApiErrorException } from '../errors';
1718
import type { HttpError, NetworkError, ParseError, ValidationError } from '../errors/types';
@@ -123,6 +124,7 @@ export const buildApiClient = (
123124
const modelProvidersApi = createModelProvidersApi(callApi);
124125
const providerBuildsApi = createProviderBuildsApi(callApi);
125126
const providersApi = createProvidersApi(callApi);
127+
const userFeedbackApi = createUserFeedbackApi(callApi);
126128
const usersApi = createUsersApi(callApi);
127129

128130
return {
@@ -133,6 +135,7 @@ export const buildApiClient = (
133135
...modelProvidersApi,
134136
...providerBuildsApi,
135137
...providersApi,
138+
...userFeedbackApi,
136139
...usersApi,
137140
};
138141
};

apps/agentstack-ui/src/modules/feedback/api/index.ts

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,13 @@
33
* SPDX-License-Identifier: Apache-2.0
44
*/
55

6-
import { api } from '#api/index.ts';
7-
import { ensureData } from '#api/utils.ts';
6+
import { type CreateUserFeedbackRequest, unwrapResult } from 'agentstack-sdk';
87

9-
import type { SendFeedbackRequest } from './types';
8+
import { agentStackClient } from '#api/agentstack-client.ts';
109

11-
export async function sendFeedback(body: SendFeedbackRequest) {
12-
const response = await api.POST('/api/v1/user_feedback', { body });
10+
export async function sendFeedback(request: CreateUserFeedbackRequest) {
11+
const response = await agentStackClient.createUserFeedback(request);
12+
const result = unwrapResult(response);
1313

14-
return ensureData(response);
14+
return result;
1515
}

apps/agentstack-ui/src/modules/feedback/api/types.ts

Lines changed: 0 additions & 8 deletions
This file was deleted.

apps/agentstack-ui/src/modules/feedback/api/utils.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,14 @@
33
* SPDX-License-Identifier: Apache-2.0
44
*/
55

6+
import type { CreateUserFeedbackRequest } from 'agentstack-sdk';
7+
68
import type { Agent } from '#modules/agents/api/types.ts';
79
import type { UIAgentMessage } from '#modules/messages/types.ts';
810
import { getMessageRawContent } from '#modules/messages/utils.ts';
911
import type { ContextId } from '#modules/tasks/api/types.ts';
1012

1113
import { type FeedbackForm, FeedbackVote } from '../types';
12-
import type { SendFeedbackRequest } from './types';
1314

1415
export function createSendFeedbackPayload({
1516
agent,
@@ -21,7 +22,7 @@ export function createSendFeedbackPayload({
2122
message: UIAgentMessage;
2223
values: FeedbackForm;
2324
contextId: ContextId;
24-
}): SendFeedbackRequest {
25+
}): CreateUserFeedbackRequest {
2526
const { vote, categories, comment } = values;
2627

2728
if (!message.taskId) {

0 commit comments

Comments
 (0)