feat: store submittedFeedback on assistant messages (#2622)
* feat: persist submittedFeedback on assistant messages * style: fix prettier issues --------- Co-authored-by: GitHub Action <action@github.com>
This commit is contained in:
@@ -55,16 +55,16 @@ const GlowingEffect = memo(
|
||||
? "clientX" in e && typeof (e as any).clientX === "number"
|
||||
? (e as any).clientX
|
||||
: "x" in e && typeof (e as any).x === "number"
|
||||
? (e as any).x
|
||||
: lastPosition.current.x
|
||||
? (e as any).x
|
||||
: lastPosition.current.x
|
||||
: lastPosition.current.x;
|
||||
const mouseY =
|
||||
e && typeof e === "object"
|
||||
? "clientY" in e && typeof (e as any).clientY === "number"
|
||||
? (e as any).clientY
|
||||
: "y" in e && typeof (e as any).y === "number"
|
||||
? (e as any).y
|
||||
: lastPosition.current.y
|
||||
? (e as any).y
|
||||
: lastPosition.current.y
|
||||
: lastPosition.current.y;
|
||||
|
||||
if (e) {
|
||||
|
||||
@@ -33,7 +33,7 @@
|
||||
"zustand": "^5.0.8"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@assistant-ui/react": "^0.11.29",
|
||||
"@assistant-ui/react": "^0.11.30",
|
||||
"@types/react": "*",
|
||||
"assistant-cloud": "*",
|
||||
"react": "^18 || ^19 || ^19.0.0-rc"
|
||||
|
||||
@@ -29,7 +29,7 @@
|
||||
"zod": "^4.1.11"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@assistant-ui/react": "^0.11.29",
|
||||
"@assistant-ui/react": "^0.11.30",
|
||||
"@types/react": "*",
|
||||
"react": "^18 || ^19 || ^19.0.0-rc"
|
||||
},
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
"zod": "^4.1.11"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@assistant-ui/react": "^0.11.29",
|
||||
"@assistant-ui/react": "^0.11.30",
|
||||
"@types/react": "*",
|
||||
"react": "^18 || ^19 || ^19.0.0-rc",
|
||||
"react-hook-form": "^7"
|
||||
|
||||
@@ -29,7 +29,7 @@
|
||||
"zod": "^4.1.11"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@assistant-ui/react": "^0.11.29",
|
||||
"@assistant-ui/react": "^0.11.30",
|
||||
"@types/react": "*",
|
||||
"react": "^18 || ^19 || ^19.0.0-rc"
|
||||
},
|
||||
|
||||
@@ -36,7 +36,7 @@
|
||||
"react-markdown": "^10.1.0"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@assistant-ui/react": "^0.11.29",
|
||||
"@assistant-ui/react": "^0.11.30",
|
||||
"@types/react": "*",
|
||||
"react": "^18 || ^19 || ^19.0.0-rc"
|
||||
},
|
||||
|
||||
@@ -26,7 +26,7 @@
|
||||
"lint": "eslint ."
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@assistant-ui/react": "^0.11.29",
|
||||
"@assistant-ui/react": "^0.11.30",
|
||||
"@assistant-ui/react-markdown": "^0.11.1",
|
||||
"@types/react": "*",
|
||||
"@types/react-syntax-highlighter": "*",
|
||||
|
||||
@@ -1,5 +1,11 @@
|
||||
# @assistant-ui/react
|
||||
|
||||
## 0.11.30
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- feat: add submittedFeedback ThreadAssistantMessage
|
||||
|
||||
## 0.11.29
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -28,7 +28,7 @@
|
||||
"conversational-ui",
|
||||
"conversational-ai"
|
||||
],
|
||||
"version": "0.11.29",
|
||||
"version": "0.11.30",
|
||||
"license": "MIT",
|
||||
"type": "module",
|
||||
"exports": {
|
||||
|
||||
@@ -106,7 +106,10 @@ export const ThreadMessageClient = resource(
|
||||
branchNumber,
|
||||
branchCount,
|
||||
speech: undefined,
|
||||
submittedFeedback: undefined,
|
||||
submittedFeedback:
|
||||
message.role === "assistant"
|
||||
? message.metadata.submittedFeedback
|
||||
: undefined,
|
||||
isCopied: isCopiedState,
|
||||
isHovering: isHoveringState,
|
||||
};
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import type { AppendMessage, Unsubscribe } from "../../../types";
|
||||
import type { AppendMessage, ThreadMessage, Unsubscribe } from "../../../types";
|
||||
import {
|
||||
ExportedMessageRepository,
|
||||
MessageRepository,
|
||||
@@ -12,7 +12,6 @@ import {
|
||||
ThreadRuntimeCore,
|
||||
SpeechState,
|
||||
RuntimeCapabilities,
|
||||
SubmittedFeedback,
|
||||
ThreadRuntimeEventType,
|
||||
StartRunConfig,
|
||||
ResumeRunConfig,
|
||||
@@ -127,20 +126,33 @@ export abstract class BaseThreadRuntimeCore implements ThreadRuntimeCore {
|
||||
return () => this._subscriptions.delete(callback);
|
||||
}
|
||||
|
||||
private _submittedFeedback: Record<string, SubmittedFeedback> = {};
|
||||
|
||||
public getSubmittedFeedback(messageId: string) {
|
||||
return this._submittedFeedback[messageId];
|
||||
const messageData = this.repository.getMessage(messageId);
|
||||
if (messageData.message.role === "assistant") {
|
||||
return messageData.message.metadata.submittedFeedback;
|
||||
}
|
||||
return undefined;
|
||||
}
|
||||
|
||||
public submitFeedback({ messageId, type }: SubmitFeedbackOptions) {
|
||||
const adapter = this.adapters?.feedback;
|
||||
if (!adapter) throw new Error("Feedback adapter not configured");
|
||||
|
||||
const { message } = this.repository.getMessage(messageId);
|
||||
const { message, parentId } = this.repository.getMessage(messageId);
|
||||
adapter.submit({ message, type });
|
||||
|
||||
this._submittedFeedback[messageId] = { type };
|
||||
// Update the message metadata with the feedback
|
||||
if (message.role === "assistant") {
|
||||
const updatedMessage: ThreadMessage = {
|
||||
...message,
|
||||
metadata: {
|
||||
...message.metadata,
|
||||
submittedFeedback: { type },
|
||||
},
|
||||
};
|
||||
this.repository.addOrUpdateMessage(parentId, updatedMessage);
|
||||
}
|
||||
|
||||
this._notifySubscribers();
|
||||
}
|
||||
|
||||
|
||||
@@ -485,7 +485,10 @@ export class ThreadRuntimeImpl implements ThreadRuntime {
|
||||
const thread = this._threadBinding.getState();
|
||||
|
||||
const branches = thread.getBranches(message.id);
|
||||
const submittedFeedback = thread.getSubmittedFeedback(message.id);
|
||||
const submittedFeedback =
|
||||
message.role === "assistant"
|
||||
? message.metadata.submittedFeedback
|
||||
: undefined;
|
||||
|
||||
return {
|
||||
...message,
|
||||
|
||||
@@ -118,6 +118,7 @@ export type ThreadAssistantMessage = MessageCommonProps & {
|
||||
readonly unstable_annotations: readonly ReadonlyJSONValue[];
|
||||
readonly unstable_data: readonly ReadonlyJSONValue[];
|
||||
readonly steps: readonly ThreadStep[];
|
||||
readonly submittedFeedback?: { readonly type: "positive" | "negative" };
|
||||
readonly custom: Record<string, unknown>;
|
||||
};
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user